OpenGL VAO + несколько VBO - теория - пакетный рендер - PullRequest
0 голосов
/ 17 января 2019

Я думаю о настройке моего текущего пакетного рендера. Сейчас я запускаю цикл с такой командой:

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?

Надеюсь, что это как-то ... объясните "проблему".

...