Почему 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.

Другие вопросы по тегам