OpenGL буферы. Страйд против плотно упакованных
Каковы плюсы и минусы использования буферов вершин по сравнению с плотно упакованными буферами для каждого атрибута? Я имею в виду, например:
Страйд: xyzrgb xyzrgb xyzrgb
Tight: xyzxyzxyz rgbrgbrgb
На первый взгляд может показаться, что вы легко можете изменить размер при использовании шага, но содержимое буфера вершин удаляется, когда вы перераспределяете его с помощью glBufferData.
Мне кажется, что лучше использовать узкую модель, так как позиция, цвет и текстовые координаты могут поступать из разных массивов в локальной памяти, и поскольку нет функции пошаговых буферных данных, вы должны скопировать все массивы в буфер с чередованием перед загрузкой или использовать один glBufferSubData за вершину за атрибут (ужасная идея, я думаю).
Кажется, существует распространенная практика использования чередующегося буфера (шага). Это почему? Что-то, чего мне здесь не хватает?
1 ответ
Я думаю, что обычно есть чередующийся буфер, потому что его легче создать (включает меньше буферов, более интуитивно понятен) и, предположительно, быстрее (из-за шаблонов доступа к памяти или чего-то подобного), большое преимущество плотной упаковки - возможность обновления только данные, которые нужно обновить, что приводит к более быстрому обновлению. Большинство учебных пособий по OpenGL рассказывают о VBO, рисуя статические сетки, которые не нуждаются в обновлениях и поэтому получают выгоду от чередующихся данных.
Общее мнение выглядит следующим образом: чередовать как можно больше, разбивать при необходимости.
См.: Как представление с чередованием вершин помогает производительности?
И: увеличение производительности при использовании чередующихся массивов атрибутов в OpenGL4.0
Смотрите также: http://www.opengl.org/wiki/Vertex_Specification_Best_Practices
Который прямо заявляет:
"То, насколько чередующиеся атрибуты помогают в производительности рендеринга, не совсем понятно. Профилирующие данные необходимы. Чередующиеся данные вершин могут занимать больше места, чем не чередующиеся из-за необходимости выравнивания".