Graphics: Add new functions to get default material types/presets

This commit is contained in:
SirLynix
2023-08-08 18:17:58 +02:00
parent 32f8141bd8
commit cf6fdf258f
20 changed files with 111 additions and 117 deletions

View File

@@ -132,7 +132,7 @@ namespace Nz
auto CreateMaterialFromTexture = [&](std::shared_ptr<Texture> texture)
{
std::shared_ptr<MaterialInstance> material = defaultBasicMaterial.basicMaterial->Instantiate();
std::shared_ptr<MaterialInstance> material = MaterialInstance::Instantiate(MaterialType::Basic);
material->DisablePass(depthPassIndex);
material->UpdatePassStates(forwardPassIndex, [](RenderStates& renderStates)
{

View File

@@ -22,35 +22,18 @@ namespace Nz
void Widgets::CreateDefaultMaterials()
{
const auto& defaultMaterials = Graphics::Instance()->GetDefaultMaterials();
const MaterialPassRegistry& materialPassRegistry = Graphics::Instance()->GetMaterialPassRegistry();
std::size_t depthPassIndex = materialPassRegistry.GetPassIndex("DepthPass");
std::size_t forwardPassIndex = materialPassRegistry.GetPassIndex("ForwardPass");
m_opaqueMaterial = defaultMaterials.basicMaterial->Instantiate();
for (std::size_t passIndex : { depthPassIndex, forwardPassIndex })
m_opaqueMaterial = MaterialInstance::Instantiate(MaterialType::Basic);
m_opaqueMaterial->UpdatePassesStates([](RenderStates& renderStates)
{
m_opaqueMaterial->UpdatePassStates(passIndex, [](RenderStates& renderStates)
{
renderStates.scissorTest = true;
});
}
m_transparentMaterial = defaultMaterials.basicMaterial->Instantiate();
m_transparentMaterial->DisablePass(depthPassIndex);
m_transparentMaterial->UpdatePassStates(forwardPassIndex, [](RenderStates& renderStates)
{
renderStates.blending = true;
renderStates.blend.modeColor = BlendEquation::Add;
renderStates.blend.modeAlpha = BlendEquation::Add;
renderStates.blend.srcColor = BlendFunc::SrcAlpha;
renderStates.blend.dstColor = BlendFunc::InvSrcAlpha;
renderStates.blend.srcAlpha = BlendFunc::One;
renderStates.blend.dstAlpha = BlendFunc::One;
renderStates.depthWrite = false;
renderStates.scissorTest = true;
return true;
});
m_transparentMaterial = MaterialInstance::Instantiate(MaterialType::Basic, MaterialInstancePreset::Transparent);
m_transparentMaterial->UpdatePassesStates([](RenderStates& renderStates)
{
renderStates.scissorTest = true;
return true;
});
}