glGetTexImage returns 0
glGetTexImage returns 0
出现问题:glGetTexImage
returns 空字节缓冲区。在这种情况下,只有当您尝试从生成的图像(在这种情况下 - 深度图)中获取它时,才会返回一个空缓冲区。在其他情况下(当纹理从内存中加载时)-一切都很好。生成的纹理渲染没有问题。这是下面的代码。
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);
我将不胜感激
正如 BDL 所说,我将 GL.GL_RGBA
更改为 GL.GL_DEPTH_COMPONENT
,一切正常。代码的最终版本:
gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_UNSIGNED_BYTE, pixels);
出现问题:glGetTexImage
returns 空字节缓冲区。在这种情况下,只有当您尝试从生成的图像(在这种情况下 - 深度图)中获取它时,才会返回一个空缓冲区。在其他情况下(当纹理从内存中加载时)-一切都很好。生成的纹理渲染没有问题。这是下面的代码。
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);
我将不胜感激
正如 BDL 所说,我将 GL.GL_RGBA
更改为 GL.GL_DEPTH_COMPONENT
,一切正常。代码的最终版本:
gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_UNSIGNED_BYTE, pixels);