diff options
| -rwxr-xr-x | indra/newview/llagent.cpp | 1 | ||||
| -rwxr-xr-x | indra/newview/llspatialpartition.cpp | 12 | ||||
| -rwxr-xr-x | indra/newview/llspatialpartition.h | 2 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 1 | 
4 files changed, 13 insertions, 3 deletions
| diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 2d7008b4ef..a7bd628d5a 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3802,6 +3802,7 @@ bool LLAgent::teleportCore(bool is_local)  		//release geometry from old location  		gPipeline.resetVertexBuffers(); +		LLSpatialPartition::sTeleportRequested = TRUE;  	}  	make_ui_sound("UISndTeleportOut"); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 725afb9014..c7cd0919ec 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -68,6 +68,7 @@ BOOL LLSpatialGroup::sNoDelete = FALSE;  static F32 sLastMaxTexPriority = 1.f;  static F32 sCurMaxTexPriority = 1.f; +BOOL LLSpatialPartition::sTeleportRequested = FALSE;  //static counter for frame to switch LOD on @@ -900,7 +901,7 @@ void LLSpatialGroup::destroyGL(bool keep_occlusion)  {  	setState(LLSpatialGroup::GEOM_DIRTY | LLSpatialGroup::IMAGE_DIRTY); -	if (!keep_occlusion) +	if (!keep_occlusion && !LLSpatialPartition::sTeleportRequested)  	{ //going to need a rebuild  		gPipeline.markRebuild(this, TRUE);  	} @@ -1392,6 +1393,8 @@ void drawBoxOutline(const LLVector4a& pos, const LLVector4a& size)  class LLOctreeDirty : public OctreeTraveler  {  public: +	LLOctreeDirty(bool no_rebuild) : mNoRebuild(no_rebuild){} +  	virtual void visit(const OctreeNode* state)  	{  		LLSpatialGroup* group = (LLSpatialGroup*) state->getListener(0); @@ -1404,7 +1407,7 @@ public:  			{  				continue;  			} -			if (drawable->getVObj().notNull() && !group->getSpatialPartition()->mRenderByGroup) +			if (!mNoRebuild && drawable->getVObj().notNull() && !group->getSpatialPartition()->mRenderByGroup)  			{  				gPipeline.markRebuild(drawable, LLDrawable::REBUILD_ALL, TRUE);  			} @@ -1416,6 +1419,9 @@ public:  			traverse(bridge->mOctree);  		}  	} + +private: +	BOOL mNoRebuild;  };  void LLSpatialPartition::restoreGL() @@ -1424,7 +1430,7 @@ void LLSpatialPartition::restoreGL()  void LLSpatialPartition::resetVertexBuffers()  { -	LLOctreeDirty dirty; +	LLOctreeDirty dirty(sTeleportRequested);  	dirty.traverse(mOctree);  } diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 5c4cdcdba1..4026175a9a 100755 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -450,6 +450,8 @@ public:  	U32 mVertexDataMask;  	F32 mSlopRatio; //percentage distance must change before drawables receive LOD update (default is 0.25);  	BOOL mDepthMask; //if TRUE, objects in this partition will be written to depth during alpha rendering + +	static BOOL sTeleportRequested; //started to issue a teleport request  };  // class for creating bridges between spatial partitions diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e77d85849d..e71355466a 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7314,6 +7314,7 @@ void LLPipeline::doResetVertexBuffers()  			}  		}  	} +	LLSpatialPartition::sTeleportRequested = FALSE;  	resetDrawOrders(); | 
