我一直在使用everyplay SDK 来记录我项目的游戏玩法(ios-opengles 2.0)。它运作良好。但如果我使用 RenderToTexture(用于阴影)它只会记录空白屏幕。我该如何克服这个问题?
对于阴影,我需要有多个渲染通道来改变 rendertarget 。还有其他方法吗?
我一直在使用everyplay SDK 来记录我项目的游戏玩法(ios-opengles 2.0)。它运作良好。但如果我使用 RenderToTexture(用于阴影)它只会记录空白屏幕。我该如何克服这个问题?
对于阴影,我需要有多个渲染通道来改变 rendertarget 。还有其他方法吗?
试试这样:
while(1) {
renderShadow();
glBindFramebuffer(GL_FRAMEBUFFER, fbo1);
[everyplayCapture afterPresentRenderbuffer:fbo1];
glClearColor(0.45f, 0.45f, 0.45f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
....
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
...
[everyplayCapture beforePresentRenderbuffer:fbo1];
[(EAGLView *)self.view presentFramebuffer];
}
是的,我确定我正在为我在 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.