2016-07-25 98 views
-1

我在这里的新的,我有一个关于在OpenGL纹理格式深度信息来源问题,有我的部分代码:OpenGL:深度信息的最佳纹理格式是什么?

glGenTextures(1,&tex); 
glBindTexture(GL_TEXTURE_2D, tex); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16UI_EXT, width, height, 0, GL_LUMINANCE_INTEGER_EXT, GL_UNSIGNED_SHORT, data); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

的问题是:在我的英特尔HD(图形5500) ,当我想要处理深度相机时(无符号短),在“glTexImage2D”中会出现问题,但这对于NV(GeForce 940M)来说是okey。 (GL错误为0x0502) 内部格式“GL_LUMINANCE16UI_EXT”是否不适用于Intel HD?或者我想念什么或有更好的格式可以使用?

顺便说一句,我曾试图内部格式“GL_DEPTH_COMPONENT16”与“GL_DEPTH_COMPONENT”,使错误没有发生,但上面的代码后,下面的代码会发生一些其他问题:

glBindTexture(GL_TEXTURE_2D, tex); 
frameBuffer.Bind(); 
glPushAttrib(GL_VIEWPORT_BIT); 
glViewport(0, 0, renderBuffer.width, renderBuffer.height); 
glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
GlSlProgram Bind; 
. 
glGetUniformLocation(...); 
glUniform3f(...); 
. 
glDrawArrays(GL_POINTS, 0, 1); 
frameBuffer.Unbind(); 
GlSlProgram Unbind; 
glPopAttrib(); 
glFinish(); 

的GL当使用这种格式时,在“glClear”和“glDrawArrays”中会出现0x0506错误。我不知道如何解决这个问题......

回答

1

GL_LUMINANCE16UI没有深度缓冲区格式,很可能不起作用。可用深度缓冲区格式的列表是here

另外,你可能不应该绑定纹理本身,而是用glFrameBufferTexture2D和GL_DEPTH_ATTACHMENT将其附加到framebuffer。

+0

非常感谢!其实我不习惯OpenGL的操作,我会试试你说的,再次感谢! – Robin

+0

hello karyon,我已经使用glFrameBufferTexture2D和GL_DEPTH_ATTACHMENT,并且发现在“glClear”和“glDrawArrays”之前没有发生错误。是否有其他问题可能? – Robin

+0

除了确保你使用适当的深度格式,而不是亮度的东西,我不知道。你可以在你的framebuffer上使用glCheckFramebufferStatus,它可能会给你更详细的信息。 – karyon

相关问题