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); + } }