2011-09-21 13 views
1

テクスチャバッファオブジェクト(ARB_texture_buffer_object)をフレームバッファ(EXT_framebuffer_object)に添付して、テクスチャバッファオブジェクトに直接レンダリングできる方法はありますか?テクスチャバッファオブジェクトをフレームバッファメモリとして使用する

マルチサンプルフレームバッファ(カラーバッファ、デプスバッファ、ステンシルバッファ)の正確なビット単位のコピーを作成し、このコピーをVRAMではなくメインメモリに置く必要があります。

UPDATE: 問題は、私が直接その内容をコピーするには、マルチサンプリングされたフレームバッファ上のglReadPixelsを呼び出すことができないということです。代わりに、私は中間フレームバッファにマルチサンプリングされたフレームバッファをblitし、その上でglReadPixelsを呼び出さなければなりません。このプロセス中、複数のサンプルが平均化され、中間バッファに書き込まれます。 glWritePixelsでこのバッファを復元すると、もちろん精度の低下があります。

私は、フレームバッファオブジェクトのバッキングストレージとしてマルチサンプルテクスチャを使用できますが、このテクスチャはVRAMに存在し、精度を損なうことなくメインメモリにコピーする方法がないようです。具体的には、カラーバッファではなく、マルチサンプリングされたデプスバッファアタッチメントに関連する精度の低下が心配です。

OpenGLでマルチサンプリングされたフレームバッファを正確にコピーする(そしてこのコピーを復元する)方法はありますか?

TL; DR:マルチサンプルフレームバッファ(具体的にはデプスバッファ)の正確な内容をメインメモリにコピーし、精度を損なうことなくそれらの内容を後で復元する方法。

答えて

4

OpenGLでは、バッファテクスチャをレンダーターゲットとしてバインドすることはできません。しかし、私はあなたが「マルチサンプルフレームバッファの正確なビット単位のコピー」を作成するのを止めているものは見ていません。バッファテクスチャで解決できると思われる問題が発生しましたか?メインメモリへのマルチサンプル・フレーム・バッファ(具体的には、デプスバッファ)の正確な内容をコピーして、精度を損なうことなく、後でその内容を復元する方法


そして、あなたが保存し、後でそれを復元できるようにするには、メインメモリへの画像の内容をコピーする必要はありません。マルチサンプル画像の内容を保存する必要がある場合は、別のマルチサンプル画像にblitするだけです。それを元に戻して復元することができます。または、それが完了するまで、消去しないマルチサンプルテクスチャにレンダリングします。そうすれば、コピーする必要はありません。

+0

テクスチャをレンダリングすることができない場合は、「ポータル」がCrystal Spaceでどのように実装されているか考えてください。 http://www.crystalspace3d.org/docs/online/1.4/manual/Portal-Engine.html(私はすべてのグラフィックエンジンにその共通の機能があるかどうかわかりません)。ありがとう – Simon

+0

サイモン、あなたは確かにテクスチャオブジェクトにレンダリングすることができます。私の質問は、テクスチャBUFFERオブジェクト(ARB_texture_buffer_objectを参照)に固有です。 – FlorianZ

+0

私はそれを逃した、精度のおかげで! – Simon

関連する問題