OpenGL:深度信息的最佳纹理格式是什么?

OpenGL:深度信息的最佳纹理格式是什么?,opengl,textures,depth,Opengl,Textures,Depth,我是这里的新人,我对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_TEX

我是这里的新人,我对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);
问题是:在我的Intel HD(graphics 5500)中,当我想处理深度相机时,“glTexImage2D”会出现问题(简写为无符号),但对于NV(GeForce 940M)来说这是可以的。(总账错误为0x0502) 内部格式“GL\U LUMINANCE16UI\U EXT”是否不适用于英特尔HD?或者我遗漏了什么,或者有更好的格式可以使用

顺便说一句,我尝试了内部格式“GL_DEPTH_COMPONENT 16”和“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();

当使用这种格式时,带有0x0506的“glClear”和“glDrawArrays”中将发生gl错误。我不知道如何修复…

GL\u LUMINANCE16UI没有深度缓冲格式,很可能无法工作。提供了可用深度缓冲区格式的列表


另外,您可能不应该绑定纹理本身,而是使用glFrameBufferTexture2D和GL_DEPTH_附件将其附加到帧缓冲区。

非常感谢!其实我不习惯OpenGL的操作,我会试试你说的,再次感谢!你好,karyon,我已经使用了glFrameBufferTexture2D和GL_DEPTH_附件,并且发现在“glClear”和“glDrawArrays”之前没有发生任何错误。这可能还有其他问题吗?除了确保使用正确的深度格式而不是亮度之外,我不知道。您可以在帧缓冲区上使用GLCHECKFRAMEBERSTATUS,它可能会为您提供更详细的错误信息。再次感谢Karyon,我发现我从GLCHECKFRAMEBERSTATUS获得了GLCHECKFRAMEBERSTATUS未完成的附件。我在网上尝试了几种方法,但仍然不能解决这个问题。。。也许我需要更多的尝试。。。顺便说一句,是否有任何可能我英特尔高清(图形5500)不能支持它?