フラグメント シェーダーを除くすべてのシェーダーで出力変数として使用できます。では、どのシェーダー ステージでそれを書き込む必要があるのでしょうか? その値は、それを書き込んだ最後のシェーダー ステージから取得されますか?
また、フラグメントシェーダーで値 gl_ClipDistance を持つ目的は何ですか?
フラグメント シェーダーを除くすべてのシェーダーで出力変数として使用できます。では、どのシェーダー ステージでそれを書き込む必要があるのでしょうか? その値は、それを書き込んだ最後のシェーダー ステージから取得されますか?
また、フラグメントシェーダーで値 gl_ClipDistance を持つ目的は何ですか?
実際にはクリッピングにのみ役立つことを考えると... GLSLプログラムの頂点処理の最終段階で記述する必要があります。現在、頂点処理のカテゴリに該当しないステージは 1 つしかないため、フラグメント シェーダーの直前に来るものはすべてこれを出力する必要があります。
ジオメトリ シェーダーを使用している場合は、そこに記述します。さて、一般的にこのような状況では、ジオメトリ シェーダーの前に実行される頂点シェーダーに記述して、それを通過させることもできます。そのようなことをする必要はありませんが、それは典型的なことです。これは の一部であるためgl_PerVertex
、そのように複数の頂点処理段階を通過するように設計されています。
名前
gl_ClipDistance
— 頂点クリッピングの上位互換メカニズムを提供します説明
[...]
の値
gl_ClipDistance
(テッセレーション コントロール シェーダの場合は配列のgl_ClipDistance
メンバーgl_out[]
) は、対応するシェーダ実行可能ファイルが に書き込まれない場合、頂点、テッセレーション コントロール、およびテッセレーション評価シェーディング ステージの後で未定義gl_ClipDistance
です。
頂点処理の最終段階で書き込まないと、クリッピングが発生する直前に未定義になります。