Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.136.170] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Использую Opengl последних версий, программирую на Delphi. Рисую данные, используя один вершинный буфер. И вот нужно мне на лету поменять буфер. Делаю следующее: {a} glDisableVertexAttribArray(g_vertexLocation); {b} glBindBuffer(GL_ARRAY_BUFFER, g_vertices_2); {c} glVertexAttribPointer(g_vertexLocation, 4, GL_FLOAT, false, 0, 0); {d} glEnableVertexAttribArray(g_vertexLocation); Всё прекрасно рисуется с новым буфером g_vertices_2. До этого рисовал буфер g_vertices_1, который тоже вначале был связан с шейдерной переменной g_vertexLocation с помощью {1} glBindBuffer(GL_ARRAY_BUFFER, g_vertices_1); {2} glVertexAttribPointer(g_vertexLocation, 4, GL_FLOAT, false, 0, 0); {3} glEnableVertexAttribArray(g_vertexLocation); Потому и возникает вопрос: нужно ли снова вызывать строку {c} кода или достаточно только {d}? И вообще где реально происходит связывание нового буфера с соответствующей шейдерной переменной? Уже обнаружил, что всё будет работать и без строчки {a}. Но хотелось бы знать как надо по науке? |
Сообщ.
#2
,
|
|
|
Ещё вопрос новичка. Вот создали мы много GL_ARRAY_BUFFER буфферов, наполнили их данными. А с переменными вершинного шейдера связали только несколько из них.
Что происходит в процессе glDraw... с остальными вершинными буферами, которые не связаны ни с какими переменными вершинного шейдера? Надеюсь они не передаются в конвейере (без какого либо действия, просто в потоке), также как и задействованные буферы? Было бы странно конечно. Просто слышал, но возможно неправильно понял, что ВСЕ буфферы связанные с текущим VAO будут участвовать в конвейере, даже вхолостую, если шейдер их не использует? Надеюсь неправда, так как даже и размеры у всех буфферов могут быть очень разные. |
Сообщ.
#3
,
|
|
|
Цитата Но хотелось бы знать как надо по науке? По науке, говорят, нужно сливать все данные в один буфер, ну или в два, статический и динамический. http://public.closedcircles.com/posts/gdc-...rhead-in-opengl Менее экстремальный вариант - манипуляции с VAO, если я правильно понял, использование своего VAO для каждого формата вершин быстрее, чем перенастройка одного. http://www.openglsuperbible.com/2013/12/09...ay-performance/ |