頂点シェーダからジオメトリシェーダに、さらにフラグメントシェーダにvec4とfloatを渡す必要があります。 3つのシェーダはユニークなユニークを維持するために3つの異なるプログラムに属し、3つは、必要に応じてジオメトリシェーダを取り付けたり取り外したりして1つのプログラムパイプラインにまとめられます。プログラムパイプラインシェーダ変数交換
GL_ARB_separate_shader_object拡張子は言う:
GLSLシェーダは、後続の入力変数を変えるに変化する出力変数を接続するための「ランデブー名で」モデルを持っています。個別のシェーダでは、先行するシェーダがユーザー定義の入力可変変数を書き込むかどうかは保証されません。 HLSL9、Cg、およびOpenGLアセンブリ拡張プログラムは、この状況を「APIリソースによるランデブー」モデルによって処理します。 GLSLの用語では、ユーザ定義の可変変数ではなく、組み込みの可変変数によって別々のGLSLシェーダ/必須/通信を意味します。
細かいは、頂点とジオメトリシェーダでIはgl_FogFragCoordとGL_COLOR介し断片でそれらを読み取り、フロートためvec4ためgl_FrontColorを使用し、gl_FogFragCoord。
それはうまく動作しますが、私は.. cmon、本当ですか?
私はこれの背後にある論理的根拠を理解することができますが、実際は私にとっては愚かな回避策のようです。 実際には、異なるプログラムの異なるシェーダがすべて同じプログラムパイプラインで動作する場合、互いに通信する方法はありませんか?
ああ、それは本当に興味深いとにかく、いつものように普通のイン/アウトを使ってみましたが、シェイダーはそれを読んでいませんでした(それぞれが 'ゼロ'で表示されます)。または、プログラムパイプラインのシェーダー間でのやりとりに欠けているものがありますか? – user815129
@ user815129:それは新しい質問です。これは「私は動作しないコードを持っています」という質問です。「この仕様はどういう意味ですか?」質問。あなたはその質問をして、シェーダコードだけでなく、シェーダの*読み込み*コードも投稿する必要があります。別々のプログラムでは、読み込み時に特別な処理が必要です。 –
@ user815129:また、何か新しいことを試してみるときは、簡単で実用的な例から始めるべきです。そうすれば、制御された環境でアプリケーションを使用することができます。 –