Почему VertexAttribPointer не генерирует INVALID_OPERATION без привязки к VBO?
В спецификации ядра OpenGL 3.3, стр. 344, говорится, что если ничего не связано с ARRAY_BUFFER
цель (или VAO не связан), когда VertexAttribPointer
называется, INVALID_OPERATION
происходит. Смотрите здесь.
glBindBuffer(GL_ARRAY_BUFFER, 0);
glVertexAttribPointer(index, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void *) 0);
// or doing
glVertexAttribPointer(index, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), NULL);
Я только что попробовал это и нет INVALID_OPERATION
происходит, это просто кажется игнорировать утверждение.
Это проблема водителя или недоразумение с моей стороны?
Если это преднамеренно, каков случай использования отсутствия буфера, привязанного в контексте OpenGL Core, при вызове этой функции? Сброс состояния или это просто неопределенное поведение?
Обратите внимание, что я не спрашиваю о том, что делает сама функция, для чего нужен какой-либо из аргументов, а просто интересуюсь, почему нет ошибки.
1 ответ
Смотрите здесь
Я сделал. И это говорит:
INVALID_OPERATION
Ошибка генерируется при любом из следующих условий:...
- любой из
*Pointer
Команды, указывающие местоположение и организацию данных массива вершин, вызываются, пока ноль привязан кARRAY_BUFFER
точка привязки объекта буфера (см. раздел 2.9.6), а аргумент указателя неNULL
Если вы ссылаетесь на текст в приложении E, приложения к спецификациям OpenGL не являются нормативным текстом. То есть они на самом деле не определяют поведение; это просто заметки для удобства читателя. Приложение E объясняет на языке непрофессионала, что было удалено из ядра; Фактический нормативный текст явно описывает поведение основного профиля OpenGL.