From 347585cf975afac59ec6b9960e093acd015627f5 Mon Sep 17 00:00:00 2001 From: Monroe Linden Date: Wed, 10 Mar 2010 14:32:40 -0800 Subject: 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/llui.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indra/llui/llui.cpp') diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 5121ef5351..9134adc6d1 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); -- cgit v1.3 From 58afe469f9d29aea0d3d974ac112725ddbaa3a19 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 12 Mar 2010 13:01:50 -0600 Subject: Bizarrely hacky fix for EXT-6276 (#if LL_DARWIN out copyFromPrimarySubstring) General gl state cleanup in llui. Make llrender more gGL.begin/end friendly. --- indra/llrender/llrender.cpp | 32 ++++++++++++++++++++++++++++++++ indra/llui/llaccordionctrltab.cpp | 3 --- indra/llui/llclipboard.cpp | 2 ++ indra/llui/llui.cpp | 8 ++++---- indra/llui/llview.cpp | 3 --- 5 files changed, 38 insertions(+), 10 deletions(-) (limited to 'indra/llui/llui.cpp') diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 9acfb6b0a8..26282b0ee3 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -121,6 +121,8 @@ void LLTexUnit::refreshState(void) // We set dirty to true so that the tex unit knows to ignore caching // and we reset the cached tex unit state + gGL.flush(); + glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); if (mCurrTexType != TT_NONE) { @@ -182,6 +184,7 @@ void LLTexUnit::disable(void) { activate(); unbind(mCurrTexType); + gGL.flush(); glDisable(sGLTextureType[mCurrTexType]); mCurrTexType = TT_NONE; } @@ -717,6 +720,7 @@ void LLTexUnit::setColorScale(S32 scale) if (mCurrColorScale != scale || gGL.mDirty) { mCurrColorScale = scale; + gGL.flush(); glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale ); } } @@ -726,6 +730,7 @@ void LLTexUnit::setAlphaScale(S32 scale) if (mCurrAlphaScale != scale || gGL.mDirty) { mCurrAlphaScale = scale; + gGL.flush(); glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale ); } } @@ -1113,6 +1118,33 @@ void LLRender::flush() sUICalls++; sUIVerts += mCount; } + + if (gDebugGL) + { + if (mMode == LLRender::QUADS) + { + if (mCount%4 != 0) + { + llerrs << "Incomplete quad rendered." << llendl; + } + } + + if (mMode == LLRender::TRIANGLES) + { + if (mCount%3 != 0) + { + llerrs << "Incomplete triangle rendered." << llendl; + } + } + + if (mMode == LLRender::LINES) + { + if (mCount%2 != 0) + { + llerrs << "Incomplete line rendered." << llendl; + } + } + } mBuffer->setBuffer(immediate_mask); mBuffer->drawArrays(mMode, 0, mCount); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 1067c3f1d5..e12776f83a 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -826,9 +826,6 @@ void LLAccordionCtrlTab::draw() LLLocalClipRect clip(child_rect); drawChild(root_rect,mContainerPanel); } - - - gGL.getTexUnit(0)->disable(); } } diff --git a/indra/llui/llclipboard.cpp b/indra/llui/llclipboard.cpp index cbd4cb380f..400b899ef2 100644 --- a/indra/llui/llclipboard.cpp +++ b/indra/llui/llclipboard.cpp @@ -103,9 +103,11 @@ BOOL LLClipboard::canPasteString() const void LLClipboard::copyFromPrimarySubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id ) { +#if !LL_DARWIN mSourceID = source_id; mString = src.substr(pos, len); LLView::getWindow()->copyTextToPrimary( mString ); +#endif } diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 9134adc6d1..28ca83ad48 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -212,7 +212,7 @@ void gl_rect_2d(S32 left, S32 top, S32 right, S32 bottom, BOOL filled ) // Counterclockwise quad will face the viewer if( filled ) - { + { gGL.begin( LLRender::QUADS ); gGL.vertex2i(left, top); gGL.vertex2i(left, bottom); @@ -513,8 +513,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); - gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); + //gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + //gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); } gGL.pushUIMatrix(); @@ -650,7 +650,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } } diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index d34083a384..d0dbc99bc7 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1325,7 +1325,6 @@ void LLView::drawChildren() localRectToScreen(viewp->getRect(),&screenRect); if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect)) { - glMatrixMode(GL_MODELVIEW); LLUI::pushMatrix(); { LLUI::translate((F32)viewp->getRect().mLeft, (F32)viewp->getRect().mBottom, 0.f); @@ -1349,8 +1348,6 @@ void LLView::drawChildren() } --sDepth; } - - gGL.getTexUnit(0)->disable(); } void LLView::dirtyRect() -- cgit v1.3 From 4c8ae214b3f9745102ee90c25d9f67183aea0903 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 12 Mar 2010 14:11:08 -0600 Subject: Didn't mean to check in with these lines commented out. --- indra/llui/llui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/llui/llui.cpp') diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 28ca83ad48..2cd3bac7dd 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -513,8 +513,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - //gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); - //gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); } gGL.pushUIMatrix(); @@ -650,7 +650,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex if (solid_color) { - //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } } -- cgit v1.3 From 7ac2427b57c2d8e325b5e9c7fa87076bcaf2f6ef Mon Sep 17 00:00:00 2001 From: Monroe Linden Date: Fri, 12 Mar 2010 12:14:35 -0800 Subject: Backed out changeset 6fdd352b80d6 We thought this was a fix for EXT-6276, but it turned out it was just moving the problem. --- indra/llui/lltextbase.cpp | 9 ++------- indra/llui/llui.cpp | 5 ----- 2 files changed, 2 insertions(+), 12 deletions(-) (limited to 'indra/llui/llui.cpp') diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 48aa406901..851fb966ec 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -396,13 +396,8 @@ void LLTextBase::drawSelectionBackground() ++rect_it) { LLRect selection_rect = *rect_it; - // 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); - } + 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 9134adc6d1..5121ef5351 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -202,11 +202,6 @@ 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); -- cgit v1.3