use std::vector instead of manually managing arrays for repeated chunk data
This commit is contained in:
parent
35d36ccc5a
commit
9debf26d81
|
@ -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];
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Reference in a new issue