0

我一直在使用everyplay SDK 来记录我项目的游戏玩法(ios-opengles 2.0)。它运作良好。但如果我使用 RenderToTexture(用于阴影)它只会记录空白屏幕。我该如何克服这个问题?

对于阴影,我需要有多个渲染通道来改变 rendertarget 。还有其他方法吗?

4

2 回答 2

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];
}
于 2013-10-30T15:40:50.113 回答
0

是的,我确定我正在为我在 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.
于 2013-10-22T13:55:12.643 回答