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;
}