minor mesh refactor
This commit is contained in:
@@ -19,13 +19,6 @@ namespace Tyra {
|
|||||||
class MeshBuilderData {
|
class MeshBuilderData {
|
||||||
public:
|
public:
|
||||||
MeshBuilderData();
|
MeshBuilderData();
|
||||||
|
|
||||||
/**
|
|
||||||
* Frames array and materials array will be deallocated, but
|
|
||||||
* data (vert,st, ...) inside it not.
|
|
||||||
* Data ownership is transferred to
|
|
||||||
* the Mesh class.
|
|
||||||
*/
|
|
||||||
~MeshBuilderData();
|
~MeshBuilderData();
|
||||||
|
|
||||||
MeshBuilderFrameData** frames;
|
MeshBuilderFrameData** frames;
|
||||||
|
|||||||
@@ -17,10 +17,6 @@
|
|||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
/**
|
|
||||||
* Data is not deallocated here.
|
|
||||||
* Ownership is moved to Mesh class.
|
|
||||||
*/
|
|
||||||
class MeshBuilderFrameData {
|
class MeshBuilderFrameData {
|
||||||
public:
|
public:
|
||||||
MeshBuilderFrameData();
|
MeshBuilderFrameData();
|
||||||
|
|||||||
@@ -16,10 +16,6 @@
|
|||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
/**
|
|
||||||
* Data is not deallocated here.
|
|
||||||
* Ownership is moved to Mesh class.
|
|
||||||
*/
|
|
||||||
class MeshBuilderMaterialData {
|
class MeshBuilderMaterialData {
|
||||||
public:
|
public:
|
||||||
MeshBuilderMaterialData();
|
MeshBuilderMaterialData();
|
||||||
|
|||||||
@@ -56,13 +56,13 @@ class TyrobjLoader : public Loader {
|
|||||||
const u16& frameIndex, const TyraobjData& inputData,
|
const u16& frameIndex, const TyraobjData& inputData,
|
||||||
MeshBuilderData* outputData);
|
MeshBuilderData* outputData);
|
||||||
void readNormals(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
void readNormals(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
||||||
const TyraobjData& inputData, MeshBuilderData* outputData);
|
MeshBuilderData* outputData);
|
||||||
void readColors(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
void readColors(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
||||||
|
MeshBuilderData* outputData);
|
||||||
|
void readMaterials(TyraobjReadInfo* info, FILE* file,
|
||||||
const TyraobjData& inputData, MeshBuilderData* outputData);
|
const TyraobjData& inputData, MeshBuilderData* outputData);
|
||||||
void readMaterials(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
void readFaces(TyraobjReadInfo* info, FILE* file,
|
||||||
const TyraobjData& inputData, MeshBuilderData* outputData);
|
MeshBuilderData* outputData);
|
||||||
void readFaces(TyraobjReadInfo* info, FILE* file, const u16& frameIndex,
|
|
||||||
const TyraobjData& inputData, MeshBuilderData* outputData);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Tyra
|
} // namespace Tyra
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
||||||
|
#include "debug/debug.hpp"
|
||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
@@ -17,6 +18,8 @@ MeshBuilderData::MeshBuilderData() {
|
|||||||
normalsEnabled = false;
|
normalsEnabled = false;
|
||||||
textureCoordsEnabled = false;
|
textureCoordsEnabled = false;
|
||||||
manyColorsEnabled = false;
|
manyColorsEnabled = false;
|
||||||
|
materials = nullptr;
|
||||||
|
frames = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshBuilderData::~MeshBuilderData() {
|
MeshBuilderData::~MeshBuilderData() {
|
||||||
@@ -44,6 +47,7 @@ void MeshBuilderData::allocate(const u32& framesCount,
|
|||||||
void MeshBuilderData::allocateFrames(const u32& count) {
|
void MeshBuilderData::allocateFrames(const u32& count) {
|
||||||
this->framesCount = count;
|
this->framesCount = count;
|
||||||
|
|
||||||
|
TYRA_ASSERT(frames == nullptr, "Frames are already allocated");
|
||||||
frames = new MeshBuilderFrameData*[count];
|
frames = new MeshBuilderFrameData*[count];
|
||||||
|
|
||||||
for (u32 i = 0; i < count; i++) {
|
for (u32 i = 0; i < count; i++) {
|
||||||
@@ -54,6 +58,7 @@ void MeshBuilderData::allocateFrames(const u32& count) {
|
|||||||
void MeshBuilderData::allocateMaterials(const u32& count) {
|
void MeshBuilderData::allocateMaterials(const u32& count) {
|
||||||
this->materialsCount = count;
|
this->materialsCount = count;
|
||||||
|
|
||||||
|
TYRA_ASSERT(materials == nullptr, "Materials are already allocated");
|
||||||
materials = new MeshBuilderMaterialData*[count];
|
materials = new MeshBuilderMaterialData*[count];
|
||||||
|
|
||||||
for (u32 i = 0; i < count; i++) {
|
for (u32 i = 0; i < count; i++) {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "loaders/3d/builder/mesh_builder_frame_data.hpp"
|
#include "loaders/3d/builder/mesh_builder_frame_data.hpp"
|
||||||
|
#include "debug/debug.hpp"
|
||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
@@ -41,24 +42,28 @@ MeshBuilderFrameData::~MeshBuilderFrameData() {
|
|||||||
|
|
||||||
void MeshBuilderFrameData::allocateTextureCoords(const u32& count) {
|
void MeshBuilderFrameData::allocateTextureCoords(const u32& count) {
|
||||||
if (count == 0) return;
|
if (count == 0) return;
|
||||||
|
TYRA_ASSERT(textureCoords == nullptr, "Texture coords are already allocated");
|
||||||
textureCoordsCount = count;
|
textureCoordsCount = count;
|
||||||
textureCoords = new Vec4[count];
|
textureCoords = new Vec4[count];
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshBuilderFrameData::allocateVertices(const u32& count) {
|
void MeshBuilderFrameData::allocateVertices(const u32& count) {
|
||||||
if (count == 0) return;
|
if (count == 0) return;
|
||||||
|
TYRA_ASSERT(vertices == nullptr, "Vertices are already allocated");
|
||||||
verticesCount = count;
|
verticesCount = count;
|
||||||
vertices = new Vec4[count];
|
vertices = new Vec4[count];
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshBuilderFrameData::allocateNormals(const u32& count) {
|
void MeshBuilderFrameData::allocateNormals(const u32& count) {
|
||||||
if (count == 0) return;
|
if (count == 0) return;
|
||||||
|
TYRA_ASSERT(normals == nullptr, "Normals are already allocated");
|
||||||
normalsCount = count;
|
normalsCount = count;
|
||||||
normals = new Vec4[count];
|
normals = new Vec4[count];
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshBuilderFrameData::allocateColors(const u32& count) {
|
void MeshBuilderFrameData::allocateColors(const u32& count) {
|
||||||
if (count == 0) return;
|
if (count == 0) return;
|
||||||
|
TYRA_ASSERT(colors == nullptr, "Colors are already allocated");
|
||||||
colorsCount = count;
|
colorsCount = count;
|
||||||
colors = new Color[count];
|
colors = new Color[count];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "loaders/3d/builder/mesh_builder_material_data.hpp"
|
#include "loaders/3d/builder/mesh_builder_material_data.hpp"
|
||||||
|
#include "debug/debug.hpp"
|
||||||
|
|
||||||
namespace Tyra {
|
namespace Tyra {
|
||||||
|
|
||||||
@@ -38,6 +39,9 @@ MeshBuilderMaterialData::~MeshBuilderMaterialData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MeshBuilderMaterialData::allocateFaces(const u32& t_count) {
|
void MeshBuilderMaterialData::allocateFaces(const u32& t_count) {
|
||||||
|
TYRA_ASSERT(vertexFaces == nullptr && textureCoordFaces == nullptr &&
|
||||||
|
normalFaces == nullptr && colorFaces == nullptr,
|
||||||
|
"Faces are already allocated");
|
||||||
vertexFaces = new u32[t_count];
|
vertexFaces = new u32[t_count];
|
||||||
textureCoordFaces = new u32[t_count];
|
textureCoordFaces = new u32[t_count];
|
||||||
normalFaces = new u32[t_count];
|
normalFaces = new u32[t_count];
|
||||||
|
|||||||
@@ -135,13 +135,19 @@ void TyrobjLoader::loadFile(FILE* file, const std::string& path,
|
|||||||
} else if (strcmp(lineHeader, "vt") == 0) {
|
} else if (strcmp(lineHeader, "vt") == 0) {
|
||||||
readTextureCoords(&readInfo, file, frameIndex, inputData, outputData);
|
readTextureCoords(&readInfo, file, frameIndex, inputData, outputData);
|
||||||
} else if (strcmp(lineHeader, "vn") == 0) {
|
} else if (strcmp(lineHeader, "vn") == 0) {
|
||||||
readNormals(&readInfo, file, frameIndex, inputData, outputData);
|
readNormals(&readInfo, file, frameIndex, outputData);
|
||||||
} else if (strcmp(lineHeader, "vc") == 0) {
|
} else if (strcmp(lineHeader, "vc") == 0) {
|
||||||
readColors(&readInfo, file, frameIndex, inputData, outputData);
|
readColors(&readInfo, file, frameIndex, outputData);
|
||||||
} else if (strcmp(lineHeader, "usemtl") == 0) {
|
} else if (strcmp(lineHeader, "usemtl") == 0) {
|
||||||
readMaterials(&readInfo, file, frameIndex, inputData, outputData);
|
readInfo.materialsI++;
|
||||||
|
readInfo.faceI = 0;
|
||||||
|
if (frameIndex == 0) {
|
||||||
|
readMaterials(&readInfo, file, inputData, outputData);
|
||||||
|
}
|
||||||
} else if (strcmp(lineHeader, "f") == 0) {
|
} else if (strcmp(lineHeader, "f") == 0) {
|
||||||
readFaces(&readInfo, file, frameIndex, inputData, outputData);
|
if (frameIndex == 0) {
|
||||||
|
readFaces(&readInfo, file, outputData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = fscanf(file, "%s", lineHeader);
|
res = fscanf(file, "%s", lineHeader);
|
||||||
@@ -182,7 +188,6 @@ void TyrobjLoader::readTextureCoords(TyraobjReadInfo* info, FILE* file,
|
|||||||
|
|
||||||
void TyrobjLoader::readNormals(TyraobjReadInfo* info, FILE* file,
|
void TyrobjLoader::readNormals(TyraobjReadInfo* info, FILE* file,
|
||||||
const u16& frameIndex,
|
const u16& frameIndex,
|
||||||
const TyraobjData& inputData,
|
|
||||||
MeshBuilderData* outputData) {
|
MeshBuilderData* outputData) {
|
||||||
Vec4 vector(0.0F, 0.0F, 0.0F, 1.0F);
|
Vec4 vector(0.0F, 0.0F, 0.0F, 1.0F);
|
||||||
fscanf(file, "%f %f %f\n", &vector.x, &vector.y, &vector.z);
|
fscanf(file, "%f %f %f\n", &vector.x, &vector.y, &vector.z);
|
||||||
@@ -191,7 +196,6 @@ void TyrobjLoader::readNormals(TyraobjReadInfo* info, FILE* file,
|
|||||||
|
|
||||||
void TyrobjLoader::readColors(TyraobjReadInfo* info, FILE* file,
|
void TyrobjLoader::readColors(TyraobjReadInfo* info, FILE* file,
|
||||||
const u16& frameIndex,
|
const u16& frameIndex,
|
||||||
const TyraobjData& inputData,
|
|
||||||
MeshBuilderData* outputData) {
|
MeshBuilderData* outputData) {
|
||||||
Color color(128.0F, 128.0F, 128.0F, 128.0F);
|
Color color(128.0F, 128.0F, 128.0F, 128.0F);
|
||||||
fscanf(file, "%f %f %f %f\n", &color.r, &color.g, &color.b, &color.a);
|
fscanf(file, "%f %f %f %f\n", &color.r, &color.g, &color.b, &color.a);
|
||||||
@@ -199,23 +203,18 @@ void TyrobjLoader::readColors(TyraobjReadInfo* info, FILE* file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TyrobjLoader::readMaterials(TyraobjReadInfo* info, FILE* file,
|
void TyrobjLoader::readMaterials(TyraobjReadInfo* info, FILE* file,
|
||||||
const u16& frameIndex,
|
|
||||||
const TyraobjData& inputData,
|
const TyraobjData& inputData,
|
||||||
MeshBuilderData* outputData) {
|
MeshBuilderData* outputData) {
|
||||||
char temp[30];
|
char temp[30];
|
||||||
fscanf(file, "%s\n", temp);
|
fscanf(file, "%s\n", temp);
|
||||||
info->materialsI++;
|
|
||||||
outputData->materials[info->materialsI]->allocateFaces(
|
outputData->materials[info->materialsI]->allocateFaces(
|
||||||
inputData.materialsFaces[info->materialsI]);
|
inputData.materialsFaces[info->materialsI]);
|
||||||
outputData->materials[info->materialsI]->name = temp;
|
outputData->materials[info->materialsI]->name = temp;
|
||||||
info->faceI = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int test123 = 0;
|
int test123 = 0;
|
||||||
|
|
||||||
void TyrobjLoader::readFaces(TyraobjReadInfo* info, FILE* file,
|
void TyrobjLoader::readFaces(TyraobjReadInfo* info, FILE* file,
|
||||||
const u16& frameIndex,
|
|
||||||
const TyraobjData& inputData,
|
|
||||||
MeshBuilderData* outputData) {
|
MeshBuilderData* outputData) {
|
||||||
int* x = new int[9];
|
int* x = new int[9];
|
||||||
fpos_t start;
|
fpos_t start;
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ namespace Tyra {
|
|||||||
DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(data) {
|
DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(data) {
|
||||||
framesCount = data.framesCount;
|
framesCount = data.framesCount;
|
||||||
|
|
||||||
TYRA_ASSERT(framesCount > 1, "Frames count must be greater than 1");
|
TYRA_ERROR(framesCount > 1,
|
||||||
|
"Frames count should be greater than 1 for DynamicMesh! Maybe you "
|
||||||
|
"should use StaticMesh?");
|
||||||
|
|
||||||
frames = new MeshFrame*[framesCount];
|
frames = new MeshFrame*[framesCount];
|
||||||
for (u32 i = 0; i < framesCount; i++) {
|
for (u32 i = 0; i < framesCount; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user