mesh refactor 2
This commit is contained in:
+2
-6
@@ -1,17 +1,13 @@
|
||||
------------ Tyra's v2.0 roadmap to publish on GitHub ------------
|
||||
- [General] Znalezc problem w loaderze/ach
|
||||
- [General] Assert czy ramki w obj maja taka sama ilosc danych
|
||||
- [General] Clip glitch na tutorial01
|
||||
- [General] Rename builder2
|
||||
- [Obj] soldier_000001
|
||||
- [General] vec3/vec4/m4x4 functions from ms
|
||||
- [General] wszystkie new M4x4 i = M4x4 na M4x4::Identity
|
||||
- [General] std::vector in mesh instead of array**
|
||||
- [General] Allow to edit all data from mesh/texture
|
||||
- [General] odpalic de_dust2, doszlifowac guard band
|
||||
- [General] manycolor -> lightmap
|
||||
- [General] rename invertT -> invertY
|
||||
- [General] ładować ambient i wrzucać do material. Zmienic nazwe na ambient
|
||||
- [General] wszystkie new M4x4 i = M4x4 na M4x4::Identity
|
||||
- [General] odpalic de_dust2, doszlifowac guard band
|
||||
|
||||
- [General] USB test
|
||||
- [General] Tyra version, render it on start
|
||||
|
||||
+5
-5
@@ -12,7 +12,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "./mesh_builder2_material_data.hpp"
|
||||
#include "./mesh_builder_material_data.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
@@ -21,12 +21,12 @@ namespace Tyra {
|
||||
* All dynamic data ownership is moved to mesh class, so
|
||||
* verts, coords.. are not deallocated!
|
||||
*/
|
||||
class MeshBuilder2Data {
|
||||
class MeshBuilderData {
|
||||
public:
|
||||
MeshBuilder2Data();
|
||||
~MeshBuilder2Data();
|
||||
MeshBuilderData();
|
||||
~MeshBuilderData();
|
||||
|
||||
std::vector<MeshBuilder2MaterialData*> materials;
|
||||
std::vector<MeshBuilderMaterialData*> materials;
|
||||
|
||||
bool textureCoordsEnabled, normalsEnabled, lightMapEnabled;
|
||||
};
|
||||
+5
-5
@@ -13,17 +13,17 @@
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "./mesh_builder2_material_frame_data.hpp"
|
||||
#include "./mesh_builder_material_frame_data.hpp"
|
||||
#include "renderer/models/color.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MeshBuilder2MaterialData {
|
||||
class MeshBuilderMaterialData {
|
||||
public:
|
||||
MeshBuilder2MaterialData();
|
||||
~MeshBuilder2MaterialData();
|
||||
MeshBuilderMaterialData();
|
||||
~MeshBuilderMaterialData();
|
||||
|
||||
std::vector<MeshBuilder2MaterialFrameData*> frames;
|
||||
std::vector<MeshBuilderMaterialFrameData*> frames;
|
||||
std::string name;
|
||||
Color ambient;
|
||||
};
|
||||
+3
-3
@@ -17,10 +17,10 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MeshBuilder2MaterialFrameData {
|
||||
class MeshBuilderMaterialFrameData {
|
||||
public:
|
||||
MeshBuilder2MaterialFrameData();
|
||||
~MeshBuilder2MaterialFrameData();
|
||||
MeshBuilderMaterialFrameData();
|
||||
~MeshBuilderMaterialFrameData();
|
||||
|
||||
u32 count;
|
||||
Vec4 *vertices, *textureCoords, *normals;
|
||||
@@ -11,7 +11,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../loader.hpp"
|
||||
#include "../builder2/mesh_builder2_data.hpp"
|
||||
#include "../builder/mesh_builder_data.hpp"
|
||||
#include <string>
|
||||
|
||||
namespace Tyra {
|
||||
@@ -22,11 +22,11 @@ class MD2Loader : public Loader {
|
||||
MD2Loader();
|
||||
~MD2Loader();
|
||||
|
||||
MeshBuilder2Data* load(const char* fullpath, const float& scale,
|
||||
const bool& invertT);
|
||||
MeshBuilderData* load(const char* fullpath, const float& scale,
|
||||
const bool& invertT);
|
||||
|
||||
inline MeshBuilder2Data* load(const std::string& fullpath, const float& scale,
|
||||
const bool& invertT) {
|
||||
inline MeshBuilderData* load(const std::string& fullpath, const float& scale,
|
||||
const bool& invertT) {
|
||||
return load(fullpath.c_str(), scale, invertT);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../loader.hpp"
|
||||
#include "../builder2/mesh_builder2_data.hpp"
|
||||
#include "../builder/mesh_builder_data.hpp"
|
||||
#include <string>
|
||||
#include "renderer/models/color.hpp"
|
||||
#include "loaders/3d/obj_loader/tiny_obj_loader.hpp"
|
||||
@@ -25,27 +25,27 @@ class ObjLoader : public Loader {
|
||||
~ObjLoader();
|
||||
|
||||
/** Load multiple obj files (dynamic) */
|
||||
MeshBuilder2Data* load(const char* fullpath, const u16& count,
|
||||
const float& scale, const bool& invertT);
|
||||
MeshBuilderData* load(const char* fullpath, const u16& count,
|
||||
const float& scale, const bool& invertT);
|
||||
|
||||
inline MeshBuilder2Data* load(const std::string& fullpath, const u16& count,
|
||||
const float& scale, const bool& invertT) {
|
||||
inline MeshBuilderData* load(const std::string& fullpath, const u16& count,
|
||||
const float& scale, const bool& invertT) {
|
||||
return load(fullpath.c_str(), count, scale, invertT);
|
||||
}
|
||||
|
||||
private:
|
||||
void addOutputMaterialsAndFrames(
|
||||
MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
MeshBuilderData* output, const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials,
|
||||
const u16& framesCount);
|
||||
|
||||
void scan(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
void scan(MeshBuilderData* output, const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials,
|
||||
const u16& frameIndex);
|
||||
|
||||
void importFrame(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
void importFrame(MeshBuilderData* output, const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials,
|
||||
const u16& frameIndex, const float& scale,
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Tyra {
|
||||
|
||||
class DynamicMesh : public Mesh {
|
||||
public:
|
||||
explicit DynamicMesh(const MeshBuilder2Data& data);
|
||||
explicit DynamicMesh(const MeshBuilderData& data);
|
||||
explicit DynamicMesh(const DynamicMesh& mesh);
|
||||
~DynamicMesh();
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Tyra {
|
||||
|
||||
class Mesh {
|
||||
public:
|
||||
explicit Mesh(const MeshBuilder2Data& data);
|
||||
explicit Mesh(const MeshBuilderData& data);
|
||||
explicit Mesh(const Mesh& mesh);
|
||||
~Mesh();
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "./mesh_material.hpp"
|
||||
#include "loaders/3d/builder2/mesh_builder2_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
||||
#include "renderer/3d/bbox/bbox.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MeshFrame {
|
||||
public:
|
||||
explicit MeshFrame(const MeshBuilder2Data& data, const u32& index);
|
||||
explicit MeshFrame(const MeshBuilderData& data, const u32& index);
|
||||
explicit MeshFrame(const MeshFrame& frame);
|
||||
~MeshFrame();
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
#include "debug/debug.hpp"
|
||||
#include "./mesh_material_frame.hpp"
|
||||
#include "loaders/3d/builder2/mesh_builder2_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MeshMaterial {
|
||||
public:
|
||||
explicit MeshMaterial(const MeshBuilder2Data& data, const u32& materialIndex);
|
||||
explicit MeshMaterial(const MeshBuilderData& data, const u32& materialIndex);
|
||||
explicit MeshMaterial(const MeshMaterial& material);
|
||||
~MeshMaterial();
|
||||
|
||||
|
||||
@@ -10,15 +10,15 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "loaders/3d/builder2/mesh_builder2_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
||||
#include "./renderer/3d/bbox/bbox.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
class MeshMaterialFrame {
|
||||
public:
|
||||
explicit MeshMaterialFrame(const MeshBuilder2Data& data,
|
||||
const u32& frameIndex, const u32& materialIndex);
|
||||
explicit MeshMaterialFrame(const MeshBuilderData& data, const u32& frameIndex,
|
||||
const u32& materialIndex);
|
||||
explicit MeshMaterialFrame(const MeshMaterialFrame& frame);
|
||||
~MeshMaterialFrame();
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Tyra {
|
||||
|
||||
class StaticMesh : public Mesh {
|
||||
public:
|
||||
StaticMesh(const MeshBuilder2Data& data);
|
||||
StaticMesh(const MeshBuilderData& data);
|
||||
StaticMesh(const StaticMesh& mesh);
|
||||
~StaticMesh();
|
||||
|
||||
|
||||
+3
-3
@@ -9,17 +9,17 @@
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "loaders/3d/builder2/mesh_builder2_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_data.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshBuilder2Data::MeshBuilder2Data() {
|
||||
MeshBuilderData::MeshBuilderData() {
|
||||
textureCoordsEnabled = false;
|
||||
normalsEnabled = false;
|
||||
lightMapEnabled = false;
|
||||
}
|
||||
|
||||
MeshBuilder2Data::~MeshBuilder2Data() {
|
||||
MeshBuilderData::~MeshBuilderData() {
|
||||
for (auto& material : materials) {
|
||||
delete material;
|
||||
}
|
||||
+3
-3
@@ -9,14 +9,14 @@
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "loaders/3d/builder2/mesh_builder2_material_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_material_data.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshBuilder2MaterialData::MeshBuilder2MaterialData() {
|
||||
MeshBuilderMaterialData::MeshBuilderMaterialData() {
|
||||
ambient.set(128.0F, 128.0F, 128.0F, 128.0F);
|
||||
}
|
||||
MeshBuilder2MaterialData::~MeshBuilder2MaterialData() {
|
||||
MeshBuilderMaterialData::~MeshBuilderMaterialData() {
|
||||
for (auto& frame : frames) {
|
||||
delete frame;
|
||||
}
|
||||
+3
-3
@@ -9,16 +9,16 @@
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "loaders/3d/builder2/mesh_builder2_material_frame_data.hpp"
|
||||
#include "loaders/3d/builder/mesh_builder_material_frame_data.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshBuilder2MaterialFrameData::MeshBuilder2MaterialFrameData() {
|
||||
MeshBuilderMaterialFrameData::MeshBuilderMaterialFrameData() {
|
||||
vertices = nullptr;
|
||||
textureCoords = nullptr;
|
||||
normals = nullptr;
|
||||
colors = nullptr;
|
||||
}
|
||||
MeshBuilder2MaterialFrameData::~MeshBuilder2MaterialFrameData() {}
|
||||
MeshBuilderMaterialFrameData::~MeshBuilderMaterialFrameData() {}
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -74,8 +74,8 @@ MD2Loader::MD2Loader() {}
|
||||
|
||||
MD2Loader::~MD2Loader() {}
|
||||
|
||||
MeshBuilder2Data* MD2Loader::load(const char* fullpath, const float& scale,
|
||||
const bool& invertT) {
|
||||
MeshBuilderData* MD2Loader::load(const char* fullpath, const float& scale,
|
||||
const bool& invertT) {
|
||||
std::string path = fullpath;
|
||||
TYRA_ASSERT(!path.empty(), "Provided path is empty!");
|
||||
|
||||
@@ -110,9 +110,9 @@ MeshBuilder2Data* MD2Loader::load(const char* fullpath, const float& scale,
|
||||
|
||||
fclose(file);
|
||||
|
||||
auto result = new MeshBuilder2Data();
|
||||
auto result = new MeshBuilderData();
|
||||
|
||||
auto* material = new MeshBuilder2MaterialData();
|
||||
auto* material = new MeshBuilderMaterialData();
|
||||
material->name = getFilenameWithoutExtension(filename);
|
||||
|
||||
result->materials.push_back(material);
|
||||
@@ -125,7 +125,7 @@ MeshBuilder2Data* MD2Loader::load(const char* fullpath, const float& scale,
|
||||
Vec4** tempTexCoords = new Vec4*[framesCount];
|
||||
|
||||
for (u32 i = 0; i < framesCount; i++) {
|
||||
auto* outputFrame = new MeshBuilder2MaterialFrameData();
|
||||
auto* outputFrame = new MeshBuilderMaterialFrameData();
|
||||
material->frames.push_back(outputFrame);
|
||||
|
||||
tempVertices[i] = new Vec4[vertexCount];
|
||||
|
||||
@@ -28,8 +28,8 @@ ObjLoader::ObjLoader() {}
|
||||
|
||||
ObjLoader::~ObjLoader() {}
|
||||
|
||||
MeshBuilder2Data* ObjLoader::load(const char* fullpath, const u16& count,
|
||||
const float& scale, const bool& invertY) {
|
||||
MeshBuilderData* ObjLoader::load(const char* fullpath, const u16& count,
|
||||
const float& scale, const bool& invertY) {
|
||||
std::string path = fullpath;
|
||||
std::string basePath = getPathFromFilename(path);
|
||||
|
||||
@@ -38,7 +38,7 @@ MeshBuilder2Data* ObjLoader::load(const char* fullpath, const u16& count,
|
||||
auto rawFilename = getFilenameWithoutExtension(path);
|
||||
auto extension = getExtensionOfFilename(path);
|
||||
|
||||
auto* result = new MeshBuilder2Data();
|
||||
auto* result = new MeshBuilderData();
|
||||
|
||||
tinyobj::ObjReaderConfig readerConfig;
|
||||
readerConfig.triangulate = count == 1;
|
||||
@@ -85,7 +85,7 @@ MeshBuilder2Data* ObjLoader::load(const char* fullpath, const u16& count,
|
||||
}
|
||||
|
||||
void ObjLoader::addOutputMaterialsAndFrames(
|
||||
MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
MeshBuilderData* output, const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials, const u16& framesCount) {
|
||||
if (attrib.texcoords.size()) output->textureCoordsEnabled = true;
|
||||
@@ -98,7 +98,7 @@ void ObjLoader::addOutputMaterialsAndFrames(
|
||||
"file");
|
||||
|
||||
for (size_t i = 0; i < materials.size(); i++) {
|
||||
auto* material = new MeshBuilder2MaterialData();
|
||||
auto* material = new MeshBuilderMaterialData();
|
||||
|
||||
material->name = materials[i].name;
|
||||
|
||||
@@ -107,7 +107,7 @@ void ObjLoader::addOutputMaterialsAndFrames(
|
||||
materials[i].ambient[2] * 255.0F, 128.0F);
|
||||
|
||||
for (size_t j = 0; j < framesCount; j++) {
|
||||
auto* frame = new MeshBuilder2MaterialFrameData();
|
||||
auto* frame = new MeshBuilderMaterialFrameData();
|
||||
material->frames.push_back(frame);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ void ObjLoader::addOutputMaterialsAndFrames(
|
||||
}
|
||||
}
|
||||
|
||||
void ObjLoader::scan(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
void ObjLoader::scan(MeshBuilderData* output, const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials,
|
||||
const u16& frameIndex) {
|
||||
@@ -159,7 +159,7 @@ void ObjLoader::scan(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib,
|
||||
}
|
||||
}
|
||||
|
||||
void ObjLoader::importFrame(MeshBuilder2Data* output,
|
||||
void ObjLoader::importFrame(MeshBuilderData* output,
|
||||
const tinyobj::attrib_t& attrib,
|
||||
const std::vector<tinyobj::shape_t>& shapes,
|
||||
const std::vector<tinyobj::material_t>& materials,
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
DynamicMesh::DynamicMesh(const MeshBuilder2Data& data) : Mesh(data) {
|
||||
DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(data) {
|
||||
framesCount = data.materials[0]->frames.size();
|
||||
|
||||
if (framesCount == 1) {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
Mesh::Mesh(const MeshBuilder2Data& data) {
|
||||
Mesh::Mesh(const MeshBuilderData& data) {
|
||||
init();
|
||||
|
||||
TYRA_ASSERT(data.materials.size() > 0,
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshFrame::MeshFrame(const MeshBuilder2Data& data, const u32& index) {
|
||||
MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) {
|
||||
id = rand() % 1000000;
|
||||
|
||||
auto bboxes = new CoreBBox*[data.materials.size()];
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshMaterial::MeshMaterial(const MeshBuilder2Data& data,
|
||||
MeshMaterial::MeshMaterial(const MeshBuilderData& data,
|
||||
const u32& materialIndex) {
|
||||
TYRA_ASSERT(materialIndex < data.materials.size(), "Provided index \"",
|
||||
materialIndex, "\" is out of range");
|
||||
@@ -44,8 +44,17 @@ MeshMaterial::MeshMaterial(const MeshBuilder2Data& data,
|
||||
|
||||
framesCount = material->frames.size();
|
||||
frames = new MeshMaterialFrame*[framesCount];
|
||||
u32 lastVertexCount = 0;
|
||||
|
||||
for (u32 i = 0; i < framesCount; i++) {
|
||||
frames[i] = new MeshMaterialFrame(data, i, materialIndex);
|
||||
|
||||
if (i > 0) {
|
||||
TYRA_ASSERT(frames[i]->getVertexCount() == lastVertexCount,
|
||||
"Vertex count must be the same for all frames");
|
||||
}
|
||||
|
||||
lastVertexCount = frames[i]->getVertexCount();
|
||||
}
|
||||
|
||||
_isMother = true;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
MeshMaterialFrame::MeshMaterialFrame(const MeshBuilder2Data& data,
|
||||
MeshMaterialFrame::MeshMaterialFrame(const MeshBuilderData& data,
|
||||
const u32& frameIndex,
|
||||
const u32& materialIndex) {
|
||||
TYRA_ASSERT(materialIndex < data.materials.size(), "Provided index \"",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
StaticMesh::StaticMesh(const MeshBuilder2Data& data) : Mesh(data) {
|
||||
StaticMesh::StaticMesh(const MeshBuilderData& data) : Mesh(data) {
|
||||
if (data.materials[0]->frames.size() > 1)
|
||||
TYRA_WARN("Static meshes should have only one frame, but ",
|
||||
data.materials[0]->frames.size(), " frames were found");
|
||||
|
||||
Reference in New Issue
Block a user