Mac上的Opengl曲面细分错误

时间:2017-04-17 01:10:52

标签: macos opengl glsl shader tessellation

我正在尝试使用mac上的细分着色器,但它会返回错误列表:

ERROR: 0:2: Invalid use of layout 'vertices'
ERROR: 0:12: Use of undeclared identifier 'gl_InvocationID'
ERROR: 0:12: Use of undeclared identifier 'gl_InvocationID'
ERROR: 0:13: Use of undeclared identifier 'gl_InvocationID'
ERROR: 0:14: Use of undeclared identifier 'gl_TessLevelInner'
ERROR: 0:15: Use of undeclared identifier 'gl_TessLevelOuter'
ERROR: 0:16: Use of undeclared identifier 'gl_TessLevelOuter'
ERROR: 0:17: Use of undeclared identifier 'gl_TessLevelOuter'

曲面细分控制器着色器似乎有问题。

#version 410
layout(vertices = 3) out;
in vec3 vPosition[];
out vec3 tcPosition[];
uniform float TessLevelInner;
uniform float TessLevelOuter;

#define ID gl_InvocationID

void main()
{
    tcPosition[ID] = vPosition[ID];
    if (ID == 0) {
        gl_TessLevelInner[0] = TessLevelInner;
        gl_TessLevelOuter[0] = TessLevelOuter;
        gl_TessLevelOuter[1] = TessLevelOuter;
        gl_TessLevelOuter[2] = TessLevelOuter;
    }
}

我的opengl项目在我的2010 Windows PC上运行良好... 我想知道这是否是一个macosx问题?我的mac上的GPU是Intel Iris。 任何人都有这个线索...

main.cpp代码是共享的here

static GLuint LoadProgram( const char* vert, const char* tcs, const char* tes,const char* geom, const char* frag )
{
    GLuint prog = glCreateProgram();
    if( vert ) AttachShader( prog, GL_VERTEX_SHADER, vert );
    if( tcs ) AttachShader( prog, GL_VERTEX_SHADER, tcs );
    if( tes ) AttachShader( prog, GL_VERTEX_SHADER, tes );
    if( geom ) AttachShader( prog, GL_GEOMETRY_SHADER, geom );
    if( frag ) AttachShader( prog, GL_FRAGMENT_SHADER, frag );
    glLinkProgram( prog );
    CheckStatus( prog );
    return prog;
}

1 个答案:

答案 0 :(得分:1)

LoadProgram AttachShader中,GL_VERTEX_SHADER的{​​{1}}和tcs的{​​{1}}类型为tes

VertexShader 没有着色器编译器抱怨的那些标识符。

您必须为tesselation着色器使用正确的着色器类型(GL_TESS_CONTROL_SHADERGL_TESS_EVALUATION_SHADER)。