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);
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].y, sizeof(float), 1, fp);
@ -33,9 +34,10 @@ void WriteChunk(NormalsChunk *chunk, FILE *fp)
fputs("NRL", 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].y, sizeof(float), 1, fp);
@ -51,9 +53,10 @@ void WriteChunk(TexCoordsChunk *chunk, FILE *fp)
fputs("TXT", 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].y, sizeof(float), 1, fp);
@ -68,9 +71,10 @@ void WriteChunk(MaterialsChunk *chunk, FILE *fp)
fputs("MTL", 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];
@ -112,9 +116,10 @@ void WriteChunk(TrianglesChunk *chunk, FILE *fp)
fputs("TRI", 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];

View file

@ -3,30 +3,24 @@
#include "../common.h"
#include "../assets/material.h"
#include <vector>
struct MaterialsChunk
{
uint32_t count;
Material *materials;
std::vector<Material> materials;
MaterialsChunk()
uint32_t GetCount()
{
count = 0;
materials = NULL;
}
~MaterialsChunk()
{
SAFE_DELETE_ARRAY(materials);
return materials.size();
}
uint32_t GetSize()
{
if (count == 0)
if (materials.size() == 0)
return 0;
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 += sizeof(float) * 4; // ambient

View file

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

View file

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

View file

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

View file

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