我在这里的新的,我有一个关于在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错误。我不知道如何解决这个问题......
非常感谢!其实我不习惯OpenGL的操作,我会试试你说的,再次感谢! – Robin
hello karyon,我已经使用glFrameBufferTexture2D和GL_DEPTH_ATTACHMENT,并且发现在“glClear”和“glDrawArrays”之前没有发生错误。是否有其他问题可能? – Robin
除了确保你使用适当的深度格式,而不是亮度的东西,我不知道。你可以在你的framebuffer上使用glCheckFramebufferStatus,它可能会给你更详细的信息。 – karyon