glGetTexImage返回0

时间:2018-05-06 12:37:17

标签: java opengl jogl

出现问题:glGetTexImage返回一个空的字节缓冲区。在这种情况下,仅当您尝试从生成的图像(在本例中为深度图)中获取空缓冲区时,才会返回空缓冲区。在其他情况下(当从内存加载纹理时) - 一切都很好。生成的纹理呈现没有问题。这是下面的代码。

gl.glBindTexture(GL.GL_TEXTURE_2D, depthMap.get(0));
ByteBuffer pixels = TextureArray.createByteBuffer(1024, 1024, 4);
gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixels);

System.out.println(pixels.get(3)); // 0

生成纹理:

gl.glBindTexture(GL.GL_TEXTURE_2D, depthMap.get(0));
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, width, height, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_FLOAT, null);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,GL. GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, depthMapFBO.get(0));
gl.glFramebufferTexture2D(GL.GL_FRAMEBUFFER, GL.GL_DEPTH_ATTACHMENT, GL.GL_TEXTURE_2D, depthMap.get(0), 0);
gl.glDrawBuffer(GL.GL_NONE);
gl.glReadBuffer(GL.GL_NONE);
gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0);
gl.glBindTexture(GL.GL_TEXTURE_2D, 0);

我将非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

正如BDL所说,我为GL.GL_RGBA更改了GL.GL_DEPTH_COMPONENT,这一切都奏效了。代码的最终版本:

gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_UNSIGNED_BYTE, pixels);