diff options
| author | Don Kjer <don@lindenlab.com> | 2012-09-27 22:01:40 +0000 | 
|---|---|---|
| committer | Don Kjer <don@lindenlab.com> | 2012-09-27 22:01:40 +0000 | 
| commit | 793dde16f371408948474d31f9275ea4031b65aa (patch) | |
| tree | 57d46ee9729c2b1888634ce080ce04d4cc2607f3 | |
| parent | 4f93192e7d00f1f03e0e5241e9f1d2f31623729c (diff) | |
| parent | 352698140775e62498686f80b5aa21aee85524cf (diff) | |
Merge sunshine-internal -> sunshine-experimental
| -rw-r--r-- | .hgignore | 4 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/llappearance/llavatarappearance.h | 4 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/llappearance/lldriverparam.cpp | 3 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/llappearance/lltexlayerparams.cpp | 7 | ||||
| -rwxr-xr-x | indra/llappearance/llwearable.cpp | 2 | ||||
| -rw-r--r-- | indra/lscript/lscript_compile/CMakeLists.txt | 2 | ||||
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 11 | ||||
| -rwxr-xr-x | indra/newview/llagent.cpp | 14 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewertexlayer.cpp | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerwearable.cpp | 8 | ||||
| -rwxr-xr-x | indra/newview/llviewerwindow.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 121 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.h | 17 | ||||
| -rwxr-xr-x | indra/newview/llvoavatarself.cpp | 20 | 
15 files changed, 141 insertions, 78 deletions
| @@ -10,7 +10,7 @@ syntax: glob  .*.swp  #OSX image cache file  *.DS_Store -*.orig +#*.orig  LICENSES  indra/.distcc  build-linux-* @@ -74,4 +74,4 @@ glob:indra/newview/filters.xml  glob:indra/newview/avatar_icons_cache.txt  glob:indra/newview/avatar_lad.log  glob:*.diff -*.rej +#*.rej diff --git a/indra/llappearance/llavatarappearance.h b/indra/llappearance/llavatarappearance.h index 4f57335688..5918d1cf2f 100644..100755 --- a/indra/llappearance/llavatarappearance.h +++ b/indra/llappearance/llavatarappearance.h @@ -107,7 +107,9 @@ public:  public:  	virtual bool 	isSelf() const { return false; } // True if this avatar is for this viewer's agent  	virtual BOOL	isValid() const; -	virtual BOOL	isUsingBakedTextures() const = 0; +	virtual BOOL	isUsingServerBakes() const = 0; +	virtual BOOL	isUsingLocalAppearance() const = 0; +	virtual BOOL	isEditingAppearance() const = 0;  	bool isBuilt() const { return mIsBuilt; } diff --git a/indra/llappearance/lldriverparam.cpp b/indra/llappearance/lldriverparam.cpp index 1092b525d0..2d91ebdee9 100644..100755 --- a/indra/llappearance/lldriverparam.cpp +++ b/indra/llappearance/lldriverparam.cpp @@ -187,7 +187,10 @@ BOOL LLDriverParam::setInfo(LLDriverParamInfo *info)  {  	llassert(wearable);  	LLDriverParam *new_param = new LLDriverParam(mAvatarAppearance, wearable); +	// FIXME DRANO this clobbers mWearablep, which means any code +	// currently using mWearablep is wrong, or at least untested.  	*new_param = *this; +//	new_param->mDriven.clear(); // clear driven list to avoid overwriting avatar driven params from wearables.   	return new_param;  } diff --git a/indra/llappearance/lltexlayerparams.cpp b/indra/llappearance/lltexlayerparams.cpp index 82c92b5a5e..32bdba4e1c 100644..100755 --- a/indra/llappearance/lltexlayerparams.cpp +++ b/indra/llappearance/lltexlayerparams.cpp @@ -174,12 +174,9 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL upload_bake)  	{  		mCurWeight = new_weight; -		if ((mAvatarAppearance->getSex() & getSex()) && (mAvatarAppearance->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param. +		if ((mAvatarAppearance->getSex() & getSex()) && +			(mAvatarAppearance->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.  		{ -			if (!mAvatarAppearance->isUsingBakedTextures()) -			{ -				upload_bake = FALSE; -			}  			mAvatarAppearance->invalidateComposite(mTexLayer->getTexLayerSet(), upload_bake);  			mTexLayer->invalidateMorphMasks();  		} diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp index 78ff510909..5d53d1ae39 100755 --- a/indra/llappearance/llwearable.cpp +++ b/indra/llappearance/llwearable.cpp @@ -502,6 +502,8 @@ void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject <o)  void LLWearable::revertValues()  { +	// FIXME DRANO - this triggers changes to driven params on avatar, potentially clobbering baked appearance. +  	//update saved settings so wearable is no longer dirty  	// non-driver params first  	for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++) diff --git a/indra/lscript/lscript_compile/CMakeLists.txt b/indra/lscript/lscript_compile/CMakeLists.txt index 13cbd3ffd2..2cfd389893 100644 --- a/indra/lscript/lscript_compile/CMakeLists.txt +++ b/indra/lscript/lscript_compile/CMakeLists.txt @@ -115,7 +115,7 @@ if (WINDOWS)        COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bison.bat        ARGS          ${BISON} ${M4_PATH} -	-p indra_ +        -p indra_          -d -o ${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp          ${CMAKE_CURRENT_SOURCE_DIR}/indra.y        DEPENDS diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 674685f3bc..13bf6c18f8 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1927,6 +1927,17 @@        <key>Value</key>        <string />      </map> +  <key>DebugAvatarAppearanceMessage</key> +  <map> +    <key>Comment</key> +    <string>Dump a bunch of XML files when handling appearance messages</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>  	<key>DebugAvatarRezTime</key>  	<map>  		<key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 4e05836bca..bb9f8eaa26 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3630,7 +3630,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *  		return;  	} -	if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) +	if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance())  	{  		// ignore baked textures when in customize mode  		return; @@ -4260,9 +4260,16 @@ void LLAgent::requestLeaveGodMode()  //-----------------------------------------------------------------------------  void LLAgent::sendAgentSetAppearance()  { +	// FIXME DRANO - this return short-circuits a bunch of phase stat tracking below.  	if (!isAgentAvatarValid() || (getRegion() && getRegion()->getCentralBakeVersion())) return; -	if (gAgentQueryManager.mNumPendingQueries > 0 && (isAgentAvatarValid() && gAgentAvatarp->isUsingBakedTextures()))  +	// FIXME DRANO - problems around new-style appearance in an old-style region. +	// - does this get called? +	// - need to change mUseServerBakes->FALSE in that case +	// - need to call processAvatarAppearance as if server had returned this result? +	// gAgentAvatarp->mUseServerBakes = FALSE; + +	if (gAgentQueryManager.mNumPendingQueries > 0)   	{  		return;  	} @@ -4320,6 +4327,9 @@ void LLAgent::sendAgentSetAppearance()  	}  	// only update cache entries if we have all our baked textures +	// FIXME DRANO additional if check for not in appearance editing +	// mode, if still using local composites need to set using local +	// composites to false, update mesh textures.  	if (textures_current)  	{  		LL_INFOS("Avatar") << gAgentAvatarp->avString() << "TAT: Sending cached texture data" << LL_ENDL; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index cbd1ac692f..33add7d56c 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1600,7 +1600,7 @@ class LLAdvancedEnableAppearanceToXML : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		return gSavedSettings.getBOOL("DebugAvatarCompositeBaked"); +		return gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");  	}  }; diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp index f516562c2f..b129c28e0d 100644..100755 --- a/indra/newview/llviewertexlayer.cpp +++ b/indra/newview/llviewertexlayer.cpp @@ -285,7 +285,7 @@ BOOL LLViewerTexLayerSetBuffer::uploadInProgress() const  BOOL LLViewerTexLayerSetBuffer::isReadyToUpload() const  {  	if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries. -	if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) return FALSE; // Don't upload if avatar is using composites. +	if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance()) return FALSE; // Don't upload if avatar is being edited.  	BOOL ready = FALSE;  	if (getViewerTexLayerSet()->isLocalTextureDataFinal()) diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp index 41cef237ed..ce7c81ee6d 100644..100755 --- a/indra/newview/llviewerwearable.cpp +++ b/indra/newview/llviewerwearable.cpp @@ -38,6 +38,7 @@  #include "llavatarappearancedefines.h"  #include "llviewerwearable.h"  #include "llviewercontrol.h" +#include "llviewerregion.h"  using namespace LLAvatarAppearanceDefines; @@ -319,13 +320,12 @@ void LLViewerWearable::writeToAvatar(LLAvatarAppearance *avatarp)  	if (!viewer_avatar->isValid()) return; -	// *TODO: Check with Vir on this: -#if 0 -	if (!viewer_avatar->isUsingLocalAppearance()) +	if (viewer_avatar->getRegion() && +		(viewer_avatar->getRegion()->getCentralBakeVersion()>0) && +		!viewer_avatar->isUsingLocalAppearance())  	{  		return;  	} -#endif  	ESex old_sex = avatarp->getSex(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1780c2715a..63fe9312df 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4693,7 +4693,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)  		gResizeScreenTexture = TRUE;  		gWindowResized = TRUE; -		if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) +		if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance())  		{  			LLVisualParamHint::requestHintUpdates();  		} diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 1b185ed508..fb06eb24c1 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -48,6 +48,7 @@  #include "llcallingcard.h"		// IDEVO for LLAvatarTracker  #include "lldrawpoolavatar.h"  #include "lldriverparam.h" +#include "llpolyskeletaldistortion.h"  #include "lleditingmotion.h"  #include "llemote.h"  //#include "llfirstuse.h" @@ -191,8 +192,7 @@ enum ERenderName  // Utility func - FIXME move out of avatar.  std::string get_sequential_numbered_file_name(const std::string& prefix, -											  const std::string& suffix, -											  const S32 width = 4); +											  const std::string& suffix);  //-----------------------------------------------------------------------------  // Callback data @@ -626,7 +626,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mLastRezzedStatus(-1),  	mIsEditingAppearance(FALSE),  	mUseLocalAppearance(FALSE), -	mUseServerBakes(TRUE) +	mUseServerBakes(FALSE)  {  	LLMemType mt(LLMemType::MTYPE_AVATAR);  	//VTResume();  // VTune @@ -2882,6 +2882,20 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  	// clear debug text  	mDebugText.clear(); + +	if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) +	{ +		S32 central_bake_version = -1; +		if (getRegion()) +		{ +			central_bake_version = getRegion()->getCentralBakeVersion(); +		} +		addDebugText(llformat("mUseLocalAppearance: %d,\nmIsEditingAppearance: %d\n" +							  "mUseServerBakes %d,\ncentralBakeVersion %d", +							  mUseLocalAppearance, mIsEditingAppearance, +							  mUseServerBakes, central_bake_version)); +	} +				   	if (LLVOAvatar::sShowAnimationDebug)  	{  		for (LLMotionController::motion_list_t::iterator iter = mMotionController.getActiveMotions().begin(); @@ -4060,7 +4074,7 @@ void LLVOAvatar::updateTextures()  			if (isIndexBakedTexture((ETextureIndex)texture_index)  				&& imagep->getID() != IMG_DEFAULT_AVATAR  				&& imagep->getID() != IMG_INVISIBLE -				&& !mUseServerBakes  +				&& !isUsingServerBakes()   				&& !imagep->getTargetHost().isOk())  			{  				LL_WARNS_ONCE("Texture") << "LLVOAvatar::updateTextures No host for texture " @@ -4203,8 +4217,15 @@ void LLVOAvatar::setTexEntry(const U8 index, const LLTextureEntry &te)  const std::string LLVOAvatar::getImageURL(const U8 te, const LLUUID &uuid)  {  	std::string url = ""; -	if (mUseServerBakes && !gSavedSettings.getString("AgentAppearanceServiceURL").empty()) +	if (isUsingServerBakes())  	{ +		if (gSavedSettings.getString("AgentAppearanceServiceURL").empty()) +		{ +			// Probably a server-side issue if we get here: +			llwarns << "AgentAppearanceServiceURL not set - Baked texture requests will fail" << llendl; +			return url; +		} +	  		const LLAvatarAppearanceDictionary::TextureEntry* texture_entry = LLAvatarAppearanceDictionary::getInstance()->getTexture((ETextureIndex)te);  		if (texture_entry != NULL)  		{ @@ -5816,7 +5837,7 @@ void LLVOAvatar::updateMeshTextures()  	for (U32 i=0; i < mBakedTextureDatas.size(); i++)  	{  		LLViewerTexLayerSet* layerset = getTexLayerSet(i); -		if (use_lkg_baked_layer[i] && !mUseLocalAppearance ) +		if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() )  		{  			LLViewerFetchedTexture* baked_img;  			const std::string url = getImageURL(i, mBakedTextureDatas[i].mLastTextureIndex); @@ -5852,7 +5873,7 @@ void LLVOAvatar::updateMeshTextures()  				}  			}  		} -		else if (!mUseLocalAppearance && is_layer_baked[i]) +		else if (!isUsingLocalAppearance() && is_layer_baked[i])  		{  			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ;  			if( baked_img->getID() == mBakedTextureDatas[i].mLastTextureIndex ) @@ -5872,7 +5893,7 @@ void LLVOAvatar::updateMeshTextures()  					src_callback_list, paused );  			}  		} -		else if (layerset && mUseLocalAppearance)  +		else if (layerset && isUsingLocalAppearance())  		{  			layerset->createComposite();  			layerset->setUpdatesEnabled( TRUE ); @@ -5913,7 +5934,7 @@ void LLVOAvatar::updateMeshTextures()  	// set texture and color of hair manually if we are not using a baked image.  	// This can happen while loading hair for yourself, or for clients that did not  	// bake a hair texture. Still needed for yourself after 1.22 is depricated. -	if (!is_layer_baked[BAKED_HAIR] || mIsEditingAppearance) +	if (!is_layer_baked[BAKED_HAIR] || isEditingAppearance())  	{  		const LLColor4 color = mTexHairColor ? mTexHairColor->getColor() : LLColor4(1,1,1,1);  		LLViewerTexture* hair_img = getImage( TEX_HAIR, 0 ); @@ -6277,6 +6298,24 @@ bool LLVOAvatar::visualParamWeightsAreDefault()  	return rtn;  } +void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value) +{ +	std::string type_string = "unknown"; +	if (dynamic_cast<LLTexLayerParamAlpha*>(viewer_param)) +		type_string = "param_alpha"; +	if (dynamic_cast<LLTexLayerParamColor*>(viewer_param)) +		type_string = "param_color"; +	if (dynamic_cast<LLDriverParam*>(viewer_param)) +		type_string = "param_driver"; +	if (dynamic_cast<LLPolyMorphTarget*>(viewer_param)) +		type_string = "param_morph"; +	if (dynamic_cast<LLPolySkeletalDistortion*>(viewer_param)) +		type_string = "param_skeleton"; +	apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/ type=\"%s\">\n", +					viewer_param->getID(), viewer_param->getName().c_str(), value, type_string.c_str()); +} + +  void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  										  const std::vector<F32>& params_for_dump,  										  const LLTEContents& tec) @@ -6306,8 +6345,7 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  		}  		LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;  		F32 value = params_for_dump[i]; -		apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n", -						viewer_param->getID(), viewer_param->getName().c_str(), value); +		dump_visual_param(file, viewer_param, value);  		param = getNextVisualParam();  	}  	for (U32 i = 0; i < tec.face_count; i++) @@ -6323,14 +6361,14 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  //-----------------------------------------------------------------------------  void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  { -	//std::string dump_prefix = getFullname() + " "; -	//dumpArchetypeXML(dump_prefix + "process_start"); +	bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"); +	std::string dump_prefix = getFullname() + "_" + (isSelf()?"s":"o") + "_"; +	if (enable_verbose_dumps) { dumpArchetypeXML(dump_prefix + "process_start"); }  	if (gSavedSettings.getBOOL("BlockAvatarAppearanceMessages"))  	{  		llwarns << "Blocking AvatarAppearance message" << llendl;  		return;  	} -	  	LLMemType mt(LLMemType::MTYPE_AVATAR);  	BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived; @@ -6340,25 +6378,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  			<< " first? " << is_first_appearance_message << " self? " << isSelf() << LL_ENDL; -	if( isSelf() ) -	{ -		llwarns << avString() << "Received AvatarAppearance for self" << llendl; -		if( mFirstTEMessageReceived && !mUseServerBakes) -		{ -//			llinfos << "processAvatarAppearance end  " << mID << llendl; -			return; -		} -	} -	clearVisualParamWeights(); -	//dumpArchetypeXML(dump_prefix + "process_post_clear"); -  	ESex old_sex = getSex(); -//	llinfos << "LLVOAvatar::processAvatarAppearance()" << llendl; -//	dumpAvatarTEs( "PRE  processAvatarAppearance()" );  	LLTEContents tec;  	parseTEMessage(mesgsys, _PREHASH_ObjectData, -1, tec); -//	dumpAvatarTEs( "POST processAvatarAppearance()" );  	U8 appearance_version = 0;  	S32 this_update_cof_version = LLViewerInventoryCategory::VERSION_UNKNOWN; @@ -6383,8 +6406,20 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		mUseServerBakes = false;  	} +	// Only now that we have result of appearance_version can we decide whether to bail out. +	// Don't expect this case to occur. +	if( isSelf() ) +	{ +		llwarns << avString() << "Received AvatarAppearance for self" << llendl; +		if( mFirstTEMessageReceived && !isUsingServerBakes()) +		{ +			return; +		} +	} + +  	// Check for stale update. -	if (mUseServerBakes && isSelf() +	if (isUsingServerBakes() && isSelf()  		&& this_update_cof_version >= LLViewerInventoryCategory::VERSION_INITIAL  		&& this_update_cof_version < last_update_request_cof_version)  	{ @@ -6470,12 +6505,11 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  				}  				param = getNextVisualParam();  			} -			//dumpAppearanceMsgParams(dump_prefix + "appearance_msg", -			//						params_for_dump, -			//						tec); +			if (enable_verbose_dumps) +				dumpAppearanceMsgParams(dump_prefix + "appearance_msg", params_for_dump, tec);  		} -		//dumpArchetypeXML(dump_prefix + "process_post_set_weights"); +		if (enable_verbose_dumps) { dumpArchetypeXML(dump_prefix + "process_post_set_weights"); }  		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT  		if (num_blocks != expected_tweakable_count) @@ -6541,7 +6575,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  	updateMeshTextures(); -	//dumpArchetypeXML(dump_prefix + "process_end"); +	if (enable_verbose_dumps) dumpArchetypeXML(dump_prefix + "process_end");  //	llinfos << "processAvatarAppearance end " << mID << llendl;  } @@ -6784,8 +6818,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )  }  std::string get_sequential_numbered_file_name(const std::string& prefix, -											  const std::string& suffix, -											  const S32 width) +											  const std::string& suffix)  {  	typedef std::map<std::string,S32> file_num_type;  	static  file_num_type file_nums; @@ -6795,10 +6828,8 @@ std::string get_sequential_numbered_file_name(const std::string& prefix,  	{  		num = it->second;  	} -	std::ostringstream temp; -	temp << std::setw(width) << std::setfill('0') << num;  	file_nums[prefix] = num+1; -	std::string outfilename = prefix + " " + temp.str() + ".xml"; +	std::string outfilename = prefix + " " + llformat("%04d",num) + ".xml";  	std::replace(outfilename.begin(),outfilename.end(),' ','_');  	return outfilename;  } @@ -6808,7 +6839,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  	std::string outprefix(prefix);  	if (outprefix.empty())  	{ -		outprefix = getFullname(); +		outprefix = getFullname() + (isSelf()?"_s":"_o");  	}  	if (outprefix.empty())  	{ @@ -6846,8 +6877,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  				if( (viewer_param->getWearableType() == type) &&   					(viewer_param->isTweakable() ) )  				{ -					apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n", -									viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight()); +					dump_visual_param(file, viewer_param, viewer_param->getWeight());  				}  			} @@ -6873,10 +6903,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  		for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam())  		{  			LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; -			{ -				apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n", -								viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight()); -			} +			dump_visual_param(file, viewer_param, viewer_param->getWeight());  		}  		for (U8 te = 0; te < TEX_NUM_INDICES; te++) diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 96e87279b2..10c081cf68 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -208,7 +208,6 @@ public:  public:  	virtual bool 	isSelf() const { return false; } // True if this avatar is for this viewer's agent -	/*virtual*/BOOL	isUsingBakedTextures() const { return mUseServerBakes; } // e.g. false if in appearance edit mode		  private: //aligned members  	LL_ALIGN_16(LLVector4a	mImpostorExtents[2]); @@ -636,7 +635,21 @@ public:  	//--------------------------------------------------------------------  public:  	BOOL			getIsAppearanceAnimating() const { return mAppearanceAnimating; } -	BOOL			isUsingLocalAppearance() const { return mUseLocalAppearance; } + +	// True if we are computing our appearance via local compositing +	// instead of baked textures, as for example during wearable +	// editing or when waiting for a subsequent server rebake. +	/*virtual*/ BOOL	isUsingLocalAppearance() const { return mUseLocalAppearance; } + +	// True if this avatar should fetch its baked textures via the new +	// appearance mechanism. +	/*virtual*/ BOOL	isUsingServerBakes() const { return mUseServerBakes; } + +	// True if we are currently in appearance editing mode. Often but +	// not always the same as isUsingLocalAppearance(). +	/*virtual*/ BOOL	isEditingAppearance() const { return mIsEditingAppearance; } + +	// FIXME review isUsingLocalAppearance uses, some should be isEditing instead.  private:  	BOOL			mAppearanceAnimating; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index c5bb4c3700..7ca40a8752 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -746,7 +746,10 @@ U32  LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys,  {  	U32 retval = LLVOAvatar::processUpdateMessage(mesgsys,user_data,block_num,update_type,dp); -	if (mInitialBakesLoaded == false && retval == 0x0) +	// 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. +	if (mInitialBakesLoaded == false && retval == 0x0 && mFirstAppearanceMessageReceived)  	{  		// call update textures to force the images to be created  		updateMeshTextures(); @@ -1274,11 +1277,8 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr  			discard_level < local_tex_obj->getDiscard())  		{  			local_tex_obj->setDiscard(discard_level); -			if (isUsingBakedTextures()) -			{ -				requestLayerSetUpdate(index); -			} -			else +			requestLayerSetUpdate(index); +			if (isEditingAppearance())  			{  				LLVisualParamHint::requestHintUpdates();  			} @@ -1758,11 +1758,8 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te  					local_tex_obj->setDiscard(tex_discard);  					if (isSelf())  					{ -						if (gAgentAvatarp->isUsingBakedTextures()) -						{ -							requestLayerSetUpdate(type); -						} -						else +						requestLayerSetUpdate(type); +						if (isEditingAppearance())  						{  							LLVisualParamHint::requestHintUpdates();  						} @@ -2669,6 +2666,7 @@ void LLVOAvatarSelf::onCustomizeEnd(bool disable_camera_switch)  		gAgentAvatarp->mIsEditingAppearance = false;  		if (gAgentAvatarp->getRegion() && !gAgentAvatarp->getRegion()->getCentralBakeVersion())  		{ +			// FIXME DRANO - move to sendAgentSetAppearance, make conditional on upload complete.  			gAgentAvatarp->mUseLocalAppearance = false;  		} | 
