mac 上的 Opengl 曲面细分错误
Opengl tessellation error on mac
我正在 mac 上尝试曲面细分着色器,但它 returns 错误列表:
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 电脑上运行良好...
我想知道这是否是 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;
}
在您的 LoadProgram
中,您使用 GL_VERTEX_SHADER
作为 tcs
和 tes
的类型调用 AttachShader
。
但是 VertexShader 没有着色器编译器抱怨的那些标识符。
您必须为曲面细分着色器使用正确的着色器类型(GL_TESS_CONTROL_SHADER
和 GL_TESS_EVALUATION_SHADER
)。
我正在 mac 上尝试曲面细分着色器,但它 returns 错误列表:
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 电脑上运行良好... 我想知道这是否是 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;
}
在您的 LoadProgram
中,您使用 GL_VERTEX_SHADER
作为 tcs
和 tes
的类型调用 AttachShader
。
但是 VertexShader 没有着色器编译器抱怨的那些标识符。
您必须为曲面细分着色器使用正确的着色器类型(GL_TESS_CONTROL_SHADER
和 GL_TESS_EVALUATION_SHADER
)。