1

In DirectX you are able to have separate render targets and depth buffers, so you can bind a render target and a depth buffer, do some rendering, remove the depth buffer and then do more rendering using the old depth buffer as a texture.

How would you go about this in opengl? From my understanding, you have a framebuffer object that contains both the color buffer(s) and an optional depth buffer. I don't think I can bind several framebuffer objects at the same time, would I have to recreate the framebuffer object every time it changes(probably several times a frame)? How do normal opengl programs do this?

4

2 に答える 2

6

フレームバッファオブジェクトは、画像への一連の参照にすぎません。これらは、テクスチャ(2Dテクスチャのミップマップレイヤーなど)またはレンダーバッファ(テクスチャとして使用できない)の画像である可能があります。

カラーバッファにテクスチャの画像を使用し、深度バッファにテクスチャの画像を使用するFBOを組み立てるのを妨げるものは何もありません。また、(これを実行しているときにそのFBOにレンダリングしない限り)後でテクスチャから深度テクスチャとしてサンプリングすることを妨げるものはありません。FBOが突然これらの画像を独占的に所有することはありません。

おそらく、何が起こったのかというと、FBOとOpenGLのデフォルトフレームバッファの違いを誤解しているということです。デフォルトのフレームバッファ(つまり、ウィンドウ)は変更できません。デプスバッファを取得して、テクスチャなどとして使用することはできません。FBOで行うことはあなた自身のビジネスですが、OpenGLではデフォルトのフレームバッファを同じように使用することはできません。

于 2012-11-23T20:30:13.990 に答える
1

複数のレンダーターゲットを単一のFBOにバインドできますが、これはトリックになります。また、OpenGLはステートマシンであるため、必要なときにいつでもバインディングとターゲットの数を変更できます。

于 2012-11-23T20:22:36.493 に答える