1. ホーム
  2. opengl

[解決済み] コンセプト:glDrawBufferとglDrawBuffersの使い分けは?

2022-02-18 11:10:54

質問

私は赤い本のOpenGLプログラミングガイドを読んでいて、以下の2つのメソッドに出会いましたが、すでに出力先のカラーバッファを layout (location = ) または glBindFragDataLocation . 私は何か誤解しているのでしょうか?

解決方法は?

フレームバッファに接続されたすべてのカラーアタッチメントが、シェーダプログラムによってレンダリングされる必要はありません。 glDrawBuffers は、描画するカラーバッファのリストを指定する。

例)3色の色付けをしたフレームバッファがあるとします。 GL_COLOR_ATTACHMENT0 , GL_COLOR_ATTACHMENT1GL_COLOR_ATTACHMENT2 :

フラグメントシェーダ

layout (location = 0) out vec4 out_color1;
layout (location = 1) out vec4 out_color2;

drawbufferr の仕様です。

const GLenum buffers[]{ GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT0 };
glDrawBuffers( 2, buffers );

out_color1 はそのデータをインデックス 0 のドローバッファに送ります (これは location = 0 という宣言があります)。の呼び出しは glDrawBuffers 上記はこのバッファを GL_COLOR_ATTACHMENT2 . 同様に out_color2 はそのデータをインデックス 1 に送信し、インデックス 1 に設定された GL_COLOR_ATTACHMENT0 . アタッチメント1にはデータが書き込まれない。