Массив вершин - это просто некоторые данные в вашей программе (внутри вашего адресного пространства), о которых вы сообщаете OpenGL, предоставляя указатель на них.
Несмотря на то, что они более эффективны, чем указание каждой отдельной вершины в отдельности, они все же имеют проблемы с производительностью.GL должен сделать копию во время вызова DrawElements (или аналогичной функции), потому что это единственный раз, когда можно быть уверенным, что данные действительны (в конце концов, ничто не мешает вам сразу же перезаписать данные).Это означает, что существует существенное препятствие для параллелизма и, следовательно, проблема с производительностью.
Объекты буфера вершин («буферы вершин») - это необработанные блоки данных, которыми вы не владеете, то есть они не находятся в вашем адресепространство.Вы можете скопировать данные в буферный объект с помощью функции Копировать (Под) данные или временно сопоставив их с вашим адресным пространством.Как только вы удалите буфер, он больше не будет принадлежать вам.Огромным преимуществом является то, что теперь GL может решить, что с ним делать и когда его загружать.Он знает, что данные будут действительны, потому что вы не можете получить к ним доступ.Это значительно упрощает параллелизм CPU / GPU.
Объекты массива вершин немного ошибочны.В них нет вершин или массивов.Они являются просто своего рода «блоком описания состояния», который инкапсулирует привязки одного или нескольких объектов буфера вершин (включая любые вызовы VertexAttribPointer).Как таковые, они оба являются удобной функцией и несколько более эффективны (меньше вызовов функций), но не являются строго необходимыми.Вы можете делать все, что делает ВАО, тоже вручную.