Вроде вполне логичное название, если правильно интерпретировать порядок английских слов: "Объект вершинных массивов".
Great V.
> буфер содержит атрибуты
Так VAO не буфер. Это объект, который описывает, как из разных буферов собирать информацию так, чтоб получались массивы вертексов. То есть, в каком буфере по какому смещению и с каким страйдом фетчить тот или иной атрибут.
Dmitry_Milk
> Так VAO не буфер
Окей, это принимается. Ведь в отличии от буферов его действительно нельзя использовать для хранения произвольной информации.
Но это не меняет ситуацию с названием.
Во первых функция которая выделяет VAO называется glGenVertexArrays, а не glGenVertexArrayObjects. Выходит, мы все же имеет дело с Vertex Array.
А Vertex Array - это "вершинный массив", т.е. термин который вообще ничего не говорит. Для человека который не обладает сакральными знаниями подобное название в лучшем случае будет означать таки "массив вершин", т.е. самый обычный "буфер с вершинами".
Но VAO ведь не сохраняет вершины, он сохраняет описание атрибутов этих вершин. Соответственно, название Vertex Descriptor или Vertex Specification более подходящее.
Похоже путаница происходит из-за разночтения термина Array. Как-то повелось (не в OpenGL), что под термином Array иногда стали неявно понимать "однотипные данные, лежащие последовательно в памяти".
В OpenGL же с самого начала (даже когда еще не было буферов в видеопамяти, а только массивы в клиентской памяти) условие "последовательно" не требовалось, т.к. с самого начала явно задавался страйд (шаг в памяти). Данные одного массива могли лежать в памяти как последовательно друг за другом, так и вперемешку с другими данными, в том числе и вперемешку с данными других массивов.
То есть, в OpenGL под термином Array понимается лишь абстракция, которая позволяет обращаться к элементам через индексирование, но скрывает от пользователя расположение в памяти. А последовательная память - это как раз термин Buffer (который фактически char [] в терминах C).
Если помнить про это (что термин Array лишь абстракция про индексированный доступ) то путаница уйдет.
Great V.
переходи на вулкан, критик
Я их-за такого говна на DX ушел и не жалею
Dmitry_Milk
> Если помнить про это
гораздо легче просто не задумыватся на этим
IBets
> Я их-за такого говна на DX ушел и не жалею
это большая проблема ? мну считает что баги куда более важнее
Нашли из-за чего шкнить, вы лучше попробуйте вспомнить без мануала, чем отличается glVertexAttribFormat, glVertexAttribPointer и glVertexArrayAttribFormat.
Dimich
> вспомнить без мануала
Там и с мануалом не так просто въехать. :)
> чем отличается glVertexAttribFormat, glVertexAttribPointer и
> glVertexArrayAttribFormat.
Впрочем там все как обычно. Достаточно взглянуть на версии ОГЛ, с которых эти функции в ядре, чтобы понять, какой из вариантов был сделан костылем, а какой после того как поняли, как нужно было.
Dmitry_Milk
> То есть, в OpenGL под термином Array понимается лишь абстракция, которая
> позволяет обращаться к элементам через индексирование
Да не, array в GL означало то же самое что и везде: https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glVe… exPointer.xml
glVertexPointer — define an array of vertex data
Собственно в названии действительно косяк, т.к. оно реально вводит новичков в заблуждение.
Вообще дизориентация от названий тех или иных сущностей - типичная для OpenGL вещь.
Немного прояснить ситуацию могло бы название которое действительно переводилось бы как:
> "Объект вершинных массивов".
Т.е. Vertex ArrrayS Object. При таком названии уже действительно в голове могло бы щёлкнуть, что речь идёт про какой то набор массивов, а не про один массив неких вершинных данных. Это уже бы направить могло на мысль, что если массивов целый набор, то наверное речь и идёт про те самые *Pointer, но это тоже нечётко.
Так что то что названия трудные и неинтуитивные - да, согласен с топиккастером. Плохо тут еще то, что когда впервые читаешь доки да еще на английском постоянная каша из одних и тех же слов "vertex", "array", "buffer" и "object" встречаемых в разных комбинациях просто выносит мозг почище скучнейшей лекции по сопромату - при этом реально разные комбинации означают вообще разные вещи несмотря на крайнюю семантическую похожесть.
=A=L=X=
> Собственно в названии действительно косяк, т.к. оно реально вводит новичков в
> заблуждение.
так это ... GL для серьёзных дядек, а не школьников
тут все умные, что ж вы не работаете в комитете ?
Дак умных в комитет и не пускают же !
В комитете одна школота сидит !
MrShoor
> прочем там все как обычно. Достаточно взглянуть на версии ОГЛ, с которых эти
> функции в ядре, чтобы понять, какой из вариантов был сделан костылем, а какой
> после того как поняли, как нужно было.
гыгы - это ты не рассказал про glVertexArrayAttrib{I, L}Format
Какое вам дело до названий? :) Все равно все пишут свои врапперы.
Вообще говоря с GL_ARRAY_BUFFER та же фигня.
Как это понимать? Буфер массивов? Или массивный буфер?
Что это вообще должно означать? Все буферы это своего рода массивы (байтов), нифига не понятно.
Тема в архиве.