From fe0d70d9e12209eb60da0aeac2edba5b94065c33 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Sat, 5 Nov 2022 00:28:33 +0100 Subject: [PATCH] Graphics/MaterialInstance: Add LoadFrom* --- include/Nazara/Graphics/MaterialInstance.hpp | 6 ++++- src/Nazara/Graphics/MaterialInstance.cpp | 24 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Graphics/MaterialInstance.hpp b/include/Nazara/Graphics/MaterialInstance.hpp index 43aaa6045..b9e0583b1 100644 --- a/include/Nazara/Graphics/MaterialInstance.hpp +++ b/include/Nazara/Graphics/MaterialInstance.hpp @@ -39,7 +39,7 @@ namespace Nz using MaterialInstanceManager = ResourceManager; using MaterialInstanceSaver = ResourceSaver; - class NAZARA_GRAPHICS_API MaterialInstance : public TransferInterface + class NAZARA_GRAPHICS_API MaterialInstance : public Resource, public TransferInterface { struct CopyToken {}; @@ -106,6 +106,10 @@ namespace Nz static constexpr std::size_t InvalidPropertyIndex = MaterialSettings::InvalidPropertyIndex; + static std::shared_ptr LoadFromFile(const std::filesystem::path& filePath, const MaterialInstanceParams& params = MaterialInstanceParams()); + static std::shared_ptr LoadFromMemory(const void* data, std::size_t size, const MaterialInstanceParams& params = MaterialInstanceParams()); + static std::shared_ptr LoadFromStream(Stream& stream, const MaterialInstanceParams& params = MaterialInstanceParams()); + NazaraSignal(OnMaterialInstancePipelineInvalidated, const MaterialInstance* /*matInstance*/, std::size_t /*passIndex*/); NazaraSignal(OnMaterialInstanceShaderBindingInvalidated, const MaterialInstance* /*matInstance*/); diff --git a/src/Nazara/Graphics/MaterialInstance.cpp b/src/Nazara/Graphics/MaterialInstance.cpp index d484873af..7699c5d71 100644 --- a/src/Nazara/Graphics/MaterialInstance.cpp +++ b/src/Nazara/Graphics/MaterialInstance.cpp @@ -337,4 +337,28 @@ namespace Nz OnTransferRequired(this); } + + std::shared_ptr MaterialInstance::LoadFromFile(const std::filesystem::path& filePath, const MaterialInstanceParams& params) + { + Graphics* graphics = Graphics::Instance(); + NazaraAssert(graphics, "Utility module has not been initialized"); + + return graphics->GetMaterialInstanceLoader().LoadFromFile(filePath, params); + } + + std::shared_ptr MaterialInstance::LoadFromMemory(const void* data, std::size_t size, const MaterialInstanceParams& params) + { + Graphics* graphics = Graphics::Instance(); + NazaraAssert(graphics, "Utility module has not been initialized"); + + return graphics->GetMaterialInstanceLoader().LoadFromMemory(data, size, params); + } + + std::shared_ptr MaterialInstance::LoadFromStream(Stream& stream, const MaterialInstanceParams& params) + { + Graphics* graphics = Graphics::Instance(); + NazaraAssert(graphics, "Utility module has not been initialized"); + + return graphics->GetMaterialInstanceLoader().LoadFromStream(stream, params); + } }