diff options
| -rw-r--r-- | indra/newview/llface.cpp | 54 | ||||
| -rw-r--r-- | indra/newview/llface.h | 11 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 40 | 
3 files changed, 15 insertions, 90 deletions
| diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index bc8d7fa71f..49a20d5ef9 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -187,12 +187,6 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  	mFaceColor = LLColor4(1,0,0,1); -	mLastVertexBuffer = mVertexBuffer; -	mLastGeomCount = mGeomCount; -	mLastGeomIndex = mGeomIndex; -	mLastIndicesCount = mIndicesCount; -	mLastIndicesIndex = mIndicesIndex; -  	mImportanceToCamera = 0.f ;  	mBoundingSphereRadius = 0.0f ; @@ -219,6 +213,7 @@ void LLFace::destroy()  		mIndicesIndex != 0xFFFFFFFF)  	{  		LLVOPartGroup::freeVBSlot(getGeomIndex()/4); +		mIndicesIndex = 0xFFFFFFFF;  	}  	if (mDrawPoolp) @@ -390,7 +385,6 @@ void LLFace::setSize(S32 num_vertices, S32 num_indices, bool align)  		mGeomCount    = num_vertices;  		mIndicesCount = num_indices;  		mVertexBuffer = NULL; -		mLastVertexBuffer = NULL;  	}  	llassert(verify()); @@ -783,12 +777,6 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,  		LLMatrix4a mat_normal;  		mat_normal.loadu(mat_normal_in); -		//if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME)) -		//{ //vertex buffer no longer valid -		//	mVertexBuffer = NULL; -		//	mLastVertexBuffer = NULL; -		//} -  		//VECTORIZE THIS  		LLVector4a min,max; @@ -1050,30 +1038,13 @@ bool LLFace::calcAlignedPlanarTE(const LLFace* align_to,  LLVector2* res_st_offs  void LLFace::updateRebuildFlags()  { -	if (!mDrawablep->isState(LLDrawable::REBUILD_VOLUME)) -	{ -		BOOL moved = TRUE; -		if (mLastVertexBuffer == mVertexBuffer &&  -			!mVertexBuffer->isEmpty()) -		{	//this face really doesn't need to be regenerated, try real hard not to do so -			if (mLastGeomCount == mGeomCount && -				mLastGeomIndex == mGeomIndex && -				mLastIndicesCount == mIndicesCount && -				mLastIndicesIndex == mIndicesIndex) -			{ //data is in same location in vertex buffer -				moved = FALSE; -			} -		} -		mLastMoveTime = gFrameTimeSeconds; -		 -		if (moved) -		{ -			mDrawablep->setState(LLDrawable::REBUILD_VOLUME); -		} +	if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME)) +	{ //this rebuild is zero overhead (direct consequence of some change that affects this face) +		mLastUpdateTime = gFrameTimeSeconds;  	}  	else -	{ -		mLastUpdateTime = gFrameTimeSeconds; +	{ //this rebuild is overhead (side effect of some change that does not affect this face) +		mLastMoveTime = gFrameTimeSeconds;  	}  } @@ -1228,9 +1199,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  					<< " VF Num Indices: " << num_indices  					<< " Indices Index: " << mIndicesIndex  					<< " VB Num Indices: " << mVertexBuffer->getNumIndices() << llendl; -			llwarns	<< "Last Indices Count: " << mLastIndicesCount -					<< " Last Indices Index: " << mLastIndicesIndex -					<< " Face Index: " << f +			llwarns	<< " Face Index: " << f  					<< " Pool Type: " << mPoolType << llendl;  			return FALSE;  		} @@ -1404,6 +1373,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  	static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback"); +#ifdef GL_TRANSFORM_FEEDBACK_BUFFER  	if (use_transform_feedback &&  		gTransformPositionProgram.mProgramObject && //transform shaders are loaded  		mVertexBuffer->useVBOs() && //target buffer is in VRAM @@ -1547,6 +1517,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  		}  	}  	else +#endif  	{  		//if it's not fullbright and has no normals, bake sunlight based on face normal  		//bool bake_sunlight = !getTextureEntry()->getFullbright() && @@ -2167,12 +2138,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  	} -	mLastVertexBuffer = mVertexBuffer; -	mLastGeomCount = mGeomCount; -	mLastGeomIndex = mGeomIndex; -	mLastIndicesCount = mIndicesCount; -	mLastIndicesIndex = mIndicesIndex; -  	return TRUE;  } @@ -2751,7 +2716,6 @@ void LLFace::setVertexBuffer(LLVertexBuffer* buffer)  void LLFace::clearVertexBuffer()  {  	mVertexBuffer = NULL; -	mLastVertexBuffer = NULL;  }  //static diff --git a/indra/newview/llface.h b/indra/newview/llface.h index c31f357693..76ea5c853a 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -224,7 +224,7 @@ public:  	//vertex buffer tracking  	void setVertexBuffer(LLVertexBuffer* buffer); -	void clearVertexBuffer(); //sets mVertexBuffer and mLastVertexBuffer to NULL +	void clearVertexBuffer(); //sets mVertexBuffer to NULL  	LLVertexBuffer* getVertexBuffer()	const	{ return mVertexBuffer; }  	U32 getRiggedVertexBufferDataMask() const;  	S32 getRiggedIndex(U32 type) const; @@ -257,8 +257,7 @@ public:  private:  	LLPointer<LLVertexBuffer> mVertexBuffer; -	LLPointer<LLVertexBuffer> mLastVertexBuffer; -	 +		  	U32			mState;  	LLFacePool*	mDrawPoolp;  	U32			mPoolType; @@ -271,12 +270,6 @@ private:  	U32			mIndicesIndex;		// index into draw pool for indices (yeah, I know!)  	S32         mIndexInTex ; -	//previous rebuild's geometry info -	U16			mLastGeomCount; -	U16			mLastGeomIndex; -	U32			mLastIndicesCount; -	U32			mLastIndicesIndex; -  	LLXformMatrix* mXform;  	LLPointer<LLViewerTexture> mTexture;  	LLPointer<LLDrawable> mDrawablep; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 9d6a12cc6e..c4e7ea44b4 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4987,45 +4987,13 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  			}  		} -		//create/delete/resize vertex buffer if needed +		//create vertex buffer  		LLVertexBuffer* buffer = NULL; -		if (group->mBufferUsage != GL_DYNAMIC_DRAW_ARB) -		{ //try to find a buffer to reuse -			LLFastTimer t(FTM_GEN_DRAW_INFO_FIND_VB); -			LLSpatialGroup::buffer_texture_map_t::iterator found_iter = group->mBufferMap[mask].find(*face_iter); -		 -			if (found_iter != group->mBufferMap[mask].end()) -			{ -				if ((U32) buffer_index < found_iter->second.size()) -				{ -					buffer = found_iter->second[buffer_index]; -				} -			} -		} -					  		{  			LLFastTimer t(FTM_GEN_DRAW_INFO_ALLOCATE); -	 -			if (!buffer || !buffer->isWriteable()) -			{ //create new buffer if needed -				buffer = createVertexBuffer(mask, buffer_usage); -				buffer->allocateBuffer(geom_count, index_count, TRUE); -			} -			else  -			{ //resize pre-existing buffer -				LLFastTimer t(FTM_GEN_DRAW_INFO_RESIZE_VB); -				if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != buffer_usage || -					buffer->getTypeMask() != mask) -				{ -					buffer = createVertexBuffer(mask, buffer_usage); -					buffer->allocateBuffer(geom_count, index_count, TRUE); -				} -				else -				{ -					buffer->resizeBuffer(geom_count, index_count); -				} -			} +			buffer = createVertexBuffer(mask, buffer_usage); +			buffer->allocateBuffer(geom_count, index_count, TRUE);  		}  		group->mGeometryBytes += buffer->getSize() + buffer->getIndicesSize(); @@ -5070,7 +5038,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					llassert(!facep->isState(LLFace::RIGGED));  					facep->getGeometryVolume(*volume, te_idx,  -						vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset); +						vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset,true);  					if (drawablep->isState(LLDrawable::ANIMATED_CHILD))  					{ | 
