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

时间:2016-07-25 06:08:37

标签: 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_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);

问题是:在我的英特尔高清(图形5500)中," glTexImage2D"当我想要处理深度相机时(无符号短路),但这对于NV(GeForce 940M)来说太棒了。 (GL错误为0x0502) 是内部格式" GL_LUMINANCE16UI_EXT"不适合英特尔高清?或者我会错过什么或者可以使用更好的格式?

顺便说一下,我曾尝试过内部格式" 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 个答案:

答案 0 :(得分:1)

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

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