Не работает glDrawElements
Вершины:
var
vertices: array[0..11] of GLfloat = (
-0.5, 0.5, 0.0, // вершина 1
-0.5, -0.5, 0.0, // вершина 2
0.5, -0.5, 0.0, // вершина 3
0.5, 0.5, 0.0 // вершина 4
);
Индексы:
var
indices: array[0..5] of GLushort = (
0,1,3,
1,2,3
);
Добавляю массив вершин:
glBufferData(GL_ARRAY_BUFFER, SizeOf(vertices), @vertices, GL_STATIC_DRAW);
Отрисовка (Проблемный момент):
glDrawElements(GL_TRIANGLES, Length(indices), GL_UNSIGNED_SHORT, @indices);
Однако если вместо glDrawElements написать:
glDrawArrays(GL_TRIANGLES, 0, 6);
То что-то отрисуется, не то что надо конечно, но треугольники появятся, что указывает на работоспособность программы и какую-то ошибку в написании glDrawElements. Вопрос заключается в том, как же всё-таки правильно использовать glDrawElements
Ответы (1 шт):
Вы им неправильно пользуетесь.
Последний аргумент это указатель в массиве, а не вообще в памяти.
В вашем случае, правильно будет вот так:
glDrawElements(GL_TRIANGLES, Length(indices), GL_UNSIGNED_SHORT, Pointer(0));
Ссылка на доку (https://docs.gl/gl3/glDrawElements):
void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
indices Specifies an offset of the first index in the array in the data store of the buffer currently bound to the GL_ELEMENT_ARRAY_BUFFER target.