-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
あなたは両方tcs
とtes
の型としてGL_VERTEX_SHADER
でAttachShader
を呼んで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;
}
初期化中に* Core * OpenGLコンテキストを要求していますか? –
glfw初期化でglFW_OPENGL_CORE_PROFILEを次のように初期化しました。glfwWindowHint(GLFW_OPENGL_PROFILE、GLFW_OPENGL_CORE_PROFILE); –
上記で共有したmain.cppを確認してください –