Я пытаюсь использовать тесселяционные шейдеры в 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);