diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2013-01-30 18:23:31 -0500 | 
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2013-01-30 18:23:31 -0500 | 
| commit | c24c974cc6a7df3a1df7f7a24ad52275430b18dd (patch) | |
| tree | 454409ec209f2685f859029ba88e6fdef3bb1064 | |
| parent | 3a7e3eacb86989c936cd6960cfa7434f3b8232fc (diff) | |
SH-3800 WIP - logic to detect baked textures being sought in the wrong place, avoid querying textures for which we have no authoritative data where they live
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerobject.cpp | 27 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerobject.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 59 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.h | 1 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llvoavatarself.cpp | 10 | 
5 files changed, 55 insertions, 45 deletions
| diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 15560be9ba..c4b370a4b4 100644..100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4034,32 +4034,15 @@ void LLViewerObject::setTEImage(const U8 te, LLViewerTexture *imagep)  	}  } - -S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, const std::string &url ) -{ -	S32 retval = 0; -	if (uuid != getTE(te)->getID() || -		uuid == LLUUID::null) -	{ -		retval = LLPrimitive::setTETexture(te, uuid); -		mTEImages[te] = LLViewerTextureManager::getFetchedTextureFromUrl  (url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); -		setChanged(TEXTURE); -		if (mDrawable.notNull()) -		{ -			gPipeline.markTextured(mDrawable); -		} -	} -	return retval; -} - -S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost host) +S32 LLViewerObject::setTETextureCore(const U8 te, LLViewerTexture *image)  { +	const LLUUID& uuid = image->getID();  	S32 retval = 0;  	if (uuid != getTE(te)->getID() ||  		uuid == LLUUID::null)  	{  		retval = LLPrimitive::setTETexture(te, uuid); -		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); +		mTEImages[te] = image;  		setChanged(TEXTURE);  		if (mDrawable.notNull())  		{ @@ -4082,7 +4065,9 @@ void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)  S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid)  {  	// Invalid host == get from the agent's sim -	return setTETextureCore(te, uuid, LLHost::invalid); +	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture( +		uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid); +	return setTETextureCore(te,image);  } diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 889025962c..728d279c39 100644..100755 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -301,8 +301,7 @@ public:  	/*virtual*/	void	setNumTEs(const U8 num_tes);  	/*virtual*/	void	setTE(const U8 te, const LLTextureEntry &texture_entry);  	/*virtual*/ S32		setTETexture(const U8 te, const LLUUID &uuid); -	S32 setTETextureCore(const U8 te, const LLUUID& uuid, LLHost host); -	S32 setTETextureCore(const U8 te, const LLUUID& uuid, const std::string &url ); +	S32 				setTETextureCore(const U8 te, LLViewerTexture *image);  	/*virtual*/ S32		setTEColor(const U8 te, const LLColor3 &color);  	/*virtual*/ S32		setTEColor(const U8 te, const LLColor4 &color);  	/*virtual*/ S32		setTEScale(const U8 te, const F32 s, const F32 t); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c512837632..f0986ac223 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1776,29 +1776,42 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,  	return retval;  } +LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUUID& uuid) +{ +	LLViewerFetchedTexture *result; +	 +	const std::string url = getImageURL(te,uuid); +	if (!url.empty()) +	{ +		llinfos << "texture URL " << url << llendl; +		result = LLViewerTextureManager::getFetchedTextureFromUrl( +			url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); +	} +	else +	{ +		llinfos << "get texture from host " << uuid << llendl; +		LLHost host = getObjectHost(); +		result = LLViewerTextureManager::getFetchedTexture( +			uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); +	} +	return result; +} +  // virtual  S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)  { -	// The core setTETexture() method requests images, so we need -	// to redirect certain avatar texture requests to different sims. -	if (isIndexBakedTexture((ETextureIndex)te)) +	if (!isIndexBakedTexture((ETextureIndex)te))  	{ -		const std::string url = getImageURL(te,uuid); -		if (!url.empty()) +		if (!uuid.isNull())  		{ -			llinfos << "texture URL " << url << llendl; -			return setTETextureCore(te, uuid, url); +			llinfos << "ignoring texture " << uuid << " in non-baked slot " << (S32)te << " - will use null " << llendl;  		} - -		llinfos << "get texture from host " << uuid << llendl; -		LLHost target_host = getObjectHost(); -		return setTETextureCore(te, uuid, target_host); -	} -	else -	{ -		llinfos << "ignoring texture in non-baked slot " << uuid << " - will use null " << LLUUID::null << llendl; -		return setTETextureCore(te, LLUUID::null, LLHost::invalid); +		return LLViewerObject::setTETexture(te, LLUUID::null);  	} + +	LLViewerFetchedTexture *image = getBakedTextureImage(te,uuid); +	llassert(image); +	return setTETextureCore(te, image);  }  static LLFastTimer::DeclareTimer FTM_AVATAR_UPDATE("Avatar Update"); @@ -6070,6 +6083,8 @@ void LLVOAvatar::updateMeshTextures()  			last_id_string = "A";  		else if (mBakedTextureDatas[i].mLastTextureID == IMG_DEFAULT)  			last_id_string = "D"; +		else if (mBakedTextureDatas[i].mLastTextureID == IMG_INVISIBLE) +			last_id_string = "I";  		else  			last_id_string = "*";  		bool is_ltda = layerset @@ -6750,12 +6765,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		return;  	} -	BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived; -	mFirstAppearanceMessageReceived = TRUE; - -	LL_INFOS("Avatar") << avString() << "processAvatarAppearance start " << mID -			<< " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL; -  	ESex old_sex = getSex(); @@ -6831,6 +6840,12 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  	// runway - was  	// if (!is_first_appearance_message )  	// which means it would be called on second appearance message - probably wrong. +	BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived; +	mFirstAppearanceMessageReceived = TRUE; + +	LL_INFOS("Avatar") << avString() << "processAvatarAppearance start " << mID +			<< " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL; +  	if (is_first_appearance_message )  	{  		onFirstTEMessageReceived(); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index bdb477590f..c14f18d00e 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -147,6 +147,7 @@ public:  	void 						collectTextureUUIDs(std::set<LLUUID>& ids);  	void						releaseOldTextures();  	/*virtual*/ void   	 	 	updateTextures(); +	LLViewerFetchedTexture*		getBakedTextureImage(const U8 te, const LLUUID& uuid);  	/*virtual*/ S32    	 	 	setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim.  	/*virtual*/ void   	 	 	onShift(const LLVector4a& shift_vector);  	/*virtual*/ U32    	 	 	getPartitionType() const; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 757d029513..aeac478d4e 100644..100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -759,6 +759,15 @@ U32  LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,  {  	U32 retval = LLVOAvatar::processUpdateMessage(mesgsys,user_data,block_num,update_type,dp); +#if 0 +	// DRANO - it's not clear this does anything useful. If we wait +	// until an appearance message has been received, we already have +	// the texture ids. If we don't wait, we don't yet know where to +	// look for baked textures, because we haven't received the +	// appearance version data from the appearance message. This looks +	// like an old optimization that's incompatible with server-side +	// texture baking. +	  	// FIXME DRANO - skipping in the case of !mFirstAppearanceMessageReceived prevents us from trying to  	// load textures before we know where they come from (ie, from baking service or not);  	// unknown impact on performance. @@ -783,6 +792,7 @@ U32  LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,  		mInitialBakesLoaded = true;  	} +#endif  	return retval;  } | 
