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);
|
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];
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue