Graphics/MaterialInstance: Add UpdatePassesStates
This commit is contained in:
parent
55f2937678
commit
3edffa8399
|
|
@ -96,10 +96,17 @@ namespace Nz
|
||||||
void SetValueProperty(std::size_t valueIndex, const MaterialSettings::Value& value);
|
void SetValueProperty(std::size_t valueIndex, const MaterialSettings::Value& value);
|
||||||
|
|
||||||
void UpdateOptionValue(UInt32 optionHash, const nzsl::Ast::ConstantSingleValue& value);
|
void UpdateOptionValue(UInt32 optionHash, const nzsl::Ast::ConstantSingleValue& value);
|
||||||
|
|
||||||
void UpdatePassFlags(std::string_view passName, MaterialPassFlags materialFlags);
|
void UpdatePassFlags(std::string_view passName, MaterialPassFlags materialFlags);
|
||||||
inline void UpdatePassFlags(std::size_t passName, MaterialPassFlags materialFlags);
|
inline void UpdatePassFlags(std::size_t passName, MaterialPassFlags materialFlags);
|
||||||
|
|
||||||
void UpdatePassStates(std::string_view passName, FunctionRef<bool(RenderStates&)> stateUpdater);
|
void UpdatePassStates(std::string_view passName, FunctionRef<bool(RenderStates&)> stateUpdater);
|
||||||
template<typename F> void UpdatePassStates(std::size_t passIndex, F&& 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 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);
|
void UpdateUniformBufferData(std::size_t uniformBufferIndex, std::size_t offset, std::size_t size, const void* data);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,25 @@ namespace Nz
|
||||||
InvalidatePassPipeline(passIndex);
|
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)
|
inline void MaterialInstance::InvalidatePassPipeline(std::size_t passIndex)
|
||||||
{
|
{
|
||||||
assert(passIndex < m_passes.size());
|
assert(passIndex < m_passes.size());
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,13 @@ namespace Nz
|
||||||
return UpdatePassStates(passIndex, stateUpdater);
|
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)
|
void MaterialInstance::SetTextureProperty(std::size_t textureIndex, std::shared_ptr<Texture> texture)
|
||||||
{
|
{
|
||||||
assert(textureIndex < m_textureOverride.size());
|
assert(textureIndex < m_textureOverride.size());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue