#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. Спасибо, я, должно быть, пропустил это, когда читал эту страницу.