From 6d8208bac94ca4ebdd8e4e1030cdb8e38ef3da9f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Tue, 31 Aug 2010 21:34:02 -0700
Subject: [PATCH] SNOW-684 VWR-4232 : Some particles don't disappear when UI is
 hidden

---
 doc/contributions.txt              |  1 +
 indra/newview/llhudeffectbeam.cpp  |  5 +++++
 indra/newview/llhudeffectbeam.h    |  1 +
 indra/newview/llhudeffecttrail.cpp |  5 +++++
 indra/newview/llhudeffecttrail.h   |  1 +
 indra/newview/llhudobject.cpp      | 21 +++++++++++++++++++++
 indra/newview/llhudobject.h        |  2 ++
 indra/newview/pipeline.cpp         | 21 +++++++++++++++++----
 8 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 151243e2dc0..1f374f204a3 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -402,6 +402,7 @@ Michelle2 Zenovka
 Mm Alder
 	VWR-197
 	VWR-3777
+	VWR-4232
 	VWR-4794
 	VWR-13578
 Mr Greggan
diff --git a/indra/newview/llhudeffectbeam.cpp b/indra/newview/llhudeffectbeam.cpp
index 078ccff2d0f..37b7b2e75dc 100644
--- a/indra/newview/llhudeffectbeam.cpp
+++ b/indra/newview/llhudeffectbeam.cpp
@@ -305,6 +305,11 @@ void LLHUDEffectBeam::render()
 	}
 }
 
+void LLHUDEffectBeam::renderForTimer()
+{
+	render();
+}
+
 void LLHUDEffectBeam::setupParticle(const S32 i)
 {
 	LLVector3d start_pos_global;
diff --git a/indra/newview/llhudeffectbeam.h b/indra/newview/llhudeffectbeam.h
index a700e4e6578..fdee5178af2 100644
--- a/indra/newview/llhudeffectbeam.h
+++ b/indra/newview/llhudeffectbeam.h
@@ -52,6 +52,7 @@ class LLHUDEffectBeam : public LLHUDEffect
 	~LLHUDEffectBeam();
 
 	/*virtual*/ void render();
+	/*virtual*/ void renderForTimer();
 	/*virtual*/ void packData(LLMessageSystem *mesgsys);
 	/*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
 private:
diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp
index 90727079740..39b526c1b5a 100644
--- a/indra/newview/llhudeffecttrail.cpp
+++ b/indra/newview/llhudeffecttrail.cpp
@@ -280,3 +280,8 @@ void LLHUDEffectSpiral::render()
 		return;
 	}
 }
+
+void LLHUDEffectSpiral::renderForTimer()
+{
+	render();
+}
diff --git a/indra/newview/llhudeffecttrail.h b/indra/newview/llhudeffecttrail.h
index bade3ff997f..6f5a328c636 100644
--- a/indra/newview/llhudeffecttrail.h
+++ b/indra/newview/llhudeffecttrail.h
@@ -62,6 +62,7 @@ class LLHUDEffectSpiral : public LLHUDEffect
 	~LLHUDEffectSpiral();
 
 	/*virtual*/ void render();
+	/*virtual*/ void renderForTimer();
 	/*virtual*/ void packData(LLMessageSystem *mesgsys);
 	/*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
 private:
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
index 6af0ae2b6a1..3e814a0773e 100644
--- a/indra/newview/llhudobject.cpp
+++ b/indra/newview/llhudobject.cpp
@@ -304,6 +304,27 @@ void LLHUDObject::renderAllForSelect()
 	}
 }
 
+// static
+void LLHUDObject::renderAllForTimer()
+{
+	LLHUDObject *hud_objp;
+	
+	hud_object_list_t::iterator object_it;
+	for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
+	{
+		hud_object_list_t::iterator cur_it = object_it++;
+		hud_objp = (*cur_it);
+		if (hud_objp->getNumRefs() == 1)
+		{
+			sHUDObjects.erase(cur_it);
+		}
+		else if (hud_objp->isVisible())
+		{
+			hud_objp->renderForTimer();
+		}
+	}
+}
+
 // static
 void LLHUDObject::sortObjects()
 {
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
index ff70b6a52f9..97145b9a84d 100644
--- a/indra/newview/llhudobject.h
+++ b/indra/newview/llhudobject.h
@@ -69,6 +69,7 @@ class LLHUDObject : public LLRefCount
 	static void updateAll();
 	static void renderAll();
 	static void renderAllForSelect();
+	static void renderAllForTimer();
 
 	static void cleanupHUDObjects();
 
@@ -100,6 +101,7 @@ class LLHUDObject : public LLRefCount
 
 	virtual void render() = 0;
 	virtual void renderForSelect() {};
+	virtual void renderForTimer() {};
 	
 protected:
 	U8				mType;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e4c2ca9ae39..1ee3b84b5e7 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -3211,11 +3211,24 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 
 	LLVertexBuffer::unbind();
 	
-	if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+	if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
 	{
-		// Render debugging beacons.
-		gObjectList.renderObjectBeacons();
-		gObjectList.resetObjectBeacons();
+		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+		{
+		      // Render debugging beacons.
+		      gObjectList.renderObjectBeacons();
+		      gObjectList.resetObjectBeacons();
+		}
+		else
+		{
+			// Make sure particle effects disappear
+			LLHUDObject::renderAllForTimer();
+		}
+	}
+	else
+	{
+		// Make sure particle effects disappear
+		LLHUDObject::renderAllForTimer();
 	}
 
 	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
-- 
GitLab