次のような設定があります。
頂点シェーダー (... 無関係なもの):
#version 330 core
uniform mat4 ModelViewMatrix;
...
in vec4 position;
...
out vec4 out_position;
...
void main()
{
...
out_position = ModelViewMatrix * position;
...
}
ジオメトリ シェーダー (... 無関係なもの):
#version 330 core
...
uniform mat4 ProjectionMatrix;
...
layout(lines) in;
layout(triangle_strip, max_vertices = 4) out;
in vec4 out_position[];
...
void main()
{
vec4 lineDirection = out_position[1] - out_position[0];
vec4 scaledLineWidthDir = ...;
...
gl_Position = ProjectionMatrix * (lineDirection - scaledLineWidthDir);
EmitVertex();
gl_Position = ProjectionMatrix * (lineDirection + scaledLineWidthDir);
EmitVertex();
gl_Position = ProjectionMatrix * (-lineDirection + scaledLineWidthDir);
EmitVertex();
gl_Position = ProjectionMatrix * (-lineDirection - scaledLineWidthDir);
EmitVertex();
EndPrimitive();
}
しかし、シェーダーを実行しようとすると、ModelViewMatrix が使用されていないように見えます (セットアップしようとすると、「非アクティブなユニフォームの位置を取得しています」というメッセージが表示されます)。シェーダー。何を与える?
ここのジオメトリ シェーダは 2 つの頂点を取り、フラグメント シェーダが使用するために 4 つを出力することを理解していますが、ジオメトリ シェーダを正しく理解して使用していますか?