From e0db2e69f8639a197c57366ecfb08d3c8eef6850 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 9 Jan 2017 14:23:05 +0100 Subject: [PATCH] Graphics/InstancedRenderable: Add OnInstancedRenderableInvalidateMaterial signal --- include/Nazara/Graphics/InstancedRenderable.hpp | 1 + include/Nazara/Graphics/InstancedRenderable.inl | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Graphics/InstancedRenderable.hpp b/include/Nazara/Graphics/InstancedRenderable.hpp index 965b06dbb..fb41495a6 100644 --- a/include/Nazara/Graphics/InstancedRenderable.hpp +++ b/include/Nazara/Graphics/InstancedRenderable.hpp @@ -66,6 +66,7 @@ namespace Nz // Signals: NazaraSignal(OnInstancedRenderableInvalidateBoundingVolume, const InstancedRenderable* /*instancedRenderable*/); NazaraSignal(OnInstancedRenderableInvalidateData, const InstancedRenderable* /*instancedRenderable*/, UInt32 /*flags*/); + NazaraSignal(OnInstancedRenderableInvalidateMaterial, const InstancedRenderable* /*instancedRenderable*/, std::size_t /*skinIndex*/, std::size_t /*matIndex*/, MaterialRef /*newMat*/); NazaraSignal(OnInstancedRenderableRelease, const InstancedRenderable* /*instancedRenderable*/); struct InstanceData diff --git a/include/Nazara/Graphics/InstancedRenderable.inl b/include/Nazara/Graphics/InstancedRenderable.inl index 62e1c8966..e30f6b3d8 100644 --- a/include/Nazara/Graphics/InstancedRenderable.inl +++ b/include/Nazara/Graphics/InstancedRenderable.inl @@ -230,7 +230,13 @@ namespace Nz NazaraAssert(matIndex < m_materials.size(), "Material index out of bounds"); NazaraAssert(material.IsValid(), "Material must be valid"); - m_materials[m_matCount * skinIndex + matIndex] = std::move(material); + MaterialRef& matEntry = m_materials[m_matCount * skinIndex + matIndex]; + if (matEntry != material) + { + OnInstancedRenderableInvalidateMaterial(this, skinIndex, matIndex, material); + + matEntry = std::move(material); + } } /*!