是的,我确定我正在为我在 createframebuffer 中定义的帧缓冲区调用 afterPresentRenderbuffer。因为多次渲染通道需要为单个通道绑定 2 个或更多帧缓冲区。
考虑到 fbo1(framebuffer object) 用于everyplay,fb02 用于阴影,然后是每帧没有阴影的执行顺序
while(1){
glClearColor(0.45f, 0.45f, 0.45f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
....
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
...
[(EAGLView *)self.view presentFramebuffer];
}
以下代码顺序用于渲染阴影
while(1) {
glClearColor(0.45f, 0.45f, 0.45f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
renderShadow();
glBindFramebuffer(GL_FRAMEBUFFER, fbo1);
....
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
...
[(EAGLView *)self.view presentFramebuffer];
}
renderShadow(){
glBindFramebuffer(GL_FRAMEBUFFER, fbo2);
....
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
....
}
当我用两个 FBo 移动 glBindframebuffer 时,屏幕变为空白,everyplay 记录空白屏幕。
如果我删除 Everyplay 的集成,上面的阴影代码效果很好。
在 Everyplay 为 ios “EveryplayRecord.xcodeproject” 提供的示例项目中,如果我包含该行
glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); // in drawRect() method it also renders blank screen.