KTC*_*KTC 2 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();
}
Run Code Online (Sandbox Code Playgroud)
对我来说似乎很简单,但我找不到关于"gl_VerticesIn"的更多信息,我认为这应该是内置的.如果我只用"3"替换"gl_VerticesIn",一切正常.
我正在使用GeForce GTX 765M和OpenGL 3.3核心配置文件.我没有使用任何其他GPU的此错误.我的司机是最新的.
首先,gl_VerticesIn仅在声明中声明GL_ARB_geometry_shader4几何着色器是GLSL 3.30 中的核心.在给定着色器版本的情况下,甚至没有理由使用几何着色器的扩展形式,这样做只会使GLSL编译器和链接器的工作更加混乱.
而不是使用gl_VerticesIn,使用gl_in.length ().真的很简单.
当然,删除冗余扩展指令也是一个好主意.