2013-10-08 30 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。 –