Graphics/Model: Add model loader

This commit is contained in:
SirLynix
2024-01-05 11:24:25 +01:00
parent 201ac025e2
commit 2bdd6f9351
8 changed files with 162 additions and 41 deletions

View File

@@ -13,6 +13,7 @@
#include <Nazara/Graphics/Material.hpp>
#include <Nazara/Graphics/MaterialInstance.hpp>
#include <Nazara/Graphics/MaterialPassRegistry.hpp>
#include <Nazara/Graphics/Model.hpp>
#include <Nazara/Graphics/PipelinePassList.hpp>
#include <Nazara/Graphics/TextureSamplerCache.hpp>
#include <Nazara/Renderer/RenderDevice.hpp>
@@ -55,6 +56,8 @@ namespace Nz
inline const MaterialInstanceLoader& GetMaterialInstanceLoader() const;
inline MaterialLoader& GetMaterialLoader();
inline const MaterialLoader& GetMaterialLoader() const;
inline ModelLoader& GetModelLoader();
inline const ModelLoader& GetModelLoader() const;
inline PipelinePassListLoader& GetPipelinePassListLoader();
inline const PipelinePassListLoader& GetPipelinePassListLoader() const;
inline PixelFormat GetPreferredDepthFormat() const;
@@ -117,6 +120,7 @@ namespace Nz
MaterialInstanceLoader m_materialInstanceLoader;
MaterialLoader m_materialLoader;
MaterialPassRegistry m_materialPassRegistry;
ModelLoader m_modelLoader;
PipelinePassListLoader m_pipelinePassListLoader;
PixelFormat m_preferredDepthFormat;
PixelFormat m_preferredDepthStencilFormat;

View File

@@ -71,6 +71,16 @@ namespace Nz
return m_materialLoader;
}
inline ModelLoader& Graphics::GetModelLoader()
{
return m_modelLoader;
}
inline const ModelLoader& Graphics::GetModelLoader() const
{
return m_modelLoader;
}
inline PipelinePassListLoader& Graphics::GetPipelinePassListLoader()
{
return m_pipelinePassListLoader;

View File

@@ -8,6 +8,12 @@
#define NAZARA_GRAPHICS_MODEL_HPP
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Core/ObjectLibrary.hpp>
#include <Nazara/Core/Resource.hpp>
#include <Nazara/Core/ResourceLoader.hpp>
#include <Nazara/Core/ResourceManager.hpp>
#include <Nazara/Core/ResourceParameters.hpp>
#include <Nazara/Core/ResourceSaver.hpp>
#include <Nazara/Graphics/Config.hpp>
#include <Nazara/Graphics/GraphicalMesh.hpp>
#include <Nazara/Graphics/InstancedRenderable.hpp>
@@ -18,11 +24,26 @@
namespace Nz
{
class Material;
struct NAZARA_GRAPHICS_API ModelParams : ResourceParameters
{
bool loadMaterials = true;
MeshParams mesh;
class NAZARA_GRAPHICS_API Model : public InstancedRenderable
bool IsValid() const;
};
class Model;
using ModelLibrary = ObjectLibrary<Model>;
using ModelLoader = ResourceLoader<Model, ModelParams>;
using ModelManager = ResourceManager<Model, ModelParams>;
using ModelSaver = ResourceSaver<Model, ModelParams>;
class NAZARA_GRAPHICS_API Model : public InstancedRenderable, public Resource
{
public:
using Params = ModelParams;
Model(std::shared_ptr<GraphicalMesh> graphicalMesh);
Model(const Model&) = delete;
Model(Model&&) noexcept = default;
@@ -43,6 +64,10 @@ namespace Nz
Model& operator=(const Model&) = delete;
Model& operator=(Model&&) noexcept = default;
static std::shared_ptr<Model> LoadFromFile(const std::filesystem::path& filePath, const ModelParams& params = ModelParams());
static std::shared_ptr<Model> LoadFromMemory(const void* data, std::size_t size, const ModelParams& params = ModelParams());
static std::shared_ptr<Model> LoadFromStream(Stream& stream, const ModelParams& params = ModelParams());
private:
struct SubMeshData
{