gl_FragColor
が廃止されることについては、あいまいさが多くあるようです。たとえば、 GLSL 4.40仕様 にはありませんが、 GLSL 4.60仕様 には含まれています。
最も安全で互換性があり、サポートされている戦略は何ですか? gl_FragColor
を使用するか、out vec4 color
?
はい、gl_FragColor
は非推奨です。次の構文を使用する必要があります。
layout(location = 0) out vec4 diffuseColor;
GLSL 4.60仕様のセクション7.1.7. Compatibility Profile Built-In Language Variables
に含まれています。つまり、コアコンテキストを作成すると、この変数は使用できなくなります。
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
を使用することはできません。これは非推奨ですが、互換性プロファイルで引き続き使用できます。
フラグメントシェーダーから出力バッファーに書き込む最新の方法は、 ユーザー定義の出力変数 を宣言し、 レイアウト修飾子 を使用することです。