我得到ERROR: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";
}
Run Code Online (Sandbox Code Playgroud)
这里有其余的代码用于渲染和blit默认FB.But不会渲染任何想法吗?期望默认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);
Run Code Online (Sandbox Code Playgroud)
您需要在对其进行操作的调用之前绑定FBO.修改对象的OpenGL调用通常在当前绑定的对象上运行.这与您在贴出的代码开头处遵循纹理的方案相同,您可以在其中生成纹理ID glGenTextures(),将其绑定glBindTexture(),然后进行修改纹理的调用,例如glTexParameteri()和glTexImage2D().
在FBO情况,glFrameBufferTexture2D()并glDrawBuffer()就当前绑定的FBO运营.所以glBindFramebuffer()呼叫需要在这些呼叫之前:
glGenFramebuffers(...);
glBindFramebuffer(...);
glFramebufferTexture2D(...);
glDrawBuffer(...);
Run Code Online (Sandbox Code Playgroud)
glGetError()如果您发现代码有任何意外行为,那么打电话总是一个好主意.你会看到GL_INVALID_OPERATION来自glFramebufferTexture2D()调用的错误,因为没有绑定FBO.
关于代码的更多观察:
glDrawBuffer()在这种情况下,呼叫是多余的.GL_COLOR_ATTACHMENT0是FBO的默认绘制缓冲区.glFramebufferTexture()在这里使用,但也可以使用glFramebufferTexture2D().glFramebufferTexture()需要更新的OpenGL版本(3.2),并且只对分层附件(纹理数组等)有用.| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |