Graphics/InstancedRenderable: Add signal to tell some renderables need to be rebuild

This commit is contained in:
Jérôme Leclercq
2021-11-21 19:06:10 +01:00
parent d040cc6767
commit 8f1cc79dc2
6 changed files with 19 additions and 2 deletions

View File

@@ -59,6 +59,17 @@ namespace Nz
auto& renderableData = renderableMap.emplace(instancedRenderable, RenderableData{}).first->second;
renderableData.renderMask = renderMask;
renderableData.onElementInvalidated.Connect(instancedRenderable->OnElementInvalidated, [this](InstancedRenderable* instancedRenderable)
{
// TODO: Invalidate only relevant viewers
for (auto&& [viewer, viewerData] : m_viewers)
{
viewerData.rebuildDepthPrepass = true;
viewerData.rebuildForwardPass = true;
viewerData.prepare = true;
}
});
renderableData.onMaterialInvalidated.Connect(instancedRenderable->OnMaterialInvalidated, [this](InstancedRenderable* instancedRenderable, std::size_t materialIndex, const std::shared_ptr<Material>& newMaterial)
{
if (newMaterial)
@@ -80,6 +91,7 @@ namespace Nz
UnregisterMaterialPass(pass.get());
}
// TODO: Invalidate only relevant viewers
for (auto&& [viewer, viewerData] : m_viewers)
{
viewerData.rebuildDepthPrepass = true;

View File

@@ -209,6 +209,7 @@ namespace Nz
}
UpdateAABB(bounds);
OnElementInvalidated(this);
clearOnFail.Reset();
}