0

マルチパス オフスクリーン レンダリングを作成しようとしていますが、1 つの質問 (問題のようなもの) に行き詰まりました。複数のパスをキャプチャするという概念は何ですか? 現在、私はこれを得ました:

初期化:

Create FBO #1
Create FBO #2

Create Postprocess shader #1 (lighting)
Create Postprocess shader #2 (gamma, exposure, color control etc..)

与える:

Bind FBO #1
RenderScene();
Unbind FBO

Bind FBO #2
Bind Postprocess shader #1
BIND FBO #1 TEXTURE ( with scene )
DRAWQUAD(); // And apply lighting etc..
Unbind;

// Now simply draw quad with FBO #1 texture.
Bind Postprocess shader #2 // Apply color corrections..
DRAWQUAD(); 
Unbind;

いくつかのプレゼンテーションで読んだように、複数の FBO を使用する方が良いですが、単一の FBO を使用してアタッチメントを切り替える方が良いと言う人もいます。高速ですが、ドライバーが検証しすぎる可能性があります (もちろんパフォーマンスは低下します)。私はOSX10.11を使用しています.OpenGLプロファイラーは実際にglBindFramebufferがglFramebufferTexture(Layer .., attachment)より20倍遅いことを示しています. しかし、この場合、単一の FBO を使用する場合、どのようにテクスチャにレンダリングすればよいでしょうか? 今は DRAWQUAD(); ができないからです。2回..シングルFBOを別のアタッチメントで使用できるようになると思う例。

初期化:

Create FBO #1 // Only one frame buffer.

Create Postprocess shader #1 (lighting)
Create Postprocess shader #2 (gamma, exposure, color control etc..) 

与える:

Bind FBO #1 
RenderScene()

.. このステージで何をすればいいですか?FBO はシーン データで満たされているため、DRAWQUAD(); だけではできません。ここ。

編集:それは正しいことですか?

    // glBindFramebuffer #1
    // draw to layer 0
    // glUnbind

    // glBindFramebuffer #1
    // draw to layer 1 texture from layer 0 ( quad )
    // glUnbind

    // glBindFramebuffer #1
    // draw to layer 2 texture from layer 1 ( quad too )
    // glUnbind

    // ... and simply draw quad with layer 2 texture
4

0 に答える 0