OpenGL VAO + несколько VBO - теория - пакетный рендер
Я думаю о настройке моего текущего рендера. В настоящее время я запускаю цикл с такой командой:
shader->setUniformValue("mvp_matrix", matrix * geo[x].geoMatrix);
glDrawElementsBaseVertex(GL_TRIANGLES, meshIndicesCountList[x], GL_UNSIGNED_INT, (const GLvoid *) (skip * sizeof(unsigned int)), offsetVertex);
По сути, у меня есть 1 ОГРОМНОЕ VBO, или больше, как 3 (вершина / нормали / индексы), и я использую 1 VAO, чтобы связать все это и сделать. Текущий рендер также работает на идее 1 материал = список сеток в 1 vao/3 VBOS(vert/norm/indexes).
Прекрасно работает, но сейчас я хочу создать вектор, в котором каждый VBO будет иметь максимум 500 тыс. Индексов. Идея состоит в том, чтобы разделить 1 большой буфер на несколько меньших, так что если пользователь меняет материал, мне не нужно перестраивать весь массивный VBO, а только один из меньших. Скажем, 100 миллионов полигонов, 50 тысяч объектов. Может потребоваться время, чтобы восстановить... Я думаю, что я измерил это, это было несколько секунд.
Итак, вопрос в том, что с помощью команды, которую я использую для запуска вышеуказанного цикла, рисуем объекты. Могу ли я как-то все еще использовать его для рисования саб VBO как-то? Приведенная выше команда задает начальную точку смещения / вершины каждого элемента в VBO, но я не вижу способа указать, какой VBO следует использовать, если я связываю несколько VBO под 1 VAO. Или, возможно, мне нужно иметь 1 VAO на 1 список VBO (или структуру, содержащую все VBO), а затем связать каждый VBO в цикле и затем вызвать draw? Я просто немного волнуюсь, что с 10 тыс. Связок VBO я бы потерял производительность, и не получил бы большого ускорения при замене всего VBO?
Надеюсь, что это как-то... объяснить "проблему".