Если GL_VERTEX_ARRAY не включен, геометрические примитивы не создаются.
Это потому, что справочная страница неверна . Страница руководства охватывает GL 2.1 (и это все еще неправильно), и по какой-то причине люди, обновляющие страницу руководства, отказываются обновлять более старые версии GL для исправления ошибок.
В GL 2.1 вы должны использовать общий индекс атрибута 0 или GL_VERTEX_ARRAY
. В GL 3.1+ вам не нужно использовать какие-либо конкретные индексы атрибутов.
Это связано с тем, что в версиях GL до 3.1 все функции рендеринга массива были определены в терминах вызовов glArrayElement
, в которых использовался немедленный рендеринг на основе режима. Это означает, что вам нужно что-то, чтобы спровоцировать вершину. Напомним, что в непосредственном режиме вызов glVertex*()
не только устанавливает положение вершины, но также вызывает отправку вершины с другими атрибутами. Вызов glVertexAttrib*(0, ...)
делает то же самое. Вот почему в старых версиях требуется использовать атрибут 0 или GL_VERTEX_ARRAY
.
В GL 3.1+, как только они вышли из немедленного режима, им пришлось по-разному определять рендеринг массива. И поэтому им не нужно было ограничивать себя использованием атрибута 0.
Если вы хотите, чтобы документы API для ядра GL 3.3 работали, я предлагаю вам взглянуть на фактические документы API для ядра GL 3.3 . Хотя, если честно, я бы просто посмотрел спецификации, если вам нужна точная информация. В этих документах много дезинформации. И поскольку они на самом деле не являются вики-страницами, эта информация никогда не исправляется.