use std::vector instead of manually managing arrays for repeated chunk data

This commit is contained in:
gered 2011-04-24 19:30:07 -04:00
parent 35d36ccc5a
commit 9debf26d81
6 changed files with 45 additions and 70 deletions

View file

@ -15,9 +15,10 @@ void WriteChunk(VerticesChunk *chunk, FILE *fp)
fputs("VTX", fp); fputs("VTX", fp);
fwrite(&size, 4, 1, fp); fwrite(&size, 4, 1, fp);
fwrite(&chunk->count, 4, 1, fp); uint32_t count = chunk->GetCount();
fwrite(&count, 4, 1, fp);
for (uint32_t i = 0; i < chunk->count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
fwrite(&chunk->vertices[i].x, sizeof(float), 1, fp); fwrite(&chunk->vertices[i].x, sizeof(float), 1, fp);
fwrite(&chunk->vertices[i].y, sizeof(float), 1, fp); fwrite(&chunk->vertices[i].y, sizeof(float), 1, fp);
@ -33,9 +34,10 @@ void WriteChunk(NormalsChunk *chunk, FILE *fp)
fputs("NRL", fp); fputs("NRL", fp);
fwrite(&size, 4, 1, fp); fwrite(&size, 4, 1, fp);
fwrite(&chunk->count, 4, 1, fp); uint32_t count = chunk->GetCount();
fwrite(&count, 4, 1, fp);
for (uint32_t i = 0; i < chunk->count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
fwrite(&chunk->normals[i].x, sizeof(float), 1, fp); fwrite(&chunk->normals[i].x, sizeof(float), 1, fp);
fwrite(&chunk->normals[i].y, sizeof(float), 1, fp); fwrite(&chunk->normals[i].y, sizeof(float), 1, fp);
@ -51,9 +53,10 @@ void WriteChunk(TexCoordsChunk *chunk, FILE *fp)
fputs("TXT", fp); fputs("TXT", fp);
fwrite(&size, 4, 1, fp); fwrite(&size, 4, 1, fp);
fwrite(&chunk->count, 4, 1, fp); uint32_t count = chunk->GetCount();
fwrite(&count, 4, 1, fp);
for (uint32_t i = 0; i < chunk->count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
fwrite(&chunk->texCoords[i].x, sizeof(float), 1, fp); fwrite(&chunk->texCoords[i].x, sizeof(float), 1, fp);
fwrite(&chunk->texCoords[i].y, sizeof(float), 1, fp); fwrite(&chunk->texCoords[i].y, sizeof(float), 1, fp);
@ -68,9 +71,10 @@ void WriteChunk(MaterialsChunk *chunk, FILE *fp)
fputs("MTL", fp); fputs("MTL", fp);
fwrite(&size, 4, 1, fp); fwrite(&size, 4, 1, fp);
fwrite(&chunk->count, 4, 1, fp); uint32_t count = chunk->GetCount();
fwrite(&count, 4, 1, fp);
for (uint32_t i = 0; i < chunk->count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
Material *m = &chunk->materials[i]; Material *m = &chunk->materials[i];
@ -112,9 +116,10 @@ void WriteChunk(TrianglesChunk *chunk, FILE *fp)
fputs("TRI", fp); fputs("TRI", fp);
fwrite(&size, 4, 1, fp); fwrite(&size, 4, 1, fp);
fwrite(&chunk->count, 4, 1, fp); uint32_t count = chunk->GetCount();
fwrite(&count, 4, 1, fp);
for (uint32_t i = 0; i < chunk->count; ++i) for (uint32_t i = 0; i < count; ++i)
{ {
Triangle *t = &chunk->triangles[i]; Triangle *t = &chunk->triangles[i];

View file

@ -3,30 +3,24 @@
#include "../common.h" #include "../common.h"
#include "../assets/material.h" #include "../assets/material.h"
#include <vector>
struct MaterialsChunk struct MaterialsChunk
{ {
uint32_t count; std::vector<Material> materials;
Material *materials;
MaterialsChunk() uint32_t GetCount()
{ {
count = 0; return materials.size();
materials = NULL;
}
~MaterialsChunk()
{
SAFE_DELETE_ARRAY(materials);
} }
uint32_t GetSize() uint32_t GetSize()
{ {
if (count == 0) if (materials.size() == 0)
return 0; return 0;
uint32_t size = sizeof(uint32_t); uint32_t size = sizeof(uint32_t);
for (uint32_t i = 0; i < count; ++i) for (uint32_t i = 0; i < materials.size(); ++i)
{ {
size += materials[i].name.length() + 1; // include null terminator size += materials[i].name.length() + 1; // include null terminator
size += sizeof(float) * 4; // ambient size += sizeof(float) * 4; // ambient

View file

@ -3,32 +3,26 @@
#include "../common.h" #include "../common.h"
#include "../geometry/vector3.h" #include "../geometry/vector3.h"
#include <vector>
struct NormalsChunk struct NormalsChunk
{ {
uint32_t count; std::vector<Vector3> normals;
Vector3 *normals;
NormalsChunk() uint32_t GetCount()
{ {
count = 0; return normals.size();
normals = NULL;
}
~NormalsChunk()
{
SAFE_DELETE_ARRAY(normals);
} }
uint32_t GetSize() uint32_t GetSize()
{ {
if (count == 0) if (normals.size() == 0)
return 0; return 0;
uint32_t size = sizeof(uint32_t); uint32_t size = sizeof(uint32_t);
size += size +=
(sizeof(float) * 3) // x, y, z (sizeof(float) * 3) // x, y, z
* count; * normals.size();
return size; return size;
} }

View file

@ -3,32 +3,26 @@
#include "../common.h" #include "../common.h"
#include "../geometry/vector2.h" #include "../geometry/vector2.h"
#include <vector>
struct TexCoordsChunk struct TexCoordsChunk
{ {
uint32_t count; std::vector<Vector2> texCoords;
Vector2 *texCoords;
TexCoordsChunk() uint32_t GetCount()
{ {
count = 0; return texCoords.size();
texCoords = NULL;
}
~TexCoordsChunk()
{
SAFE_DELETE_ARRAY(texCoords);
} }
uint32_t GetSize() uint32_t GetSize()
{ {
if (count == 0) if (texCoords.size() == 0)
return 0; return 0;
uint32_t size = sizeof(uint32_t); uint32_t size = sizeof(uint32_t);
size += size +=
(sizeof(float) * 2) // u, v (sizeof(float) * 2) // u, v
* count; * texCoords.size();
return size; return size;
} }

View file

@ -3,26 +3,20 @@
#include "../common.h" #include "../common.h"
#include "../geometry/triangle.h" #include "../geometry/triangle.h"
#include <vector>
struct TrianglesChunk struct TrianglesChunk
{ {
uint32_t count; std::vector<Triangle> triangles;
Triangle *triangles;
TrianglesChunk() uint32_t GetCount()
{ {
count = 0; return triangles.size();
triangles = NULL;
}
~TrianglesChunk()
{
SAFE_DELETE_ARRAY(triangles);
} }
uint32_t GetSize() uint32_t GetSize()
{ {
if (count == 0) if (triangles.size() == 0)
return 0; return 0;
uint32_t size = sizeof(uint32_t); uint32_t size = sizeof(uint32_t);
@ -32,7 +26,7 @@ struct TrianglesChunk
+ (sizeof(uint32_t) * 3) // normal indices + (sizeof(uint32_t) * 3) // normal indices
+ (sizeof(uint32_t) * 3) // texcoord indices + (sizeof(uint32_t) * 3) // texcoord indices
+ sizeof(uint32_t) // material index + sizeof(uint32_t) // material index
) * count; ) * triangles.size();
return size; return size;
} }

View file

@ -3,32 +3,26 @@
#include "../common.h" #include "../common.h"
#include "../geometry/vector3.h" #include "../geometry/vector3.h"
#include <vector>
struct VerticesChunk struct VerticesChunk
{ {
uint32_t count; std::vector<Vector3> vertices;
Vector3 *vertices;
VerticesChunk() uint32_t GetCount()
{ {
count = 0; return vertices.size();
vertices = NULL;
}
~VerticesChunk()
{
SAFE_DELETE_ARRAY(vertices);
} }
uint32_t GetSize() uint32_t GetSize()
{ {
if (count == 0) if (vertices.size() == 0)
return 0; return 0;
uint32_t size = sizeof(uint32_t); uint32_t size = sizeof(uint32_t);
size += size +=
(sizeof(float) * 3) // x, y, z (sizeof(float) * 3) // x, y, z
* count; * vertices.size();
return size; return size;
} }