0

プロジェクトのゲームプレイ (ios-opengles 2.0) を記録するために、everyplay SDK を使用しています。うまく機能しています。しかし、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 を呼び出していると確信しています。

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);
     ....

 }

glBindframebuffer を 2 つの FBo でシフトすると、画面が空白になり、everyplay が空白の画面を記録します。Everyplay の統合を削除すると、上記の影のコードがうまく機能します。Everyplay が ios 用に提供するサンプル プロジェクト「EveryplayRecord.xcodeproject」では、次の行を含めます。

glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); // in drawRect() method it also renders blank screen.
于 2013-10-22T13:55:12.643 に答える