Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (487)
Games in Android Showcase (110)
games submitted by our members
Games in WIP (552)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Texture not working  (Read 766 times)
0 Members and 1 Guest are viewing this topic.
Offline steg90

Senior Member


Medals: 1



« Posted 2013-03-28 20:18:15 »

Hi,

Trying to apply a texture to a cube, texture is 512x512 in size, although image is 300x300.

This is the code to render cube in immediate mode:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
   GL11.glTexEnvf( GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE );
     
   //   GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
     //                     GL11.GL_LINEAR_MIPMAP_NEAREST );

      //when texture area is large, bilinear filter the original
     GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR );

      //the texture wraps over at the edges (repeat)
     GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT );
      GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT );

      GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());

      GL11.glPushMatrix();
      GL11.glTranslatef(0, 2, 8);
      GL11.glRotatef(20, 1, 0, 1);
      GL11.glBegin(GL11.GL_QUADS);
      GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f(-1.0f, -1.0f,  1.0f);   // Bottom Left
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f( 1.0f, -1.0f,  1.0f);   // Bottom Right
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f( 1.0f,  1.0f,  1.0f);   // Top Right
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f(-1.0f,  1.0f,  1.0f);   // Top Left
       // Back Face
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Bottom Right
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f(-1.0f,  1.0f, -1.0f);   // Top Right
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f( 1.0f,  1.0f, -1.0f);   // Top Left
       GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Bottom Left
       // Top Face
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f(-1.0f,  1.0f, -1.0f);   // Top Left
       GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f(-1.0f,  1.0f,  1.0f);   // Bottom Left
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f( 1.0f,  1.0f,  1.0f);   // Bottom Right
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f( 1.0f,  1.0f, -1.0f);   // Top Right
       // Bottom Face
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Top Right
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Top Left
       GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f( 1.0f, -1.0f,  1.0f);   // Bottom Left
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f(-1.0f, -1.0f,  1.0f);   // Bottom Right
       // Right face
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Bottom Right
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f( 1.0f,  1.0f, -1.0f);   // Top Right
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f( 1.0f,  1.0f,  1.0f);   // Top Left
       GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f( 1.0f, -1.0f,  1.0f);   // Bottom Left
       // Left Face
       GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Bottom Left
       GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f(-1.0f, -1.0f,  1.0f);   // Bottom Right
       GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f(-1.0f,  1.0f,  1.0f);   // Top Right
       GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f(-1.0f,  1.0f, -1.0f);   // Top Left
       GL11.glEnd();
        GL11.glPopMatrix();
   }


I load the texture as (using slick util):

1  
2  
3  
4  
5  
6  
7  
try {
         
   texture = TextureLoader.getTexture("PNG",ResourceLoader.getResourceAsStream("res/grass.png"));
     
      } catch (IOException e) {
         System.out.println(e.getMessage());
      }


I enable texture2d at start.

Screenshot here:


https://sites.google.com/site/debugopengl/


Maybe I need to generate the mipmaps?  It is strange as the whole screen as gone green?!
If I uncomment this line:

1  
2  
GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
                           GL11.GL_LINEAR_MIPMAP_NEAREST );


then no texture is applied?

Any help with this is appreciated. 
Offline HeroesGraveDev

JGO Kernel


Medals: 246
Projects: 11
Exp: 2 years


┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻


« Reply #1 - Posted 2013-03-28 20:26:47 »

You need to bind the texture before calling all the texture functions at the top.

Offline steg90

Senior Member


Medals: 1



« Reply #2 - Posted 2013-03-28 20:57:30 »

Thanks for looking, but still exactly the same effect...

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline davedes
« Reply #3 - Posted 2013-03-28 21:02:51 »

SlickUtil is outdated and buggy; it sometimes does weird things with GL states. It also doesn't support non-power-of-two textures -- it will pad them with empty pixels, which means you need to adjust your glTexCoord2f parameters accordingly.

It also seems like you don't really know what you're doing, and just copy + pasting code together from different (outdated) tutorials... I'd really suggest starting off with 2D, maybe following some more modern tutorials and ensuring you have a strong grasp of all the concepts before moving onto the next steps:
LWJGL Display
LWGL Textures

Offline steg90

Senior Member


Medals: 1



« Reply #4 - Posted 2013-03-28 21:05:43 »

@davedes thanks for your comments and links.

Just knew to OpenGL, not to programming ;-) 

Will look at the links you sent - do you suggest not using slick?

Offline HeroesGraveDev

JGO Kernel


Medals: 246
Projects: 11
Exp: 2 years


┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻


« Reply #5 - Posted 2013-03-28 21:13:37 »

Here's my code for making a texture from an image.
I recommend wrapping it in an object and giving it a bind function for ease of use.

http://pastebin.java-gaming.org/8ddc7531e52

Offline steg90

Senior Member


Medals: 1



« Reply #6 - Posted 2013-03-28 21:18:26 »

Thanks for that :-)

I got the texture on the cube working, made the image a power of 2.  Although, the whole
screen is still green - the colour of the texture?!
Offline steg90

