Я пытаюсь нарисовать два пятна прямоугольника (для тесселяции), и я хочу нарисовать их от 0,0 до 1,1 и другие от 1,0 до 2,1
Я использую GL_PATCHES, чтобы отправить квад в мой графический конвейер
Мои данные вершин в однородных координатах
float vertices[32] = {
0.0, 0.0, 0.0, 1.0, //1st rec
1.0, 0.0, 0.0, 1.0,
1.0, 1.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
1.0, 0.0, 0.0, 1.0, //2nd rec
2.0, 0.0, 0.0, 1.0,
2.0, 1.0, 0.0, 1.0,
1.0, 1.0, 0.0, 1.0
};
И в коде C ++
glPatchParameteri(GL_PATCH_VERTICES, 4);
glDrawArraysInstanced(GL_PATCHES, 0, 4, 2);
Но я получаю только один прямоугольный патч от 0,0 до 1,1 на моем экране. Я не понимаю, почему он не рисует второй прямоугольник
Мой шейдер оценки тесселяции
vec4 vert= vec4(0.0, 0.0, 0.0, 1.0);
vert.x = gl_in[0].gl_Position.x + gl_TessCoord.x;
vert.y = gl_in[0].gl_Position.y + gl_TessCoord.y;
Я конвертирую этот vert в vec4 и передаю его gl_Position
glDrawArraysInstanced рисует несколько экземпляров указанных данных. В вашем случае он дважды рисует вершины от 0 до 4, что дает вам два квадра, лежащих в одной и той же позиции.
Я бы посоветовал вам просто использовать glDrawArrays (GL_PATCHES, 0, 8) вместо этого, но вы также можете оставить свой вызов отрисовки и перевести его в вершинный шейдер в соответствии с gl_InstanceID.