Added animation asset class
Added animation reading from assimp scene Separated assimp loading from mesh loader in preparation for exe use
This commit is contained in:
parent
7e3ca4c45f
commit
51eba31ad4
|
@ -0,0 +1,30 @@
|
||||||
|
/*************************************************************************//**
|
||||||
|
* \file SHAnimationAsset.h
|
||||||
|
* \author Loh Xiao Qi
|
||||||
|
* \date October 2022
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
*****************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <assimp/anim.h>
|
||||||
|
#include "SH_API.power h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
struct SH_API SHAnimationAsset
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
|
||||||
|
std::vector<aiNodeAnim*> nodeChannels;
|
||||||
|
std::vector<aiMeshAnim*> meshChannels;
|
||||||
|
std::vector<aiMeshMorphAnim*> morphMeshChannels;
|
||||||
|
|
||||||
|
double duration;
|
||||||
|
double ticksPerSecond;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*************************************************************************//**
|
||||||
|
* \file SHAnimationAsset.h
|
||||||
|
* \author Loh Xiao Qi
|
||||||
|
* \date October 2022
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
*****************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <assimp/anim.h>
|
||||||
|
#include "SH_API.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
struct SH_API SHAnimationAsset
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
|
||||||
|
std::vector<aiNodeAnim*> nodeChannels;
|
||||||
|
std::vector<aiMeshAnim*> meshChannels;
|
||||||
|
std::vector<aiMeshMorphAnim*> morphMeshChannels;
|
||||||
|
|
||||||
|
double duration;
|
||||||
|
double ticksPerSecond;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*************************************************************************//**
|
||||||
|
* \file SHAssimpLibrary.cpp
|
||||||
|
* \author Loh Xiao Qi
|
||||||
|
* \date October 2022
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
*****************************************************************************/
|
||||||
|
#include "SHpch.h"
|
||||||
|
#include "SHAssimpLibrary.h"
|
||||||
|
#include <assimp/postprocess.h>
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
Assimp::Importer SHAssimpLibrary::aiImporter;
|
||||||
|
|
||||||
|
void SHAssimpLibrary::ProcessNode(aiNode const& node, aiScene const& scene, MeshVectorRef meshes) noexcept
|
||||||
|
{
|
||||||
|
for (size_t i {0}; i < node.mNumMeshes; ++i)
|
||||||
|
{
|
||||||
|
aiMesh* mesh = scene.mMeshes[node.mMeshes[i]];
|
||||||
|
meshes.push_back(ProcessMesh(*mesh));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i{ 0 }; i < node.mNumChildren; ++i)
|
||||||
|
{
|
||||||
|
ProcessNode(*node.mChildren[i], scene, meshes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHAssimpLibrary::ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept
|
||||||
|
{
|
||||||
|
if (scene.HasAnimations())
|
||||||
|
{
|
||||||
|
std::vector<SHAnimationAsset> anims(scene.mNumAnimations);
|
||||||
|
for (auto i{0}; i < scene.mNumAnimations; ++i)
|
||||||
|
{
|
||||||
|
auto const& anim {*scene.mAnimations[i]};
|
||||||
|
|
||||||
|
anims[i].name = anim.mName.C_Str();
|
||||||
|
|
||||||
|
anims[i].duration = anim.mDuration;
|
||||||
|
anims[i].ticksPerSecond = anim.mTicksPerSecond;
|
||||||
|
|
||||||
|
std::copy_n(anim.mChannels, anim.mNumChannels, anims[i].nodeChannels.data());
|
||||||
|
std::copy_n(anim.mMeshChannels, anim.mNumMeshChannels, anims[i].meshChannels.data());
|
||||||
|
std::copy_n(anim.mMorphMeshChannels, anim.mNumMorphMeshChannels, anims[i].morphMeshChannels.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHMeshAsset SHAssimpLibrary::ProcessMesh(aiMesh const& mesh) noexcept
|
||||||
|
{
|
||||||
|
SHMeshAsset result
|
||||||
|
{
|
||||||
|
.compiled { false},
|
||||||
|
.changed { false }
|
||||||
|
};
|
||||||
|
|
||||||
|
for (size_t i{0}; i < mesh.mNumVertices; ++i)
|
||||||
|
{
|
||||||
|
// Vertex position
|
||||||
|
SHVec3 vertex;
|
||||||
|
vertex.x = mesh.mVertices[i].x;
|
||||||
|
vertex.y = mesh.mVertices[i].y;
|
||||||
|
vertex.z = mesh.mVertices[i].z;
|
||||||
|
result.vertexPosition.push_back(vertex);
|
||||||
|
|
||||||
|
// Tex coords
|
||||||
|
SHVec2 texCoord{0.f, 0.f};
|
||||||
|
if (mesh.mTextureCoords[0])
|
||||||
|
{
|
||||||
|
texCoord.x = mesh.mTextureCoords[0][i].x;
|
||||||
|
texCoord.y = mesh.mTextureCoords[0][i].y;
|
||||||
|
}
|
||||||
|
result.texCoords.push_back(texCoord);
|
||||||
|
|
||||||
|
// Normals
|
||||||
|
SHVec3 normal{0.f, 0.f, 0.f};
|
||||||
|
if (mesh.mNormals)
|
||||||
|
{
|
||||||
|
normal.x = mesh.mNormals[i].x;
|
||||||
|
normal.y = mesh.mNormals[i].y;
|
||||||
|
normal.z = mesh.mNormals[i].z;
|
||||||
|
}
|
||||||
|
result.vertexNormal.push_back(normal);
|
||||||
|
|
||||||
|
// Tangent
|
||||||
|
SHVec3 tangent{0.f, 0.f, 0.f};
|
||||||
|
if (mesh.mTangents)
|
||||||
|
{
|
||||||
|
tangent.x = mesh.mTangents[i].x;
|
||||||
|
tangent.y = mesh.mTangents[i].y;
|
||||||
|
tangent.z = mesh.mTangents[i].z;
|
||||||
|
}
|
||||||
|
result.vertexTangent.push_back(tangent);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i {0}; i < mesh.mNumFaces; ++i)
|
||||||
|
{
|
||||||
|
aiFace face = mesh.mFaces[i];
|
||||||
|
for (size_t j{0}; j < face.mNumIndices; ++j)
|
||||||
|
{
|
||||||
|
result.indices.push_back(face.mIndices[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.header.vertexCount = static_cast<uint32_t>(result.vertexPosition.size());
|
||||||
|
result.header.indexCount = static_cast<uint32_t>(result.indices.size());
|
||||||
|
result.header.meshName = mesh.mName.C_Str();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHAssimpLibrary::LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept
|
||||||
|
{
|
||||||
|
const aiScene* scene = aiImporter.ReadFile(path.string().c_str(),
|
||||||
|
aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons
|
||||||
|
| aiProcess_GenUVCoords // Convert any type of mapping to uv mapping
|
||||||
|
| aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...)
|
||||||
|
| aiProcess_FindInstances // search for instanced meshes and remove them by references to one master
|
||||||
|
| aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible
|
||||||
|
| aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing
|
||||||
|
| aiProcess_RemoveRedundantMaterials // remove redundant materials
|
||||||
|
| aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors
|
||||||
|
| aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!scene || !scene->HasMeshes())
|
||||||
|
{
|
||||||
|
SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ExtractAnimations(*scene, anims);
|
||||||
|
|
||||||
|
ProcessNode(*scene->mRootNode, *scene, meshes);
|
||||||
|
|
||||||
|
aiImporter.FreeScene();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*************************************************************************//**
|
||||||
|
* \file SHAssimpLibrary.h
|
||||||
|
* \author Loh Xiao Qi
|
||||||
|
* \date October 2022
|
||||||
|
* \brief
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <assimp/Importer.hpp>
|
||||||
|
#include <assimp/scene.h>
|
||||||
|
#include <vector>
|
||||||
|
#include "../SHAssetMacros.h"
|
||||||
|
#include "../Asset Types/SHMeshAsset.h"
|
||||||
|
#include "../Asset Types/SHAnimationAsset.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
class SHAssimpLibrary
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
using MeshVectorRef = std::vector<SHMeshAsset>&;
|
||||||
|
using AnimVectorRef = std::vector<SHAnimationAsset>&;
|
||||||
|
|
||||||
|
static Assimp::Importer aiImporter;
|
||||||
|
static void ProcessNode(aiNode const& node, aiScene const& scene,MeshVectorRef meshes) noexcept;
|
||||||
|
static void ExtractAnimations(aiScene const& scene, AnimVectorRef anims) noexcept;
|
||||||
|
static SHMeshAsset ProcessMesh(aiMesh const& mesh) noexcept;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void LoadFromFile(AssetPath path, MeshVectorRef meshes, AnimVectorRef anims) noexcept;
|
||||||
|
};
|
||||||
|
}
|
|
@ -12,128 +12,10 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#include "SHpch.h"
|
#include "SHpch.h"
|
||||||
#include "SHMeshLoader.h"
|
#include "SHMeshLoader.h"
|
||||||
#include <assimp/postprocess.h>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
Assimp::Importer SHMeshLoader::aiImporter;
|
|
||||||
|
|
||||||
void SHMeshLoader::ProcessNode(aiNode const& node, aiScene const& scene, std::vector<SHMeshAsset>& meshes) noexcept
|
|
||||||
{
|
|
||||||
for (size_t i {0}; i < node.mNumMeshes; ++i)
|
|
||||||
{
|
|
||||||
aiMesh* mesh = scene.mMeshes[node.mMeshes[i]];
|
|
||||||
meshes.push_back(ProcessMesh(*mesh, scene));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i{ 0 }; i < node.mNumChildren; ++i)
|
|
||||||
{
|
|
||||||
ProcessNode(*node.mChildren[i], scene, meshes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SHMeshAsset SHMeshLoader::ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept
|
|
||||||
{
|
|
||||||
(void)scene;
|
|
||||||
|
|
||||||
SHMeshAsset result
|
|
||||||
{
|
|
||||||
.compiled { false},
|
|
||||||
.changed { false }
|
|
||||||
};
|
|
||||||
|
|
||||||
for (size_t i{0}; i < mesh.mNumVertices; ++i)
|
|
||||||
{
|
|
||||||
// Vertex position
|
|
||||||
SHVec3 vertex;
|
|
||||||
vertex.x = mesh.mVertices[i].x;
|
|
||||||
vertex.y = mesh.mVertices[i].y;
|
|
||||||
vertex.z = mesh.mVertices[i].z;
|
|
||||||
result.vertexPosition.push_back(vertex);
|
|
||||||
|
|
||||||
// Tex coords
|
|
||||||
SHVec2 texCoord{0.f, 0.f};
|
|
||||||
if (mesh.mTextureCoords[0])
|
|
||||||
{
|
|
||||||
texCoord.x = mesh.mTextureCoords[0][i].x;
|
|
||||||
texCoord.y = mesh.mTextureCoords[0][i].y;
|
|
||||||
}
|
|
||||||
result.texCoords.push_back(texCoord);
|
|
||||||
|
|
||||||
// Normals
|
|
||||||
SHVec3 normal{0.f, 0.f, 0.f};
|
|
||||||
if (mesh.mNormals)
|
|
||||||
{
|
|
||||||
normal.x = mesh.mNormals[i].x;
|
|
||||||
normal.y = mesh.mNormals[i].y;
|
|
||||||
normal.z = mesh.mNormals[i].z;
|
|
||||||
}
|
|
||||||
result.vertexNormal.push_back(normal);
|
|
||||||
|
|
||||||
// Tangent
|
|
||||||
SHVec3 tangent{0.f, 0.f, 0.f};
|
|
||||||
if (mesh.mTangents)
|
|
||||||
{
|
|
||||||
tangent.x = mesh.mTangents[i].x;
|
|
||||||
tangent.y = mesh.mTangents[i].y;
|
|
||||||
tangent.z = mesh.mTangents[i].z;
|
|
||||||
}
|
|
||||||
result.vertexTangent.push_back(tangent);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i {0}; i < mesh.mNumFaces; ++i)
|
|
||||||
{
|
|
||||||
aiFace face = mesh.mFaces[i];
|
|
||||||
for (size_t j{0}; j < face.mNumIndices; ++j)
|
|
||||||
{
|
|
||||||
result.indices.push_back(face.mIndices[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.header.vertexCount = static_cast<uint32_t>(result.vertexPosition.size());
|
|
||||||
result.header.indexCount = static_cast<uint32_t>(result.indices.size());
|
|
||||||
result.header.meshName = mesh.mName.C_Str();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SHMeshLoader::LoadExternal(std::vector<SHMeshAsset>& meshes, AssetPath path) noexcept
|
|
||||||
{
|
|
||||||
const aiScene* scene = aiImporter.ReadFile(path.string().c_str(),
|
|
||||||
aiProcess_Triangulate // Make sure we get triangles rather than nvert polygons
|
|
||||||
| aiProcess_GenUVCoords // Convert any type of mapping to uv mapping
|
|
||||||
| aiProcess_TransformUVCoords // preprocess UV transformations (scaling, translation ...)
|
|
||||||
| aiProcess_FindInstances // search for instanced meshes and remove them by references to one master
|
|
||||||
| aiProcess_CalcTangentSpace // calculate tangents and bitangents if possible
|
|
||||||
| aiProcess_JoinIdenticalVertices // join identical vertices/ optimize indexing
|
|
||||||
| aiProcess_RemoveRedundantMaterials // remove redundant materials
|
|
||||||
| aiProcess_FindInvalidData // detect invalid model data, such as invalid normal vectors
|
|
||||||
| aiProcess_FlipUVs // flip the V to match the Vulkans way of doing UVs
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!scene || !scene->HasMeshes())
|
|
||||||
{
|
|
||||||
SHLOG_ERROR("ERROR in GLTF::ASSIMP: {}\nFile: {}", aiImporter.GetErrorString(), path.string());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO MATERIALS FROM MESHES
|
|
||||||
//if (scene->HasMaterials())
|
|
||||||
//{
|
|
||||||
// for (int i{0}; i < scene->mNumMaterials; ++i)
|
|
||||||
// {
|
|
||||||
// if (scene->mMaterials[i]->mNumProperties > 0)
|
|
||||||
// {
|
|
||||||
// for (int j{0}; j < scene->mMaterials[i]->mProperties[j].)
|
|
||||||
// }
|
|
||||||
//std::cout << scene->mMaterials[i]->;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
ProcessNode(*scene->mRootNode, *scene, meshes);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SHMeshLoader::LoadSHMesh(SHMeshAsset& mesh, AssetPath path) noexcept
|
void SHMeshLoader::LoadSHMesh(SHMeshAsset& mesh, AssetPath path) noexcept
|
||||||
{
|
{
|
||||||
std::ifstream file{ path.string(), std::ios::in | std::ios::binary };
|
std::ifstream file{ path.string(), std::ios::in | std::ios::binary };
|
||||||
|
@ -169,38 +51,6 @@ namespace SHADE
|
||||||
file.read(reinterpret_cast<char *>(texCoord.data()), vertexVec2Byte);
|
file.read(reinterpret_cast<char *>(texCoord.data()), vertexVec2Byte);
|
||||||
file.read(reinterpret_cast<char *>(indices.data()), sizeof(uint32_t) * indexCount);
|
file.read(reinterpret_cast<char *>(indices.data()), sizeof(uint32_t) * indexCount);
|
||||||
|
|
||||||
//for (auto i{ 0 }; i < vertCount; ++i)
|
|
||||||
//{
|
|
||||||
// file >> vertPos[i].x;
|
|
||||||
// file >> vertPos[i].y;
|
|
||||||
// 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)
|
|
||||||
//{
|
|
||||||
// file >> vertNorm[i].x;
|
|
||||||
// file >> vertNorm[i].y;
|
|
||||||
// file >> vertNorm[i].z;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//for (auto i{ 0 }; i < vertCount; ++i)
|
|
||||||
//{
|
|
||||||
// file >> texCoord[i].x;
|
|
||||||
// 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;
|
||||||
|
|
||||||
|
@ -216,16 +66,4 @@ namespace SHADE
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHMeshLoader::LoadMesh(std::vector<SHMeshAsset>& meshes, AssetPath path) noexcept
|
|
||||||
{
|
|
||||||
if (path.extension().string() == GLTF_EXTENSION)
|
|
||||||
{
|
|
||||||
LoadExternal(meshes, path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
meshes.emplace_back();
|
|
||||||
LoadSHMesh(meshes.back(), path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,27 +10,13 @@
|
||||||
* of DigiPen Institute of Technology is prohibited.
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <assimp/Importer.hpp>
|
|
||||||
#include <assimp/scene.h>
|
|
||||||
#include "../SHAssetMacros.h"
|
#include "../SHAssetMacros.h"
|
||||||
#include "../Asset Types/SHMeshAsset.h"
|
#include "../Asset Types/SHMeshAsset.h"
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
class SHMeshLoader
|
struct SHMeshLoader
|
||||||
{
|
{
|
||||||
private:
|
|
||||||
static Assimp::Importer aiImporter;
|
|
||||||
|
|
||||||
static void ProcessNode(aiNode const& node, aiScene const& scene, std::vector<SHMeshAsset>& meshes) noexcept;
|
|
||||||
|
|
||||||
static SHMeshAsset ProcessMesh(aiMesh const& mesh, aiScene const& scene) noexcept;
|
|
||||||
|
|
||||||
static void LoadExternal(std::vector<SHMeshAsset>& meshes, AssetPath path) noexcept;
|
|
||||||
|
|
||||||
public:
|
|
||||||
static void LoadMesh(std::vector<SHMeshAsset>& meshes, AssetPath path) noexcept;
|
|
||||||
static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept;
|
static void LoadSHMesh(SHMeshAsset& meshes, AssetPath path) noexcept;
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -14,6 +14,7 @@
|
||||||
#include "SHAssetMetaHandler.h"
|
#include "SHAssetMetaHandler.h"
|
||||||
#include "Filesystem/SHFileSystem.h"
|
#include "Filesystem/SHFileSystem.h"
|
||||||
|
|
||||||
|
#include "Libraries/SHAssimpLibrary.h"
|
||||||
#include "Libraries/SHMeshLoader.h"
|
#include "Libraries/SHMeshLoader.h"
|
||||||
#include "Libraries/SHTextureLoader.h"
|
#include "Libraries/SHTextureLoader.h"
|
||||||
|
|
||||||
|
@ -200,38 +201,38 @@ namespace SHADE
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHAssetManager::LoadDataTemp(std::string p) noexcept
|
//void SHAssetManager::LoadDataTemp(std::string p) noexcept
|
||||||
{
|
//{
|
||||||
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)
|
// || path.extension().string() == MESH_EXTENSION)
|
||||||
{
|
// {
|
||||||
LoadGLTF(
|
// LoadGLTF(
|
||||||
{
|
// {
|
||||||
.name {path.filename().string()},
|
// .name {path.filename().string()},
|
||||||
.id {0},
|
// .id {0},
|
||||||
.type {AssetType::MESH},
|
// .type {AssetType::MESH},
|
||||||
.path {path},
|
// .path {path},
|
||||||
.location {0}
|
// .location {0}
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
else if (path.extension().string() == DDS_EXTENSION
|
// else if (path.extension().string() == DDS_EXTENSION
|
||||||
|| path.extension().string() == TEXTURE_EXTENSION)
|
// || path.extension().string() == TEXTURE_EXTENSION)
|
||||||
{
|
// {
|
||||||
LoadDDS(
|
// LoadDDS(
|
||||||
{
|
// {
|
||||||
.name {path.filename().string()},
|
// .name {path.filename().string()},
|
||||||
.id {0},
|
// .id {0},
|
||||||
.type {AssetType::DDS},
|
// .type {AssetType::DDS},
|
||||||
.path {path},
|
// .path {path},
|
||||||
.location {0}
|
// .location {0}
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
std::vector<SHMeshAsset> SHAssetManager::GetAllMeshes() noexcept
|
std::vector<SHMeshAsset> SHAssetManager::GetAllMeshes() noexcept
|
||||||
{
|
{
|
||||||
|
@ -319,11 +320,12 @@ namespace SHADE
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHAssetManager::LoadGLTF(SHAsset asset) noexcept
|
void SHAssetManager::LoadGLTF(AssetPath path) noexcept
|
||||||
{
|
{
|
||||||
std::vector<SHMeshAsset> meshes;
|
std::vector<SHMeshAsset> meshes;
|
||||||
|
std::vector<SHAnimationAsset> anims;
|
||||||
|
|
||||||
SHMeshLoader::LoadMesh(meshes, asset.path);
|
SHAssimpLibrary::LoadFromFile(path, meshes, anims);
|
||||||
|
|
||||||
for (auto const& mesh : meshes)
|
for (auto const& mesh : meshes)
|
||||||
{
|
{
|
||||||
|
@ -333,7 +335,7 @@ namespace SHADE
|
||||||
AssetPath path;
|
AssetPath path;
|
||||||
if (!mesh.compiled)
|
if (!mesh.compiled)
|
||||||
{
|
{
|
||||||
path = SHMeshCompiler::CompileMeshBinary(mesh, asset.path);
|
path = SHMeshCompiler::CompileMeshBinary(mesh, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
assetCollection.emplace_back(
|
assetCollection.emplace_back(
|
||||||
|
@ -344,6 +346,11 @@ namespace SHADE
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto const& anim : anims)
|
||||||
|
{
|
||||||
|
//TODO Register anim resource and compile into binary
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHAssetManager::LoadDDS(SHAsset asset) noexcept
|
void SHAssetManager::LoadDDS(SHAsset asset) noexcept
|
||||||
|
|
|
@ -71,12 +71,16 @@ namespace SHADE
|
||||||
// -------------------------------------------------------------------------/
|
// -------------------------------------------------------------------------/
|
||||||
|
|
||||||
//TODO: TEMPORARY FOR TESTING GLTF & DDS
|
//TODO: TEMPORARY FOR TESTING GLTF & DDS
|
||||||
static void LoadDataTemp(std::string path) noexcept;
|
//static void LoadDataTemp(std::string path) noexcept;
|
||||||
static std::vector<SHMeshAsset> GetAllMeshes() noexcept;
|
static std::vector<SHMeshAsset> GetAllMeshes() noexcept;
|
||||||
static std::vector<SHTextureAsset> GetAllTextures() noexcept;
|
static std::vector<SHTextureAsset> GetAllTextures() noexcept;
|
||||||
|
|
||||||
static SHMeshAsset const* GetMesh(AssetID id) noexcept;
|
static SHMeshAsset const* GetMesh(AssetID id) noexcept;
|
||||||
static SHTextureAsset const* GetTexture(AssetID id) noexcept;
|
static SHTextureAsset const* GetTexture(AssetID id) noexcept;
|
||||||
|
|
||||||
|
// Specialised load calls
|
||||||
|
static void LoadGLTF(AssetPath path) noexcept;
|
||||||
|
static void LoadDDS(SHAsset asset) noexcept;
|
||||||
private:
|
private:
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Load resource data into memory
|
* \brief Load resource data into memory
|
||||||
|
@ -118,9 +122,6 @@ namespace SHADE
|
||||||
|
|
||||||
static bool IsRecognised(char const*) noexcept;
|
static bool IsRecognised(char const*) noexcept;
|
||||||
|
|
||||||
// Specialised load calls
|
|
||||||
static void LoadGLTF(SHAsset asset) noexcept;
|
|
||||||
static void LoadDDS(SHAsset asset) noexcept;
|
|
||||||
|
|
||||||
static FMOD::System* audioSystem;
|
static FMOD::System* audioSystem;
|
||||||
static std::unordered_map<AssetID,SHSound>* audioSoundList;
|
static std::unordered_map<AssetID,SHSound>* audioSoundList;
|
||||||
|
|
Loading…
Reference in New Issue