Graphics/MaterialInstance: Add UpdatePassesStates

This commit is contained in:
SirLynix 2023-03-09 17:51:03 +01:00
parent 55f2937678
commit 3edffa8399
3 changed files with 33 additions and 0 deletions

View File

@ -96,10 +96,17 @@ namespace Nz
void SetValueProperty(std::size_t valueIndex, const MaterialSettings::Value& value);
void UpdateOptionValue(UInt32 optionHash, const nzsl::Ast::ConstantSingleValue& value);
void UpdatePassFlags(std::string_view passName, MaterialPassFlags materialFlags);
inline void UpdatePassFlags(std::size_t passName, MaterialPassFlags materialFlags);
void UpdatePassStates(std::string_view passName, FunctionRef<bool(RenderStates&)> stateUpdater);
template<typename F> void UpdatePassStates(std::size_t passIndex, F&& stateUpdater);
void UpdatePassesStates(std::initializer_list<std::string_view> passesName, FunctionRef<bool(RenderStates&)> stateUpdater);
template<typename F> void UpdatePassesStates(std::initializer_list<std::size_t> passesIndex, F&& stateUpdater);
template<typename F> void UpdatePassesStates(F&& stateUpdater, bool ignoreDisabled = true);
void UpdateTextureBinding(std::size_t textureBinding, std::shared_ptr<Texture> texture, std::shared_ptr<TextureSampler> textureSampler);
void UpdateUniformBufferData(std::size_t uniformBufferIndex, std::size_t offset, std::size_t size, const void* data);

View File

@ -200,6 +200,25 @@ namespace Nz
InvalidatePassPipeline(passIndex);
}
template<typename F>
void MaterialInstance::UpdatePassesStates(std::initializer_list<std::size_t> passesIndex, F&& stateUpdater)
{
for (std::size_t passIndex : passesIndex)
UpdatePassStates(passIndex, stateUpdater);
}
template<typename F>
void MaterialInstance::UpdatePassesStates(F&& stateUpdater, bool ignoreDisabled)
{
for (std::size_t i = 0; i < m_passes.size(); ++i)
{
if (ignoreDisabled && !m_passes[i].enabled)
continue;
UpdatePassStates(i, stateUpdater);
}
}
inline void MaterialInstance::InvalidatePassPipeline(std::size_t passIndex)
{
assert(passIndex < m_passes.size());

View File

@ -253,6 +253,13 @@ namespace Nz
return UpdatePassStates(passIndex, stateUpdater);
}
void MaterialInstance::UpdatePassesStates(std::initializer_list<std::string_view> passesName, FunctionRef<bool(RenderStates&)> stateUpdater)
{
auto& materialPassRegistry = Graphics::Instance()->GetMaterialPassRegistry();
for (std::string_view passName : passesName)
UpdatePassStates(materialPassRegistry.GetPassIndex(passName), stateUpdater);
}
void MaterialInstance::SetTextureProperty(std::size_t textureIndex, std::shared_ptr<Texture> texture)
{
assert(textureIndex < m_textureOverride.size());