web-dev-qa-db-ja.com

gl_FragColorを使用するか、vec4カラーを使用しないか?

gl_FragColorが廃止されることについては、あいまいさが多くあるようです。たとえば、 GLSL 4.40仕様 にはありませんが、 GLSL 4.60仕様 には含まれています。

最も安全で互換性があり、サポートされている戦略は何ですか? gl_FragColorを使用するか、out vec4 color

8

はい、gl_FragColorは非推奨です。次の構文を使用する必要があります。

layout(location = 0) out vec4 diffuseColor;

GLSL 4.60仕様のセクション7.1.7. Compatibility Profile Built-In Language Variablesに含まれています。つまり、コアコンテキストを作成すると、この変数は使用できなくなります。

4
dari

GLSL 4.40仕様 を注意深く読むと、章にgl_FragCoordが見つかります "7.1.1互換性プロファイルの組み込み言語変数"、それは GLSL 4.60仕様 と同じです。

次のフラグメント出力変数は、互換性プロファイルを使用するときにフラグメントシェーダーで使用できます。

out vec4 gl_FragColor;
out vec4 gl_FragData[gl_MaxDrawBuffers];

gl_FragColorへの書き込みは、後続の固定機能パイプラインで使用されるフラグメントの色を指定します。後続の固定機能がフラグメントカラーを消費し、フラグメントシェーダー実行可能ファイルの実行がgl_FragColorに値を書き込まない場合、消費されるフラグメントカラーは未定義です。

OpenGLコアプロファイルコンテキストgl_FragColorを使用することはできません。これは非推奨ですが、互換性プロファイルで引き続き使用できます。

フラグメントシェーダーから出力バッファーに書き込む最新の方法は、 ユーザー定義の出力変数 を宣言し、 レイアウト修飾子 を使用することです。

1
Rabbid76