OpenGL:深度信息的最佳纹理格式是什么?
OpenGL: what is the BEST texture format for depth infomation?
我是新来的,我对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(显卡5500)中,当我想处理深度摄像头(unsigned short)时,"glTexImage2D"会出现问题,但这对NV来说没问题( GeForce 940M)。 (总帐错误为 0x0502)
内部格式"GL_LUMINANCE16UI_EXT"不适合Intel HD?或者我错过了什么或者有更好的格式可以使用?
顺便说一句,我曾尝试使用 "GL_DEPTH_COMPONENT" 的内部格式 "GL_DEPTH_COMPONENT16" 来使错误没有发生,但是在上面的代码之后的以下代码中会发生其他一些问题:
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();
"glClear"和"glDrawArrays"使用这种格式会出现gl错误,0x0506。我不知道如何解决...
GL_LUMINANCE16UI 不是深度缓冲格式,很可能无法工作。可用的深度缓冲区格式列表是 here.
此外,您可能不应该绑定纹理本身,而是使用 glFrameBufferTexture2D 和 GL_DEPTH_ATTACHMENT.
将其附加到帧缓冲区
我是新来的,我对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(显卡5500)中,当我想处理深度摄像头(unsigned short)时,"glTexImage2D"会出现问题,但这对NV来说没问题( GeForce 940M)。 (总帐错误为 0x0502) 内部格式"GL_LUMINANCE16UI_EXT"不适合Intel HD?或者我错过了什么或者有更好的格式可以使用?
顺便说一句,我曾尝试使用 "GL_DEPTH_COMPONENT" 的内部格式 "GL_DEPTH_COMPONENT16" 来使错误没有发生,但是在上面的代码之后的以下代码中会发生其他一些问题:
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();
"glClear"和"glDrawArrays"使用这种格式会出现gl错误,0x0506。我不知道如何解决...
GL_LUMINANCE16UI 不是深度缓冲格式,很可能无法工作。可用的深度缓冲区格式列表是 here.
此外,您可能不应该绑定纹理本身,而是使用 glFrameBufferTexture2D 和 GL_DEPTH_ATTACHMENT.
将其附加到帧缓冲区