Я экспериментирую с рендерингом мира, подобного Minecraft, в OpenGL. Мир разделен на куски (каждый из них содержит N^3 блока), и эти куски получают каждый кадр.GL_ARB_vertex_attrib_binding и индексированный чертеж
В настоящее время я использую один VAO за кусок. Я всегда думал, что это немного странно, поскольку каждый кусок использует тот же формат вершин - почему я не могу использовать один VAO, а затем рисовать каждый кусок, изменяя привязки буфера индекса и вершин?
Недавно я натолкнулся на расширение GL_ARB_vertex_attrib_binding, которое находится в ядре 4.3 и, похоже, решает эту проблему - привязки VAO и VBO теперь могут быть разделены. Но нет никаких упоминаний о привязках буферов индекса, которые все еще являются частью состояния VAO, что делает расширение бесполезным с индексированным рендерингом. Единственное, о чем я могу думать, это обновление содержимого связанного индексного буфера для каждого изменения привязки буфера и вершинного буфера при рендеринге, но это мало смысла.
Мой вопрос в том, что я понимаю, что расширение делает правильно? Если я это сделаю, есть ли другой метод, который я могу использовать, чтобы избежать использования VAO в каждом блоке без слияния буферов индексов per-chunk в один большой IBO (так как это могло бы затруднить управление потоком пакетов) ?
Оказывается, я был в замешательстве. Я думал, что, поскольку привязка IBO является частью состояния VAO (почему?), Она «заблокирована» и не может быть изменена. С вашей помощью и прочитав другие ответы, я наконец понял отношения между VAO, VBOs и IBOs, теперь моя реализация одного VAO работает так, как должна. Очень подробный ответ, большое спасибо (за подсказку производительности тоже)! – yzsolt