そこで、オレンジブック (第 3 版) を読んでいて、第 9 章で不変修飾子に関する一節に出くわしました。そしてそれは言います:
不変修飾子は、出力の計算に直接関係のない式と関数を無視するようにコンパイラとリンクに指示します。
この一節は、2 つの類似したコード スニペットの後に続きます。
uniform mat4 MVPmatrix;
// ...
in vec4 MCVertex;
// ...
a(); // does not modify gl_Position, MVP or MCVertex
// ...
// Transform vertex to clip space
gl_Position = MVP * MCVertex;
と
uniform mat4 MVPmatrix;
// ...
invariant gl_Position;
in vec4 MCVertex;
// ...
a(); // does not modify gl_Position, MVP or MCVertex
// ...
// Transform vertex to clip space
gl_Position = MVP * MCVertex;
その後、本は次のように述べています。
最初のケースでは、シェーダーにリンクされている関係のない関数または式に関係なく、まったく同じ方法で変換された位置を計算する場合と計算しない場合があります。マルチパス アルゴリズムを使用して同じジオメトリを複数回レンダリングすると、レンダリングで問題が発生する可能性があります。
これは私を混乱させました。変換された位置の計算に関与する変数にまったく影響しない場合a()
、計算はどのように変化しますか? (そして、追加はそれをどのようにinvariant
助けますか?)。そして、最初の引用を参照すると、「無関係な機能を無視する」とは正確にはどういう意味ですか? 彼らは処刑されないだけですか?