From c59c466674dd8d535891a3e05c3c2e563079f52c Mon Sep 17 00:00:00 2001 From: Almamu Date: Fri, 25 Apr 2025 20:40:26 +0200 Subject: [PATCH] chore: delete uniforms if they already exist before setting --- .../Render/Objects/Effects/CPass.cpp | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp b/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp index 713b1ff..39e8292 100644 --- a/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp +++ b/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp @@ -617,6 +617,13 @@ template void CPass::addUniform (const std::string& name, UniformTy if (id == -1) return; + // free the uniform that's already registered if it's there already + const auto it = this->m_uniforms.find (name); + + if (it != this->m_uniforms.end ()) { + delete it->second; + } + // build a copy of the value and allocate it somewhere T* newValue = new T (value); @@ -632,6 +639,13 @@ template void CPass::addUniform (const std::string& name, UniformTy if (id == -1) return; + // free the uniform that's already registered if it's there already + const auto it = this->m_uniforms.find (name); + + if (it != this->m_uniforms.end ()) { + delete it->second; + } + // uniform found, add it to the list this->m_uniforms.insert_or_assign (name, new UniformEntry (id, name, type, value, count)); } @@ -644,6 +658,13 @@ template void CPass::addUniform (const std::string& name, UniformTy if (id == -1) return; + // free the uniform that's already registered if it's there already + const auto it = this->m_uniforms.find (name); + + if (it != this->m_uniforms.end ()) { + delete it->second; + } + // uniform found, add it to the list this->m_referenceUniforms.insert_or_assign ( name, new ReferenceUniformEntry (id, name, type, reinterpret_cast (value))); @@ -684,15 +705,15 @@ void CPass::addUniform (CShaderVariable* value) { void CPass::addUniform (CShaderVariable* value, const CDynamicValue* setting) { if (value->is ()) { - this->addUniform (value->getName (), setting->getFloat ()); + this->addUniform (value->getName (), &setting->getFloat ()); } else if (value->is ()) { - this->addUniform (value->getName (), setting->getInt ()); + this->addUniform (value->getName (), &setting->getInt ()); } else if (value->is ()) { - this->addUniform (value->getName (), setting->getVec2 ()); + this->addUniform (value->getName (), &setting->getVec2 ()); } else if (value->is ()) { - this->addUniform (value->getName (), setting->getVec3 ()); + this->addUniform (value->getName (), &setting->getVec3 ()); } else if (value->is ()) { - this->addUniform (value->getName (), setting->getVec4 ()); + this->addUniform (value->getName (), &setting->getVec4 ()); } else { sLog.error ("Cannot convert setting dynamic value to ", value->getName (), ". Using default value"); }