我正在使用仅支持OpenGL3.1的硬件,因此'glFramebufferTexture'不可用。
这是我目前的代码:
GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
GLuint depthTexture;
glGenTextures(1,&depthTexture);
glBindTexture(GL_TEXTURE_2D,depthTexture);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_DEPTH_COMPONENT,
1024,1024,
0,
GL_DEPTH_COMPONENT,
GL_FLOAT,
0
);
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_BORDER);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_COMPARE_MODE,GL_COMPARE_R_TO_TEXTURE);
// glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,m_depthTexture,0); // Access violation
根据我的理解,glFramebufferTexture2D应该以类似的方式工作
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,m_depthTexture,0);
如果我这样做,glCheckFramebufferStatus会给我一个'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER'错误。
我该怎么办?
答案 0 :(得分:1)
glFrameBufferTexture (...)
没什么特别的,它基本上只允许你使用一个入口点做同样的事情,如1D,2D和3D。您的问题表明, 不 是硬件限制,仅限于未实施OpenGL 3.2的任何驱动程序。
至于你的帧缓冲状态,这实际上与这个特定的API调用完全无关。此错误告诉您FBO中存在非零glReadBuffer (...)
且没有相应的颜色附件。您可以自己阅读此错误的正式定义:
如果GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
不是GL_READ_BUFFER
且值,则会返回 {strong>GL_NONE
对于GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
指定的颜色附加点,>GL_NONE
GL_READ_BUFFER
。
设置glReadBuffer (...)
通常不那么重要。这用于glReadPixels (...)
之类的操作,我没有看到你的代码实际上在任何地方都需要它的迹象。
我建议您查看代码中是否有任何缺失的附加点,或错误调用glReadBufer (...)
。对我来说这听起来非常糟糕,就像你试图绘制一个没有颜色缓冲附件的FBO一样,在这种情况下, 任何 设置为GL_NONE
以外而你的FBO受到约束是一个错误。