10

深度コンポーネントと 4 つのテクスチャを備えた 4 つのカラー アタッチメントを備えたフレーム バッファがあります。

フラグメント シェーダー (ディファード ライティング) に 4 つのテクスチャを使用して、いくつかのものを描画し、その後バッファーをバインド解除します。後で、フレームバッファの深度バッファを使用して、画面にさらに何かを描画したいのですが、可能ですか?

再度フレームバッファをバインドしてglDrawBuffer(GL_FRONT)を指定してみましたが、うまくいきません。

4

3 に答える 3

13

ニコルがすでに言ったように、FBO の深度バッファーをデフォルトのフレームバッファーの深度バッファーとして直接使用することはできません。

ただし、 EXT_framebuffer_blit拡張 (GL 3 以降はコアである必要があります)を使用して、FBO の深度バッファーをデフォルトのフレームバッファーにコピーできます。

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, 
                  GL_DEPTH_BUFFER_BIT, GL_NEAREST);

この拡張機能がサポートされていない場合 (既に FBO を持っている場合は疑わしい)、FBO の深度アタッチメントに深度テクスチャを使用し、テクスチャ付きのクワッドと、gl_FragDepth. これは単にブリットするよりも遅いかもしれませんが.

于 2012-03-28T19:53:34.210 に答える
2

デフォルトのフレームバッファに画像(色または奥行き)を添付することはできません。同様に、デフォルトのフレームバッファから画像を取得してFBOにアタッチすることはできません。

于 2012-03-28T19:18:30.293 に答える