2012-03-27 11 views
9

私はネットの周りに見たいくつかの例から、gl_FragData [0]はカラーバッファとみなされます。私はgl_FragDataに各指標の意味を見つけることを試みたとgl_FragDataは、バッファオフスクリーン一つ以上に 書き込まれた値を割り当てることができる配列であるgl_FragData [0]は常にカラーバッファですか?

のOpenGLシェーディング言語の書籍(オレンジブック)からこの一節に出会いました。この配列のサイズは 実装に依存し、 シンボリック定数GL_MAX_DRAW_BUFFERSのglGetを使用してクエリできます。 フラグメントシェーダ内のgl_FragDataに値を書き込んだ結果、 のオフスクリーンバッファがglDrawBuffersで指定されます。 をgl_FragData [0]に書き込むと、 で指定されたリストの最初のバッファがglDrawBuffersに更新され、gl_FragData [1] に書き込まれた値がリストの2番目のバッファを更新します。

gl_FragDataの0番目の値は常にカラーバッファです。そのような仕様があれば、どこで見つけることができますか?そうでない場合は、gl_FragDataに書き込むときに通常どおりに実行するのですか?

答えて

9

これは、カラーバッファである必要はありません。しかし、カラーバッファでなければ、はありませんです。

出力配列で設定された値を参照します。また、FBOを使用する場合、この関数に渡す値はGL_COLOR_ATTACHMENTnまたはGL_NONEにしかなりません。これは、名前が示すように、カラーバッファです。

したがって、カラーバッファまたはGL_NONEです。

glDrawBuffersを提供しない(つまり、NV_draw_buffersを実装していない)GL ES実装では、インデックスゼロがGL_COLOR_ATTACHMENT0に設定されているように定義されます。

私がglDrawBuffersは、OpenGL ESには使用できないと仮定し

+0

...実際にそれらの複数のをレンダリングへの道を設けることなく、複数の添付ファイルの可能性を可能にするためにES 2.0の愚かです。その場合、FBOはある時点で暗黙的にそれを呼び出しますか? – Jayesh

+0

'glDrawBuffers'(' glDrawBuffer'、非常にインテリジェントな名前...と混同しないでください)は、OpenGL 2.0コアであるARB_draw_buffersの一部です。 OpenGL ES 2.0はOpenGL 2.0に関連して定義されているため、その関数を含める必要があります。 – Damon

+0

@Damon:技術的には、['glDrawBuffer'](http://www.opengl.org/wiki/GLAPI/glDrawBuffer)は' glDrawBuffers'で定義されています。それはちょうどより制限的な形式です(与えられたバッファにインデックス0を設定し、他のすべてを 'GL_NONE'に設定します)。しかしどちらもGL ES 2.0にはありません。 –

関連する問題