LWJGL Forum

Programming => OpenGL => Topic started by: xman84 on September 24, 2010, 17:43:31

Title: stuck on black screen :(
Post by: xman84 on September 24, 2010, 17:43:31
Hello, I'm trying to draw a cube.  I have a vertex and fragment shader which I compile successfully according to link status.  For the opengl buffers I used bindbuffer and bufferdata calls.  I use drawelements to draw the cube.  I have no errors when I run but I just get a black screen.  I've tried changing the rotation about the y axis to make sure I'm not staring the wrong direction and I just keep getting the black screen.  The code I have is large so I'm not sure its of any use to post it.  If someone has done something similar I would like to see it very much.  Any ideas as to what I could be doing wrong are greatly appreciated.

Title: Re: stuck on black screen :(
Post by: xman84 on September 24, 2010, 18:26:27
Ok I've narrowed it down! :D  It has something to do with texturing the cube.  I changed the code to use colors instead and it worked.  I'll play with it and if I can't figure it out I'll update this topic with my texture code for help.
Title: Re: stuck on black screen :(
Post by: xman84 on September 24, 2010, 18:45:03
Below are the code snippets related to texturing in my program.  When I use this instead of just simple colors I get a completely black screen.  Any ideas are appreciated!
private static void initTextures() {
glContext.enable(LWJGLAdapter.TEXTURE_2D);
cubeTexture = glContext.createTexture();

handleTextureLoaded(loadImage("grass.png"), cubeTexture);

}

private static void handleTextureLoaded(java.nio.ByteBuffer image, int texture) {
glContext.bindTexture(LWJGLAdapter.TEXTURE_2D, texture);
//glContext.texImage2D(WebGLRenderingContext.TEXTURE_2D, 0, image.getElement(), true);
glContext.texImage2D(LWJGLAdapter.TEXTURE_2D, 0, LWJGLAdapter.RGBA, 0,0,0, LWJGLAdapter.RGBA, LWJGLAdapter.UNSIGNED_BYTE, image);
glContext.texParameteri(LWJGLAdapter.TEXTURE_2D, LWJGLAdapter.TEXTURE_MAG_FILTER, LWJGLAdapter.NEAREST); // LINEAR
glContext.texParameteri(LWJGLAdapter.TEXTURE_2D, LWJGLAdapter.TEXTURE_MIN_FILTER, LWJGLAdapter.NEAREST); // LINEAR MIPMAP NEAREST
//glContext.generateMipmap(LWJGLAdapter.TEXTURE_2D);
//glContext.bindTexture(LWJGLAdapter.TEXTURE_2D, null);

}

private static ByteBuffer loadImage(String textureName) {
BufferedImage image;
ByteBuffer data = null;
try {
image = ImageIO.read(new File(textureName));
//int width = image.getWidth();
//int height = image.getHeight();
DataBufferByte rawData =  (DataBufferByte) image.getData().getDataBuffer();

data = BufferUtils.createByteBuffer(rawData.getSize());
data.put(rawData.getData());
data.rewind();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;

private static void drawCube() {
       ....
       
       glContext.bindBuffer(LWJGLAdapter.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer);
       glContext.vertexAttribPointer(vertexTextureCoordAttribute, 2, LWJGLAdapter.FLOAT, false, 0, 0);
       glContext.activeTexture(LWJGLAdapter.TEXTURE0);
       glContext.bindTexture(LWJGLAdapter.TEXTURE_2D, cubeTexture);
       glContext.uniform1i(samplerUniform, 0);
       ...
}

 private static final String fragmentShaderTextureText =
"#ifdef GL_ES\n" +
"precision highp float;\n" +
"#endif\n" +
"varying vec2 vTextureCoord;\n" +
"uniform sampler2D uSampler;\n" +
"void main(void)\n" +
"{\n" +
"  gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n" +
"}\n";
 
 private static final String vertexShaderTextureText =
"attribute vec3 vertexPosition;\n" +
"attribute vec2 aTextureCoord;\n" +
"uniform mat4 modelViewProjectionMatrix;\n" +
"varying vec2 vTextureCoord;\n" +
"void main(void)\n" +
"{\n" +
"  gl_Position = modelViewProjectionMatrix * vec4(vertexPosition, 1.0);\n" +
"  vTextureCoord = aTextureCoord;\n" +
"}\n";

private static void initBuffers() {
       ...
       cubeVerticesTextureCoordBuffer = glContext.createBuffer();
       glContext.bindBuffer(LWJGLAdapter.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer);
       float[] textureCoordinates = new float[] {
           // Front  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f,  
           // Back  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f,  
           // Top  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f,  
           // Bottom  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f,  
           // Right  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f,  
           // Left  
           0.0f,  0.0f,  
           1.0f,  0.0f,  
           1.0f,  1.0f,  
           0.0f,  1.0f  
       };
       textureCoordinatesDirectBuffer = BufferUtils.createFloatBuffer(textureCoordinates.length).put(textureCoordinates);
       textureCoordinatesDirectBuffer.flip();
       glContext.bufferData(LWJGLAdapter.ARRAY_BUFFER, textureCoordinatesDirectBuffer, LWJGLAdapter.STATIC_DRAW);
...
}

private static void drawCube() {
...
       glContext.bindBuffer(LWJGLAdapter.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer);
       glContext.vertexAttribPointer(vertexTextureCoordAttribute, 2, LWJGLAdapter.FLOAT, false, 0, 0);
       glContext.activeTexture(LWJGLAdapter.TEXTURE0);
       glContext.bindTexture(LWJGLAdapter.TEXTURE_2D, cubeTexture);
       glContext.uniform1i(samplerUniform, 0);
...
}


added code tag - mod
Title: Re: stuck on black screen :(
Post by: xman84 on July 31, 2011, 22:52:56
Can anyone help me with this problem?  I had changed direction and started doing WebGL but recently discovered I can't use WebGL because the frame rate drops too much.  I'm now getting back into LWJGL and am stuck on this problem again.  Any clues as to how I could solve this.  Or how to debug a black screen situation?
Title: Re: stuck on black screen :(
Post by: xman84 on July 31, 2011, 23:43:58
Well I'm dumb.  In the shader I had named an attribute "vertexPosition" but when I went to get the attribute location I used "aVertexPosition".  Would've been nice if I had gotten an error somewhere.  Anyway glad it's resolved.