Недопустимая операция glVertexPointer

#c #opengl

#c #opengl

Вопрос:

У меня довольно странная проблема с OpenGL. Когда я пытаюсь использовать glVertexPointer без привязки к буферу GL_ARRAY_BUFFER и с использованием объекта массива вершин (VAO), он генерирует недопустимую ошибку операции. Эта ошибка нигде не указана в документации glVertexPointer .

Когда я генерирую буфер и привязываю его к GL_ARRAY_BUFFER нему, ошибка исчезает, но поскольку мои данные хранятся в ОЗУ, я привязываю 0 и использую указатель на ОЗУ. Кроме того, не связывая VAOs, я больше не получаю ошибок, но я заметил, что, когда я его не использую, мои другие вещи в программе повреждаются.

Может быть, я где-то пропустил, что установка указателей, в то время как VAO привязан, а buffer нет, будет недопустимой недопустимой операцией? Теоретически я мог бы переместить эти данные в VBO и не беспокоиться, но я хотел бы знать, почему это происходит.

Ответ №1:

В реестре расширений для ARB_vertex_array_object четко указано, что они не могут использоваться с клиентскими массивами. Это не должно отличаться для основных версий OpenGL, поддерживающих VAO, и связано с тем, что VAO являются состоянием сервера. Таким образом, вполне ожидаемое поведение приводит к ошибке недопустимой операции. Просто сохраните все в VBO (возможно, используя GL_DYNAMIC_DRAW или GL_STREAM_DRAW как использование, если данные часто меняются).

Комментарии:

1. Вы имели в виду GL_STREAM_DRAW вместо GL_STATIC_DRAW ? Первое предназначено для вещей, которые меняются очень часто (например, каждый кадр); последнее предназначено для вещей, которые меняются редко .

2. Спасибо, я, должно быть, пропустил это, когда читал эту страницу.