Понимание тесселяционных шейдеров - PullRequest
0 голосов
/ 14 ноября 2018

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