diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llface.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/llface.h | 5 | ||||
| -rw-r--r-- | indra/newview/llfloatertwitter.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llmutelist.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llphysicsmotion.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 5 | ||||
| -rw-r--r-- | indra/newview/llviewerpartsim.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.h | 5 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 225 | ||||
| -rw-r--r-- | indra/newview/llvovolume.h | 22 | 
12 files changed, 52 insertions, 317 deletions
| diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 3d5e2d356e..c6fff6e57a 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -344,34 +344,6 @@ void LLFace::dirtyTexture()  	gPipeline.markTextured(drawablep);  } -void LLFace::notifyAboutCreatingTexture(LLViewerTexture *texture) -{ -	LLDrawable* drawablep = getDrawable(); -	if(mVObjp.notNull() && mVObjp->getVolume()) -	{ -		LLVOVolume *vobj = drawablep->getVOVolume(); -		if(vobj && vobj->notifyAboutCreatingTexture(texture)) -		{ -			gPipeline.markTextured(drawablep); -			gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME); -		} -	} -} - -void LLFace::notifyAboutMissingAsset(LLViewerTexture *texture) -{ -	LLDrawable* drawablep = getDrawable(); -	if(mVObjp.notNull() && mVObjp->getVolume()) -	{ -		LLVOVolume *vobj = drawablep->getVOVolume(); -		if(vobj && vobj->notifyAboutMissingAsset(texture)) -		{ -			gPipeline.markTextured(drawablep); -			gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME); -		} -	} -} -  void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)  {  	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); diff --git a/indra/newview/llface.h b/indra/newview/llface.h index ee545acb94..2d88c6fa58 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -230,13 +230,10 @@ public:  	static U32 getRiggedDataMask(U32 type); -	void	notifyAboutCreatingTexture(LLViewerTexture *texture); -	void	notifyAboutMissingAsset(LLViewerTexture *texture); -  public: //aligned members  	LLVector4a		mExtents[2]; -private: +private:	  	F32         adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius );  	BOOL        calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;  public: diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 4bab89ace2..803c80ac1a 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -404,13 +404,12 @@ void LLTwitterPhotoPanel::clearAndClose()  void LLTwitterPhotoPanel::updateStatusTextLength(BOOL restore_old_status_text)  {  	bool add_location = mLocationCheckbox->getValue().asBoolean(); -	bool add_photo = mPhotoCheckbox->getValue().asBoolean();  	// Restrict the status text length to Twitter's character limit  	LLTextEditor* status_text_box = dynamic_cast<LLTextEditor*>(mStatusTextBox);  	if (status_text_box)  	{ -		int max_status_length = 140 - (add_location ? 40 : 0) - (add_photo ? 40 : 0); +		int max_status_length = 280 - (add_location ? 40 : 0);  		status_text_box->setMaxTextLength(max_status_length);  		if (restore_old_status_text)  		{ diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index bf1716e18c..64df449c26 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -316,14 +316,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)  				updateAdd(localmute);  				notifyObservers();  				notifyObserversDetailed(localmute); -				if(!(localmute.mFlags & LLMute::flagParticles)) -				{ -					//Kill all particle systems owned by muted task -					if(localmute.mType == LLMute::AGENT || localmute.mType == LLMute::OBJECT) -					{ -						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID); -					} -				} +  				//mute local lights that are attached to the avatar  				LLVOAvatar *avatarp = find_avatar(localmute.mID);  				if (avatarp) diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 15d39c231f..69f5dd1914 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -491,12 +491,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          //          const F32 time_delta = time - mLastTime; - -	// Don't update too frequently, to avoid precision errors from small time slices. -	if (time_delta <= .01) -	{ -		return FALSE; -	}  	// If less than 1FPS, we don't want to be spending time updating physics at all.          if (time_delta > 1.0) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 5de4029542..e86d39e9d0 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -270,7 +270,9 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mPhysicsShapeUnknown(true),  	mAttachmentItemID(LLUUID::null),  	mLastUpdateType(OUT_UNKNOWN), -	mLastUpdateCached(FALSE) +	mLastUpdateCached(FALSE), +	mCachedMuteListUpdateTime(0), +	mCachedOwnerInMuteList(false)  {  	if (!is_global)  	{ @@ -5116,6 +5118,29 @@ void LLViewerObject::updateText()  	}  } +bool LLViewerObject::isOwnerInMuteList() +{ +	if (isAvatar() || mOwnerID.isNull()) +	{ +		return false; +	} +	bool muted = false; +	F64 now = LLFrameTimer::getTotalSeconds(); +	if (now < mCachedMuteListUpdateTime) +	{ +		muted = mCachedOwnerInMuteList; +	} +	else +	{ +		muted = LLMuteList::getInstance()->isMuted(mOwnerID); + +		const F64 SECONDS_BETWEEN_MUTE_UPDATES = 1; +		mCachedMuteListUpdateTime = now + SECONDS_BETWEEN_MUTE_UPDATES; +		mCachedOwnerInMuteList = muted; +	} +	return muted; +} +  LLVOAvatar* LLViewerObject::asAvatar()  {  	return NULL; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 7a490f6957..4f826b9eac 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -422,6 +422,8 @@ public:  	void updateText(); // update text label position  	virtual void updateDrawable(BOOL force_damped); // force updates on static objects +	bool isOwnerInMuteList(); +  	void setDrawableState(U32 state, BOOL recursive = TRUE);  	void clearDrawableState(U32 state, BOOL recursive = TRUE);  	BOOL isDrawableState(U32 state, BOOL recursive = TRUE) const; @@ -823,6 +825,9 @@ private:  	static BOOL sVelocityInterpolate;  	static BOOL sPingInterpolate; +	bool mCachedOwnerInMuteList; +	F64 mCachedMuteListUpdateTime; +  	//--------------------------------------------------------------------  	// For objects that are attachments  	//-------------------------------------------------------------------- diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index b4617566ac..e8ea0eb26d 100644 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -37,6 +37,7 @@  #include "llviewerregion.h"  #include "llvopartgroup.h"  #include "llworld.h" +#include "llmutelist.h"  #include "pipeline.h"  #include "llspatialpartition.h"  #include "llvoavatarself.h" @@ -711,6 +712,11 @@ void LLViewerPartSim::updateSimulation()  				upd = FALSE;  			} +			if(vobj && vobj->isOwnerInMuteList()) +			{ +				upd = FALSE; +			} +  			if (upd && vobj && (vobj->getPCode() == LL_PCODE_VOLUME))  			{  				if(vobj->getAvatar() && vobj->getAvatar()->isTooComplex()) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e5a1bed48c..840176c1e0 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -669,36 +669,12 @@ S8 LLViewerTexture::getType() const  void LLViewerTexture::cleanup()  { -	notifyAboutMissingAsset(); -  	mFaceList[LLRender::DIFFUSE_MAP].clear();  	mFaceList[LLRender::NORMAL_MAP].clear();  	mFaceList[LLRender::SPECULAR_MAP].clear();  	mVolumeList.clear();  } -void LLViewerTexture::notifyAboutCreatingTexture() -{ -	for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch) -	{ -		for(U32 f = 0; f < mNumFaces[ch]; f++) -		{ -			mFaceList[ch][f]->notifyAboutCreatingTexture(this); -		} -	} -} - -void LLViewerTexture::notifyAboutMissingAsset() -{ -	for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch) -	{ -		for(U32 f = 0; f < mNumFaces[ch]; f++) -		{ -			mFaceList[ch][f]->notifyAboutMissingAsset(this); -		} -	} -} -  // virtual  void LLViewerTexture::dump()  { @@ -1498,8 +1474,6 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)  	res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel); -	notifyAboutCreatingTexture(); -  	setActive();  	if (!needsToSaveRawImage()) @@ -2224,8 +2198,6 @@ void LLViewerFetchedTexture::setIsMissingAsset(BOOL is_missing)  	}  	if (is_missing)  	{ -		notifyAboutMissingAsset(); -  		if (mUrl.empty())  		{  			LL_WARNS() << mID << ": Marking image as missing" << LL_ENDL; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index c9dea17f63..9208b4813e 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -175,10 +175,6 @@ protected:  	void init(bool firstinit) ;  	void reorganizeFaceList() ;  	void reorganizeVolumeList() ; - -	void notifyAboutMissingAsset(); -	void notifyAboutCreatingTexture(); -  private:  	friend class LLBumpImageList;  	friend class LLUIImageList; @@ -316,7 +312,6 @@ public:  	void addToCreateTexture(); -  	 // ONLY call from LLViewerTextureList  	BOOL createTexture(S32 usename = 0);  	void destroyTexture() ; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index f77b48ff80..20c54d06d3 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2051,230 +2051,27 @@ S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)  	return res;  } -bool LLVOVolume::notifyAboutCreatingTexture(LLViewerTexture *texture) -{ //Ok, here we have confirmation about texture creation, check our wait-list -  //and make changes, or return false - -	std::pair<mmap_UUID_MAP_t::iterator, mmap_UUID_MAP_t::iterator> range = mWaitingTextureInfo.equal_range(texture->getID()); - -	typedef std::map<U8, LLMaterialPtr> map_te_material; -	map_te_material new_material; - -	for(mmap_UUID_MAP_t::iterator range_it = range.first; range_it != range.second; ++range_it) -	{ -		LLMaterialPtr cur_material = getTEMaterialParams(range_it->second.te); - -		//here we just interesting in DIFFUSE_MAP only! -		if(NULL != cur_material.get() && LLRender::DIFFUSE_MAP == range_it->second.map && GL_RGBA != texture->getPrimaryFormat()) -		{ //ok let's check the diffuse mode -			switch(cur_material->getDiffuseAlphaMode()) -			{ -			case LLMaterial::DIFFUSE_ALPHA_MODE_BLEND: -			case LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE: -			case LLMaterial::DIFFUSE_ALPHA_MODE_MASK: -				{ //uups... we have non 32 bit texture with LLMaterial::DIFFUSE_ALPHA_MODE_* => LLMaterial::DIFFUSE_ALPHA_MODE_NONE - -					LLMaterialPtr mat = NULL; -					map_te_material::iterator it = new_material.find(range_it->second.te); -					if(new_material.end() == it) { -						mat = new LLMaterial(cur_material->asLLSD()); -						new_material.insert(map_te_material::value_type(range_it->second.te, mat)); -					} else { -						mat = it->second; -					} - -					mat->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE); - -				} break; -			} //switch -		} //if -	} //for - -	//setup new materials -	for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it) -	{ -		LLMaterialMgr::getInstance()->put(getID(), it->first, *it->second); -		LLViewerObject::setTEMaterialParams(it->first, it->second); -	} - -	//clear wait-list -	mWaitingTextureInfo.erase(range.first, range.second); - -	return 0 != new_material.size(); -} - -bool LLVOVolume::notifyAboutMissingAsset(LLViewerTexture *texture) -{ //Ok, here if we wait information about texture and it's missing -  //then depending from the texture map (diffuse, normal, or specular) -  //make changes in material and confirm it. If not return false. -	std::pair<mmap_UUID_MAP_t::iterator, mmap_UUID_MAP_t::iterator> range = mWaitingTextureInfo.equal_range(texture->getID()); -	if(range.first == range.second) return false; - -	typedef std::map<U8, LLMaterialPtr> map_te_material; -	map_te_material new_material; -	 -	for(mmap_UUID_MAP_t::iterator range_it = range.first; range_it != range.second; ++range_it) -	{ -		LLMaterialPtr cur_material = getTEMaterialParams(range_it->second.te); -		if (cur_material.isNull()) -			continue; - -		switch(range_it->second.map) -		{ -		case LLRender::DIFFUSE_MAP: -			{ -				if(LLMaterial::DIFFUSE_ALPHA_MODE_NONE != cur_material->getDiffuseAlphaMode()) -				{ //missing texture + !LLMaterial::DIFFUSE_ALPHA_MODE_NONE => LLMaterial::DIFFUSE_ALPHA_MODE_NONE -					LLMaterialPtr mat = NULL; -					map_te_material::iterator it = new_material.find(range_it->second.te); -					if(new_material.end() == it) { -						mat = new LLMaterial(cur_material->asLLSD()); -						new_material.insert(map_te_material::value_type(range_it->second.te, mat)); -					} else { -						mat = it->second; -					} - -					mat->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE); -				} -			} break; -		case LLRender::NORMAL_MAP: -			{ //missing texture => reset material texture id -				LLMaterialPtr mat = NULL; -				map_te_material::iterator it = new_material.find(range_it->second.te); -				if(new_material.end() == it) { -					mat = new LLMaterial(cur_material->asLLSD()); -					new_material.insert(map_te_material::value_type(range_it->second.te, mat)); -				} else { -					mat = it->second; -				} - -				mat->setNormalID(LLUUID::null); -			} break; -		case LLRender::SPECULAR_MAP: -			{ //missing texture => reset material texture id -				LLMaterialPtr mat = NULL; -				map_te_material::iterator it = new_material.find(range_it->second.te); -				if(new_material.end() == it) { -					mat = new LLMaterial(cur_material->asLLSD()); -					new_material.insert(map_te_material::value_type(range_it->second.te, mat)); -				} else { -					mat = it->second; -				} - -				mat->setSpecularID(LLUUID::null); -			} break; -		case LLRender::NUM_TEXTURE_CHANNELS: -				//nothing to do, make compiler happy -			break; -		} //switch -	} //for - -	//setup new materials -	for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it) -	{ -		LLMaterialMgr::getInstance()->put(getID(), it->first, *it->second); -		LLViewerObject::setTEMaterialParams(it->first, it->second); -	} - -	//clear wait-list -	mWaitingTextureInfo.erase(range.first, range.second); - -	return 0 != new_material.size(); -} -  S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)  {  	LLMaterialPtr pMaterial = const_cast<LLMaterialPtr&>(pMaterialParams);  	if(pMaterialParams) -	{ //check all of them according to material settings - -		LLViewerTexture *img_diffuse = getTEImage(te); -		LLViewerTexture *img_normal = getTENormalMap(te); -		LLViewerTexture *img_specular = getTESpecularMap(te); - -		llassert(NULL != img_diffuse); - -		LLMaterialPtr new_material = NULL; - -		//diffuse -		if(NULL != img_diffuse) -		{ //guard -			if(0 == img_diffuse->getPrimaryFormat() && !img_diffuse->isMissingAsset()) -			{ //ok here we don't have information about texture, let's belief and leave material settings -			  //but we remember this case -				mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(img_diffuse->getID(), material_info(LLRender::DIFFUSE_MAP, te))); -			} -			else -			{ -				bool bSetDiffuseNone = false; -				if(img_diffuse->isMissingAsset()) -				{ -					bSetDiffuseNone = true; -				} -				else -				{ -					switch(pMaterialParams->getDiffuseAlphaMode()) -					{ -					case LLMaterial::DIFFUSE_ALPHA_MODE_BLEND: -					case LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE: -					case LLMaterial::DIFFUSE_ALPHA_MODE_MASK: -						{ //all of them modes available only for 32 bit textures -							if(GL_RGBA != img_diffuse->getPrimaryFormat()) -							{ -								bSetDiffuseNone = true; -							} -						} break; -					} -				} //else - - -				if(bSetDiffuseNone) -				{ //upps... we should substitute this material with LLMaterial::DIFFUSE_ALPHA_MODE_NONE -					new_material = new LLMaterial(pMaterialParams->asLLSD()); -					new_material->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE); -				} -			} -		} - -		//normal -		if(LLUUID::null != pMaterialParams->getNormalID()) -		{ -			if(img_normal && img_normal->isMissingAsset() && img_normal->getID() == pMaterialParams->getNormalID()) -			{ -				if(!new_material) { -					new_material = new LLMaterial(pMaterialParams->asLLSD()); -				} -				new_material->setNormalID(LLUUID::null); -			} -			else if(NULL == img_normal || 0 == img_normal->getPrimaryFormat()) -			{ //ok here we don't have information about texture, let's belief and leave material settings -				//but we remember this case -				mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(pMaterialParams->getNormalID(), material_info(LLRender::NORMAL_MAP,te))); -			} - -		} +	{ +		LLViewerTexture* image = getTEImage(te); +		LLGLenum image_format = image ? image->getPrimaryFormat() : GL_RGB; +		LLMaterialPtr current_material = getTEMaterialParams(te); +		U8 new_diffuse_alpha_mode = pMaterialParams->getDiffuseAlphaMode(); -		//specular -		if(LLUUID::null != pMaterialParams->getSpecularID()) +		if(new_diffuse_alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)  		{ -			if(img_specular && img_specular->isMissingAsset() && img_specular->getID() == pMaterialParams->getSpecularID()) -			{ -				if(!new_material) { -					new_material = new LLMaterial(pMaterialParams->asLLSD()); -				} -				new_material->setSpecularID(LLUUID::null); -			} -			else if(NULL == img_specular || 0 == img_specular->getPrimaryFormat()) -			{ //ok here we don't have information about texture, let's belief and leave material settings -				//but we remember this case -				mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(pMaterialParams->getSpecularID(), material_info(LLRender::SPECULAR_MAP, te))); -			} +			new_diffuse_alpha_mode = (GL_RGB == image_format || 0 == image_format ? LLMaterial::DIFFUSE_ALPHA_MODE_NONE : new_diffuse_alpha_mode);  		} -		if(new_material) { -			pMaterial = new_material; +		if(pMaterialParams->getDiffuseAlphaMode() != new_diffuse_alpha_mode) { +			//create new material +			pMaterial = new LLMaterial(pMaterialParams->asLLSD()); +			pMaterial->setDiffuseAlphaMode(new_diffuse_alpha_mode);  			LLMaterialMgr::getInstance()->put(getID(),te,*pMaterial);  		}  	} diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index a331908320..b07d416363 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -380,7 +380,7 @@ public:  	static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop  	static F32 sLODFactor;				// LOD scale factor  	static F32 sDistanceFactor;			// LOD distance factor - +		  	static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;  	static LLPointer<LLObjectMediaNavigateClient> sObjectMediaNavigateClient; @@ -388,26 +388,6 @@ protected:  	static S32 sNumLODChanges;  	friend class LLVolumeImplFlexible; - -public: -	bool notifyAboutCreatingTexture(LLViewerTexture *texture); -	bool notifyAboutMissingAsset(LLViewerTexture *texture); - -private: -	struct material_info  -	{ -		LLRender::eTexIndex map; -		U8 te; - -		material_info(LLRender::eTexIndex map_, U8 te_) -			: map(map_) -			, te(te_) -		{} -	}; - -	typedef std::multimap<LLUUID, material_info> mmap_UUID_MAP_t; -	mmap_UUID_MAP_t	mWaitingTextureInfo; -  };  #endif // LL_LLVOVOLUME_H | 
