我一直在使用everyplay SDK来录制项目的游戏玩法(ios-opengles 2.0)。它运作良好。但如果我使用RenderToTexture(用于阴影),它只会记录空白屏幕。我怎样才能克服这个问题?
对于阴影,我需要有多个渲染过程来移动rendertarget。还有其他方法吗?
答案 0 :(得分:1)
试试这样:
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];
}
答案 1 :(得分:0)
我确定我在afterPresentRenderbuffer中调用了我在createframebuffer中定义的帧缓冲区。由于多个渲染过程需要为单次传递绑定2个或更多个帧缓冲区。
考虑fbo1(帧缓冲对象)用于每个播放,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 for ios" EveryplayRecord.xcodeproject"提供的示例项目中,如果我包含该行
glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); // in drawRect() method it also renders blank screen.