Refactor material system (#382)
This commit is contained in:
@@ -3,11 +3,7 @@
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/Formats/TextureLoader.hpp>
|
||||
#include <Nazara/Graphics/BasicMaterial.hpp>
|
||||
#include <Nazara/Graphics/DepthMaterial.hpp>
|
||||
#include <Nazara/Graphics/Graphics.hpp>
|
||||
#include <Nazara/Graphics/PhongLightingMaterial.hpp>
|
||||
#include <Nazara/Graphics/PhysicallyBasedMaterial.hpp>
|
||||
#include <Nazara/Renderer/Texture.hpp>
|
||||
#include <Nazara/Utility/Utility.hpp>
|
||||
#include <Nazara/Graphics/Debug.hpp>
|
||||
@@ -16,15 +12,15 @@ namespace Nz
|
||||
{
|
||||
namespace Loaders
|
||||
{
|
||||
MaterialLoader::Entry GetMaterialLoader_Texture()
|
||||
MaterialInstanceLoader::Entry GetMaterialInstanceLoader_Texture()
|
||||
{
|
||||
MaterialLoader::Entry loaderEntry;
|
||||
MaterialInstanceLoader::Entry loaderEntry;
|
||||
loaderEntry.extensionSupport = [](std::string_view extension)
|
||||
{
|
||||
return Utility::Instance()->GetImageLoader().IsExtensionSupported(extension);
|
||||
};
|
||||
|
||||
loaderEntry.streamLoader = [](Stream& stream, const MaterialParams& parameters) -> Result<std::shared_ptr<Material>, ResourceLoadingError>
|
||||
loaderEntry.streamLoader = [](Stream& stream, const MaterialInstanceParams& parameters) -> Result<std::shared_ptr<MaterialInstance>, ResourceLoadingError>
|
||||
{
|
||||
TextureParams texParams;
|
||||
texParams.renderDevice = Graphics::Instance()->GetRenderDevice();
|
||||
@@ -33,50 +29,35 @@ namespace Nz
|
||||
if (!texture)
|
||||
return Err(ResourceLoadingError::Unrecognized);
|
||||
|
||||
std::shared_ptr<Material> material = std::make_shared<Material>();
|
||||
|
||||
bool hasAlphaTest = parameters.custom.GetBooleanParameter("EnableAlphaTest").GetValueOr(false);
|
||||
|
||||
// ForwardPass
|
||||
std::shared_ptr<MaterialInstance> materialInstance;
|
||||
switch (parameters.lightingType)
|
||||
{
|
||||
std::shared_ptr<MaterialPass> matPass;
|
||||
if (parameters.lightingType == MaterialLightingType::Phong)
|
||||
matPass = std::make_shared<MaterialPass>(PhongLightingMaterial::GetSettings());
|
||||
else if (parameters.lightingType == MaterialLightingType::PhysicallyBased)
|
||||
matPass = std::make_shared<MaterialPass>(PhysicallyBasedMaterial::GetSettings());
|
||||
else
|
||||
matPass = std::make_shared<MaterialPass>(BasicMaterial::GetSettings());
|
||||
case MaterialLightingType::Phong:
|
||||
materialInstance = Graphics::Instance()->GetDefaultMaterials().phongMaterial->CreateInstance();
|
||||
break;
|
||||
|
||||
matPass->EnableDepthBuffer(true);
|
||||
case MaterialLightingType::PhysicallyBased:
|
||||
materialInstance = Graphics::Instance()->GetDefaultMaterials().pbrMaterial->CreateInstance();
|
||||
break;
|
||||
|
||||
BasicMaterial forwardPass(*matPass);
|
||||
forwardPass.SetBaseColorMap(texture);
|
||||
|
||||
if (hasAlphaTest && PixelFormatInfo::HasAlpha(texture->GetFormat()))
|
||||
forwardPass.EnableAlphaTest(true);
|
||||
|
||||
material->AddPass("ForwardPass", std::move(matPass));
|
||||
case MaterialLightingType::None:
|
||||
break;
|
||||
}
|
||||
|
||||
// DepthPass
|
||||
{
|
||||
std::shared_ptr<MaterialPass> matPass = std::make_shared<MaterialPass>(DepthMaterial::GetSettings());
|
||||
matPass->EnableDepthBuffer(true);
|
||||
if (!materialInstance)
|
||||
materialInstance = Graphics::Instance()->GetDefaultMaterials().basicMaterial->CreateInstance();
|
||||
|
||||
if (hasAlphaTest && PixelFormatInfo::HasAlpha(texture->GetFormat()))
|
||||
{
|
||||
BasicMaterial depthPass(*matPass);
|
||||
depthPass.SetBaseColorMap(texture);
|
||||
depthPass.EnableAlphaTest(true);
|
||||
}
|
||||
if (hasAlphaTest && PixelFormatInfo::HasAlpha(texture->GetFormat()))
|
||||
materialInstance->SetValueProperty("AlphaTest", true);
|
||||
|
||||
material->AddPass("DepthPass", std::move(matPass));
|
||||
}
|
||||
materialInstance->SetTextureProperty("BaseColorMap", std::move(texture));
|
||||
|
||||
return material;
|
||||
return materialInstance;
|
||||
};
|
||||
|
||||
loaderEntry.parameterFilter = [](const MaterialParams& parameters)
|
||||
loaderEntry.parameterFilter = [](const MaterialInstanceParams& parameters)
|
||||
{
|
||||
if (auto result = parameters.custom.GetBooleanParameter("SkipNativeTextureLoader"); result.GetValueOr(false))
|
||||
return false;
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
#define NAZARA_GRAPHICS_FORMATS_TEXTURELOADER_HPP
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Graphics/Material.hpp>
|
||||
#include <Nazara/Graphics/MaterialInstance.hpp>
|
||||
|
||||
namespace Nz::Loaders
|
||||
{
|
||||
MaterialLoader::Entry GetMaterialLoader_Texture();
|
||||
MaterialInstanceLoader::Entry GetMaterialInstanceLoader_Texture();
|
||||
}
|
||||
|
||||
#endif // NAZARA_GRAPHICS_FORMATS_TEXTURELOADER_HPP
|
||||
|
||||
Reference in New Issue
Block a user