OpenGLトランスフォーム フィードバックを使用したいくつかの例から、glTransformFeedbackVaryings がプログラムのコンパイル後、リンク前にマップされていることがわかります。私のコード シェーダー プログラムでは、作成プロセスが他のルーチンから抽象化されており、それを制御可能なコンパイル/リンク メソッドに分割する前に、回避策があるかどうか知りたいので質問しています。
アップデート:
分離可能なシェーダー オブジェクトを使用する場合、どのように行われますか?明示的なリンケージ ステップはありません。
アップデート:
個別のシェーダー オブジェクトを使用する場合に glTransformFeedbackVaryings を設定する方法はまだ明確ではありません。
この説明は私には完全に不明確です:
分離可能なプログラム オブジェクトが使用されている場合、キャプチャされた属性のセットは、トランスフォーム フィードバックによってキャプチャされたプリミティブを処理する最後のシェーダー ステージでアクティブなプログラム オブジェクトから取得されます。前のシェーダー ステージでアクティブな他のプログラムのトランスフォーム フィードバック モードでキャプチャする属性のセットは無視されます。
実際、パイプライン オブジェクトをアクティブにしてクエリを実行できると思っていましたが、効果がないようです。変換フィードバックには何も書かれていません。その後、Transform Feedback docsで次の議論を見つけました。
glCreateShaderProgramEXT で作成した別のシェーダー プログラムから変数を出力できますか?
RESOLVED: No. glTransformFeedbackVaryings requires a re-link to take effect on a program. glCreateShaderProgramEXT detaches and deletes the shader object use to create the program so a glLinkProgram will fail. You can still create a vertex or geometry shader program with the standard GLSL creation process where you could use glTransformFeedbackVaryings and glLinkProgram.
これも不明です。答えは、トランスフォーム フィードバック変数を設定するには、通常のシェーダー プログラムのみを使用する必要があるということですか?わかりません。