将深度/模板缓冲区附加到帧缓冲区时出错

时间:2012-03-22 15:00:03

标签: opengl depth-buffer stencil-buffer

我通过向OpenGL发出这一系列命令来创建深度/模板缓冲区:

glBindTexture(GL_TEXTURE_2D, 0)
glGenTextures(1, &TextureId)
glBindTexture(GL_TEXTURE_2D, TextureId)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 640, 480,  0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, 0)

然后我尝试用

将它附加到帧缓冲区
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, TextureId, 0)

但是对glCheckFramebufferStatusEXT的调用会返回GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。如果我没有连接深度模板缓冲区,那么这个测试就可以了(但很明显显示器是拧紧的)。

你们有什么线索吗?

修改: 更改:我已将纹理创建简化为基本纹理的格式。

3 个答案:

答案 0 :(得分:2)

好的,当我删除所有尾随的EXT时,问题就消失了......

答案 1 :(得分:2)

您附加到GL_DEPTH_STENCIL_ATTACHMENT的纹理中既没有深度也没有模板信息。如果要将纹理附加到GL_DEPTH_STENCIL_ATTACHMENT,请确保其图像格式为depth and stencil data

答案 2 :(得分:1)

现在OpenGL版本不需要EXT扩展名~~~

相关问题