我正在尝试在OpenGL ES 3.2中使用镶嵌细分着色器,并尝试遵循2种不同的教程,但均未成功。
我当前正在绘制一个扁平矩形,目的是提高其表面。我在顶点着色器中收到了顶点:
#version 320 es
layout (location = 0) in vec3 position;
out vec3 v_position;
uniform mat4 model_matrix;
uniform mat4 mvp_matrix;
void main() {
vec4 pos = vec4(position, 1.0);
v_position = vec3(model_matrix * pos);
gl_Position = mvp_matrix * vec4(position, 1.0);
}
尝试在曲面细分控件着色器中进行曲面细分:
#version 320 es
layout (vertices = 3) out;
in vec3 v_position[];
out vec3 t_position[];
void main()
{
// Set the control points of the output patch
t_position[gl_InvocationID] = v_position[gl_InvocationID];
// Calculate the tessellation levels
gl_TessLevelOuter[0] = 3.0;
gl_TessLevelOuter[1] = 3.0;
gl_TessLevelOuter[2] = 3.0;
gl_TessLevelInner[0] = gl_TessLevelOuter[2];
}
然后尝试制作一个最低工作评估着色器:
#version 320 es
layout(triangles, equal_spacing, ccw) in;
in vec3 t_position[];
out vec3 f_position;
uniform mat4 mvp_matrix;
void main() {
f_position = t_position[0];
gl_Position = mvp_matrix * vec4(f_position, 1.0);
}
我使用glDrawArrays(GL_PATCHES, 0, vertex_num)
称这些着色器。但是,目前我在尝试细分时看不到任何输出。如果相反,我将删除镶嵌细分着色器,并仅使用顶点着色器和片段着色器进行绘制(进行调整后才能进行编译)。我确实看到了矩形网格,所以我确信问题出在我的着色器中。
我没有收到编译错误,并且调用glGetError()
不会报告任何错误,因此我认为这是我的逻辑。
编辑:
在抽奖之前,我也要做:
glPatchParameteri(GL_PATCH_VERTICES, 3);