SP3-237 Mesh compile and load successfully. Although now path to load/compile is hardcoded. Flow will be done after MS1
This commit is contained in:
parent
8a3d3c8d4e
commit
5069a42319
Binary file not shown.
Binary file not shown.
|
@ -81,7 +81,8 @@ namespace Sandbox
|
||||||
SHADE::SHSystemManager::RegisterRoutine<SHADE::SHInputManagerSystem, SHADE::SHInputManagerSystem::InputManagerRoutine>();
|
SHADE::SHSystemManager::RegisterRoutine<SHADE::SHInputManagerSystem, SHADE::SHInputManagerSystem::InputManagerRoutine>();
|
||||||
|
|
||||||
//TODO: REMOVE AFTER PRESENTATION
|
//TODO: REMOVE AFTER PRESENTATION
|
||||||
SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf");
|
//SHADE::SHAssetManager::LoadDataTemp("../../Assets/racoon.gltf");
|
||||||
|
SHADE::SHAssetManager::LoadDataTemp("../../Assets/Cube.012.shmesh");
|
||||||
//SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds");
|
//SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonBag_Color_Ver4.dds");
|
||||||
SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds");
|
SHADE::SHAssetManager::LoadDataTemp("../../Assets/RaccoonPreTexturedVer1_Base9.dds");
|
||||||
//TODO: REMOVE AFTER PRESENTATION
|
//TODO: REMOVE AFTER PRESENTATION
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace Sandbox
|
||||||
std::vector<Handle<SHMesh>> handles;
|
std::vector<Handle<SHMesh>> handles;
|
||||||
for (auto const& mesh : meshes)
|
for (auto const& mesh : meshes)
|
||||||
{
|
{
|
||||||
if (mesh.meshName == "Cube.012")
|
if (mesh.header.meshName == "Cube.012")
|
||||||
{
|
{
|
||||||
handles.push_back(graphicsSystem->AddMesh(
|
handles.push_back(graphicsSystem->AddMesh(
|
||||||
mesh.header.vertexCount,
|
mesh.header.vertexCount,
|
||||||
|
|
|
@ -18,7 +18,11 @@
|
||||||
|
|
||||||
void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept
|
void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPath path) noexcept
|
||||||
{
|
{
|
||||||
std::ofstream file{path, std::ios::out | std::ios::binary};
|
std::string newPath{ path.string() };
|
||||||
|
newPath = newPath.substr(0, newPath.find_last_of('/') + 1);
|
||||||
|
newPath += asset.header.meshName + MESH_EXTENSION;
|
||||||
|
|
||||||
|
std::ofstream file{ newPath, std::ios::out | std::ios::binary | std::ios::trunc };
|
||||||
if (!file.is_open())
|
if (!file.is_open())
|
||||||
{
|
{
|
||||||
SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string());
|
SHLOG_ERROR("Unable to open file for writing mesh file: {}", path.string());
|
||||||
|
@ -34,17 +38,6 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat
|
||||||
sizeof(uint32_t)
|
sizeof(uint32_t)
|
||||||
);
|
);
|
||||||
|
|
||||||
uint32_t charCount{static_cast<uint32_t>(asset.header.meshName.size())};
|
|
||||||
file.write(
|
|
||||||
reinterpret_cast<char const*>(&charCount),
|
|
||||||
sizeof(uint32_t)
|
|
||||||
);
|
|
||||||
|
|
||||||
file.write(
|
|
||||||
asset.header.meshName.c_str(),
|
|
||||||
asset.header.meshName.size()
|
|
||||||
);
|
|
||||||
|
|
||||||
auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount};
|
auto const vertexVec3Byte {sizeof(SHVec3) * asset.header.vertexCount};
|
||||||
auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount};
|
auto const vertexVec2Byte {sizeof(SHVec2) * asset.header.vertexCount};
|
||||||
|
|
||||||
|
@ -70,7 +63,7 @@ void SHADE::SHMeshCompiler::CompileMeshBinary(SHMeshAsset const& asset, AssetPat
|
||||||
|
|
||||||
file.write(
|
file.write(
|
||||||
reinterpret_cast<char const*>(asset.indices.data()),
|
reinterpret_cast<char const*>(asset.indices.data()),
|
||||||
sizeof(uint32_t)
|
sizeof(uint32_t) * asset.header.indexCount
|
||||||
);
|
);
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
Assimp::Importer SHMeshLoader::aiImporter;
|
Assimp::Importer SHMeshLoader::aiImporter;
|
||||||
|
|
||||||
void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector<SHMeshAsset>& meshes)
|
void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector<SHMeshAsset>& meshes) noexcept
|
||||||
{
|
{
|
||||||
for (size_t i {0}; i < node.mNumMeshes; ++i)
|
for (size_t i {0}; i < node.mNumMeshes; ++i)
|
||||||
{
|
{
|
||||||
|
@ -33,7 +33,7 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene)
|
SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept
|
||||||
{
|
{
|
||||||
(void)scene;
|
(void)scene;
|
||||||
|
|
||||||
|
@ -43,8 +43,6 @@ namespace SHADE
|
||||||
.changed { false }
|
.changed { false }
|
||||||
};
|
};
|
||||||
|
|
||||||
result.header.meshName = mesh.mName.C_Str();
|
|
||||||
|
|
||||||
for (size_t i{0}; i < mesh.mNumVertices; ++i)
|
for (size_t i{0}; i < mesh.mNumVertices; ++i)
|
||||||
{
|
{
|
||||||
// Vertex position
|
// Vertex position
|
||||||
|
@ -95,6 +93,7 @@ namespace SHADE
|
||||||
|
|
||||||
result.header.vertexCount = result.vertexPosition.size();
|
result.header.vertexCount = result.vertexPosition.size();
|
||||||
result.header.indexCount = result.indices.size();
|
result.header.indexCount = result.indices.size();
|
||||||
|
result.header.meshName = mesh.mName.C_Str();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -143,16 +142,21 @@ namespace SHADE
|
||||||
SHLOG_ERROR("Unable to open SHMesh File: {}", path.string());
|
SHLOG_ERROR("Unable to open SHMesh File: {}", path.string());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t vertCount, indexCount, charCount;
|
std::string name{ path.filename().string() };
|
||||||
|
name = name.substr(0, name.find_last_of('.'));
|
||||||
|
|
||||||
|
file.seekg(0);
|
||||||
|
|
||||||
|
uint32_t vertCount, indexCount;
|
||||||
std::vector<SHVec3> vertPos, vertTan, vertNorm;
|
std::vector<SHVec3> vertPos, vertTan, vertNorm;
|
||||||
std::vector<SHVec2> texCoord;
|
std::vector<SHVec2> texCoord;
|
||||||
std::vector<uint32_t> indices;
|
std::vector<uint32_t> indices;
|
||||||
|
|
||||||
std::string name;
|
file.read(reinterpret_cast<char*>(&vertCount), sizeof(uint32_t));
|
||||||
|
file.read(reinterpret_cast<char*>(&indexCount), sizeof(uint32_t));
|
||||||
|
|
||||||
file >> vertCount;
|
auto const vertexVec3Byte{ sizeof(SHVec3) * vertCount };
|
||||||
file >> indexCount;
|
auto const vertexVec2Byte{ sizeof(SHVec2) * vertCount };
|
||||||
file >> charCount;
|
|
||||||
|
|
||||||
vertPos.resize(vertCount);
|
vertPos.resize(vertCount);
|
||||||
vertTan.resize(vertCount);
|
vertTan.resize(vertCount);
|
||||||
|
@ -160,43 +164,43 @@ namespace SHADE
|
||||||
texCoord.resize(vertCount);
|
texCoord.resize(vertCount);
|
||||||
indices.resize(indexCount);
|
indices.resize(indexCount);
|
||||||
|
|
||||||
name.reserve(charCount);
|
file.read(reinterpret_cast<char *>(vertPos.data()), vertexVec3Byte);
|
||||||
for (auto i{0}; i < charCount; ++i)
|
file.read(reinterpret_cast<char *>(vertTan.data()), vertexVec3Byte);
|
||||||
{
|
file.read(reinterpret_cast<char *>(vertNorm.data()), vertexVec3Byte);
|
||||||
file >> name[i];
|
file.read(reinterpret_cast<char *>(texCoord.data()), vertexVec2Byte);
|
||||||
}
|
file.read(reinterpret_cast<char *>(indices.data()), sizeof(uint32_t) * indexCount);
|
||||||
|
|
||||||
for (auto i{ 0 }; i < vertCount; ++i)
|
//for (auto i{ 0 }; i < vertCount; ++i)
|
||||||
{
|
//{
|
||||||
file >> vertPos[i].x;
|
// file >> vertPos[i].x;
|
||||||
file >> vertPos[i].y;
|
// file >> vertPos[i].y;
|
||||||
file >> vertPos[i].z;
|
// file >> vertPos[i].z;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
|
//for (auto i{ 0 }; i < vertCount; ++i)
|
||||||
|
//{
|
||||||
|
// file >> vertTan[i].x;
|
||||||
|
// file >> vertTan[i].y;
|
||||||
|
// file >> vertTan[i].z;
|
||||||
|
//}
|
||||||
|
|
||||||
for (auto i{ 0 }; i < vertCount; ++i)
|
//for (auto i{ 0 }; i < vertCount; ++i)
|
||||||
{
|
//{
|
||||||
file >> vertTan[i].x;
|
// file >> vertNorm[i].x;
|
||||||
file >> vertTan[i].y;
|
// file >> vertNorm[i].y;
|
||||||
file >> vertTan[i].z;
|
// file >> vertNorm[i].z;
|
||||||
}
|
//}
|
||||||
|
|
||||||
for (auto i{ 0 }; i < vertCount; ++i)
|
//for (auto i{ 0 }; i < vertCount; ++i)
|
||||||
{
|
//{
|
||||||
file >> vertNorm[i].x;
|
// file >> texCoord[i].x;
|
||||||
file >> vertNorm[i].y;
|
// file >> texCoord[i].y;
|
||||||
file >> vertNorm[i].z;
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
for (auto i{ 0 }; i < vertCount; ++i)
|
//for (auto i{ 0 }; i < indexCount; ++i)
|
||||||
{
|
//{
|
||||||
file >> texCoord[i].x;
|
// file >> indices[i];
|
||||||
file >> texCoord[i].y;
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
for (auto i{ 0 }; i < indexCount; ++i)
|
|
||||||
{
|
|
||||||
file >> indices[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
mesh.compiled = true;
|
mesh.compiled = true;
|
||||||
mesh.changed = false;
|
mesh.changed = false;
|
||||||
|
@ -214,7 +218,7 @@ namespace SHADE
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHMeshLoader::LoadMesh(std::vector<SHMeshAsset>& meshes, AssetPath path)
|
void SHMeshLoader::LoadMesh(std::vector<SHMeshAsset>& meshes, AssetPath path) noexcept
|
||||||
{
|
{
|
||||||
if (path.extension().string() == GLTF_EXTENSION)
|
if (path.extension().string() == GLTF_EXTENSION)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#include "Libraries/SHMeshLoader.h"
|
#include "Libraries/SHMeshLoader.h"
|
||||||
#include "Libraries/SHTextureLoader.h"
|
#include "Libraries/SHTextureLoader.h"
|
||||||
|
|
||||||
|
#include "Libraries/SHMeshCompiler.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
FMOD::System* SHAssetManager::audioSystem;
|
FMOD::System* SHAssetManager::audioSystem;
|
||||||
|
@ -200,7 +202,8 @@ namespace SHADE
|
||||||
AssetPath path{ p };
|
AssetPath path{ p };
|
||||||
|
|
||||||
if (path.extension().string() == FBX_EXTENSION
|
if (path.extension().string() == FBX_EXTENSION
|
||||||
|| path.extension().string() == GLTF_EXTENSION)
|
|| path.extension().string() == GLTF_EXTENSION
|
||||||
|
|| path.extension().string() == MESH_EXTENSION)
|
||||||
{
|
{
|
||||||
LoadGLTF(
|
LoadGLTF(
|
||||||
{
|
{
|
||||||
|
@ -301,6 +304,11 @@ namespace SHADE
|
||||||
for (auto const& mesh : meshes)
|
for (auto const& mesh : meshes)
|
||||||
{
|
{
|
||||||
meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh);
|
meshCollection.emplace(GenerateAssetID(AssetType::MESH), mesh);
|
||||||
|
|
||||||
|
if (!mesh.compiled)
|
||||||
|
{
|
||||||
|
SHMeshCompiler::CompileMeshBinary(mesh, asset.path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue