Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (107)
games submitted by our members
Games in WIP (536)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: 1 [2]
  ignore  |  Print  
  [HELP] Converting Grayscale (InfraRed) to Color with JOGL [HELP]  (Read 10804 times)
0 Members and 1 Guest are viewing this topic.
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 744
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #30 - Posted 2005-10-17 01:19:56 »

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
void main ( )
{
  vec4 grayscale = texture2D ( grayscaleTexture , gl_TexCoord[0].st );

  float G = grayscale.r;
  float H = G * 360.0;
  vec3 rgb = convertHsvToRgb ( H , 1.0 , 1.0 );

   // just multiply the RGB values with the greyscale
  // to get your brightness back into the result.

   // adjust G if you want, like: G = G*x+(1.0-x)
  rgb *= G;

  gl_FragColor = vec4 ( rgb, 0.0 ); // shouldn't that be 1.0, or do you really want it to be fully transparant when blending is enabled?
}

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline bahamut

Senior Newbie





« Reply #31 - Posted 2005-10-17 12:02:04 »

Thanks a lot.
By the way... I now got 2 textures. But both are converted and I only want one texture to be converted. The problem is, that I got 2 layers at the same section. One layer is a real image and the other one (above) is the IR, which can become transparent. But both are converted, instead of the IR layer.
Can I use GLSL to select a layer or something like that?
Offline Orangy Tang

JGO Kernel


Medals: 56
Projects: 11


Monkey for a head


« Reply #32 - Posted 2005-10-17 13:07:41 »

Thanks a lot.
By the way... I now got 2 textures. But both are converted and I only want one texture to be converted. The problem is, that I got 2 layers at the same section. One layer is a real image and the other one (above) is the IR, which can become transparent. But both are converted, instead of the IR layer.
Can I use GLSL to select a layer or something like that?
Shaders get applied to all geometry which pass though them. If you only want a shader to apply to a specific group of polys then bind it beforehand, do your rendering and upbind it after. Be careful though as binding and unbinding a shader is one of the slowest operations avaliable.

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline bahamut

Senior Newbie





« Reply #33 - Posted 2005-10-18 10:53:12 »

Shaders get applied to all geometry which pass though them. If you only want a shader to apply to a specific group of polys then bind it beforehand, do your rendering and upbind it after. Be careful though as binding and unbinding a shader is one of the slowest operations avaliable.
Ok, maybe I found a better solution. The two textures have the same section (location). So to select the first texture I found out that I can use glGetUniformLocation and glUniform1iARB to set the Uniform variable of GLSL (which is a sampler2D) with a textureID.
The textureID came from glGenTextures, if I am correct. But the thing is, when I declared the glGetUniformLocation to "_infraRed":

1  
2  
  uniform sampler2D grayscale;
  ....


1  
2  
3  
4  
5  
  ....
  gl.glUseProgramObjectARB ( handle );
  _infraRed = gl.glGetUniformLocationARB ( handle, "grayscale" );
  System.out.println ( _infraRed );
  ....


the _infraRed seems to be -1. What did I do wrong this time??? With other words, using multitexturing, my whole screen turns black. AAHHHHHH!!!!
Offline pepijnve

Junior Member




Java games rock!


« Reply #34 - Posted 2005-10-18 13:54:25 »

Are you sure you're program is set up correctly? Did you check the infolog for compilation/linking errors?
Offline Orangy Tang

JGO Kernel


Medals: 56
Projects: 11


Monkey for a head


« Reply #35 - Posted 2005-10-18 14:20:33 »

The two textures have the same section (location). So to select the first texture I found out that I can use glGetUniformLocation and glUniform1iARB to set the Uniform variable of GLSL (which is a sampler2D) with a textureID.
The textureID came from glGenTextures, if I am correct. But the thing is, when I declared the glGetUniformLocation to "_infraRed":
Incorrect. The sampler2D uniform should be set to the texture unit which that sampler should read from. Eg. you bind your texture id to texture unit 0, then set the sampler uniform to 0.

Quote
the _infraRed seems to be -1. What did I do wrong this time??? With other words, using multitexturing, my whole screen turns black. AAHHHHHH!!!!
-1 means that the uniform couldn't be found for some reason. Check the output of the compile and link stages.

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Offline bahamut

Senior Newbie





« Reply #36 - Posted 2005-10-18 14:39:16 »

The errorhandler is working fine and gives no error in return. Ok, I think I just make a stupid mistake. You mean that GL_TEXTURE0 + id = GL_TEXTUREid, that is:

Quote
    gl.glGenTextures(1, ir_tex_id);  //returns a pointer
    gl.glActiveTexture(GL_TEXTURE0 + ir_tex_id );  //specify the texture unit   <<<-----------
    gl.glBindTexture(GL_TEXTURE_2D, ir_tex_id); //creating the texture object
    gl.glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);  //set textureParam
    gl.glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);   //set textureParam
    gl.glTexImage2D(GL_TEXTURE_2D, _x, _y, ir_raw.width, ir_raw.height, 0, GL_RGB, GL_UNSIGNED_BYTE, ir_raw.data);  //defines the texture
So, if I understand what you are saying: after glActiveTexture() is called, I can use the ir_tex_id as id for the uniformMethod?
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 744
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #37 - Posted 2005-10-18 14:44:42 »

After your call to glActiveTexture, you have to enable GL_TEXTURE2D in it

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
glActiveTexture(GL_TEXTURE0 + 0); glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0 + 1); glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0 + 2); glEnable(GL_TEXTURE_2D);

int addr0 = glGetUniformLocationARB(program, toByteString("myUniformName_A"));
int addr1 = glGetUniformLocationARB(program, toByteString("myUniformName_B"));
int addr2 = glGetUniformLocationARB(program, toByteString("myUniformName_C"));
glUniform1iARB(addr0, 0);
glUniform1iARB(addr1, 1);
glUniform1iARB(addr2, 2);

glActiveTexture(GL_TEXTURE0 + 2); glDisable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0 + 1); glDisable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0 + 0); glDisable(GL_TEXTURE_2D);


1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
   private final ByteBuffer toByteString(String str, boolean isNullTerminated)
   {
      int length = str.length();

      if (isNullTerminated)
         length++;

      ByteBuffer buff = BufferUtils.createByteBuffer(length);
      buff.put(str.getBytes());

      if (isNullTerminated)
         buff.put((byte) 0);

      buff.flip();

      return buff;
   }

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline bahamut

Senior Newbie





« Reply #38 - Posted 2005-10-18 15:20:45 »

Thanks.... yes... offcourse.... I had a stupid convertion problem (string -> byte)... that might be the only way why it returns a -1
Offline Orangy Tang

JGO Kernel


Medals: 56
Projects: 11


Monkey for a head


« Reply #39 - Posted 2005-10-18 15:24:17 »

Quote
GL_TEXTURE0 + 1
Are you sure thats legit? IIRC you're supposed to use the constants GL_TEXTURE1, GL_TEXTURE2 etc. The fact that they're all consecutive integers may or may not be a side effect of a specific implementation.

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 744
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #40 - Posted 2005-10-18 15:26:58 »

It's legit, up to +64 IIRC

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline bahamut

Senior Newbie





« Reply #41 - Posted 2005-10-18 19:04:00 »

Thanks.... yes... offcourse.... I had a stupid convertion problem (string -> byte)... that might be the only way why it returns a -1

I tested the code...The mistake I made was not the buffer thing. But I gave the glGetUniformLocate the handler as parameter instead of the program. The result of this function is now, that the int variable is now set to 0. I think that is a good thing. But... I still got a black screen whenever I try to call the glUseProgramObjectARB function. Strange.... Does the uniform variable be set BEFORE or AFTER this function? By the way... what is a IIRC, is it "If I Recall Correctly"?
Offline pepijnve

Junior Member




Java games rock!


« Reply #42 - Posted 2005-10-19 09:39:09 »

I made a quick and dirty (comments are all incorrect I think) java/glsl version of nehe lesson 47 to learn the basics of GLSL usage. It uses a trivial vertex shader with an attribute variable, but it gives a working example of using a GLSL shader. Might help...
I tested the code...The mistake I made was not the buffer thing.
I was under the impression that jogl handles the String conversion for you. At least it worked by just passing a String on my mac.

The result of this function is now, that the int variable is now set to 0. I think that is a good thing.
Seems correct

But... I still got a black screen whenever I try to call the glUseProgramObjectARB function.
Maybe there's an error in your shader(s) Wink I got a black screen as well when I forgot to set the vertex color in my vertex shader. When you enable a vertex/fragment shader it disables just about all built in vertex/fragment processing, so you might be forgetting something. (See the glUseProgramObjectARB reference page for details)

