Войти
ПрограммированиеФорумГрафика

Почему у VAO и GL_ARRAY_BUFFER такие дебильные названия? (2 стр)

Страницы: 1 2 3 412 Следующая »
#15
21:30, 22 ноя. 2019

Вроде вполне логичное название, если правильно интерпретировать порядок английских слов: "Объект вершинных массивов".

Great V.
> буфер содержит атрибуты

Так VAO не буфер. Это объект, который описывает, как из разных буферов собирать информацию так, чтоб получались массивы вертексов. То есть, в каком буфере по какому смещению и с каким страйдом фетчить тот или иной атрибут.


#16
22:44, 22 ноя. 2019

Dmitry_Milk
> Так VAO не буфер
Окей, это принимается. Ведь в отличии от буферов его действительно нельзя использовать для хранения произвольной информации.

Но это не меняет ситуацию с названием.
Во первых функция которая выделяет VAO называется glGenVertexArrays, а не glGenVertexArrayObjects. Выходит, мы все же имеет дело с Vertex Array.
А Vertex Array - это "вершинный массив", т.е. термин который вообще ничего не говорит. Для человека который не обладает сакральными знаниями подобное название в лучшем случае будет означать таки "массив вершин", т.е. самый обычный "буфер с вершинами".
Но VAO ведь не сохраняет вершины, он сохраняет описание атрибутов этих вершин. Соответственно, название Vertex Descriptor или Vertex Specification более подходящее.

#17
(Правка: 23:22) 23:21, 22 ноя. 2019

Похоже путаница происходит из-за разночтения термина Array. Как-то повелось (не в OpenGL), что под термином Array иногда стали неявно понимать "однотипные данные, лежащие последовательно в памяти".

В OpenGL же с самого начала (даже когда еще не было буферов в видеопамяти, а только массивы в клиентской памяти) условие "последовательно" не требовалось, т.к. с самого начала явно задавался страйд (шаг в памяти). Данные одного массива могли лежать в памяти как последовательно друг за другом, так и вперемешку с другими данными, в том числе и вперемешку с данными других массивов.

То есть, в OpenGL под термином Array понимается лишь абстракция, которая позволяет обращаться к элементам через индексирование, но скрывает от пользователя расположение в памяти. А последовательная память - это как раз термин Buffer (который фактически char [] в терминах C).

Если помнить про это (что термин Array лишь абстракция про индексированный доступ) то путаница уйдет.

#18
0:43, 23 ноя. 2019

Great V.

переходи на вулкан, критик

#19
1:08, 23 ноя. 2019

Я их-за такого говна на DX ушел и не жалею

#20
1:34, 23 ноя. 2019

Dmitry_Milk
> Если помнить про это
гораздо легче просто не задумыватся на этим

#21
1:36, 23 ноя. 2019

IBets
> Я их-за такого говна на DX ушел и не жалею

это большая проблема ? мну считает что баги куда более важнее

#22
(Правка: 3:19) 3:19, 23 ноя. 2019

Нашли из-за чего шкнить, вы лучше попробуйте вспомнить без мануала, чем отличается glVertexAttribFormat, glVertexAttribPointer и glVertexArrayAttribFormat.

#23
3:38, 23 ноя. 2019

Dimich
> вспомнить без мануала
Там и с мануалом не так просто въехать. :)

> чем отличается glVertexAttribFormat, glVertexAttribPointer и
> glVertexArrayAttribFormat.
Впрочем там все как обычно. Достаточно взглянуть на версии ОГЛ, с которых эти функции в ядре, чтобы понять, какой из вариантов был сделан костылем, а какой после того как поняли, как нужно было.

#24
(Правка: 7:34) 7:32, 23 ноя. 2019

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" встречаемых в разных комбинациях просто выносит мозг почище скучнейшей лекции по сопромату - при этом реально разные комбинации означают вообще разные вещи несмотря на крайнюю семантическую похожесть.

#25
9:21, 23 ноя. 2019

=A=L=X=
> Собственно в названии действительно косяк, т.к. оно реально вводит новичков в
> заблуждение.

так это ... GL для серьёзных дядек, а не школьников

тут все умные, что ж вы не работаете в комитете ?

#26
9:22, 23 ноя. 2019

Дак умных в комитет и не пускают же !
В комитете одна школота сидит !

#27
9:44, 23 ноя. 2019

MrShoor
> прочем там все как обычно. Достаточно взглянуть на версии ОГЛ, с которых эти
> функции в ядре, чтобы понять, какой из вариантов был сделан костылем, а какой
> после того как поняли, как нужно было.

гыгы - это ты не рассказал про  glVertexArrayAttrib{I, L}Format

#28
12:53, 23 ноя. 2019

Какое вам дело до названий? :) Все равно все пишут свои врапперы.

#29
(Правка: 13:44) 13:43, 23 ноя. 2019

Вообще говоря с GL_ARRAY_BUFFER та же фигня.
Как это понимать? Буфер массивов? Или массивный буфер?
Что это вообще должно означать? Все буферы это своего рода массивы (байтов), нифига не понятно.

Страницы: 1 2 3 412 Следующая »
ПрограммированиеФорумГрафика