2013-10-08 31 views
0

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

对于阴影,我需要有多个渲染通道来移动rendertarget。有没有其他方法?

+0

是的,这应该是可能的。我在Unity3D项目中使用了阴影,录制效果很好。可能与你的帧缓冲器有关。你应该确保你只为你在createframebuffer中定义的framebuffer调用afterPresentRenderbuffer。 –

回答

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]; 
} 
+0

+1此过程完全解决了该问题。感谢您的指导。 – VivekParamasivam

0

ya我确定我正在调用afterPresentRenderbuffer用于我在createframebuffer中定义的framebuffer。由于多个渲染通道需要为单个传递绑定2个或更多个帧缓冲区。

认为fbo1(帧缓冲区对象)用于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为iOS“EveryplayRecord.xcodeproject”提供的,如果我有行项目的例子

glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); // in drawRect() method it also renders blank screen. 
+0

如果在glBindFramebuffer(GL_FRAMEBUFFER,fbo1)之后移动[everyplayCapture beforePresentRenderbuffer:fbo1]会怎样?在你影子代码的例子? –

+0

感谢您的回复。你的建议做出了改变,但没有完全解决问题。放置glBindFramebuffer(GL_FRAMEBUFFER,fbo1)后;在[BeforeplayRenderbuffer:fbo1]之前的[everyplayCapture]行,我的游戏在录制时呈现良好,但在点击“PlayLastRecorded”后没有显示任何内容。我认为它接近解决方案。

VivekParamasivam

+0

请尝试下面的答案。正确放置afterPresentRenderBuffer和beforePresentRenderbuffer是至关重要的,在某些情况下,您可能需要使用Everyplay FAQ中提到的setActiveFramebufferCallback。 –