diff --git a/engine/inc/loaders/3d/builder/mesh_builder_data.hpp b/engine/inc/loaders/3d/builder/mesh_builder_data.hpp index 56eee66..1a395b3 100644 --- a/engine/inc/loaders/3d/builder/mesh_builder_data.hpp +++ b/engine/inc/loaders/3d/builder/mesh_builder_data.hpp @@ -19,13 +19,6 @@ namespace Tyra { class MeshBuilderData { public: 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(); MeshBuilderFrameData** frames; diff --git a/engine/inc/loaders/3d/builder/mesh_builder_frame_data.hpp b/engine/inc/loaders/3d/builder/mesh_builder_frame_data.hpp index 5804ce9..60fc4b7 100644 --- a/engine/inc/loaders/3d/builder/mesh_builder_frame_data.hpp +++ b/engine/inc/loaders/3d/builder/mesh_builder_frame_data.hpp @@ -17,10 +17,6 @@ namespace Tyra { -/** - * Data is not deallocated here. - * Ownership is moved to Mesh class. - */ class MeshBuilderFrameData { public: MeshBuilderFrameData(); diff --git a/engine/inc/loaders/3d/builder/mesh_builder_material_data.hpp b/engine/inc/loaders/3d/builder/mesh_builder_material_data.hpp index c18dbfc..ad1f28a 100644 --- a/engine/inc/loaders/3d/builder/mesh_builder_material_data.hpp +++ b/engine/inc/loaders/3d/builder/mesh_builder_material_data.hpp @@ -16,10 +16,6 @@ namespace Tyra { -/** - * Data is not deallocated here. - * Ownership is moved to Mesh class. - */ class MeshBuilderMaterialData { public: MeshBuilderMaterialData(); diff --git a/engine/inc/loaders/3d/tyrobj/tyrobj_loader.hpp b/engine/inc/loaders/3d/tyrobj/tyrobj_loader.hpp index 4f066c5..dc0b02c 100644 --- a/engine/inc/loaders/3d/tyrobj/tyrobj_loader.hpp +++ b/engine/inc/loaders/3d/tyrobj/tyrobj_loader.hpp @@ -56,13 +56,13 @@ class TyrobjLoader : public Loader { const u16& frameIndex, const TyraobjData& inputData, MeshBuilderData* outputData); 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, - const TyraobjData& inputData, MeshBuilderData* outputData); - void readMaterials(TyraobjReadInfo* info, FILE* file, const u16& frameIndex, + MeshBuilderData* outputData); + void readMaterials(TyraobjReadInfo* info, FILE* file, const TyraobjData& inputData, MeshBuilderData* outputData); - void readFaces(TyraobjReadInfo* info, FILE* file, const u16& frameIndex, - const TyraobjData& inputData, MeshBuilderData* outputData); + void readFaces(TyraobjReadInfo* info, FILE* file, + MeshBuilderData* outputData); }; } // namespace Tyra diff --git a/engine/src/loaders/3d/builder/mesh_builder_data.cpp b/engine/src/loaders/3d/builder/mesh_builder_data.cpp index fd719ed..3745a93 100644 --- a/engine/src/loaders/3d/builder/mesh_builder_data.cpp +++ b/engine/src/loaders/3d/builder/mesh_builder_data.cpp @@ -10,6 +10,7 @@ */ #include "loaders/3d/builder/mesh_builder_data.hpp" +#include "debug/debug.hpp" namespace Tyra { @@ -17,6 +18,8 @@ MeshBuilderData::MeshBuilderData() { normalsEnabled = false; textureCoordsEnabled = false; manyColorsEnabled = false; + materials = nullptr; + frames = nullptr; } MeshBuilderData::~MeshBuilderData() { @@ -44,6 +47,7 @@ void MeshBuilderData::allocate(const u32& framesCount, void MeshBuilderData::allocateFrames(const u32& count) { this->framesCount = count; + TYRA_ASSERT(frames == nullptr, "Frames are already allocated"); frames = new MeshBuilderFrameData*[count]; for (u32 i = 0; i < count; i++) { @@ -54,6 +58,7 @@ void MeshBuilderData::allocateFrames(const u32& count) { void MeshBuilderData::allocateMaterials(const u32& count) { this->materialsCount = count; + TYRA_ASSERT(materials == nullptr, "Materials are already allocated"); materials = new MeshBuilderMaterialData*[count]; for (u32 i = 0; i < count; i++) { diff --git a/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp b/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp index 5e22f21..ef892c0 100644 --- a/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp +++ b/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp @@ -10,6 +10,7 @@ */ #include "loaders/3d/builder/mesh_builder_frame_data.hpp" +#include "debug/debug.hpp" namespace Tyra { @@ -41,24 +42,28 @@ MeshBuilderFrameData::~MeshBuilderFrameData() { void MeshBuilderFrameData::allocateTextureCoords(const u32& count) { if (count == 0) return; + TYRA_ASSERT(textureCoords == nullptr, "Texture coords are already allocated"); textureCoordsCount = count; textureCoords = new Vec4[count]; } void MeshBuilderFrameData::allocateVertices(const u32& count) { if (count == 0) return; + TYRA_ASSERT(vertices == nullptr, "Vertices are already allocated"); verticesCount = count; vertices = new Vec4[count]; } void MeshBuilderFrameData::allocateNormals(const u32& count) { if (count == 0) return; + TYRA_ASSERT(normals == nullptr, "Normals are already allocated"); normalsCount = count; normals = new Vec4[count]; } void MeshBuilderFrameData::allocateColors(const u32& count) { if (count == 0) return; + TYRA_ASSERT(colors == nullptr, "Colors are already allocated"); colorsCount = count; colors = new Color[count]; } diff --git a/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp b/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp index abf6c7c..c03ced6 100644 --- a/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp +++ b/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp @@ -10,6 +10,7 @@ */ #include "loaders/3d/builder/mesh_builder_material_data.hpp" +#include "debug/debug.hpp" namespace Tyra { @@ -38,6 +39,9 @@ MeshBuilderMaterialData::~MeshBuilderMaterialData() { } 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]; textureCoordFaces = new u32[t_count]; normalFaces = new u32[t_count]; diff --git a/engine/src/loaders/3d/tyrobj/tyrobj_loader.cpp b/engine/src/loaders/3d/tyrobj/tyrobj_loader.cpp index 0712549..97686d2 100644 --- a/engine/src/loaders/3d/tyrobj/tyrobj_loader.cpp +++ b/engine/src/loaders/3d/tyrobj/tyrobj_loader.cpp @@ -135,13 +135,19 @@ void TyrobjLoader::loadFile(FILE* file, const std::string& path, } else if (strcmp(lineHeader, "vt") == 0) { readTextureCoords(&readInfo, file, frameIndex, inputData, outputData); } else if (strcmp(lineHeader, "vn") == 0) { - readNormals(&readInfo, file, frameIndex, inputData, outputData); + readNormals(&readInfo, file, frameIndex, outputData); } else if (strcmp(lineHeader, "vc") == 0) { - readColors(&readInfo, file, frameIndex, inputData, outputData); + readColors(&readInfo, file, frameIndex, outputData); } 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) { - readFaces(&readInfo, file, frameIndex, inputData, outputData); + if (frameIndex == 0) { + readFaces(&readInfo, file, outputData); + } } res = fscanf(file, "%s", lineHeader); @@ -182,7 +188,6 @@ void TyrobjLoader::readTextureCoords(TyraobjReadInfo* info, FILE* file, void TyrobjLoader::readNormals(TyraobjReadInfo* info, FILE* file, const u16& frameIndex, - const TyraobjData& inputData, MeshBuilderData* outputData) { Vec4 vector(0.0F, 0.0F, 0.0F, 1.0F); 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, const u16& frameIndex, - const TyraobjData& inputData, MeshBuilderData* outputData) { 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); @@ -199,23 +203,18 @@ void TyrobjLoader::readColors(TyraobjReadInfo* info, FILE* file, } void TyrobjLoader::readMaterials(TyraobjReadInfo* info, FILE* file, - const u16& frameIndex, const TyraobjData& inputData, MeshBuilderData* outputData) { char temp[30]; fscanf(file, "%s\n", temp); - info->materialsI++; outputData->materials[info->materialsI]->allocateFaces( inputData.materialsFaces[info->materialsI]); outputData->materials[info->materialsI]->name = temp; - info->faceI = 0; } int test123 = 0; void TyrobjLoader::readFaces(TyraobjReadInfo* info, FILE* file, - const u16& frameIndex, - const TyraobjData& inputData, MeshBuilderData* outputData) { int* x = new int[9]; fpos_t start; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp index 5ce6d92..910250e 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp @@ -18,7 +18,9 @@ namespace Tyra { DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(data) { 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]; for (u32 i = 0; i < framesCount; i++) {