OpenGL Tessellation не будет отображаться

Я начинаю работать с тесселяцией и у меня есть некоторые проблемы в самом начале. Я пытаюсь визуализировать четырехугольник из двух треугольников с тесселяцией, но на экране ничего не появляется. Но как только я уберу тесселяционные шейдеры и поменяю GL_PATCHES в GL_TRIANGLESснова, он снова начинает работать, очевидно, без тесселяции.

Итак, вот мой код для настройки шейдеров тесселяции:

glPatchParameteri(GL_PATCH_VERTICES, 3);
shaderID = glCreateProgram();
{
vertex = GraphicsUtilities::loadShader("D:\\vert.glsl", GL_VERTEX_SHADER);
glAttachShader(shaderID, vertex);fragment = GraphicsUtilities::loadShader("D:\\frag.glsl", GL_FRAGMENT_SHADER);
glAttachShader(shaderID, fragment);

tcs = GraphicsUtilities::loadShader("D:\\tcs.glsl", GL_TESS_CONTROL_SHADER);
glAttachShader(shaderID, tcs);

tes = GraphicsUtilities::loadShader("D:\\tes.glsl", GL_TESS_EVALUATION_SHADER);
glAttachShader(shaderID, tes);
}
glLinkProgram(shaderID);

Это вершинный шейдер:

   #version 400

layout(location=0) in vec4 vertPosition;
layout(location=1) in vec2 vertUV;
layout(location=2) in vec3 vertNormal;

void main(void){
gl_Position = vertPosition;
}

TCS:

#version 400
layout (vertices = 3) out;

void main()
{
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;

gl_TessLevelOuter[0] = 3.0;
gl_TessLevelOuter[1] = 3.0;
gl_TessLevelOuter[2] = 3.0;
gl_TessLevelInner[0] = 3.0;
}

И TES:

#version 400
layout(triangles, equal_spacing, cw) in;

void main()
{
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position +
gl_TessCoord.y * gl_in[1].gl_Position +
gl_TessCoord.z * gl_in[2].gl_Position);
}

И вот как я рисую четырехугольник:

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
glUseProgram(shaderID);
glBindVertexArray(quad->getVboID());

glDrawElements(GL_PATCHES, 6, GL_UNSIGNED_INT, (GLvoid*)0);

glBindVertexArray(0);

glUseProgram(0);
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

Я пытался с помощью in а также out переменные вместо gl_in/out, но это тоже не работает. Я тоже попробовал это без TCS.
Я также использовал Apitrace для поиска любых ошибок, но ничего. Функция loadShader() ищет ошибки компиляции.
Так что может вызвать эту проблему? Я действительно понятия не имею, как отлаживать эту вещь дальше.

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]