Предположим, у меня есть следующая упрощенная структура в формате AoSoA для представления вершины или точки:
struct VertexData
{
float px[4]; // position x
float py[4]; // position y
};
То есть каждый экземпляр VertexData
хранит 4 вершины. Почти все примеры OpenGL, которые я видел, используют традиционный макет AoS, но это не вариант для меня. Я не могу изменить фактические структуры, и я также хотел бы избежать преобразования данных в формат AoS перед рендерингом.
Итак, можно ли дать OpenGL команду читать данные вершин, когда данные организованы так? Кстати, и если да, то какие функции GL я должен посмотреть? Проблема, на мой взгляд, состоит в том, чтобы заставить OpenGL осознать тот факт, что VertexData.px[i]
связан с VertexData.py[i]
, и эти два значения должны образовывать вершину / точку.
Пояснение 1 : В конце будет массив VertexData
, например: std::vector<VertexData>
. Тогда размер std::vector
будет total number of vertices / 4
.
Пояснение 2 : AoSoA = Массив структуры массивов.
Обновление : См. Как рисовать вершины, которые хранятся в SSBO? о том, как рисовать вершины, которые хранятся в SSBO в формате AoSoA.