Не работает glDrawElements

Рейтинг: 1Ответов: 1Опубликовано: 25.03.2023

Вершины:

 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

Ответы

▲ 0Принят

Вы им неправильно пользуетесь.
Последний аргумент это указатель в массиве, а не вообще в памяти.
В вашем случае, правильно будет вот так:

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.