From 347585cf975afac59ec6b9960e093acd015627f5 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 10 Mar 2010 14:32:40 -0800
Subject: [PATCH] Fix for EXT-6276.

Added a check in LLTextBase::drawSelectionBackground() to keep it from sending degenerate rectangles to gl_rect_2d().  This seems to be what was causing the GL state to go bad.

Reviewed by Richard at http://codereview.lindenlab.com/534001
---
 indra/llui/lltextbase.cpp | 9 +++++++--
 indra/llui/llui.cpp       | 5 +++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 851fb966ece..48aa4069017 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -396,8 +396,13 @@ void LLTextBase::drawSelectionBackground()
 			++rect_it)
 		{
 			LLRect selection_rect = *rect_it;
-			selection_rect.translate(mVisibleTextRect.mLeft - content_display_rect.mLeft, mVisibleTextRect.mBottom - content_display_rect.mBottom);
-			gl_rect_2d(selection_rect, selection_color);
+			// Don't send empty rects to gl_rect_2d.
+			// Drawing degenerate rectangles seems to cause https://jira.secondlife.com/browse/EXT-6276 .
+			if(selection_rect.notEmpty())
+			{
+				selection_rect.translate(mVisibleTextRect.mLeft - content_display_rect.mLeft, mVisibleTextRect.mBottom - content_display_rect.mBottom);
+				gl_rect_2d(selection_rect, selection_color);
+			}
 		}
 	}
 }
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 5121ef53515..9134adc6d14 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -202,6 +202,11 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixe
 
 void gl_rect_2d(S32 left, S32 top, S32 right, S32 bottom, BOOL filled )
 {
+	// FIXME: Drawing degenerate rectangles (specifically, zero-width rectangles) was causing 
+	// https://jira.secondlife.com/browse/EXT-6276 on the Mac (presumably it was doing something bad to the GL state).
+	// That was fixed by checking for this case in LLTextBase::drawSelectionBackground().
+	// It's possible we should check for degenerate rectangles here and not draw, but I wanted to do the minimal change for the moment.
+	
 	stop_glerror();
 	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 
-- 
GitLab