'gl_VerticesIn':未声明的标识符

时间:2013-12-22 03:32:35

标签: 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”的更多信息,我认为这应该是内置的。如果我只用“3”替换“gl_VerticesIn”,一切正常。

我正在使用GeForce GTX 765M和OpenGL 3.3核心配置文件。我没有使用任何其他GPU的此错误。我的司机是最新的。

1 个答案:

答案 0 :(得分:8)

首先,gl_VerticesIn仅在GL_ARB_geometry_shader4中声明,几何着色器在GLSL 3.30中为 核心 。在给定着色器版本的情况下,没有理由使用几何着色器的扩展形式,这样做只会使GLSL编译器和链接器的工作更加混乱。

现在,要真正解决您的问题:

使用gl_VerticesIn而不是gl_in.length ()。真的很简单。

当然,删除冗余扩展指令也是一个好主意。