/ / 'gl_VerticesIn':宣言されていない識別子 - opengl、glsl、geometry-shader

'gl_VerticesIn':宣言されていない識別子 - opengl、glsl、geometry-shader

なぜこのエラーが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 ()。それは本当に簡単です。

もちろん、冗長拡張命令を削除することも良い考えです。