なぜこのエラーがGLSLジオメトリシェーダをコンパイルするのですか?
エラー:0:15: "gl_VerticesIn":宣言されていない識別子
シェーダはここにあります:
// makes wireframe triangles.
#version 330
#extension GL_ARB_geometry_shader4 : enable
layout(triangles) in;
layout(line_strip, max_vertices = 4) out;
void main(void)
{
for (int i = 0; i < gl_VerticesIn; i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
gl_Position = gl_in[0].gl_Position;
EmitVertex();
EndPrimitive();
}
わかりやすく思えますが、gl_VerticesInの情報はたくさんありますが、これは組み込みであると考えられていました。 "gl_VerticesIn"を "3"に置き換えるだけですべてが動作します。
私はGeForce GTX 765MとOpenGL 3.3コアプロファイルを使用しています。他のGPUを使用してもこのエラーは発生しません。私のドライバーは最新です。
回答:
回答№1は8まず最初に、 gl_VerticesIn
で宣言されている GL_ARB_geometry_shader4
ジオメトリシェーダは コア GLSL 3.30で。シェーダ版のジオメトリシェーダの拡張形式を使用する理由はなく、GLSLコンパイラとリンカの仕事を混乱させるだけです。
さて、あなたの問題を実際に解決するには:
むしろ gl_VerticesIn
、 つかいます gl_in.length ()
。それは本当に簡単です。
もちろん、冗長拡張命令を削除することも良い考えです。