我的GLSL曲面细分着色器出了什么问题

时间:2013-10-12 01:37:38

标签: opengl glsl tesselation

我正在学习GLSL曲面细分并编写了一个程序来镶嵌三角形。我使用glPatchparameterfv指定内部和外部曲面细分级别,因此不使用曲面细分控制着色器。添加曲面细分着色器后,问题就出现了。我检查过glLinkProgram期间没有生成错误。但是,每次执行渲染循环时,我都会得到'GL_INVALID_OPERATION'。

以下是相关代码

float innerLevel[] = {5};
float outerLevel[] = {3, 3, 3};
glPatchParameterfv(GL_PATCH_DEFAULT_OUTER_LEVEL, outerLevel);
glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL, innerLevel);

我的顶点着色器:

layout(location=0) in vec4 Position;
out vec3 vPos;

void main() {   
   vPos = Position.xyz;
}

细分评估着色器:

layout(triangles, equal_spacing, ccw) in;
in vec3 vPos[];
out vec3 tePos;
uniform mat4 MVP;

void main() {
   tePos = gl_TessCoord.x * vPos[0] + gl_TessCoord.y * vPos[1] + gl_TessCoord.z * vPos[2];
   gl_Position = MVP * vec4(tePos, 1.0); 
 }

片段着色器:

uniform vec4 Diffuse;

void main() {
   gl_FragColor = Diffuse;
}

0 个答案:

没有答案