2017-04-17 53 views
-1

我想在Mac上镶嵌着色但它返回的错误列表:Opengl的镶嵌错误的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; 
} 
+2

在初始化过程中是否要求* Core * OpenGL上下文? –

+0

我在glfw初始化中初始化了GLFW_OPENGL_CORE_PROFILE:glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE); –

+0

请检查我上面共享的main.cpp –

回答

1

在你LoadProgram你叫AttachShaderGL_VERTEX_SHADER类型的两个tcstes

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

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