minor mesh refactor
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
/**
|
||||
* Data is not deallocated here.
|
||||
* Ownership is moved to Mesh class.
|
||||
*/
|
||||
class MeshBuilderFrameData {
|
||||
public:
|
||||
MeshBuilderFrameData();
|
||||
|
||||
@@ -16,10 +16,6 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
/**
|
||||
* Data is not deallocated here.
|
||||
* Ownership is moved to Mesh class.
|
||||
*/
|
||||
class MeshBuilderMaterialData {
|
||||
public:
|
||||
MeshBuilderMaterialData();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user