vec4 と float を頂点シェーダーからジオメトリ シェーダー、さらにフラグメント シェーダーに渡す必要があります。3 つのシェーダーは、均一性を維持するために 3 つの異なるプログラムに属し、必要に応じてジオメトリ シェーダーがアタッチ/デタッチされた単一のプログラム パイプラインに 3 つが集められます。
GL_ARB_separate_shader_object 拡張機能は次のように述べています。
GLSL には、さまざまな出力変数を後続のシェーダーのさまざまな入力変数に接続するための「名前によるランデブー」モデルがあります。個別のシェーダーでは、前のシェーダーが特定のユーザー定義の入力可変変数を書き込むかどうかは保証されません。HLSL9、Cg、および OpenGL アセンブリ拡張プログラムは、この状況を「API リソースによるランデブー」モデルで処理します。GLSL の用語では、これは個別の GLSL シェーダーが、ユーザー定義の可変変数ではなく、組み込みの可変変数によって通信する/必要がある/通信することを意味します。
頂点シェーダーとジオメトリ シェーダーでは、vec4 に gl_FrontColor を使用し、float に gl_FogFragCoord を使用し、gl_FogFragCoord と gl_Color を介してフラグメントでそれらを読み取りました。
それはうまく動作します..しかし..つまり..cmon、本当に?
このすべての背後にある理論的根拠は理解できますが、それは本当にくだらない回避策のように思えます。すべてが同じプログラム パイプラインで動作する場合、異なるプログラムの異なるシェーダーが互いに通信するようにする他の方法はありませんか?