Strange.... Does the uniform variable be set BEFORE or AFTER this function? By the way... what is a IIRC, is it "If I Recall Correctly"?
You have to enable your program before you can set variables in it, so first call glUseProgram, then glUniform.

By the way... what is a IIRC, is it "If I Recall Correctly"?
Yep, IIRC == If I recall correctly
Offline bahamut

Senior Newbie





« Reply #43 - Posted 2005-10-19 13:38:17 »

Quote
I was under the impression that jogl handles the String conversion for you. At least it worked by just passing a String on my mac.
Under Java on windows. This method requires a byte[] or a ByteBuffer. Appearantly my byte[] was not correct. Don't ask me how, cuz... "string".getBytes() seems to return a byte[]. But instead of that, I used the ByteBuffer method and works fine now.

I designed an another test program to test the shaders. I made a texture which contains a black and white image. Sets the right params.... blablabla...etc... Everything works perfect. I can also set the Uniform variable before I called the useProgramARB ( after linking ) and change it with a small gui. The thing is that I also have defined the uniform sampler2D grayscaleTexture. But I never setted that variable. I think whenever you use a single texture, the shader will automatically attach the texture to the uniform variable.
In my real application I use more textures. Whenever I use multitexture shading program ( in my case I use 6 textures), the screen turns black. I really don't know what it means. The only thing I know, that the vertex/fragment don't have any compile problems. Also no linking problems.
Maybe I did something stupid again, maybe this:

1  
2  
uniform sampler2D grayscaleTexture
.......

The type of a textureID is an "int". The pointer of the grayscaleTexture will be set with a int. sampler2D == int???

Quote
Yep, IIRC == If I recall correctly
By the way... IIRC = Isn't It Really Cool  Grin Grin Grin ( also funny )
Offline bahamut

Senior Newbie





« Reply #44 - Posted 2005-10-19 16:42:48 »

Ok, guys.... You can kill me for free for my stupid mistakes. Appearently my screen turns black because of one stupid mistake I made in the past. I didn't put a Grayscaled picture in RGB texture, in fact I put it in a Luminance texture. For fun, I did a System.out.println (image.getColorFormat()), which returns a number (6309) and identical to GL.GL_LUMINANCE. The GLSL script works only for my test application, which has a RGB texture. So, the only thing for me to do is put a grayscale picture in the RGB texture and that is it. My question is, do I have to convert the Grayscale to RGB first???
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 744
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #45 - Posted 2005-10-19 17:04:58 »

GLSL supports LUMINANCE textures.. it will return a vec4 containing (L, L, L, 1)

it shuold work, but without any code, we can just guess what you're doing wrong.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline Ken Russell

JGO Coder




Java games rock!


« Reply #46 - Posted 2005-10-19 18:06:38 »

I tested the code...The mistake I made was not the buffer thing.
I was under the impression that jogl handles the String conversion for you. At least it worked by just passing a String on my mac.

Actually in the 1.1.1 release of JOGL there were some entry points missing the String to char* conversion including this one. These should all be fixed in the JSR-231 branch of the JOGL tree. We should be able to release the first build of this new source base within a week. In the meantime you can look at the new code with
1  
cvs -d :pserver:guest@cvs.dev.java.net:/cvs co -r JSR-231 -P jogl jogl-demos


Note that the APIs differ in several ways from the 1.1.1 release but are definitely the direction the JOGL project is going.
Offline bahamut

Senior Newbie





« Reply #47 - Posted 2005-10-19 23:06:15 »

GLSL supports LUMINANCE textures.. it will return a vec4 containing (L, L, L, 1)

it shuold work, but without any code, we can just guess what you're doing wrong.

I will post the new code tomorrow. I was thinking.... if the format of the texture parameter is set to GL.GL_LUMINANCE. Can GLSL still change this to RGB? I mean.... the GLSL sets the grayscale to a color, but the actual texture is 8bit. So, by turning this in to color the 8bit becomes 32bit automatically? Or shouldn't I really worry about this matter?
( I think this is the most stupid question I ever asked, cuz I had some alcohol ).
Offline bahamut

Senior Newbie





« Reply #48 - Posted 2005-10-20 10:01:34 »

