Мне нужно записать формат файла, который записывает данные в файл и может прочитать их обратно.
Он должен иметь возможность читать данные довольно быстро, что должно включать в себя разбивку большого блока данных на std::vector
(поскольку их хранение всегда осуществляется непрерывно).
Однако при написании файла я понятия не имею, как применять ограничения на выравнивание и размер целых и других типов.
Как это сделать? Я использую gcc на Buntu Linux на Q6600 (x86).
Просто в качестве примера:
struct Vertex
{
float point [3];
float normal [3];
float texcoord [2];
}
Позже данные сохраняются в std::vector<Vertex>
. Я думал об использовании __attribute__
и его упаковке / выравнивании, чтобы он был более переносимым на разных платформах.
редактирование:
Я уже сделал спецификацию и собираюсь ее использовать. Самые большие биты данных - это вершины и индексы, поэтому они будут читаться как большие блоки, например (одна часть большей спецификации):
VertexGroup - это группа вершин, которые имеют общую характеристику. Они могут содержать только один материал за раз, поэтому их должно быть много в сетке.
<uint> thisid # Of this VertexGroup
<string> name
<uint> materialId # A material
<uint> vertexCount
for (vetexCount):
<3xfloat> point
<3xfloat> normal
<2xfloat> texcoord
<uint> triangleCount
for (triangleCount):
<3xuint> indices