Senior Member


Medals: 1



« Reply #7 - Posted 2013-03-28 22:08:49 »

Getting very strange results.  I've got a debug wireframe cube I draw, if I draw this, my textured cube is then a different colour - it is the colour of the debug wireframe cube...

I think as OpenGL is a state machine, I'm messing up somewhere with states?  Is there some rules for this?

The textured cube seems to use the last objects states?

What is even more strange is I don't even need to bind the texture for it to appear on the cube???

Thanks,
Offline steg90

Senior Member


Medals: 1



« Reply #8 - Posted 2013-03-28 23:35:28 »

Update:

I've been modifying the code somewhat, and now I get the texture on ok, but my other objects appear in incorrect colour - basically the colour the texture is?!

So, if my texture is say a crate (so mostly brown colours), then the rest of my objects will also take on this colour, even though I'm setting them a different colour?  If my texture is grass (so prodomenitarly green), all my other objects will take on this colour.  I'm clueless as to what is happening here.

Anybody any ideas?  My setup is this:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
   private void InitGL() {
             
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();

      gluPerspective(
              45.0f,
              (float) Display.getWidth() / (float) Display.getHeight(),
              0.1f,
              100.0f);

     
      GL11.glTranslatef(0, -2f, 0f);
      GL11.glRotatef(180.0f, 0, 1.0f, 0);

      glMatrixMode(GL_MODELVIEW);
      GL11.glLoadIdentity();
      GL11.glEnable(GL11.GL_TEXTURE_2D);
      glShadeModel(GL_SMOOTH);
      glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
      glClearDepth(1.0);
      glEnable(GL_DEPTH_TEST);
      GL11.glEnable(GL11.GL_BLEND);
      GL11.glDepthFunc(GL11.GL_LEQUAL);
      GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);

      this.loadTextures();

   }


and my textured cube rendered:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
private void renderACube()
   {
      glLoadIdentity();

      org.newdawn.slick.Color.white.bind();
     
      GL11.glTranslatef(0, 0, 8);
     
      GL11.glRotatef(20,1.0f,0.0f,0.0f);    // Rotate On The X Axis
     GL11.glRotatef(10,0.0f,1.0f,0.0f);    // Rotate On The Y Axis
     GL11.glRotatef(65,0.0f,0.0f,1.0f);    // Rotate On The Z Axis
     
      texture.bind();
      GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST );
      GL11.glTexParameterf( GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST );
   
      GL11.glBegin(GL11.GL_QUADS);

      GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f(-1.0f, -1.0f, 1.0f);   // Bottom Left Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f( 1.0f, -1.0f, 1.0f);   // Bottom Right Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f( 1.0f, 1.0f, 1.0f);   // Top Right Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Top Left Of The Texture and Quad
     // Back Face
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Bottom Right Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f(-1.0f, 1.0f, -1.0f);   // Top Right Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f( 1.0f, 1.0f, -1.0f);   // Top Left Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Bottom Left Of The Texture and Quad
     // Top Face
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f(-1.0f, 1.0f, -1.0f);   // Top Left Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Bottom Left Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f( 1.0f, 1.0f, 1.0f);   // Bottom Right Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f( 1.0f, 1.0f, -1.0f);   // Top Right Of The Texture and Quad
     // Bottom Face
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Top Right Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Top Left Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f( 1.0f, -1.0f, 1.0f);   // Bottom Left Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f(-1.0f, -1.0f, 1.0f);   // Bottom Right Of The Texture and Quad
     // Right face
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f( 1.0f, -1.0f, -1.0f);   // Bottom Right Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f( 1.0f, 1.0f, -1.0f);   // Top Right Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f( 1.0f, 1.0f, 1.0f);   // Top Left Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f( 1.0f, -1.0f, 1.0f);   // Bottom Left Of The Texture and Quad
     // Left Face
     GL11.glTexCoord2f(0.0f, 0.0f);
      GL11.glVertex3f(-1.0f, -1.0f, -1.0f);   // Bottom Left Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 0.0f);
      GL11.glVertex3f(-1.0f, -1.0f, 1.0f);   // Bottom Right Of The Texture and Quad
     GL11.glTexCoord2f(1.0f, 1.0f);
      GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Top Right Of The Texture and Quad
     GL11.glTexCoord2f(0.0f, 1.0f);
      GL11.glVertex3f(-1.0f, 1.0f, -1.0f);   // Top Left Of The Texture and Quad      
       GL11.glEnd();
   }

   public void loadTextures()
   {
      try {
         // load texture from PNG file
        texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("res/grass.png"));
     
      } catch (IOException e) {
         System.out.println(e.getMessage());
      }
   }


