added helper method to each chunk struct to calculate it's own size (that is, the size to be written out to mesh files)

This commit is contained in:
gered 2011-04-24 18:48:00 -04:00
parent 80a4c87b92
commit 4d6a8b3c0d
5 changed files with 76 additions and 0 deletions

View file

@ -21,6 +21,26 @@ struct MaterialsChunk
{
SAFE_DELETE_ARRAY(materials);
}
size_t GetSize()
{
if (count == 0)
return 0;
size_t size = sizeof(uint32_t);
for (uint32_t i = 0; i < count; ++i)
{
size += materials[i].name.length() + 1; // include null terminator
size += sizeof(float) * 4; // ambient
size += sizeof(float) * 4; // diffuse
size += sizeof(float) * 4; // specular
size += sizeof(float) * 4; // emissive
size += sizeof(float); // shininess
size += sizeof(float); // opacity
}
return size;
}
};
#endif

View file

@ -21,6 +21,19 @@ struct NormalsChunk
{
SAFE_DELETE_ARRAY(normals);
}
size_t GetSize()
{
if (count == 0)
return 0;
size_t size = sizeof(uint32_t);
size +=
(sizeof(float) * 3) // x, y, z
* count;
return size;
}
};
#endif

View file

@ -21,6 +21,19 @@ struct TexCoordsChunk
{
SAFE_DELETE_ARRAY(texCoords);
}
size_t GetSize()
{
if (count == 0)
return 0;
size_t size = sizeof(uint32_t);
size +=
(sizeof(float) * 2) // u, v
* count;
return size;
}
};
#endif

View file

@ -21,6 +21,23 @@ struct TrianglesChunk
{
SAFE_DELETE_ARRAY(triangles);
}
size_t GetSize()
{
if (count == 0)
return 0;
size_t size = sizeof(uint32_t);
size +=
(
(sizeof(uint32_t) * 3) // vertex indices
+ (sizeof(uint32_t) * 3) // normal indices
+ (sizeof(uint32_t) * 3) // texcoord indices
+ sizeof(uint32_t) // material index
) * count;
return size;
}
};
#endif

View file

@ -21,6 +21,19 @@ struct VerticesChunk
{
SAFE_DELETE_ARRAY(vertices);
}
size_t GetSize()
{
if (count == 0)
return 0;
size_t size = sizeof(uint32_t);
size +=
(sizeof(float) * 3) // x, y, z
* count;
return size;
}
};
#endif