From 3cbec605627a160106e244368be95c02387abf54 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 17 Nov 2010 03:51:58 -0600 Subject: [PATCH] Played with trees! -Fixed pine2 'billboard' being crazy large compared to the mesh version -Fixed vanishing trees under certain scenarios -Made LoD less retardedly sensitive when RenderAnimateTrees=true -Moar LLCachedControl --- indra/newview/app_settings/trees.xml | 2 +- indra/newview/lldrawpooltree.cpp | 13 +++++++------ indra/newview/llfloatersettingsdebug.cpp | 2 ++ indra/newview/llvotree.cpp | 13 +++++++++---- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/indra/newview/app_settings/trees.xml b/indra/newview/app_settings/trees.xml index 213ee85fc..274b17377 100644 --- a/indra/newview/app_settings/trees.xml +++ b/indra/newview/app_settings/trees.xml @@ -9,7 +9,7 @@ - + diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 46cd2d5c4..69fbbd983 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -102,7 +102,8 @@ void LLDrawPoolTree::render(S32 pass) LLGLEnable test(GL_ALPHA_TEST); LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f); - if (gSavedSettings.getBOOL("RenderAnimateTrees")) + LLCachedControl render_animate_trees("RenderAnimateTrees",false); + if (render_animate_trees) { renderTree(); } @@ -198,7 +199,8 @@ void LLDrawPoolTree::renderForSelect() 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); - if (gSavedSettings.getBOOL("RenderAnimateTrees")) + LLCachedControl render_animate_trees("RenderAnimateTrees",false); + if (render_animate_trees) { renderTree(TRUE); } @@ -319,8 +321,8 @@ void LLDrawPoolTree::renderTree(BOOL selecting) scale_mat *= rot_mat; - const F32 THRESH_ANGLE_FOR_BILLBOARD = 15.f; - const F32 BLEND_RANGE_FOR_BILLBOARD = 3.f; + const F32 THRESH_ANGLE_FOR_BILLBOARD = 7.5f; //Made LoD now a little less aggressive here -Shyotl + /*const F32 BLEND_RANGE_FOR_BILLBOARD = 1.5f;*/ //Unused, really F32 droop = treep->mDroop + 25.f*(1.f - treep->mTrunkBend.magVec()); @@ -339,7 +341,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting) } } - if (app_angle < (THRESH_ANGLE_FOR_BILLBOARD - BLEND_RANGE_FOR_BILLBOARD)) + if (app_angle < (THRESH_ANGLE_FOR_BILLBOARD/* - BLEND_RANGE_FOR_BILLBOARD*/)) { // // Draw only the billboard @@ -354,7 +356,6 @@ void LLDrawPoolTree::renderTree(BOOL selecting) // // Draw only the full geometry tree // - //stop_depth = (app_angle < THRESH_ANGLE_FOR_RECURSION_REDUCTION); LLFacePool::LLOverrideFaceColor clr(this, color); indices_drawn += treep->drawBranchPipeline(scale_mat, indicesp, trunk_LOD, stop_depth, treep->mDepth, treep->mTrunkDepth, 1.0, treep->mTwist, droop, treep->mBranches, alpha); } diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index 6cbf16e6a..3b36de5de 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -136,6 +136,8 @@ void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data) LLComboBox* settings_combo = floaterp->getChild("settings_combo"); LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); controlp = controlp ? controlp->getCOAActive() : NULL; + if(!controlp)//Uh oh! + return; LLVector3 vector; LLVector3d vectord; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index cc582de8e..03ea8d7db 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -350,7 +350,8 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) } //it's cheaper to check if wind is enabled first - if (gLLWindEnabled && gSavedSettings.getBOOL("RenderAnimateTrees")) + LLCachedControl render_animate_trees("RenderAnimateTrees",false); + if (gLLWindEnabled && render_animate_trees) { F32 mass_inv; @@ -393,7 +394,7 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) } } - if (!gLLWindEnabled || !gSavedSettings.getBOOL("RenderAnimateTrees")) + if (!gLLWindEnabled || !render_animate_trees) { if (mReferenceBuffer.isNull()) { @@ -539,7 +540,8 @@ BOOL LLVOTree::updateGeometry(LLDrawable *drawable) max_vertices += sLODVertexCount[lod]; } - mReferenceBuffer = new LLVertexBuffer(LLDrawPoolTree::VERTEX_DATA_MASK, gSavedSettings.getBOOL("RenderAnimateTrees") ? GL_STATIC_DRAW_ARB : 0); + LLCachedControl render_animate_trees("RenderAnimateTrees",false); + mReferenceBuffer = new LLVertexBuffer(LLDrawPoolTree::VERTEX_DATA_MASK, render_animate_trees ? GL_STATIC_DRAW_ARB : 0); mReferenceBuffer->allocateBuffer(max_vertices, max_indices, TRUE); LLStrider vertices; @@ -843,7 +845,10 @@ BOOL LLVOTree::updateGeometry(LLDrawable *drawable) llassert(index_count == max_indices); } - if (gLLWindEnabled || gSavedSettings.getBOOL("RenderAnimateTrees")) + LLCachedControl render_animate_trees("RenderAnimateTrees",false); + //Ignoring gLLWindEnabled fixes vanishing trees when wind is disabled but anim trees are enabled. + //Using an && here is incorrect, and will cause instability. + if (/*gLLWindEnabled || */render_animate_trees) { mDrawable->getFace(0)->mVertexBuffer = mReferenceBuffer; }