diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2012-07-13 17:46:43 -0600 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2012-07-13 17:46:43 -0600 | 
| commit | 833d73d6747e6983e21ba7716a704c01c95d6a73 (patch) | |
| tree | d38f4b0d7b85c01d011487524b724635dd378c14 /indra | |
| parent | 0660f646e11e9b9afacd228ad43bd31c8c555ad7 (diff) | |
fix for SH-3235: Bump maps are not loaded until objects change LOD
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/llprimitive/llprimitive.cpp | 31 | ||||
| -rw-r--r-- | indra/llprimitive/llprimitive.h | 7 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 2 | 
3 files changed, 36 insertions, 4 deletions
| diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index 30532247ac..6dee192783 100755 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -149,7 +149,8 @@ bool LLPrimitive::cleanupVolumeManager()  LLPrimitive::LLPrimitive()  :	mTextureList(),  	mNumTEs(0), -	mMiscFlags(0) +	mMiscFlags(0), +	mNumBumpmapTEs(0)  {  	mPrimitiveCode = 0; @@ -237,7 +238,10 @@ void  LLPrimitive::setAllTETextures(const LLUUID &tex_id)  //===============================================================  void LLPrimitive::setTE(const U8 index, const LLTextureEntry& te)  { -	mTextureList.copyTexture(index, te); +	if(mTextureList.copyTexture(index, te) != TEM_CHANGE_NONE && te.getBumpmap() > 0) +	{ +		mNumBumpmapTEs++; +	}  }  S32  LLPrimitive::setTETexture(const U8 index, const LLUUID &id) @@ -316,6 +320,7 @@ S32  LLPrimitive::setTERotation(const U8 index, const F32 r)  //===============================================================  S32  LLPrimitive::setTEBumpShinyFullbright(const U8 index, const U8 bump)  { +	updateNumBumpmap(index, bump);  	return mTextureList.setBumpShinyFullbright(index, bump);  } @@ -326,11 +331,13 @@ S32  LLPrimitive::setTEMediaTexGen(const U8 index, const U8 media)  S32  LLPrimitive::setTEBumpmap(const U8 index, const U8 bump)  { +	updateNumBumpmap(index, bump);  	return mTextureList.setBumpMap(index, bump);  }  S32  LLPrimitive::setTEBumpShiny(const U8 index, const U8 bump_shiny)  { +	updateNumBumpmap(index, bump_shiny);  	return mTextureList.setBumpShiny(index, bump_shiny);  } @@ -1445,6 +1452,26 @@ void LLPrimitive::takeTextureList(LLPrimTextureList& other_list)  	mTextureList.take(other_list);  } +void LLPrimitive::updateNumBumpmap(const U8 index, const U8 bump) +{ +	LLTextureEntry* te = getTE(index); +	if(!te) +	{ +		return; +	} + +	U8 old_bump = te->getBumpmap();	 +	if(old_bump > 0) +	{ +		mNumBumpmapTEs--; +	} +	if((bump & TEM_BUMP_MASK) > 0) +	{ +		mNumBumpmapTEs++; +	} + +	return; +}  //============================================================================  // Moved from llselectmgr.cpp diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h index 998016f8f6..8dcaa8c740 100644 --- a/indra/llprimitive/llprimitive.h +++ b/indra/llprimitive/llprimitive.h @@ -421,7 +421,8 @@ public:  	inline BOOL	isAvatar() const;  	inline BOOL	isSittingAvatar() const;  	inline BOOL	isSittingAvatarOnGround() const; - +	inline bool hasBumpmap() const  { return mNumBumpmapTEs > 0;} +	  	void setFlags(U32 flags) { mMiscFlags = flags; }  	void addFlags(U32 flags) { mMiscFlags |= flags; }  	void removeFlags(U32 flags) { mMiscFlags &= ~flags; } @@ -435,6 +436,9 @@ public:  	inline static BOOL isPrimitive(const LLPCode pcode);  	inline static BOOL isApp(const LLPCode pcode); +private: +	void updateNumBumpmap(const U8 index, const U8 bump); +  protected:  	LLPCode				mPrimitiveCode;		// Primitive code  	LLVector3			mVelocity;			// how fast are we moving? @@ -444,6 +448,7 @@ protected:  	LLPrimTextureList	mTextureList;		// list of texture GUIDs, scales, offsets  	U8					mMaterial;			// Material code  	U8					mNumTEs;			// # of faces on the primitve	 +	U8                  mNumBumpmapTEs;     // number of bumpmap TEs.  	U32 				mMiscFlags;			// home for misc bools  public: diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 2f13f2b1a6..09cd5e0324 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4181,7 +4181,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  		}  		llassert_always(vobj); -		vobj->updateTextureVirtualSize(); +		vobj->updateTextureVirtualSize(vobj->hasBumpmap());  		vobj->preRebuild();  		drawablep->clearState(LLDrawable::HAS_ALPHA); | 