Ok, here below the GLSL code...still the same as allways... but I converted this code not from HSV to RGB, but from HSL to RGB. And I guarantee that it works very fine.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
uniform sampler2D grayscaleTexture;
uniform float Hi, Si, Li;
uniform float Hg, Sg, Lg;

vec3 fastHslToRgb (float h, float s, float l )
{
  ..................
  ..................
}

void main()
{
  vec4 grayscale = texture2D(grayscaleTexture, gl_TexCoord[0].st);

  float G = grayscale.r;
  float H = G * (Hg / 360.0 ) + Hi;
  float S = G * (Sg / 360.0 ) + Si;
  float L = G * (Lg / 360.0 ) + Li;
  vec3 RGB = fastHslToRgb ( H, S, L ); 

  gl_FragColor = vec4(RGB, 0.0);
}


I actually think the bottleneck lies at the moment when I ask the grayscale for the red color. Does the luminance texture contains red color?
I mean if I use gl.glGetTexLevelParameteriv( GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_LUMINANCE_SIZE, lum), it returns 8 and gl.glGetTexLevelParameteriv( GL.GL_TEXTURE_2D, 0, GL.GL_TEXTURE_LUMINANCE_SIZE, red), it returns 0.
Does GLSL still return a red value from a Luminance-Texture when I use this for float G = grayscale.r. If true, why do I still have a black screen. Else if this is not true, what should I do to get the value of the luminance? The thing I know is whenever I set the gl_FragColor to grayscale (which is a vec4), then everything is black and white again.... so ( that is ok), I am really sure that the error lies in my GLSL script.
Offline anarchotron

Junior Member




...precious bodily fluids.


« Reply #49 - Posted 2005-10-20 15:39:27 »

Yes texture2D should return a vec4 filled with the luminance value from your GL_LUMINANCE texture.

Shader programs cannot be stepped into for debugging, nor can they emit text messages.  The only way to debug a shader program is to let it communicate with you via its only output, the pixel color.  To debug this program, just start outputting interesting data directly to the screen to find out what part of your program is failing, and why.
Offline bahamut

Senior Newbie





« Reply #50 - Posted 2005-10-21 11:29:07 »

Mmm... I have done some research about GLSL. It seems there is nothing wrong with my code. Okok... lets just start over again:

When I start the program... the whole screen turns black. Actually if I change this code so, that the gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0), then the whole screen will turn red. That is the correct result for this test. If I set the gl_FragColor = grayscale, then the whole screen turns black... After some of these tests, I made a conclusion that I did not correctly set the uniform variable.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
  public void init ( GLDrawable glDraw ) 
  {
    glslLoader = new GLSLLoader ( glDraw );
    glslLoader.setShaders ( "shading.frag", "f" );
    ..........
  }

  public void updatePicture( GLDrawable glDraw, GLSection section )
  {
    int textureID = GLContextBase.getTextureID ( section.getTextureName () );   // textureID = 5
    .............
    ............. //refreshes the texture and updates this with a new image from the server.
    .............

    int IRHandle = glslLoader.getProgramHandle ();
    int IRLocation = gl.glGetUniformLocationARB ( handle, stringToByteBuffer ( "grayscale" ) );
    System.out.println ( IRLocation ); //prints a 0, that is good, because it found the uniform variable
    gl.glUniform1iARB( IRLocation , textureID);
  }


