Everyplay支持多个渲染通道吗? (IOS)

时间:2013-10-08 07:52:02

标签: ios opengl-es opengl-es-2.0 everyplay

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

对于阴影,我需要有多个渲染过程来移动rendertarget。还有其他方法吗?

2 个答案:

答案 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.