glDrawArraysInstanced не выполняет несколько вызовов отрисовки в OpenGL?

Я пытаюсь нарисовать два пятна прямоугольника (для тесселяции), и я хочу нарисовать их от 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

0

Решение

glDrawArraysInstanced рисует несколько экземпляров указанных данных. В вашем случае он дважды рисует вершины от 0 до 4, что дает вам два квадра, лежащих в одной и той же позиции.

Я бы посоветовал вам просто использовать glDrawArrays (GL_PATCHES, 0, 8) вместо этого, но вы также можете оставить свой вызов отрисовки и перевести его в вершинный шейдер в соответствии с gl_InstanceID.

1

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


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