0

私は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;
}
4

0 に答える 0