From 8f9c8ee2931c11142468bf015f92a74682419d26 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Thu, 13 Sep 2012 15:47:47 -0500 Subject: [PATCH] Disabled reundant mesh wireframe passes. Outline wireframe pass not needed if sRenderHiddenSelections is set. Also enabled backface culling for outline pass. While these changes do improve performance a bit, they also seem to fix an atioglxx.dll crash (driver bug?) --- indra/newview/llselectmgr.cpp | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 513e92f3a..ea7fd23e6 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5484,6 +5484,8 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); + gGL.pushUIMatrix(); + gGL.loadUIIdentity(); gGL.loadIdentity(); gGL.loadMatrix(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame gGL.translatef(-hud_bbox.getCenterLocal().mV[VX] + (depth *0.5f), 0.f, 0.f); @@ -5576,6 +5578,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.popMatrix(); + gGL.popUIMatrix(); stop_glerror(); } @@ -5898,8 +5901,8 @@ void pushWireframe(LLDrawable* drawable) if (drawable->isState(LLDrawable::RIGGED)) { - vobj->updateRiggedVolume(); - volume = vobj->getRiggedVolume(); + vobj->updateRiggedVolume(); + volume = vobj->getRiggedVolume(); } else { @@ -5941,6 +5944,8 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) gDebugProgram.bind(); } + static LLCachedControl mode("OutlineMode",0); + gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); @@ -5961,10 +5966,12 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + //Singu Note: Diverges from v3. If sRenderHiddenSelections set, draw non-z-culled wireframe, else draw occluded 'thick' wireframe to create an outline. if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) { gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); + if (shader) { gGL.diffuseColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); @@ -5987,17 +5994,19 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) } } } + else + { + LLGLEnable cull_face(GL_CULL_FACE); + LLGLEnable offset(GL_POLYGON_OFFSET_LINE); - gGL.flush(); - gGL.setSceneBlendType(LLRender::BT_ALPHA); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + gGL.diffuseColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); + glPolygonOffset(3.f, 3.f); + glLineWidth(3.f); + pushWireframe(drawable); + glLineWidth(1.f); + } - gGL.diffuseColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); - - LLGLEnable offset(GL_POLYGON_OFFSET_LINE); - glPolygonOffset(3.f, 3.f); - glLineWidth(3.f); - pushWireframe(drawable); - glLineWidth(1.f); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); gGL.popMatrix(); @@ -6053,6 +6062,9 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); + gGL.pushUIMatrix(); + gGL.loadUIIdentity(); + if (!is_hud_object) { gGL.loadIdentity(); @@ -6169,6 +6181,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) gGL.flush(); } gGL.popMatrix(); + gGL.popUIMatrix(); if (shader) {