All the other objects which are just blocks with no texture are stored in an arraylist which are then all rendered, basically block looks like:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
private void renderBlock(Block.BlockType type) {
           
          if(type == BlockType.BlockType_Grass)
             glColor3f(0.0f, 1.0f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(94/255f, 58/255f,41/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(1.0f, 1.0f, 1.0f);
             
            off_glVertex3f(0.5f, 0.5f, -0.5f);
            off_glVertex3f(-0.5f, 0.5f, -0.5f);
            off_glVertex3f(-0.5f, 0.5f, 0.5f);
            off_glVertex3f(0.5f, 0.5f, 0.5f);
           
          if(type == BlockType.BlockType_Grass)
               glColor3f(0.0f, 0.4f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(92/255f, 61/255f,45/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(0.84f, 0.84f, 0.84f);
            off_glVertex3f(0.5f, -0.5f, 0.5f);
            off_glVertex3f(-0.5f, -0.5f, 0.5f);
            off_glVertex3f(-0.5f, -0.5f, -0.5f);
            off_glVertex3f(0.5f, -0.5f, -0.5f);
           
          if(type == BlockType.BlockType_Grass)
               glColor3f(0.0f, 0.8f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(94/255f, 70/255f,58/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(0.8f, 0.8f, 0.8f);
            off_glVertex3f(0.5f, 0.5f, 0.5f);
            off_glVertex3f(-0.5f, 0.5f, 0.5f);
            off_glVertex3f(-0.5f, -0.5f, 0.5f);
            off_glVertex3f(0.5f, -0.5f, 0.5f);
           
          if(type == BlockType.BlockType_Grass)
               glColor3f(0.0f, 0.7f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(110/255f, 81/255f,67/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(.9f, 0.9f, 0.9f);
            off_glVertex3f(0.5f, -0.5f, -0.5f);
            off_glVertex3f(-0.5f, -0.5f, -0.5f);
            off_glVertex3f(-0.5f, 0.5f, -0.5f);
            off_glVertex3f(0.5f, 0.5f, -0.5f);
           
          if(type == BlockType.BlockType_Grass)
               glColor3f(0.0f, 0.6f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(110/255f, 78/255f,63/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(0.75f, 0.75f, 0.75f);
            off_glVertex3f(-0.5f, 0.5f, 0.5f);
            off_glVertex3f(-0.5f, 0.5f, -0.5f);
            off_glVertex3f(-0.5f, -0.5f, -0.5f);
            off_glVertex3f(-0.5f, -0.5f, 0.5f);
           
          if(type == BlockType.BlockType_Grass)
               glColor3f(0.0f, 0.5f, 0.0f);
          if(type == BlockType.BlockType_Dirt)
             glColor3f(110/255f, 73/255f,55/255f);
          if(type == BlockType.BlockType_Snow)
             glColor3f(0.7f, 0.7f, 0.7f);
            off_glVertex3f(0.5f, 0.5f, -0.5f);
            off_glVertex3f(0.5f, 0.5f, 0.5f);
            off_glVertex3f(0.5f, -0.5f, 0.5f);
            off_glVertex3f(0.5f, -0.5f, -0.5f);
      }

// avoids us having to do a slow glTranslatef
private void off_glVertex3f(float x,float y,float z){
            glVertex3f(tx+x,ty+y,tz+z);
}
   


and my update loop: (taken out other bits of code for keyboard detection, camera movement...)

1  
2  
3  
4  
5  
6  
7  
8  
try {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      ChunkManager.getInstance().render();  // render all blocks in world
     this.renderACube(); // render the textured cube            
     Display.update();
      Display.sync(60);
   } catch (Exception e) {
   }


Anything obvious stand out?!

Many thanks
Offline davidc

Senior Member


Medals: 5
Projects: 2



« Reply #9 - Posted 2013-03-29 02:26:26 »


1  
2  
3  
4  
    try {
...
    } catch (Exception e) {
    }


Anything obvious stand out?!

Many thanks

I always cringe when I see catch blocks that do nothing. There might not be any exceptions raised within the block, but how would you know? At the very least you should be writing something to System.out but even that isn't always sufficient. In your loadTextures code you catch an IOException, write the error message but carry on as if nothing happened. How do you know if the texture is loaded?

In my opinion this sort of thing is just asking for trouble - or worse - ignoring the trouble when it happens.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline steg90

Senior Member


Medals: 1



« Reply #10 - Posted 2013-03-29 08:29:01 »

Sorry, I didn't show the code in the catch block for clarification purposes.

Of course I always put exception code in there, but this isn't the issue.

I've uploaded a new screen shot at:


https://sites.google.com/site/debugopengl/


What I am struggling with to understand is that I don't need to bind the texture for it
to appear on the cube?

Regards

** UPDATE - this is now working, forgot to disable texturing for blocks that don't use a texture...
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

CopyableCougar4 (23 views)
2014-08-22 19:31:30

atombrot (34 views)
2014-08-19 09:29:53

Tekkerue (30 views)
2014-08-16 06:45:27

Tekkerue (28 views)
2014-08-16 06:22:17

Tekkerue (18 views)
2014-08-16 06:20:21

Tekkerue (27 views)
2014-08-16 06:12:11

Rayexar (65 views)
2014-08-11 02:49:23

BurntPizza (41 views)
2014-08-09 21:09:32

BurntPizza (31 views)
2014-08-08 02:01:56

Norakomi (41 views)
2014-08-06 19:49:38
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!