深度コンポーネントと 4 つのテクスチャを備えた 4 つのカラー アタッチメントを備えたフレーム バッファがあります。
フラグメント シェーダー (ディファード ライティング) に 4 つのテクスチャを使用して、いくつかのものを描画し、その後バッファーをバインド解除します。後で、フレームバッファの深度バッファを使用して、画面にさらに何かを描画したいのですが、可能ですか?
再度フレームバッファをバインドしてglDrawBuffer(GL_FRONT)を指定してみましたが、うまくいきません。
深度コンポーネントと 4 つのテクスチャを備えた 4 つのカラー アタッチメントを備えたフレーム バッファがあります。
フラグメント シェーダー (ディファード ライティング) に 4 つのテクスチャを使用して、いくつかのものを描画し、その後バッファーをバインド解除します。後で、フレームバッファの深度バッファを使用して、画面にさらに何かを描画したいのですが、可能ですか?
再度フレームバッファをバインドしてglDrawBuffer(GL_FRONT)を指定してみましたが、うまくいきません。
ニコルがすでに言ったように、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
. これは単にブリットするよりも遅いかもしれませんが.
デフォルトのフレームバッファに画像(色または奥行き)を添付することはできません。同様に、デフォルトのフレームバッファから画像を取得してFBOにアタッチすることはできません。