With this code, I got a black screen. There are in total 2 layers. Each layer contains 3 textures. The lower layer is a normal video image and the upper layer is a IR. There is an ability to make the upperlayer from 0% to 100% transparant, which means I can let it fade. The upperlayer is also the layer which gain falsecoloring. GLSection is a some kind a wrapper for the texture which also contains a container for all textures. Each texture got different parameter, such as: upper or lower layer, ID, etc.... When redrawing each texture will become redrawed with different image (because it's a movie), so the parameter will become set again, etc... After this I do the uniform things, and then I got a black screen Sad By the way, after all the textures are set... the redraw will be called, so all the textures will become drawed at once.

Can someone review this and tell me what I do wrong? Every suggestion may get me closer to my destination.
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 744
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #51 - Posted 2005-10-21 11:49:28 »

Seems like your test environment is far too complex. The rule is if you have a bug that haunts you, narrow it down. Remove as much as code as possible, allowing you to fucos on what goes wrong.

For example drop the whole color-converting thing. Render your LUMINANCE texture with a fragment-shader like:

1  
2  
3  
4  
5  
6  
void main()
{
  vec4 grayscale = texture2D(grayscaleTexture, gl_TexCoord[0].st);

  gl_FragColor = vec4(greyscale.rgb, 1.0);
}


And if you want help that's actually helpful, make a self-contained and compilable source-code example, so we can run it on our own systems.

You are hiding code from us all the time by thinking "that's not important, that other code is correct", but... how can you be so sure? Often your bugs are where you least expect. So give us code that we can compile and run right away, so we can actually help you, instead of guessing.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline bahamut

Senior Newbie





« Reply #52 - Posted 2005-10-21 13:18:04 »

You are hiding code from us all the time by thinking "that's not important, that other code is correct", but... how can you be so sure? Often your bugs are where you least expect. So give us code that we can compile and run right away, so we can actually help you, instead of guessing.

Perhaps that is not possible, because... you are missing the serverside. The serverside is far more complex than this one, but I got my own reasons in this case. Without the serverside, this client side is useless and it will not able to be tested. Anyway... I will use your advice and try to fix this bug my self. Thanks for all your helps.
Offline bahamut

Senior Newbie





« Reply #53 - Posted 2005-10-23 23:53:57 »

Okok, I changed this message... anyway...
The layer of my InfraRed had a blending option. With a JSlider of Java, I could change the transparancy of this layer. But now I use GLSL for false coloring, the blending option lost his functionality. That is because the transparancy of the texturelayer is statically changed. Is there any way to make this dynamically? I mean the gl_fragColor = vec4 ( rgb, 1.0 ), but is there a way to make the alpha dynamically?

In fact I tried to reload the script for each time I use the blending option. The uniform of the script changes each time I use the JSlider. My opinion is, that this solution is a little bit nasty. So...
Offline pepijnve

Junior Member




Java games rock!


« Reply #54 - Posted 2005-10-27 10:43:24 »

Just make a uniform for the alpha and set it whenever it changes?
Based on Rivens example:
1  
2  
3  
4  
5  
6  
7  
uniform float alpha;

void main()
{
  vec4 grayscale = texture2D(grayscaleTexture, gl_TexCoord[0].st);
  gl_FragColor = vec4(greyscale.rgb, alpha);
}
Offline bahamut

Senior Newbie





« Reply #55 - Posted 2005-11-01 09:37:28 »

Ok, everything is now done. The IR camera has false coloring and also the blending option. Thanks guys.

My new project is to make the IR camera so, that the night-vision camera turns the night into day. By storing a picture from a day of the same location or the same landscape as the night, there is an ability to turn the IR picture into day. By using an advanced mathematical calculation, there is an ability to stretch the histogram of both pictures so that the curve are equal. After this, you simply match the closest colors, and you have the nightvision turned into daylight. I think that the fake colors has an psychedelical and distracting effect. The colors aren't real and it could gives your brain the wrong idea of interpretation.

Greedz,

Bahamut
Offline anarchotron

Junior Member




...precious bodily fluids.


« Reply #56 - Posted 2005-11-01 16:15:58 »

That sounds awesome.  I'd like to see some screenshots of that algorithm in action!
Offline bahamut

Senior Newbie





« Reply #57 - Posted 2005-11-07 15:18:54 »

Hey there,

I need a formula to calculate the demean of a texture.
The formula of the demean goes as follow:

For instance, the texture = 256 * 256

select the first row of a texture, devide it with the width of texture ( which is 256 in this case ). After you have the mean, you simply return the gl_color = texture2D ( texture, gl_TexCoord[0].st) - mean

I don't exactly know how you have to calculate the mean color of a row. Suggestion is needed.
Pages: 1 [2]
  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.

Riven (12 views)
2014-07-29 18:09:19

Riven (8 views)
2014-07-29 18:08:52

Dwinin (9 views)
2014-07-29 10:59:34

E.R. Fleming (25 views)
2014-07-29 03:07:13

E.R. Fleming (10 views)
2014-07-29 03:06:25

pw (39 views)
2014-07-24 01:59:36

Riven (39 views)
2014-07-23 21:16:32

Riven (27 views)
2014-07-23 21:07:15

Riven (28 views)
2014-07-23 20:56:16

ctomni231 (59 views)
2014-07-18 06:55:21
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
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!