「クローズド ソース」アプリケーション内で実行されるプラグインの一部として、glsl シェーダー プログラムに取り組んでいます。アプリケーション (maya) は opengl 2.1 を使用して作成されていますが、グラフィックス カードは opengl/glsl 4.1 をサポートしており、プログラムでテッセレーションとジオメトリ シェーダーを使用したいと考えています。アプリケーションは、opengl ビューポートと従来のモデル/ビュー マトリックス スタックをセットアップしますが、コードのその部分を制御することはできません。
私のパススルー頂点シェーダーは GLSL 1.2 を使用し、正常に動作します。
// GLSL VERTEX SHADER
#version 120
void main ()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
私のパススルー ジオメトリ シェーダは glsl 4.1 を使用し、アプリケーション内でも正常に動作します。
// GLSL GEOMETRY SHADER
#version 410
layout (lines_adjacency) in;
layout (line_strip, max_vertices = 2) out;
void main ()
{
gl_Position = gl_in[1].gl_Position;
EmitVertex();
gl_Position = gl_in[2].gl_Position;
EmitVertex();
EndPrimitive();
}
しかし、これは単なる通過テストです。私の実際のジオメトリ シェーダーでは、ワールド空間でいくつかの計算を行う必要がありますが、ジオメトリ シェーダー ポイントはビュー空間にあります。私の質問は: 4.1 ジオメトリ シェーダー内の gl_ModelViewProjectionMatrix にアクセスできますか? 従来のマトリックス スタックが glsl 4.1 で廃止され、一様な変数が使用されていることは理解していますが、アプリケーションを変更することはできません。lines_adjacency 入力タイプが必要なため、ジオメトリ シェーダーで glsl 1.2 を使用できません。マトリックスをプラグインの C++ ソースの均一変数にコピーする必要がありますか? それとも、gsl 4.1 から直接アクセスするための「裏口」がありますか? それとも私が考えていない何か他のものですか?