gl_PrimitiveID
レンダリングされたプリミティブの数を数えているようです。これは、フラグメントシェーダーとジオメトリシェーダーの両方で利用できるようです。
これは、シーン全体ではなく、ビュー錐台でレンダリングされた三角形の正確な数になりますか(プリミティブIDは線と点にも適用されるため、トリスのみを想定)?
gl_PrimitiveID
レンダリングされたプリミティブの数を数えているようです。これは、フラグメントシェーダーとジオメトリシェーダーの両方で利用できるようです。
これは、シーン全体ではなく、ビュー錐台でレンダリングされた三角形の正確な数になりますか(プリミティブIDは線と点にも適用されるため、トリスのみを想定)?
変数はgl_PrimitiveID
ジオメトリ シェーダーから出力され、フラグメント シェーダーに渡されます。ジオメトリ シェーダーが存在しない場合、フラグメント シェーダーgl_PrimitiveID
は、現在のレンダリング呼び出しで処理されたプリミティブの数です。つまり、頂点処理パイプラインを介して送信されるポイント/ライン/三角形の数です。呼び出すと、半開きの範囲 [0, 11)glDrawArrays(GL_TRIANGLES, 0, 33);
が得られます。gl_PrimitiveID
ジオメトリ シェーダーが存在する場合gl_PrimitiveID
は、GS から出力した値を受け取ります。GS が存在し、値を書き込まない場合、フラグメント シェーダーは未定義の値を取得します。標準の OpenGL 動作を得るために、書き込む頂点ごとにコピーgl_PrimitiveIDIn
するだけでよいことに注意してください。gl_PrimitiveID
つまり、視錐台カリングは考慮されていません。あなたのGSが実際に三角形ごとの錐台カリングを表示しない限り、そうではありません(そして私はそれをお勧めします)。