为什么编译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”的更多信息,我认为这应该是内置的。如果我只用“3”替换“gl_VerticesIn”,一切正常。
我正在使用GeForce GTX 765M和OpenGL 3.3核心配置文件。我没有使用任何其他GPU的此错误。我的司机是最新的。
答案 0 :(得分:8)
首先,gl_VerticesIn
仅在GL_ARB_geometry_shader4
中声明,几何着色器在GLSL 3.30中为 核心 。在给定着色器版本的情况下,没有理由使用几何着色器的扩展形式,这样做只会使GLSL编译器和链接器的工作更加混乱。
使用gl_VerticesIn
而不是gl_in.length ()
。真的很简单。
当然,删除冗余扩展指令也是一个好主意。