我收到以下错误代码:GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT。关于我在这里可能会缺少的任何想法:
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
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_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, 640, 480, 0, GL_RGBA4, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffers(1, &renderTexture);
glBindFramebuffer(GL_FRAMEBUFFER, renderTexture);
//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
GLint val = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(val != GL_FRAMEBUFFER_COMPLETE)
{
std::cout <<"\n Error in framebuffer : 2";
}
这是其余的渲染和blit到默认FB的代码,但是渲染任何想法都没有吗?期望默认FB呈绿色清除
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f,1.0f,0.0f,0.0f);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindFramebuffer(GL_READ_FRAMEBUFFER, renderTexture);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
val = glGetError();
if( val == GL_NO_ERROR)
std::cout<<"\n Bind Fine";
val = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(val != GL_FRAMEBUFFER_COMPLETE)
{
std::cout <<"\n Error in framebuffer : 3";
}
glBlitFramebuffer(0,0,128,128,0,0,128,128, GL_COLOR_BUFFER_BIT, GL_NEAREST);
您需要先绑定FBO,然后再对其进行操作。修改对象的OpenGL调用通常在当前绑定的对象上运行。这与发布代码开始时对纹理的遵循的方案相同,在该方案中,您可以使用生成纹理id并将其glGenTextures()
绑定glBindTexture()
,然后进行调用以修改纹理,例如glTexParameteri()
和glTexImage2D()
。
在FBO的情况下,glFrameBufferTexture2D()
以及glDrawBuffer()
操作上当前绑定的FBO。因此,glBindFramebuffer()
呼叫必须在这些呼叫之前:
glGenFramebuffers(...);
glBindFramebuffer(...);
glFramebufferTexture2D(...);
glDrawBuffer(...);
glGetError()
如果您发现自己的代码有任何意外的行为,那么调用总是一个好主意。您会GL_INVALID_OPERATION
在glFramebufferTexture2D()
通话中看到错误,因为没有绑定FBO。
关于代码的更多观察:
glDrawBuffer()
在这种情况下,该呼叫是多余的。GL_COLOR_ATTACHMENT0
是FBO的默认绘制缓冲区。glFramebufferTexture()
在这里使用,但效果glFramebufferTexture2D()
也一样。glFramebufferTexture()
需要较新的OpenGL版本(3.2),并且仅对分层附件(纹理数组等)有利。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句