2017-04-17 8 views
-1

에 나는 맥에 테셀레이션 쉐이더를 시도하고 있지만 오류 목록을 반환OpenGL을 테셀레이션 오류가 맥

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 윈도우 PC에서 잘 작동? 내 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 당신이 tcstes 양쪽에 대한 유형으로 GL_VERTEX_SHADERAttachShader를 호출합니다.

그러나 VertexShader에는 셰이더 컴파일러가 불평하는 식별자가 없습니다.

테셀레이션 쉐이더에 올바른 쉐이더 유형 (GL_TESS_CONTROL_SHADERGL_TESS_EVALUATION_SHADER)을 사용해야합니다.