2017-04-17 13 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のプロジェクトでは、これはMacOSXの問題である場合、私は思ったんだけど ...私の2010年のWindows PC上で正常に動作しますか?私のMacのGPUはIntel Irisです。 誰もがmain.cppにコードをごLoadProgramあなたは両方tcstesの型としてGL_VERTEX_SHADERAttachShaderを呼んで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

を共有している...

を、このための手がかりを得ました。

ただし、VertexShaderには、シェーダコンパイラが不平を言っている識別子がありません。

テッセレーションシェーダに正しいシェーダタイプ(GL_TESS_CONTROL_SHADERおよびGL_TESS_EVALUATION_SHADER)を使用する必要があります。

関連する問題