From f2fc69c65650bf5db4f0ea098be7bd5fe37f224d Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Thu, 6 Oct 2011 17:31:59 -0500
Subject: [PATCH] SH-2240 Fix for crash when rendering beacons and Debug GL
 enabled -- flush every 128 beacons to keep from hitting the end of the
 immediate mode wrapper buffer.

---
 indra/newview/llglsandbox.cpp | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 844d7ba41c8..3f773effcb1 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -789,6 +789,8 @@ void LLViewerObjectList::renderObjectBeacons()
 		// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
 		
 		BOOL flush = FALSE;
+		S32 flush_me = 128;
+
 		for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
 		{
 			const LLDebugBeacon &debug_beacon = *iter;
@@ -818,6 +820,14 @@ void LLViewerObjectList::renderObjectBeacons()
 			gGL.vertex3f(thisline.mV[VX],thisline.mV[VY] + 2.f,thisline.mV[VZ]);
 
 			draw_line_cube(0.10f, thisline);
+
+			if (--flush_me <= 0)
+			{
+				flush_me = 128;
+				gGL.end();
+				gGL.flush();
+				gGL.begin(LLRender::LINES);
+			}
 		}
 		gGL.end();
 	}
@@ -830,6 +840,8 @@ void LLViewerObjectList::renderObjectBeacons()
 		// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
 		
 		BOOL flush = FALSE;
+		S32 flush_me = 128;
+
 		for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
 		{
 			const LLDebugBeacon &debug_beacon = *iter;
@@ -858,6 +870,14 @@ void LLViewerObjectList::renderObjectBeacons()
 			gGL.vertex3f(thisline.mV[VX],thisline.mV[VY] + 0.5f,thisline.mV[VZ]);
 
 			draw_line_cube(0.10f, thisline);
+
+			if (--flush_me <= 0)
+			{
+				flush_me = 128;
+				gGL.end();
+				gGL.flush();
+				gGL.begin(LLRender::LINES);
+			}
 		}
 		
 		gGL.end();
-- 
GitLab