当我尝试在OpenGl ES 2.0中创建一个附加了纹理的FBO时,如下所示:
glGenFramebuffers(1, &framebuffer);
glGenTextures(1, &textureId);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, framebuffer, 0);
GLenum status;
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status) {
case GL_FRAMEBUFFER_COMPLETE:
NSLog(@"fbo complete");
break;
case GL_FRAMEBUFFER_UNSUPPORTED:
NSLog(@"fbo unsupported");
break;
default:
/* programming error; will fail on all hardware */
NSLog(@"Framebuffer Error");
break;
}
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
然后像这样应用:
glBindFramebuffer(GL_FRAMEBUFFER, renderTarget.framebufferId);
glBindTexture(GL_TEXTURE_2D, renderTarget.textureId);
glViewport(0, 0, renderTarget.width, renderTarget.height);
然后在其上渲染一些东西,最后将附加的纹理绘制到屏幕上。结果是一个空的黑屏(如果我直接将它渲染到屏幕上,一切正常)。我尝试了几个FBO教程(当前代码就是其中之一),但没有区别。
此外,当我使用xcode的OpenGl调试器时,我有一些警告:glDrawArrays上的“慢帧缓冲加载问题”但我也可以看到纹理不是空的(我可以看到具有正确尺寸和右glClearColor的纹理)
如果之前有人遇到过这个问题并且知道我在这里做错了什么,那将会很棒。)提前致谢
答案 0 :(得分:1)
确定解决了我的问题。有一些小问题但主要问题是我将帧缓冲和纹理绑定在一起(参见顶部相关问题)。另一个问题是$!&()#^(我的意思是精彩)opengl坐标系(左下角),但这是一个快速修复。现在一切都工作得很好,期望在绘制全屏四边形时性能非常差,但我会打开另一个问题。