diff options
Diffstat (limited to 'indra/newview')
61 files changed, 772 insertions, 768 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ff260e6040..4c535a952f 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -4,6 +4,7 @@ project(viewer)  include(00-Common)  include(Boost) +include(BuildVersion)  include(DBusGlib)  include(DirectX)  include(OpenSSL) @@ -1563,7 +1564,7 @@ endif (WINDOWS)  if (OPENAL)    set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL") -endif (OPENAL)           +endif (OPENAL)  if (FMODEX)    set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX") @@ -1983,7 +1984,7 @@ if (DARWIN)    configure_file(       "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist"       "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app/Contents/Info.plist" -               ) +    )    add_custom_command(      TARGET ${VIEWER_BINARY_NAME} POST_BUILD diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 06f1b32fe2..2e53cf2da0 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12439,17 +12439,6 @@        <key>Value</key>        <integer>3</integer>      </map> -    <key>UpdaterWillingToTest</key> -    <map> -      <key>Comment</key> -      <string>Allow upgrades to release candidate viewers with new features and fixes.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>UpdaterServiceCheckPeriod</key>      <map>        <key>Comment</key> @@ -12483,6 +12472,17 @@        <key>Value</key>        <string>update</string>      </map> +    <key>UpdaterServiceProtocolVersion</key> +    <map> +      <key>Comment</key> +      <string>The update protocol version to use.</string> +      <key>Persist</key> +      <integer>0</integer> +      <key>Type</key> +      <string>String</string> +      <key>Value</key> +      <string>v1.0</string> +    </map>      <key>UploadBakedTexOld</key>      <map>        <key>Comment</key> @@ -12822,7 +12822,6 @@        <key>Type</key>        <string>LLSD</string>        <key>Value</key> -      <string/>      </map>      <key>VFSOldSize</key>      <map> @@ -13449,7 +13448,7 @@        <key>Type</key>        <string>F32</string>        <key>Value</key> -      <real>-1.0</real> +      <integer>-1.0</integer>      </map>      <key>ForcePeriodicRenderingTime</key>      <map> @@ -13460,7 +13459,7 @@        <key>Type</key>        <string>F32</string>        <key>Value</key> -      <real>-1.0</real> +      <integer>-1.0</integer>      </map>      <key>ZoomDirect</key>      <map> @@ -14447,6 +14446,7 @@      <key>Value</key>      <integer>0</integer>    </map> +  <key>DisablePrecacheDelayAfterTeleporting</key>    <map>      <key>Comment</key>      <string>Disables the artificial delay in the viewer that precaches some incoming assets</string> @@ -14501,38 +14501,5 @@      <key>Value</key>      <integer>0</integer>    </map> -  <key>FMODExProfilerEnable</key> -  <map> -    <key>Comment</key> -    <string>Enable profiler tool if using FMOD Ex</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -    </map> -  <key>FMODExDecodeBufferSize</key> -  <map> -    <key>Comment</key> -    <string>Sets the streaming decode buffer size (in milliseconds)</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>U32</string> -    <key>Value</key> -    <integer>1000</integer> -    </map> -  <key>FMODExStreamBufferSize</key> -  <map> -    <key>Comment</key> -    <string>Sets the streaming buffer size (in milliseconds)</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>U32</string> -    <key>Value</key> -    <integer>7000</integer> -  </map>  </map>  </llsd> diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 8d76485886..975180606a 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -42,7 +42,7 @@ void main()  {  	float shadow = 1.0; -	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color; +	vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;  	color.rgb = pow(color.rgb,vec3(2.2f,2.2f,2.2f));  	color.rgb = fullbrightAtmosTransport(color.rgb); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 6675bfde69..79f94fb131 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -103,7 +103,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod);  	ret = correctWithGamma(ret); - +	  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));  	float det = min(lod/(proj_lod*0.5), 1.0); @@ -121,7 +121,7 @@ vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod);  	ret = correctWithGamma(ret); - +	  	vec2 dist = tc-vec2(0.5);  	float d = dot(dist,dist); diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl index 5aff156eae..352cea7aaa 100755 --- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl @@ -82,7 +82,8 @@ void main()  	pos.w = 1.0;  	pos = modelview_matrix*pos; -	calcAtmospherics(view.xyz); +	calcAtmospherics(pos.xyz); +	  	//pass wave parameters to pixel shader  	vec2 bigWave =  (v.xy) * vec2(0.04,0.04)  + d1 * time * 0.055; diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index c1eff73bc8..8fd06c7e2f 100755 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -130,7 +130,7 @@ void calcAtmospherics(vec3 inPositionEye) {  		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)  	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient))); - +	  	//brightness of surface both sunlight and ambient  	setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);  	setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma); diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 284e9c44b2..e5b385f4aa 100755 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -1084,8 +1084,7 @@           scale="0 0 .5" />        </param_skeleton>      </param> - -    <param +                          <param       id="11001"       group="0"       name="Hover" @@ -12308,7 +12307,7 @@ render_pass="bump">  	 <param_driver />      </param> -    <param +  <param       id="11000"       group="0"       name="AppearanceMessage_Version" diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 8c42defa73..3e94c5edf7 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -4317,7 +4317,7 @@ void LLAgent::sendAgentSetAppearance()  		return;  	} - +	  	LL_DEBUGS("Avatar") << gAgentAvatarp->avString() << "TAT: Sent AgentSetAppearance: " << gAgentAvatarp->getBakedStatusForPrintout() << LL_ENDL;  	//dumpAvatarTEs( "sendAgentSetAppearance()" ); @@ -4425,7 +4425,7 @@ void LLAgent::sendAgentSetAppearance()  		}  	} -	//llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl; +//	llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl;  	sendReliableMessage();  } diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 0896aa5972..488a134aa2 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2267,22 +2267,22 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()  		gFocusMgr.setKeyboardFocus( NULL );  		gFocusMgr.setMouseCapture( NULL ); -		// Remove any pitch or rotation from the avatar -		LLVector3 at = gAgent.getAtAxis(); -		at.mV[VZ] = 0.f; -		at.normalize(); -		gAgent.resetAxes(at); - -		gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); -		gAgent.setCustomAnim(TRUE); -		gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE); -		LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE); - -		if (turn_motion) -		{ -			// delay camera animation long enough to play through turn animation -			setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP); -		} +			// Remove any pitch or rotation from the avatar +			LLVector3 at = gAgent.getAtAxis(); +			at.mV[VZ] = 0.f; +			at.normalize(); +			gAgent.resetAxes(at); + +			gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); +			gAgent.setCustomAnim(TRUE); +			gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE); +			LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE); + +			if (turn_motion) +			{ +				// delay camera animation long enough to play through turn animation +				setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP); +			}  	}  	LLVector3 agent_at = gAgent.getAtAxis(); diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index c88694ef76..1edbbe2a2e 100644..100755 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -62,15 +62,15 @@ using namespace LLAvatarAppearanceDefines;  // Callback to wear and start editing an item that has just been created.  void wear_and_edit_cb(const LLUUID& inv_item) -{ -	if (inv_item.isNull()) return; -	 -	// Request editing the item after it gets worn. -	gAgentWearables.requestEditingWearable(inv_item); -	 -	// Wear it. -	LLAppearanceMgr::instance().wearItemOnAvatar(inv_item); -} +	{ +		if (inv_item.isNull()) return; + +		// Request editing the item after it gets worn. +		gAgentWearables.requestEditingWearable(inv_item); + +		// Wear it. +		LLAppearanceMgr::instance().wearItemOnAvatar(inv_item); +	}  /////////////////////////////////////////////////////////////////////////////// @@ -180,10 +180,10 @@ void LLAgentWearables::initClass()  }  void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar) -{ +{   	llassert(avatar); -	avatar->outputRezTiming("Sending wearables request"); -	sendAgentWearablesRequest(); +		avatar->outputRezTiming("Sending wearables request"); +		sendAgentWearablesRequest();  	setAvatarAppearance(avatar);  } @@ -706,7 +706,7 @@ LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType::ETyp  }  const LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType::EType type, U32 index /*= 0*/) const -{ +	{  	return dynamic_cast<const LLViewerWearable*> (getWearable(type, index));  } @@ -714,39 +714,39 @@ const LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType  BOOL LLAgentWearables::selfHasWearable(LLWearableType::EType type)  {  	return (gAgentWearables.getWearableCount(type) > 0); -} - +	} +	  // virtual  void LLAgentWearables::wearableUpdated(LLWearable *wearable, BOOL removed) -{ +	{  	if (isAgentAvatarValid())  	{  		const BOOL upload_result = removed;  		gAgentAvatarp->wearableUpdated(wearable->getType(), upload_result); -	} +}  	LLWearableData::wearableUpdated(wearable, removed);  	if (!removed) -	{ +{  		LLViewerWearable* viewer_wearable = dynamic_cast<LLViewerWearable*>(wearable);  		viewer_wearable->refreshName(); -		// Hack pt 2. If the wearable we just loaded has definition version 24, -		// then force a re-save of this wearable after slamming the version number to 22. -		// This number was incorrectly incremented for internal builds before release, and -		// this fix will ensure that the affected wearables are re-saved with the right version number. -		// the versions themselves are compatible. This code can be removed before release. -		if( wearable->getDefinitionVersion() == 24 ) -		{ -			wearable->setDefinitionVersion(22); -			U32 index = getWearableIndex(wearable); +	// Hack pt 2. If the wearable we just loaded has definition version 24, +	// then force a re-save of this wearable after slamming the version number to 22. +	// This number was incorrectly incremented for internal builds before release, and +	// this fix will ensure that the affected wearables are re-saved with the right version number. +	// the versions themselves are compatible. This code can be removed before release. +	if( wearable->getDefinitionVersion() == 24 ) +	{ +		wearable->setDefinitionVersion(22); +		U32 index = getWearableIndex(wearable);  			llinfos << "forcing wearable type " << wearable->getType() << " to version 22 from 24" << llendl; -			saveWearable(wearable->getType(),index,TRUE); -		} +		saveWearable(wearable->getType(),index,TRUE); +	}  		checkWearableAgainstInventory(viewer_wearable); -	} +}  }  BOOL LLAgentWearables::itemUpdatePending(const LLUUID& item_id) const @@ -965,8 +965,8 @@ public:  		llinfos << "All items created" << llendl;  		LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;  		LLAppearanceMgr::instance().linkAll(LLAppearanceMgr::instance().getCOF(), -											mItemsToLink, -											link_waiter); +												mItemsToLink, +												link_waiter);  	}  	void addPendingWearable(LLViewerWearable *wearable)  	{ @@ -1496,12 +1496,12 @@ void LLAgentWearables::queryWearableCache()  // virtual  void LLAgentWearables::invalidateBakedTextureHash(LLMD5& hash) const  { -	// Add some garbage into the hash so that it becomes invalid. -	if (isAgentAvatarValid()) -	{ -		hash.update((const unsigned char*)gAgentAvatarp->getID().mData, UUID_BYTES); -	} -} +		// Add some garbage into the hash so that it becomes invalid. +			if (isAgentAvatarValid()) +			{ +				hash.update((const unsigned char*)gAgentAvatarp->getID().mData, UUID_BYTES); +			} +		}  // User has picked "remove from avatar" from a menu.  // static diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 2d2d730396..8b6b6db525 100755 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -36,44 +36,44 @@  void order_my_outfits_cb() -{ -	if (!LLApp::isRunning())  	{ -		llwarns << "called during shutdown, skipping" << llendl; -		return; -	} +		if (!LLApp::isRunning()) +		{ +			llwarns << "called during shutdown, skipping" << llendl; +			return; +		} -	const LLUUID& my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); -	if (my_outfits_id.isNull()) return; +		const LLUUID& my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); +		if (my_outfits_id.isNull()) return; -	LLInventoryModel::cat_array_t* cats; -	LLInventoryModel::item_array_t* items; -	gInventory.getDirectDescendentsOf(my_outfits_id, cats, items); -	if (!cats) return; +		LLInventoryModel::cat_array_t* cats; +		LLInventoryModel::item_array_t* items; +		gInventory.getDirectDescendentsOf(my_outfits_id, cats, items); +		if (!cats) return; -	//My Outfits should at least contain saved initial outfit and one another outfit -	if (cats->size() < 2) -	{ -		llwarning("My Outfits category was not populated properly", 0); -		return; -	} +		//My Outfits should at least contain saved initial outfit and one another outfit +		if (cats->size() < 2) +		{ +			llwarning("My Outfits category was not populated properly", 0); +			return; +		} -	llinfos << "Starting updating My Outfits with wearables ordering information" << llendl; +		llinfos << "Starting updating My Outfits with wearables ordering information" << llendl; -	for (LLInventoryModel::cat_array_t::iterator outfit_iter = cats->begin(); -		 outfit_iter != cats->end(); ++outfit_iter) -	{ -		const LLUUID& cat_id = (*outfit_iter)->getUUID(); -		if (cat_id.isNull()) continue; +		for (LLInventoryModel::cat_array_t::iterator outfit_iter = cats->begin(); +			outfit_iter != cats->end(); ++outfit_iter) +		{ +			const LLUUID& cat_id = (*outfit_iter)->getUUID(); +			if (cat_id.isNull()) continue; -		// saved initial outfit already contains wearables ordering information -		if (cat_id == LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) continue; +			// saved initial outfit already contains wearables ordering information +			if (cat_id == LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) continue; -		LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(cat_id); -	} +			LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(cat_id); +		} -	llinfos << "Finished updating My Outfits with wearables ordering information" << llendl; -} +		llinfos << "Finished updating My Outfits with wearables ordering information" << llendl; +	}  LLInitialWearablesFetch::LLInitialWearablesFetch(const LLUUID& cof_id) :  	LLInventoryFetchDescendentsObserver(cof_id) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 652f199e28..fd9236c8b3 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -196,7 +196,7 @@ public:  		LLEventTimer(5.0)  	{  		if (!mTrackingPhase.empty()) -		{ +	{  			selfStartPhase(mTrackingPhase);  		}  	} @@ -212,23 +212,23 @@ public:  			addItem(item->getUUID());  		}  	} - +		  	// Request or re-request operation for specified item.  	void addItem(const LLUUID& item_id)  	{  		LL_DEBUGS("Avatar") << "item_id " << item_id << llendl; -		 +  		if (!requestOperation(item_id))  		{  			LL_DEBUGS("Avatar") << "item_id " << item_id << " requestOperation false, skipping" << llendl;  			return; -		} +	}  		mPendingRequests++;  		// On a re-request, this will reset the timer.  		mWaitTimes[item_id] = LLTimer();  		if (mRetryCounts.find(item_id) == mRetryCounts.end()) -		{ +	{  			mRetryCounts[item_id] = 0;  		}  		else @@ -242,7 +242,7 @@ public:  	void onOp(const LLUUID& src_id, const LLUUID& dst_id, LLTimer timestamp)  	{  		if (ll_frand() < gSavedSettings.getF32("InventoryDebugSimulateLateOpRate")) -		{ +	{  			llwarns << "Simulating late operation by punting handling to later" << llendl;  			doAfterInterval(boost::bind(&LLCallAfterInventoryBatchMgr::onOp,this,src_id,dst_id,timestamp),  							mRetryAfter); @@ -265,12 +265,12 @@ public:  			onCompletionOrFailure();  		}  	} - +		  	void onCompletionOrFailure()  	{  		assert (!mCompletionOrFailureCalled);  		mCompletionOrFailureCalled = true; -		 +  		// Will never call onCompletion() if any item has been flagged as  		// a failure - otherwise could wind up with corrupted  		// outfit, involuntary nudity, etc. @@ -288,7 +288,7 @@ public:  			onFailure();  		}  	} - +		  	void onFailure()  	{  		llinfos << "failed" << llendl; @@ -300,7 +300,7 @@ public:  		llinfos << "done" << llendl;  		mOnCompletionFunc();  	} -	 +  	// virtual  	// Will be deleted after returning true - only safe to do this if all callbacks have fired.  	BOOL tick() @@ -313,7 +313,7 @@ public:  		// been serviced, since it will result in this object being  		// deleted.  		bool all_done = (mPendingRequests==0); - +		  		if (!mWaitTimes.empty())  		{  			llwarns << "still waiting on " << mWaitTimes.size() << " items" << llendl; @@ -323,20 +323,20 @@ public:  				// Use a copy of iterator because it may be erased/invalidated.  				std::map<LLUUID,LLTimer>::iterator curr_it = it;  				++it; -				 +  				F32 time_waited = curr_it->second.getElapsedTimeF32();  				S32 retries = mRetryCounts[curr_it->first];  				if (time_waited > mRetryAfter)  				{  					if (retries < mMaxRetries) -					{ +		{  						LL_DEBUGS("Avatar") << "Waited " << time_waited <<  							" for " << curr_it->first << ", retrying" << llendl;  						mRetryCount++;  						addItem(curr_it->first); -					} -					else -					{ +		} +		else +		{  						llwarns << "Giving up on " << curr_it->first << " after too many retries" << llendl;  						mWaitTimes.erase(curr_it);  						mFailCount++; @@ -347,8 +347,8 @@ public:  					onCompletionOrFailure();  				} -			}  		} +	}  		return all_done;  	} @@ -360,7 +360,7 @@ public:  		LL_DEBUGS("Avatar") << "Times: n " << mTimeStats.getCount() << " min " << mTimeStats.getMinValue() << " max " << mTimeStats.getMaxValue() << llendl;  		LL_DEBUGS("Avatar") << "Mean " << mTimeStats.getMean() << " stddev " << mTimeStats.getStdDev() << llendl;  	} -	 +  	virtual ~LLCallAfterInventoryBatchMgr()  	{  		LL_DEBUGS("Avatar") << "deleting" << llendl; @@ -397,9 +397,9 @@ public:  	{  		addItems(src_items);  	} -	 +  	virtual bool requestOperation(const LLUUID& item_id) -	{ +		{  		LLViewerInventoryItem *item = gInventory.getItem(item_id);  		llassert(item);  		LL_DEBUGS("Avatar") << "copying item " << item_id << llendl; @@ -479,9 +479,9 @@ public:  			LLAppearanceMgr::instance().purgeBaseOutfitLink(cof);  			if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) -			{ +	{  				if (ll_frand() < gSavedSettings.getF32("InventoryDebugSimulateOpFailureRate")) -				{ +		{  					LL_DEBUGS("Avatar") << "simulating failure by not sending request for item " << item_id << llendl;  					return true;  				} @@ -841,69 +841,69 @@ bool LLWearableHoldingPattern::pollFetchCompletion()  void recovered_item_link_cb(const LLUUID& item_id, LLWearableType::EType type, LLViewerWearable *wearable, LLWearableHoldingPattern* holder)  {  	if (!holder->isMostRecent()) -	{ -		llwarns << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl; -		// runway skip here? -	} +		{ +			llwarns << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl; +			// runway skip here? +		}  	llinfos << "Recovered item link for type " << type << llendl;  	holder->eraseTypeToLink(type); -	// Add wearable to FoundData for actual wearing -	LLViewerInventoryItem *item = gInventory.getItem(item_id); -	LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL; +		// Add wearable to FoundData for actual wearing +		LLViewerInventoryItem *item = gInventory.getItem(item_id); +		LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL; -	if (linked_item) -	{ -		gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID()); -			 -		if (item) +		if (linked_item)  		{ -			LLFoundData found(linked_item->getUUID(), -							  linked_item->getAssetUUID(), -							  linked_item->getName(), -							  linked_item->getType(), -							  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID, -							  true // is replacement -				); +			gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID()); +			 +			if (item) +			{ +				LLFoundData found(linked_item->getUUID(), +								  linked_item->getAssetUUID(), +								  linked_item->getName(), +								  linked_item->getType(), +								  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID, +								  true // is replacement +					);  			found.mWearable = wearable;  			holder->getFoundList().push_front(found); +			} +			else +			{ +				llwarns << self_av_string() << "inventory item not found for recovered wearable" << llendl; +			}  		}  		else  		{ -			llwarns << self_av_string() << "inventory item not found for recovered wearable" << llendl; +			llwarns << self_av_string() << "inventory link not found for recovered wearable" << llendl;  		}  	} -	else -	{ -		llwarns << self_av_string() << "inventory link not found for recovered wearable" << llendl; -	} -}  void recovered_item_cb(const LLUUID& item_id, LLWearableType::EType type, LLViewerWearable *wearable, LLWearableHoldingPattern* holder)  {  	if (!holder->isMostRecent()) -	{ -		// runway skip here? -		llwarns << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl; -	} +		{ +			// runway skip here? +			llwarns << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl; +		}  	LL_DEBUGS("Avatar") << self_av_string() << "Recovered item for type " << type << LL_ENDL; -	LLViewerInventoryItem *itemp = gInventory.getItem(item_id); +		LLViewerInventoryItem *itemp = gInventory.getItem(item_id);  	wearable->setItemID(item_id);  	LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(recovered_item_link_cb,_1,type,wearable,holder));  	holder->eraseTypeToRecover(type); -	llassert(itemp); -	if (itemp) -	{ -		link_inventory_item( gAgent.getID(), -							 item_id, -							 LLAppearanceMgr::instance().getCOF(), -							 itemp->getName(), -							 itemp->getDescription(), -							 LLAssetType::AT_LINK, -							 cb); +		llassert(itemp); +		if (itemp) +		{ +			link_inventory_item( gAgent.getID(), +					     item_id, +					     LLAppearanceMgr::instance().getCOF(), +					     itemp->getName(), +						 itemp->getDescription(), +					     LLAssetType::AT_LINK, +					     cb); +		}  	} -}  void LLWearableHoldingPattern::recoverMissingWearable(LLWearableType::EType type)  { @@ -1290,7 +1290,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up  	if (gInventory.isObjectDescendentOf(item_to_wear->getUUID(), gInventory.getLibraryRootFolderID()))  	{  		LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(wear_on_avatar_cb,_1,replace)); -		copy_inventory_item(gAgent.getID(), item_to_wear->getPermissions().getOwner(), item_to_wear->getUUID(), LLUUID::null, std::string(), cb); +		copy_inventory_item(gAgent.getID(), item_to_wear->getPermissions().getOwner(), item_to_wear->getUUID(), LLUUID::null, std::string(),cb);  		return false;  	}   	else if (!gInventory.isObjectDescendentOf(item_to_wear->getUUID(), gInventory.getRootFolderID())) @@ -1680,8 +1680,8 @@ void LLAppearanceMgr::purgeCategory(const LLUUID& category, bool keep_outfit_lin  			}  			else  			{ -				gInventory.purgeObject(item->getUUID()); -			} +			gInventory.purgeObject(item->getUUID()); +		}  #else  			gInventory.purgeObject(item->getUUID());  		} @@ -2267,7 +2267,7 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego  	// Avoid unintentionally overwriting old wearables.  We have to do  	// this up front to avoid having to deal with the case of multiple  	// wearables being dirty. -	if (!category) return; +	if(!category) return;  	if ( !LLInventoryCallbackManager::is_instantiated() )  	{ @@ -2388,7 +2388,7 @@ void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update, LLPo  }  void modified_cof_cb(const LLUUID& inv_item) -{ +{		  	LLAppearanceMgr::instance().updateAppearanceFromCOF();  	// Start editing the item if previously requested. @@ -3237,7 +3237,7 @@ void LLAppearanceMgr::requestServerAppearanceUpdate(LLCurl::ResponderPtr respond  		llwarns << "No cap for UpdateAvatarAppearance." << llendl;  		return;  	} -	 +  	LLSD body;  	S32 cof_version = getCOFVersion();  	if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate")) @@ -3253,7 +3253,7 @@ void LLAppearanceMgr::requestServerAppearanceUpdate(LLCurl::ResponderPtr respond  		}  	}  	LL_DEBUGS("Avatar") << "request url " << url << " my_cof_version " << cof_version << llendl; -	 +  	//LLCurl::ResponderPtr responder_ptr;  	if (!responder_ptr.get())  	{ @@ -3347,33 +3347,33 @@ std::string LLAppearanceMgr::getAppearanceServiceURL() const  }  void show_created_outfit(LLUUID& folder_id, bool show_panel = true) -{ -	if (!LLApp::isRunning())  	{ -		llwarns << "called during shutdown, skipping" << llendl; -		return; -	} -	 -	LLSD key; -	 +		if (!LLApp::isRunning()) +		{ +			llwarns << "called during shutdown, skipping" << llendl; +			return; +		} + +		LLSD key; +		  	//EXT-7727. For new accounts inventory callback is created during login process  	// and may be processed after login process is finished  	if (show_panel) -	{ -		LLFloaterSidePanelContainer::showPanel("appearance", "panel_outfits_inventory", key); -		 -	} -	LLOutfitsList *outfits_list = -		dynamic_cast<LLOutfitsList*>(LLFloaterSidePanelContainer::getPanel("appearance", "outfitslist_tab")); -	if (outfits_list) -	{ +		{ +			LLFloaterSidePanelContainer::showPanel("appearance", "panel_outfits_inventory", key); + +		} +		LLOutfitsList *outfits_list = +			dynamic_cast<LLOutfitsList*>(LLFloaterSidePanelContainer::getPanel("appearance", "outfitslist_tab")); +		if (outfits_list) +		{  		outfits_list->setSelectedOutfitByUUID(folder_id); +		} + +		LLAppearanceMgr::getInstance()->updateIsDirty(); +		gAgentWearables.notifyLoadingFinished(); // New outfit is saved. +		LLAppearanceMgr::getInstance()->updatePanelOutfitName("");  	} -	 -	LLAppearanceMgr::getInstance()->updateIsDirty(); -	gAgentWearables.notifyLoadingFinished(); // New outfit is saved. -	LLAppearanceMgr::getInstance()->updatePanelOutfitName(""); -}  LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, bool show_panel)  { @@ -3415,13 +3415,13 @@ void LLAppearanceMgr::removeItemsFromAvatar(const uuid_vec_t& ids_to_remove)  		llwarns << "called with empty list, nothing to do" << llendl;  	}  	for (uuid_vec_t::const_iterator it = ids_to_remove.begin(); it != ids_to_remove.end(); ++it) -	{ +			{  		const LLUUID& id_to_remove = *it;  		const LLUUID& linked_item_id = gInventory.getLinkedItemID(id_to_remove);  		removeCOFItemLinks(linked_item_id); -	} +			}  	updateAppearanceFromCOF(); -} +	}  void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove)  { diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b2a57b5602..9ac80dd6c0 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1724,7 +1724,7 @@ bool LLAppViewer::cleanup()  		gAudiop->setStreamingAudioImpl(NULL);  		// shut down the audio subsystem -        gAudiop->shutdown(); +			gAudiop->shutdown();  		delete gAudiop;  		gAudiop = NULL; @@ -2753,38 +2753,38 @@ bool LLAppViewer::initConfiguration()  		}  	} -	// -	// Check for another instance of the app running -	// -	mSecondInstance = anotherInstanceRunning(); +	    // +	    // Check for another instance of the app running +	    // +		mSecondInstance = anotherInstanceRunning();  	if (mSecondInstance && !gSavedSettings.getBOOL("AllowMultipleViewers")) -	{ -		std::ostringstream msg; -		msg << LLTrans::getString("MBAlreadyRunning"); -		OSMessageBox( -			msg.str(), -			LLStringUtil::null, -			OSMB_OK); -		return false; -	} +		{ +			std::ostringstream msg; +			msg << LLTrans::getString("MBAlreadyRunning"); +			OSMessageBox( +				msg.str(), +				LLStringUtil::null, +				OSMB_OK); +			return false; +		} -	initMarkerFile(); +		initMarkerFile(); -	if (mSecondInstance) -	{ -		// This is the second instance of SL. Turn off voice support, -		// but make sure the setting is *not* persisted. -		LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice"); -		if(disable_voice) +		if (mSecondInstance)  		{ -			const BOOL DO_NOT_PERSIST = FALSE; -			disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST); +			// This is the second instance of SL. Turn off voice support, +			// but make sure the setting is *not* persisted. +			LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice"); +			if(disable_voice) +			{ +				const BOOL DO_NOT_PERSIST = FALSE; +				disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST); +			}  		} -	}  	else -	{ -		checkForCrash(); -	} +        { +            checkForCrash(); +        }     	// NextLoginLocation is set from the command line option  	std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" ); @@ -2960,26 +2960,26 @@ namespace {  		{  			LL_WARNS("UpdaterService") << "no info url supplied - defaulting to hard coded release notes pattern" << LL_ENDL; -			// truncate version at the rightmost '.'  -			std::string version_short(data["version"]); -			size_t short_length = version_short.rfind('.'); -			if (short_length != std::string::npos) -			{ -				version_short.resize(short_length); -			} +		// truncate version at the rightmost '.'  +		std::string version_short(data["version"]); +		size_t short_length = version_short.rfind('.'); +		if (short_length != std::string::npos) +		{ +			version_short.resize(short_length); +		} -			LLUIString relnotes_url("[RELEASE_NOTES_BASE_URL][CHANNEL_URL]/[VERSION_SHORT]"); -			relnotes_url.setArg("[VERSION_SHORT]", version_short); +		LLUIString relnotes_url("[RELEASE_NOTES_BASE_URL][CHANNEL_URL]/[VERSION_SHORT]"); +		relnotes_url.setArg("[VERSION_SHORT]", version_short); -			// *TODO thread the update service's response through to this point -			std::string const & channel = LLVersionInfo::getChannel(); -			boost::shared_ptr<char> channel_escaped(curl_escape(channel.c_str(), channel.size()), &curl_free); +		// *TODO thread the update service's response through to this point +		std::string const & channel = LLVersionInfo::getChannel(); +		boost::shared_ptr<char> channel_escaped(curl_escape(channel.c_str(), channel.size()), &curl_free); -			relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get()); -			relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL")); +		relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get()); +		relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));  			substitutions["INFO_URL"] = relnotes_url.getString();  		} -		 +  		LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);  	} @@ -3608,7 +3608,7 @@ void LLAppViewer::initMarkerFile()  		if ( markerIsSameVersion(mMarkerFileName) )  		{  			LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found" << LL_ENDL; -			gLastExecEvent = LAST_EXEC_FROZE; +		gLastExecEvent = LAST_EXEC_FROZE;  		}  		else  		{ @@ -3619,7 +3619,7 @@ void LLAppViewer::initMarkerFile()  	{  		if (markerIsSameVersion(logout_marker_file))  		{ -			gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; +		gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;  			LL_INFOS("MarkerFile") << "Logout crashed '"<< logout_marker_file << "', setting LastExecEvent to " << gLastExecEvent << LL_ENDL;  		}  		else @@ -3674,9 +3674,9 @@ void LLAppViewer::initMarkerFile()  		{  			recordMarkerVersion(mMarkerFile);  			LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL; -		} -		else -		{ +	} +	else +	{  			LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;  		}  	} @@ -3692,7 +3692,7 @@ void LLAppViewer::removeMarkerFile(bool leave_logout_marker)  	if (mMarkerFile.getFileHandle())  	{  		LL_DEBUGS("MarkerFile") << "removeMarkerFile marker '"<<mMarkerFileName<<"'"<< LL_ENDL; -		mMarkerFile.close(); +		mMarkerFile.close() ;  		LLAPRFile::remove( mMarkerFileName );  	}  	else @@ -3707,7 +3707,7 @@ void LLAppViewer::removeMarkerFile(bool leave_logout_marker)  			mLogoutMarkerFile.close();  		}  		else -		{ +	{  			LL_WARNS("MarkerFile") << "removeMarkerFile marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;  		}  		LLAPRFile::remove( mLogoutMarkerFileName ); @@ -5335,7 +5335,7 @@ void LLAppViewer::handleLoginComplete()  void LLAppViewer::launchUpdater()  { -	LLSD query_map = LLSD::emptyMap(); +		LLSD query_map = LLSD::emptyMap();  	query_map["os"] = gPlatform;  	// *TODO change userserver to be grid on both viewer and sim, since diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index e0f7223a8c..c1630318e8 100755 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -213,7 +213,7 @@ namespace  		{  			llwarns << "LLEventPollResponder error <" << mCount   					<< "> [status:" << status << "]: " << content -					<< (mDone ? " -- done" : "") << llendl; +					<<	(mDone ? " -- done"	: "") << llendl;  			stop();  			// At this point we have given up and the viewer will not receive HTTP messages from the simulator. diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index ef8c4ff543..007ad1f8d9 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1097,7 +1097,7 @@ bool LLFace::canRenderAsMask()  	{  		return false;  	} - +	  	LLMaterial* mat = te->getMaterialParams();  	if (mat && mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)  	{ diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 58817485fb..b40789db9c 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -2021,7 +2021,7 @@ void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/)  	{  		LLMultiFloater::setMinimized(FALSE);  	} -	 +  	LLFloater::closeFloater(app_quitting);  } diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 49f36a2f32..56b0c15cb9 100755 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -328,7 +328,7 @@ void LLFloaterIMNearbyChat::onChatFontChange(LLFontGL* fontp)  void LLFloaterIMNearbyChat::show()  {  		openFloater(getKey()); -} +	}  bool LLFloaterIMNearbyChat::isChatVisible() const  { diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index 5c6ce9d311..16ed3f990c 100755 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -521,7 +521,7 @@ public:  	void fire(const LLUUID& inv_item_id)  	{  		LLViewerInventoryItem* item = gInventory.getItem(inv_item_id); -		 +  		if (item)  			LLFriendCardsManager::instance().extractAvatarID(item->getCreatorUUID());  	} diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 2c20409381..3b72ad3cd9 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -228,7 +228,7 @@ void on_new_message(const LLSD& msg)      // 0. nothing - exit      if (("none" == user_preferences ||      		ON_TOP_AND_ITEM_IS_SELECTED == conversations_floater_status) -    	    && session_floater->isMessagePaneExpanded()) +    	&& session_floater->isMessagePaneExpanded())      {      	return;      } @@ -1561,7 +1561,7 @@ public:  	}  	void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content) -	{ +	{		  		llwarns << "LLViewerChatterBoxInvitationAcceptResponder error [status:"  				<< statusNum << "]: " << content << llendl;  		//throw something back to the viewer here? diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index f2b39e7186..d88e0c3192 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -686,23 +686,23 @@ void LLInventoryModelBackgroundFetch::bulkFetch()  	{  		if (folder_count)  		{ -			std::string url = region->getCapability("FetchInventoryDescendents2");   			 +			std::string url = region->getCapability("FetchInventoryDescendents2");     			if ( !url.empty() )  			{ -				mFetchCount++; -				if (folder_request_body["folders"].size()) -				{ -					LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats); -					LLHTTPClient::post(url, folder_request_body, fetcher, 300.0); -				} -				if (folder_request_body_lib["folders"].size()) -				{ -					std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2"); +			mFetchCount++; +			if (folder_request_body["folders"].size()) +			{ +				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats); +				LLHTTPClient::post(url, folder_request_body, fetcher, 300.0); +			} +			if (folder_request_body_lib["folders"].size()) +			{ +				std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2"); -					LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats); -					LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0); -				} -			}					 +				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats); +				LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0); +			} +		}  		}  		if (item_count)  		{ diff --git a/indra/newview/llmaterialmgr.cpp b/indra/newview/llmaterialmgr.cpp index fb8cffa4ef..e41a46038f 100644 --- a/indra/newview/llmaterialmgr.cpp +++ b/indra/newview/llmaterialmgr.cpp @@ -216,6 +216,51 @@ boost::signals2::connection LLMaterialMgr::get(const LLUUID& region_id, const LL  	return connection;  } +boost::signals2::connection LLMaterialMgr::getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, LLMaterialMgr::get_callback_te_t::slot_type cb) +{ +	boost::signals2::connection connection; + +	material_map_t::const_iterator itMaterial = mMaterials.find(material_id); +	if (itMaterial != mMaterials.end()) +	{ +		LL_DEBUGS("Materials") << "region " << region_id << " found materialid " << material_id << LL_ENDL; +		get_callback_te_t signal; +		signal.connect(cb); +		signal(material_id, itMaterial->second, te); +		connection = boost::signals2::connection(); +	} +	else +	{ +		if (!isGetPending(region_id, material_id)) +		{ +			get_queue_t::iterator itQueue = mGetQueue.find(region_id); +			if (mGetQueue.end() == itQueue) +			{ +				LL_DEBUGS("Materials") << "mGetQueue inserting region "<<region_id << LL_ENDL; +				std::pair<get_queue_t::iterator, bool> ret = mGetQueue.insert(std::pair<LLUUID, material_queue_t>(region_id, material_queue_t())); +				itQueue = ret.first; +			} +			LL_DEBUGS("Materials") << "adding material id " << material_id << LL_ENDL; +			itQueue->second.insert(material_id); +			markGetPending(region_id, material_id); +		} + +		TEMaterialPair te_mat_pair; +		te_mat_pair.te = te; +		te_mat_pair.materialID = material_id; + +		get_callback_te_map_t::iterator itCallback = mGetTECallbacks.find(te_mat_pair); +		if (itCallback == mGetTECallbacks.end()) +		{ +			std::pair<get_callback_te_map_t::iterator, bool> ret = mGetTECallbacks.insert(std::pair<TEMaterialPair, get_callback_te_t*>(te_mat_pair, new get_callback_te_t())); +			itCallback = ret.first; +		} +		connection = itCallback->second->connect(cb); +	} + +	return connection; +} +  bool LLMaterialMgr::isGetAllPending(const LLUUID& region_id) const  {  	getall_pending_map_t::const_iterator itPending = mGetAllPending.find(region_id); @@ -300,6 +345,22 @@ const LLMaterialPtr LLMaterialMgr::setMaterial(const LLUUID& region_id, const LL  		mGetCallbacks.erase(itCallback);  	} +	TEMaterialPair te_mat_pair; +	te_mat_pair.materialID = material_id; + +	U32 i = 0; +	while (i < LLTEContents::MAX_TES) +	{ +		te_mat_pair.te = i++; +		get_callback_te_map_t::iterator itCallbackTE = mGetTECallbacks.find(te_mat_pair); +		if (itCallbackTE != mGetTECallbacks.end()) +		{ +			(*itCallbackTE->second)(material_id, itMaterial->second, te_mat_pair.te); +			delete itCallbackTE->second; +			mGetTECallbacks.erase(itCallbackTE); +		} +	} +  	return itMaterial->second;  } diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h index 39be5cab29..922b16f1cf 100644 --- a/indra/newview/llmaterialmgr.h +++ b/indra/newview/llmaterialmgr.h @@ -44,8 +44,12 @@ public:  	typedef std::map<LLMaterialID, LLMaterialPtr> material_map_t;  	typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr)> get_callback_t; +	typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr, U32 te)> get_callback_te_t; +  	const LLMaterialPtr         get(const LLUUID& region_id, const LLMaterialID& material_id);  	boost::signals2::connection get(const LLUUID& region_id, const LLMaterialID& material_id, get_callback_t::slot_type cb); +	boost::signals2::connection getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, get_callback_te_t::slot_type cb); +  	typedef boost::signals2::signal<void (const LLUUID&, const material_map_t&)> getall_callback_t;  	void                        getAll(const LLUUID& region_id);  	boost::signals2::connection getAll(const LLUUID& region_id, getall_callback_t::slot_type cb); @@ -78,6 +82,26 @@ protected:  	typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t;  	get_callback_map_t mGetCallbacks; +	// struct for TE-specific material ID query +	struct TEMaterialPair +	{ +		U32 te; +		LLMaterialID materialID; +	}; + +	// needed for std::map compliance only +	// +	friend inline bool operator<( +		const struct LLMaterialMgr::TEMaterialPair& lhs, +		const struct LLMaterialMgr::TEMaterialPair& rhs) +	{ +		return (lhs.materialID < rhs.materialID) ? TRUE : +				 (lhs.te			  < rhs.te)			  ? TRUE : FALSE; +	} + +	typedef std::map<TEMaterialPair, get_callback_te_t*> get_callback_te_map_t; +	get_callback_te_map_t mGetTECallbacks; +  	typedef std::set<LLUUID> getall_queue_t;  	getall_queue_t        mGetAllQueue;  	getall_queue_t        mGetAllRequested; diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 6533d55f2f..81acc31863 100755 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -95,7 +95,7 @@ private:  	void				toggleTypeSpecificControls(LLWearableType::EType type);  	void				updateTypeSpecificControls(LLWearableType::EType type); -	// alpha mask checkboxes +	//alpha mask checkboxes  	void configureAlphaCheckbox(LLAvatarAppearanceDefines::ETextureIndex te, const std::string& name);  	void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLAvatarAppearanceDefines::ETextureIndex te);  	void updateAlphaCheckboxes(); @@ -155,7 +155,7 @@ private:  	LLPanel *mPanelEyes;  	LLPanel *mPanelHair; -	// clothes +	//clothes  	LLPanel *mPanelShirt;  	LLPanel *mPanelPants;  	LLPanel *mPanelShoes; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 9c40ff06cc..b3b4932b65 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1562,36 +1562,108 @@ void LLPanelFace::getState()  		// Materials  		{ -			mMaterialID = LLMaterialID::null; -			mMaterial = NULL; +			struct f1 : public LLSelectedTEGetFunctor<LLMaterialPtr> +			{ +				LLMaterialPtr get(LLViewerObject* object, S32 te_index) +				{ +					return object->getTE(te_index)->getMaterialParams(); +				} +			} func; -			struct f1 : public LLSelectedTEGetFunctor<LLMaterialID> +			LLMaterialPtr material; +			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, mMaterial ); + +			if (mMaterial && editable)  			{ -				LLMaterialID get(LLViewerObject* object, S32 te_index) +				LL_DEBUGS("Materials: OnMatererialsLoaded:") << material->asLLSD() << LL_ENDL; + +				// Alpha +				LLCtrlSelectionInterface* combobox_alphamode = +					childGetSelectionInterface("combobox alphamode"); +				if (combobox_alphamode)  				{ -					LLMaterialID material_id; +					combobox_alphamode->selectNthItem(mMaterial->getDiffuseAlphaMode()); +				} +				else +				{ +					llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl; +				} +				getChild<LLUICtrl>("maskcutoff")->setValue(mMaterial->getAlphaMaskCutoff()); +				updateAlphaControls(getChild<LLComboBox>("combobox alphamode"),this); + +				LLTextureEntry::e_texgen selected_texgen = LLTextureEntry::TEX_GEN_DEFAULT; +				bool identical_texgen = true;		 +				bool identical_planar_texgen = false; -					return object->getTE(te_index)->getMaterialID(); +				struct f44 : public LLSelectedTEGetFunctor<LLTextureEntry::e_texgen> +				{ +					LLTextureEntry::e_texgen get(LLViewerObject* object, S32 face) +					{ +						return (LLTextureEntry::e_texgen)(object->getTE(face)->getTexGen()); +					} +				} func; +				identical_texgen = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, selected_texgen ); +				identical_planar_texgen = (identical_texgen && (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR)); + +				// Shiny (specular) +				F32 offset_x, offset_y, repeat_x, repeat_y, rot; +				LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control"); +				texture_ctrl->setImageAssetID(mMaterial->getSpecularID()); +				LLComboBox* combobox_shininess = getChild<LLComboBox>("combobox shininess"); +				if (!mMaterial->getSpecularID().isNull()) +				{ +					mMaterial->getSpecularOffset(offset_x,offset_y); +					mMaterial->getSpecularRepeat(repeat_x,repeat_y); + +					if (identical_planar_texgen) +					{ +						repeat_x *= 2.0f; +						repeat_y *= 2.0f; +					} + +					rot = mMaterial->getSpecularRotation(); +					getChild<LLUICtrl>("shinyScaleU")->setValue(repeat_x); +					getChild<LLUICtrl>("shinyScaleV")->setValue(repeat_y); +					getChild<LLUICtrl>("shinyRot")->setValue(rot*RAD_TO_DEG); +					getChild<LLUICtrl>("shinyOffsetU")->setValue(offset_x); +					getChild<LLUICtrl>("shinyOffsetV")->setValue(offset_y); +					getChild<LLUICtrl>("glossiness")->setValue(mMaterial->getSpecularLightExponent()); +					getChild<LLUICtrl>("environment")->setValue(mMaterial->getEnvironmentIntensity());  				} -			} func; +				updateShinyControls(combobox_shininess,this, !mMaterial->getSpecularID().isNull(), true); -			LLObjectSelectionHandle sel = LLSelectMgr::getInstance()->getSelection(); -			LLSelectNode* node = sel->getFirstNode(); -			if (node) -			{	 -				int selected_te = node->getLastSelectedTE(); -				if (selected_te >= 0) +				// Assert desired colorswatch color to match material AFTER updateShinyControls +				// to avoid getting overwritten with the default on some UI state changes. +				// +				if (!mMaterial->getSpecularID().isNull())  				{ -					mMaterialID = node->getObject()->getTE(selected_te)->getMaterialID(); +					getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(mMaterial->getSpecularLightColor()); +					getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(mMaterial->getSpecularLightColor(),TRUE);  				} -			} -			llinfos << "Material ID returned: '" << mMaterialID.asString() << "', isNull? " << (mMaterialID.isNull()?"TRUE":"FALSE") << llendl; +				// Bumpy (normal) +				texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control"); +				texture_ctrl->setImageAssetID(mMaterial->getNormalID()); +				LLComboBox* combobox_bumpiness = getChild<LLComboBox>("combobox bumpiness"); +				if (!mMaterial->getNormalID().isNull()) +				{ +					mMaterial->getNormalOffset(offset_x,offset_y); +					mMaterial->getNormalRepeat(repeat_x,repeat_y); -			if (!mMaterialID.isNull() && editable) -			{ -				llinfos << "Requesting material ID " << mMaterialID.asString() << llendl; -				LLMaterialMgr::getInstance()->get(objectp->getRegion()->getRegionID(),mMaterialID,boost::bind(&LLPanelFace::onMaterialLoaded, this, _1, _2));		 +					if (identical_planar_texgen) +					{ +						repeat_x *= 2.0f; +						repeat_y *= 2.0f; +					} + +					rot = mMaterial->getNormalRotation(); +					getChild<LLUICtrl>("bumpyScaleU")->setValue(repeat_x); +					getChild<LLUICtrl>("bumpyScaleV")->setValue(repeat_y); +					getChild<LLUICtrl>("bumpyRot")->setValue(rot*RAD_TO_DEG); +					getChild<LLUICtrl>("bumpyOffsetU")->setValue(offset_x); +					getChild<LLUICtrl>("bumpyOffsetV")->setValue(offset_y); +				} +				updateBumpyControls(combobox_bumpiness,this, !mMaterial->getNormalID().isNull(), true);  			}  		} @@ -1658,104 +1730,6 @@ void LLPanelFace::refresh()  	getState();  } -void LLPanelFace::onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material) -{ //laying out UI based on material parameters (calls setVisible on various components) -	LL_DEBUGS("Materials") << "material id " << material_id.asString() << " data " << material->asLLSD() << LL_ENDL; -	 -	//make a local copy of the material for editing  -	// (prevents local edits from overwriting client state on shared materials) -	mMaterial   = new LLMaterial(*material); -	mMaterialID = material_id; - -	// Alpha -	LLCtrlSelectionInterface* combobox_alphamode = -	      childGetSelectionInterface("combobox alphamode"); -	if (combobox_alphamode) -	{ -		combobox_alphamode->selectNthItem(material->getDiffuseAlphaMode()); -	} -	else -	{ -		llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl; -	} -	getChild<LLUICtrl>("maskcutoff")->setValue(material->getAlphaMaskCutoff()); -	updateAlphaControls(getChild<LLComboBox>("combobox alphamode"),this); - -	LLTextureEntry::e_texgen selected_texgen = LLTextureEntry::TEX_GEN_DEFAULT; -	bool identical_texgen = true;		 -	bool identical_planar_texgen = false; - -	struct f44 : public LLSelectedTEGetFunctor<LLTextureEntry::e_texgen> -	{ -		LLTextureEntry::e_texgen get(LLViewerObject* object, S32 face) -		{ -			return (LLTextureEntry::e_texgen)(object->getTE(face)->getTexGen()); -		} -	} func; -	identical_texgen = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, selected_texgen ); -	identical_planar_texgen = (identical_texgen && (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR)); - -	// Shiny (specular) -	F32 offset_x, offset_y, repeat_x, repeat_y, rot; -	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control"); -	texture_ctrl->setImageAssetID(material->getSpecularID()); -	LLComboBox* combobox_shininess = getChild<LLComboBox>("combobox shininess"); -	if (!material->getSpecularID().isNull()) -	{ -		material->getSpecularOffset(offset_x,offset_y); -		material->getSpecularRepeat(repeat_x,repeat_y); - -		if (identical_planar_texgen) -		{ -			repeat_x *= 2.0f; -			repeat_y *= 2.0f; -		} - -		rot = material->getSpecularRotation(); -		getChild<LLUICtrl>("shinyScaleU")->setValue(repeat_x); -		getChild<LLUICtrl>("shinyScaleV")->setValue(repeat_y); -		getChild<LLUICtrl>("shinyRot")->setValue(rot*RAD_TO_DEG); -		getChild<LLUICtrl>("shinyOffsetU")->setValue(offset_x); -		getChild<LLUICtrl>("shinyOffsetV")->setValue(offset_y); -		getChild<LLUICtrl>("glossiness")->setValue(material->getSpecularLightExponent()); -		getChild<LLUICtrl>("environment")->setValue(material->getEnvironmentIntensity()); -	} -	updateShinyControls(combobox_shininess,this, !material->getSpecularID().isNull(), true); - -	// Assert desired colorswatch color to match material AFTER updateShinyControls -	// to avoid getting overwritten with the default on some UI state changes. -	// -	if (!material->getSpecularID().isNull()) -	{ -		getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor()); -		getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE); -	} - -	// Bumpy (normal) -	texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control"); -	texture_ctrl->setImageAssetID(material->getNormalID()); -	LLComboBox* combobox_bumpiness = getChild<LLComboBox>("combobox bumpiness"); -	if (!material->getNormalID().isNull()) -	{ -		material->getNormalOffset(offset_x,offset_y); -		material->getNormalRepeat(repeat_x,repeat_y); - -		if (identical_planar_texgen) -		{ -			repeat_x *= 2.0f; -			repeat_y *= 2.0f; -		} - -		rot = material->getNormalRotation(); -		getChild<LLUICtrl>("bumpyScaleU")->setValue(repeat_x); -		getChild<LLUICtrl>("bumpyScaleV")->setValue(repeat_y); -		getChild<LLUICtrl>("bumpyRot")->setValue(rot*RAD_TO_DEG); -		getChild<LLUICtrl>("bumpyOffsetU")->setValue(offset_x); -		getChild<LLUICtrl>("bumpyOffsetV")->setValue(offset_y); -	} -	updateBumpyControls(combobox_bumpiness,this, !material->getNormalID().isNull(), true); -} -  void LLPanelFace::updateMaterial()  { // assign current state of UI to material definition for submit to sim  	LL_DEBUGS("Materials") << "Entered." << LL_ENDL; @@ -1781,53 +1755,38 @@ void LLPanelFace::updateMaterial()  	bool identical_texgen = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, selected_texgen );  	bool identical_planar_texgen = (identical_texgen && (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR)); -	if ((mIsAlpha && (alpha_mode != LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)) +	bool is_default_blend_mode = mIsAlpha ? (alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND) +													  : (alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_NONE); +	 +	if (  !is_default_blend_mode  		|| (bumpiness == BUMPY_TEXTURE)  		|| (shininess == SHINY_TEXTURE))  	{  		// The user's specified something that needs a material.  		bool new_material = false; -		if (!mMaterial) +	 +		// Create new or clone material +		// +		if (mMaterial.isNull())  		{ -			new_material = true;  			mMaterial = LLMaterialPtr(new LLMaterial()); +			new_material = true;  		} - -		LLMaterialPtr material_to_set = mMaterial; - -		bool subselection = false; - -		// If we're editing a single face and not the entire material for an object, -		// we need to clone the material so that our changes to the material's settings -		// don't automatically propagate to the non-selected faces -		// NORSPEC-92 -		// -		LLObjectSelectionHandle sel = LLSelectMgr::getInstance()->getSelection(); -		LLSelectNode* node = sel->getFirstNode(); -		if (node) +		else  		{ -			if (node->getTESelectMask() != TE_SELECT_MASK_ALL) -			{ -				llinfos << "Cloning material to apply to subselection." << llendl; -				material_to_set = new LLMaterial(mMaterial->asLLSD()); -				subselection = true; -			} -			else -			{ -				llinfos << "Apply material change to whole selection." << llendl; -			} +			mMaterial = LLMaterialPtr(new LLMaterial(mMaterial->asLLSD()));  		} -		llassert(!material_to_set.isNull()); +		llassert_always(mMaterial); -		material_to_set->setDiffuseAlphaMode(getChild<LLComboBox>("combobox alphamode")->getCurrentIndex()); -		material_to_set->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger())); +		mMaterial->setDiffuseAlphaMode(getChild<LLComboBox>("combobox alphamode")->getCurrentIndex()); +		mMaterial->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger()));  		LLUUID norm_map_id = getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID();  		if (!norm_map_id.isNull() && (bumpiness == BUMPY_TEXTURE))  		{  			LL_DEBUGS("Materials") << "Setting bumpy texture, bumpiness = " << bumpiness  << LL_ENDL; -			material_to_set->setNormalID(norm_map_id); +			mMaterial->setNormalID(norm_map_id);  			F32 bumpy_scale_u = getChild<LLUICtrl>("bumpyScaleU")->getValue().asReal();  			F32 bumpy_scale_v = getChild<LLUICtrl>("bumpyScaleV")->getValue().asReal(); @@ -1838,18 +1797,18 @@ void LLPanelFace::updateMaterial()  				bumpy_scale_v *= 0.5f;  			} -			material_to_set->setNormalOffset(getChild<LLUICtrl>("bumpyOffsetU")->getValue().asReal(), +			mMaterial->setNormalOffset(getChild<LLUICtrl>("bumpyOffsetU")->getValue().asReal(),  							getChild<LLUICtrl>("bumpyOffsetV")->getValue().asReal()); -			material_to_set->setNormalRepeat(bumpy_scale_u, bumpy_scale_v); -			material_to_set->setNormalRotation(getChild<LLUICtrl>("bumpyRot")->getValue().asReal()*DEG_TO_RAD); +			mMaterial->setNormalRepeat(bumpy_scale_u, bumpy_scale_v); +			mMaterial->setNormalRotation(getChild<LLUICtrl>("bumpyRot")->getValue().asReal()*DEG_TO_RAD);  		}  		else  		{  			LL_DEBUGS("Materials") << "Removing bumpy texture, bumpiness = " << bumpiness  << LL_ENDL; -			material_to_set->setNormalID(LLUUID()); -			material_to_set->setNormalOffset(0.0f,0.0f); -			material_to_set->setNormalRepeat(1.0f,1.0f); -			material_to_set->setNormalRotation(0.0f); +			mMaterial->setNormalID(LLUUID()); +			mMaterial->setNormalOffset(0.0f,0.0f); +			mMaterial->setNormalRepeat(1.0f,1.0f); +			mMaterial->setNormalRotation(0.0f);  		}  		LLUUID spec_map_id = getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID(); @@ -1857,8 +1816,8 @@ void LLPanelFace::updateMaterial()  		if (!spec_map_id.isNull()  && (shininess == SHINY_TEXTURE))  		{  			LL_DEBUGS("Materials") << "Setting shiny texture, shininess = " << shininess  << LL_ENDL; -			material_to_set->setSpecularID(spec_map_id); -			material_to_set->setSpecularOffset(getChild<LLUICtrl>("shinyOffsetU")->getValue().asReal(), +			mMaterial->setSpecularID(spec_map_id); +			mMaterial->setSpecularOffset(getChild<LLUICtrl>("shinyOffsetU")->getValue().asReal(),  							getChild<LLUICtrl>("shinyOffsetV")->getValue().asReal());  			F32 shiny_scale_u = getChild<LLUICtrl>("shinyScaleU")->getValue().asReal(); @@ -1870,55 +1829,42 @@ void LLPanelFace::updateMaterial()  				shiny_scale_v *= 0.5f;  			} -			material_to_set->setSpecularRepeat(shiny_scale_u, shiny_scale_v); -			material_to_set->setSpecularRotation(getChild<LLUICtrl>("shinyRot")->getValue().asReal()*DEG_TO_RAD); +			mMaterial->setSpecularRepeat(shiny_scale_u, shiny_scale_v); +			mMaterial->setSpecularRotation(getChild<LLUICtrl>("shinyRot")->getValue().asReal()*DEG_TO_RAD);  			//override shininess to 0.2f if this is a new material  			if (!new_material)  			{ -				material_to_set->setSpecularLightColor(getChild<LLColorSwatchCtrl>("shinycolorswatch")->get()); -				material_to_set->setSpecularLightExponent(getChild<LLUICtrl>("glossiness")->getValue().asInteger()); -				material_to_set->setEnvironmentIntensity(getChild<LLUICtrl>("environment")->getValue().asInteger()); +				mMaterial->setSpecularLightColor(getChild<LLColorSwatchCtrl>("shinycolorswatch")->get()); +				mMaterial->setSpecularLightExponent(getChild<LLUICtrl>("glossiness")->getValue().asInteger()); +				mMaterial->setEnvironmentIntensity(getChild<LLUICtrl>("environment")->getValue().asInteger());  			}  		}  		else  		{  			LL_DEBUGS("Materials") << "Removing shiny texture, shininess = " << shininess << LL_ENDL; -			material_to_set->setSpecularID(LLUUID()); -			material_to_set->setSpecularOffset(0.0f,0.0f); -			material_to_set->setSpecularRepeat(1.0f,1.0f); -			material_to_set->setSpecularRotation(0.0f); -			material_to_set->setSpecularLightColor(LLMaterial::DEFAULT_SPECULAR_LIGHT_COLOR); -			material_to_set->setSpecularLightExponent(LLMaterial::DEFAULT_SPECULAR_LIGHT_EXPONENT); -			material_to_set->setEnvironmentIntensity(0); +			mMaterial->setSpecularID(LLUUID()); +			mMaterial->setSpecularOffset(0.0f,0.0f); +			mMaterial->setSpecularRepeat(1.0f,1.0f); +			mMaterial->setSpecularRotation(0.0f); +			mMaterial->setSpecularLightColor(LLMaterial::DEFAULT_SPECULAR_LIGHT_COLOR); +			mMaterial->setSpecularLightExponent(LLMaterial::DEFAULT_SPECULAR_LIGHT_EXPONENT); +			mMaterial->setEnvironmentIntensity(0);  		} -		LL_DEBUGS("Materials") << "Updating material: " << material_to_set->asLLSD() << LL_ENDL; -        +		LL_DEBUGS("Materials") << "Updating material: " << mMaterial->asLLSD() << LL_ENDL; -		if (node && node->getObject() && node->getObject()->permModify() && subselection) -		{	 -			int selected_te = node->getLastSelectedTE(); -			if (selected_te >= 0) -			{ -				LLMaterialMgr::getInstance()->put(node->getObject()->getID(),selected_te,*material_to_set); -				node->getObject()->getTE(selected_te)->setMaterialParams(material_to_set); -				node->getObject()->sendTEUpdate(); -			} -		} -		else -		{ -			LLSelectMgr::getInstance()->selectionSetMaterial( material_to_set ); -		} +		LLSelectMgr::getInstance()->selectionSetMaterial( mMaterial );  	}  	else  	{  		// The user has specified settings that don't need a material. -		if (mMaterial || !mMaterialID.isNull()) +		//if (mMaterial || !mMaterialID.isNull())  		{  			LL_DEBUGS("Materials") << "Resetting material entry" << LL_ENDL;  			mMaterial = NULL;  			mMaterialID = LLMaterialID::null; +  			// Delete existing material entry...  			LLSelectMgr::getInstance()->selectionRemoveMaterial();  		} diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index 7fbeef223b..401dbd1e94 100755 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -87,7 +87,7 @@ protected:  	void 	onCommitAlpha(const LLSD& data);  	void 	onCancelColor(const LLSD& data);  	void 	onSelectColor(const LLSD& data); -	void    onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material); +  	void    updateMaterial();  	static 	void onCommitTextureInfo( 		LLUICtrl* ctrl, void* userdata); diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 3ee0746412..18b85cc9c3 100755 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -428,13 +428,13 @@ F32 LLPhysicsMotion::toLocal(const LLVector3 &world)  F32 LLPhysicsMotion::calculateVelocity_local()  {  	const F32 world_to_model_scale = 100.0f; -	LLJoint *joint = mJointState->getJoint(); -	const LLVector3 position_world = joint->getWorldPosition(); -	const LLVector3 last_position_world = mPosition_world; +        LLJoint *joint = mJointState->getJoint(); +        const LLVector3 position_world = joint->getWorldPosition(); +        const LLVector3 last_position_world = mPosition_world;  	const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale; -	const LLVector3 velocity_world = positionchange_world; -	const F32 velocity_local = toLocal(velocity_world); -	return velocity_local; +        const LLVector3 velocity_world = positionchange_world; +        const F32 velocity_local = toLocal(velocity_world); +        return velocity_local;  }  F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local) diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 5a65623b91..3f60b5f642 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -815,6 +815,7 @@ void LLSelectMgr::addAsFamily(std::vector<LLViewerObject*>& objects, BOOL add_to  			if (objectp->getNumTEs() > 0)  			{  				nodep->selectAllTEs(TRUE); +				objectp->setAllTESelected(true);  			}  			else  			{ @@ -872,10 +873,12 @@ void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoab  	else if (face == SELECT_ALL_TES)  	{  		nodep->selectAllTEs(TRUE); +		objectp->setAllTESelected(true);  	}  	else if (0 <= face && face < SELECT_MAX_TES)  	{  		nodep->selectTE(face, TRUE); +		objectp->setTESelected(face, true);  	}  	else  	{ @@ -1095,6 +1098,7 @@ LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects()  		// flag this object as selected  		objectp->setSelected(TRUE); +		objectp->setAllTESelected(true);  		mSelectedObjects->mSelectType = getSelectTypeForObject(objectp); @@ -1318,6 +1322,7 @@ void LLSelectMgr::remove(LLViewerObject *objectp, S32 te, BOOL undoable)  		if (nodep->isTESelected(te))  		{  			nodep->selectTE(te, FALSE); +			objectp->setTESelected(te, false);  		}  		else  		{ diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 74fa5a87bb..df413ab849 100755 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -231,7 +231,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)  		{  			gAgentCamera.changeCameraToDefault();  			gAgentCamera.resetView(); -		}	 +		}  	}  } diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 762f557a80..b0a6b9cf91 100755 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -47,7 +47,7 @@ public:  	virtual ~LLSidepanelAppearance();  	/*virtual*/ BOOL postBuild(); -	/*virtual*/ void onOpen(const LLSD& key);	 +	/*virtual*/ void onOpen(const LLSD& key);  	void refreshCurrentOutfitName(const std::string& name = ""); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 82596a86b9..cff3a7e02a 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -645,7 +645,7 @@ bool idle_startup()  				gAudiop = (LLAudioEngine *) new LLAudioEngine_OpenAL();  			}  #endif -             +  			if (gAudiop)  			{  #if LL_WINDOWS diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index be5fde9e2b..6173e76a35 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -1896,9 +1896,9 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe  	LLCore::HttpStatus status(response->getStatus());  	LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID -						 << " status: " << status.toHex() -						 << " '" << status.toString() << "'" -						 << llendl; +			 << " status: " << status.toHex() +			 << " '" << status.toString() << "'" +			 << llendl;  //	unsigned int offset(0), length(0), full_length(0);  //	response->getRange(&offset, &length, &full_length);  // 	llwarns << "HTTP COMPLETE: " << mID << " handle: " << handle diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp index aaa81c57d4..aaa81c57d4 100644..100755 --- a/indra/newview/llviewerassetstats.cpp +++ b/indra/newview/llviewerassetstats.cpp diff --git a/indra/newview/llviewerassetstats.h b/indra/newview/llviewerassetstats.h index e4581d2120..e4581d2120 100644..100755 --- a/indra/newview/llviewerassetstats.h +++ b/indra/newview/llviewerassetstats.h diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 094694dc06..3da934b148 100755 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -400,7 +400,7 @@ void audio_update_volume(bool force_update)  		gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));  		if(!LLViewerCamera::getInstance()->cameraUnderWater()) -			gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); +		gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));  		else  			gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelUnderwaterRolloff")); @@ -494,18 +494,18 @@ void audio_update_wind(bool force_update)  	LLViewerRegion* region = gAgent.getRegion();  	if (region)  	{ -		// Scale down the contribution of weather-simulation wind to the -		// ambient wind noise.  Wind velocity averages 3.5 m/s, with gusts to 7 m/s -		// whereas steady-state avatar walk velocity is only 3.2 m/s. -		// Without this the world feels desolate on first login when you are -		// standing still. -		static LLUICachedControl<F32> wind_level("AudioLevelWind", 0.5f); -		LLVector3 scaled_wind_vec = gWindVec * wind_level; - -		// Mix in the avatar's motion, subtract because when you walk north, -		// the apparent wind moves south. -		LLVector3 final_wind_vec = scaled_wind_vec - gAgent.getVelocity(); - +        // Scale down the contribution of weather-simulation wind to the +        // ambient wind noise.  Wind velocity averages 3.5 m/s, with gusts to 7 m/s +        // whereas steady-state avatar walk velocity is only 3.2 m/s. +        // Without this the world feels desolate on first login when you are +        // standing still. +        static LLUICachedControl<F32> wind_level("AudioLevelWind", 0.5f); +        LLVector3 scaled_wind_vec = gWindVec * wind_level; +         +        // Mix in the avatar's motion, subtract because when you walk north, +        // the apparent wind moves south. +        LLVector3 final_wind_vec = scaled_wind_vec - gAgent.getVelocity(); +          		// rotate the wind vector to be listener (agent) relative  		gRelativeWindVec = gAgent.getFrameAgent().rotateToLocal( final_wind_vec ); diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 61b1b8d846..ab19a12014 100755 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -256,7 +256,7 @@ class AddFavoriteLandmarkCallback : public LLInventoryCallback  public:  	AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {}  	void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; } - +	  private:  	void fire(const LLUUID& inv_item); @@ -283,13 +283,13 @@ public:  	// virtual  	void fire(const LLUUID& item_id) -	{ +{  		mFireFunc(item_id);  	}  	// virtual  	~LLBoostFuncInventoryCallback() -	{ +{  		mDestroyFunc();  	} diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5a27bdca90..5e2f05f468 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6444,7 +6444,7 @@ class LLAttachmentDetachFromPoint : public view_listener_t  				LLViewerObject *attached_object = (*iter);  				ids_to_remove.push_back(attached_object->getAttachmentItemID());  			} -		} +			}  		if (!ids_to_remove.empty())  		{  			LLAppearanceMgr::instance().removeItemsFromAvatar(ids_to_remove); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 0842526e9e..d56df96c44 100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -530,6 +530,17 @@ void LLViewerObject::setNameValueList(const std::string& name_value_list)  	}  } +void LLViewerObject::setSelected(BOOL sel) +{ +	mUserSelected = sel; +	resetRot(); + +	if (!sel) +	{ +		setAllTESelected(false); +	} +} +  // This method returns true if the object is over land owned by the  // agent.  bool LLViewerObject::isReturnable() @@ -4117,14 +4128,8 @@ S32 LLViewerObject::setTENormalMapCore(const U8 te, LLViewerTexture *image)  		{  			mat->setNormalID(uuid);  		} - -		setChanged(TEXTURE); -		if (mDrawable.notNull()) -		{ -			gPipeline.markTextured(mDrawable); -		}  	} -	mTENormalMaps[te] = image;	 +	changeTENormalMap(te,image);	  	return retval;  } @@ -4146,13 +4151,8 @@ S32 LLViewerObject::setTESpecularMapCore(const U8 te, LLViewerTexture *image)  		{  			mat->setSpecularID(uuid);  		}		 -		setChanged(TEXTURE); -		if (mDrawable.notNull()) -		{ -			gPipeline.markTextured(mDrawable); -		}  	} -	mTESpecularMaps[te] = image; +	changeTESpecularMap(te, image);  	return retval;  } @@ -4172,6 +4172,11 @@ void LLViewerObject::changeTENormalMap(S32 index, LLViewerTexture* new_image)  	{  		return ;  	} +	setChanged(TEXTURE); +	if (mDrawable.notNull()) +	{ +		gPipeline.markTextured(mDrawable); +	}  	mTENormalMaps[index] = new_image ;  } @@ -4181,6 +4186,11 @@ void LLViewerObject::changeTESpecularMap(S32 index, LLViewerTexture* new_image)  	{  		return ;  	} +	setChanged(TEXTURE); +	if (mDrawable.notNull()) +	{ +		gPipeline.markTextured(mDrawable); +	}  	mTESpecularMaps[index] = new_image ;  } @@ -4376,19 +4386,22 @@ S32 LLViewerObject::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID  							 << ", material " << pMaterialID  							 << LL_ENDL;  	} -	else if (pMaterialID != tep->getMaterialID()) +	//else if (pMaterialID != tep->getMaterialID())  	{  		LL_DEBUGS("Material") << "Changing texture entry for te " << (S32)te  							 << ", object " << mID  							 << ", material " << pMaterialID  							 << LL_ENDL;  		retval = LLPrimitive::setTEMaterialID(te, pMaterialID); +	} +	// Kitty would like to know if this is necessary? +	// Since we should get a setTEMaterialParams that does it anyway? +	//  		setChanged(TEXTURE); -		if (mDrawable.notNull() && retval) +	if (mDrawable.notNull())  		{  			gPipeline.markTextured(mDrawable);  		} -	}  	return retval;  } @@ -4399,9 +4412,9 @@ S32 LLViewerObject::setTEMaterialParams(const U8 te, const LLMaterialPtr pMateri  	if (!tep)  	{  		llwarns << "No texture entry for te " << (S32)te << ", object " << mID << llendl; +		return 0;  	} -	else if (pMaterialParams != tep->getMaterialParams()) -	{ +  		retval = LLPrimitive::setTEMaterialParams(te, pMaterialParams);  		LL_DEBUGS("Material") << "Changing material params for te " << (S32)te  							  << ", object " << mID @@ -4409,12 +4422,13 @@ S32 LLViewerObject::setTEMaterialParams(const U8 te, const LLMaterialPtr pMateri  							  << LL_ENDL;  		setTENormalMap(te, tep->getMaterialParams()->getNormalID());  		setTESpecularMap(te, tep->getMaterialParams()->getSpecularID()); +  		setChanged(TEXTURE); -		if (mDrawable.notNull() && retval) +	if (mDrawable.notNull())  		{  			gPipeline.markTextured(mDrawable);  		} -	} +  	return retval;  } diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index ba23ad97b0..bcb74a8d1f 100755 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -211,7 +211,7 @@ public:  	LLViewerRegion* getRegion() const				{ return mRegionp; }  	BOOL isSelected() const							{ return mUserSelected; } -	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();} +	virtual void setSelected(BOOL sel);  	const LLUUID &getID() const						{ return mID; }  	U32 getLocalID() const							{ return mLocalID; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 755462b0c2..8422708add 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -143,7 +143,7 @@ public:  	CapabilityMap mCapabilities;  	CapabilityMap mSecondCapabilitiesTracker;  - +	  	LLEventPoll* mEventPoll;  	S32 mSeedCapMaxAttempts; @@ -220,7 +220,7 @@ public:  		}      } -   void result(const LLSD& content) +    void result(const LLSD& content)      {  		LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);  		if(!regionp) //region was removed @@ -1587,7 +1587,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("EventQueueGet");  	if (gSavedSettings.getBOOL("UseHTTPInventory")) -	{	 +	{  		capabilityNames.append("FetchLib2");  		capabilityNames.append("FetchLibDescendents2");  		capabilityNames.append("FetchInventory2"); @@ -1606,7 +1606,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("LandResources");  	capabilityNames.append("MapLayer");  	capabilityNames.append("MapLayerGod"); -	capabilityNames.append("MeshUploadFlag");	 +	capabilityNames.append("MeshUploadFlag");  	capabilityNames.append("NavMeshGenerationStatus");  	capabilityNames.append("NewFileAgentInventory");  	capabilityNames.append("ObjectMedia"); @@ -1647,7 +1647,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("ViewerMetrics");  	capabilityNames.append("ViewerStartAuction");  	capabilityNames.append("ViewerStats"); - +	  	// Please add new capabilities alphabetically to reduce  	// merge conflicts.  } @@ -1655,8 +1655,8 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  void LLViewerRegion::setSeedCapability(const std::string& url)  {  	if (getCapability("Seed") == url) -    {	 -		//llwarns << "Ignoring duplicate seed capability" << llendl; +    { +		// llwarns << "Ignoring duplicate seed capability" << llendl;  		//Instead of just returning we build up a second set of seed caps and compare them   		//to the "original" seed cap received and determine why there is problem!  		LLSD capabilityNames = LLSD::emptyArray(); diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index b5fe4677b7..56cd0c9ea1 100755 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -342,7 +342,7 @@ public:  	void getNeighboringRegionsStatus( std::vector<S32>& regions );  	const LLViewerRegionImpl * getRegionImpl() const { return mImpl; }  	LLViewerRegionImpl * getRegionImplNC() { return mImpl; } - +	  public:  	struct CompareDistance  	{ diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index bba089fb30..2b3e293229 100755 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -166,6 +166,7 @@ void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count)  void LLViewerStatsRecorder::writeToLog( F32 interval )  { +	size_t data_size = 0;  	F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime;  	S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; @@ -187,7 +188,6 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )  		<< mObjectUpdateFailures << " update failures"  		<< llendl; -	U32 data_size;  	if (mObjectCacheFile == NULL)  	{  		mStartTime = LLTimer::getTotalSeconds(); diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp index 777e1f9c76..777e1f9c76 100644..100755 --- a/indra/newview/llviewertexlayer.cpp +++ b/indra/newview/llviewertexlayer.cpp diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 8c1c203bd1..6cc9f4ace1 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -275,7 +275,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(  }  LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile( -	                                               const std::string& filename, +	                                               const std::string& filename,												     												   FTType f_type,  												   BOOL usemipmaps,  												   LLViewerTexture::EBoostLevel boost_priority, @@ -288,7 +288,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(  }  //static  -LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url, +LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,									   									 FTType f_type,  									 BOOL usemipmaps,  									 LLViewerTexture::EBoostLevel boost_priority, @@ -395,7 +395,7 @@ void LLViewerTextureManager::init()  	LLViewerTexture::sCheckerBoardImagep = LLViewerTextureManager::getLocalTexture(image_raw.get(), TRUE);  	LLViewerTexture::initClass() ; -	 +  	// Create a texture manager bridge.  	gTextureManagerBridgep = new LLViewerTextureManagerBridge; @@ -1207,7 +1207,7 @@ void LLViewerFetchedTexture::destroyTexture()  	{  		return ;  	} - +	  	//LL_DEBUGS("Avatar") << mID << llendl;  	destroyGLTexture() ;  	mFullyLoaded = FALSE ; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index d6805a7240..c96f89017f 100755 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -139,6 +139,8 @@ public:  	LLFrameTimer* getLastReferencedTimer() {return &mLastReferencedTimer ;} +	S32 getFullWidth() const { return mFullWidth; } +	S32 getFullHeight() const { return mFullHeight; }	  	/*virtual*/ void setKnownDrawSize(S32 width, S32 height);  	virtual void addFace(U32 channel, LLFace* facep) ; @@ -399,7 +401,7 @@ protected:  	S32 getCurrentDiscardLevelForFetching() ;  private: -	void init(bool firstinit) ;	 +	void init(bool firstinit) ;  	void cleanup() ;  	void saveRawImage() ; @@ -441,7 +443,7 @@ protected:  	S8  mHasFetcher;				// We've made a fecth request  	S8  mIsFetching;				// Fetch request is active  	bool mCanUseHTTP ;              //This texture can be fetched through http if true. - +	  	FTType mFTType; // What category of image is this - map tile, server bake, etc?  	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.		 diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 48134869c9..d9f3548a29 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -327,7 +327,7 @@ void LLViewerTextureList::restoreGL()  /////////////////////////////////////////////////////////////////////////////// -LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename, +LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename,												     												   FTType f_type,  												   BOOL usemipmaps,  												   LLViewerTexture::EBoostLevel boost_priority, @@ -379,7 +379,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&  	}  	LLPointer<LLViewerFetchedTexture> imagep = findImage(new_id); - +	  	if (!imagep.isNull())  	{  		LLViewerFetchedTexture *texture = imagep.get(); @@ -435,7 +435,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&  } -LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id, +LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,											         												   FTType f_type,  												   BOOL usemipmaps,  												   LLViewerTexture::EBoostLevel boost_priority, @@ -478,7 +478,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,  		{  			llwarns << "FTType mismatch: requested " << f_type << " image has " << imagep->getFTType() << llendl;  		} -		 +	  	}  	if (imagep.isNull())  	{ @@ -491,7 +491,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,  }  //when this function is called, there is no such texture in the gTextureList with image_id. -LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id, +LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,											         												   FTType f_type,  												   BOOL usemipmaps,  												   LLViewerTexture::EBoostLevel boost_priority, diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 74aeefd893..373a59ad6b 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -802,17 +802,17 @@ void LLVOAvatar::debugAvatarRezTime(std::string notification_name, std::string c  //------------------------------------------------------------------------  LLVOAvatar::~LLVOAvatar()  { -	if (!mFullyLoaded) -	{ +		if (!mFullyLoaded) +		{  		debugAvatarRezTime("AvatarRezLeftCloudNotification","left after ruth seconds as cloud"); -	} -	else -	{ +		} +		else +		{  		debugAvatarRezTime("AvatarRezLeftNotification","left sometime after declouding"); -	} +		}  	logPendingPhases(); -	 +  	lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl;  	std::for_each(mAttachmentPoints.begin(), mAttachmentPoints.end(), DeletePairedPointer()); @@ -1196,7 +1196,7 @@ void LLVOAvatar::initInstance(void)  		registerMotion( ANIM_AGENT_TARGET,					LLTargetingMotion::create );  		registerMotion( ANIM_AGENT_WALK_ADJUST,				LLWalkAdjustMotion::create );  	} - +	  	LLAvatarAppearance::initInstance();  	// preload specific motions here @@ -1542,7 +1542,7 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector  	return hit;  } -	 +  LLVOAvatar* LLVOAvatar::asAvatar()  {  	return this; @@ -1877,22 +1877,22 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU  	}  	if (!result) -	{ +{  		const std::string url = getImageURL(te,uuid);  		if (!url.empty()) -		{ +	{  			LL_DEBUGS("Avatar") << avString() << "from URL " << url << llendl;  			result = LLViewerTextureManager::getFetchedTextureFromUrl(  				url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); -		} -		else -		{ +	} +	else +	{  			LL_DEBUGS("Avatar") << avString() << "from host " << uuid << llendl;  			LLHost host = getObjectHost();  			result = LLViewerTextureManager::getFetchedTexture(  				uuid, FTT_HOST_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); -		}  	} +}  	return result;  } @@ -3979,7 +3979,7 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)  		{  			LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR);  			if (hair_mesh) -			{ +		{  				num_indices += hair_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy);  			}  			first_pass = FALSE; @@ -5106,9 +5106,9 @@ BOOL LLVOAvatar::loadSkeletonNode ()  {  	if (!LLAvatarAppearance::loadSkeletonNode())  	{ -		return FALSE; -	} - +				return FALSE; +			} +	  	// ATTACHMENTS  	{  		LLAvatarXmlInfo::attachment_info_list_t::iterator iter; @@ -5825,18 +5825,18 @@ BOOL LLVOAvatar::isWearingWearableType(LLWearableType::EType type) const  	{  		const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = tex_iter->second;  		if (texture_dict->mWearableType == type) -		{ +	{  			// Thus, you must check to see if the corresponding baked texture is defined.  			// NOTE: this is a poor substitute if you actually want to know about individual pieces of clothing  			// this works for detecting a skirt (most important), but is ineffective at any piece of clothing that  			// gets baked into a texture that always exists (upper or lower).  			if (texture_dict->mIsUsedByBakedTexture) -			{ +	{  				const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;  				return isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex); -			} +	}  			return FALSE; -		} +	}  	}  	return FALSE;  } @@ -5879,7 +5879,7 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL  			{  				LLAvatarJointMesh* mesh = (*iter);  				if (mesh) -				{ +			{  					mesh->setColor( color );  				}  			} @@ -5947,9 +5947,9 @@ void LLVOAvatar::updateRezzedStatusTimers()  		{  			// load level has decreased. start phase timers for higher load levels.  			for (S32 i = rez_status+1; i <= mLastRezzedStatus; i++) -			{ +		{  				startPhase("load_" + LLVOAvatar::rezStatusToString(i)); -			} +		}  		}  		else if (rez_status > mLastRezzedStatus)  		{ @@ -5958,16 +5958,16 @@ void LLVOAvatar::updateRezzedStatusTimers()  			{  				stopPhase("load_" + LLVOAvatar::rezStatusToString(i));  				stopPhase("first_load_" + LLVOAvatar::rezStatusToString(i), false); -			} +		}  			if (rez_status == 3) -			{ +		{  				// "fully loaded", mark any pending appearance change complete.  				selfStopPhase("update_appearance_from_cof");  				selfStopPhase("wear_inventory_category", false);  				selfStopPhase("process_initial_wearables_update", false);  			}  		} - +		  		mLastRezzedStatus = rez_status;  	}  } @@ -5994,7 +5994,7 @@ void LLVOAvatar::startPhase(const std::string& phase_name)  }  void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check) -{ +		{  	F32 elapsed;  	bool completed;  	if (getPhases().getPhaseValues(phase_name, elapsed, completed)) @@ -6026,7 +6026,7 @@ void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check)  void LLVOAvatar::logPendingPhases()  {  	if (!isAgentAvatarValid()) -	{ +		{  		return;  	} @@ -6042,14 +6042,14 @@ void LLVOAvatar::logPendingPhases()  			if (!completed)  			{  				logMetricsTimerRecord(phase_name, elapsed, completed); -			} +		}  		}  	} -} +		}  //static  void LLVOAvatar::logPendingPhasesAllAvatars() -{ +		{  	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();  		 iter != LLCharacter::sInstances.end(); ++iter)  	{ @@ -6060,14 +6060,14 @@ void LLVOAvatar::logPendingPhasesAllAvatars()  		}  		inst->logPendingPhases();  	} -} +		}  void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed) -{ +		{  	if (!isAgentAvatarValid()) -	{ +		{  		return; -	} +		}  	LLSD record;  	record["timer_name"] = phase_name; @@ -6076,15 +6076,15 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse  	record["completed"] = completed;  	U32 grid_x(0), grid_y(0);  	if (getRegion()) -	{ +		{  		record["central_bake_version"] = LLSD::Integer(getRegion()->getCentralBakeVersion());  		grid_from_region_handle(getRegion()->getHandle(), &grid_x, &grid_y); -	} +		}  	record["grid_x"] = LLSD::Integer(grid_x);  	record["grid_y"] = LLSD::Integer(grid_y);  	record["is_using_server_bakes"] = ((bool) isUsingServerBakes());  	record["is_self"] = isSelf(); -	 +		  	if (isAgentAvatarValid())  	{  		gAgentAvatarp->addMetricsTimerRecord(record); @@ -6292,28 +6292,28 @@ void LLVOAvatar::updateMeshTextures()  										   use_lkg_baked_layer[i],  										   last_id_string.c_str());  	} -	 +  	for (U32 i=0; i < mBakedTextureDatas.size(); i++)  	{  		debugColorizeSubMeshes(i, LLColor4::white);  		LLViewerTexLayerSet* layerset = getTexLayerSet(i);  		if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() ) -		{ +	{  			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[i].mLastTextureID);  			mBakedTextureDatas[i].mIsUsed = TRUE;  			debugColorizeSubMeshes(i,LLColor4::red); - +	  			avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin();  			avatar_joint_mesh_list_t::iterator end  = mBakedTextureDatas[i].mJointMeshes.end();  			for (; iter != end; ++iter) -			{ +	{  				LLAvatarJointMesh* mesh = (*iter);  				if (mesh) -				{ +		{  					mesh->setTexture( baked_img ); -				} +			}  			}  		}  		else if (!isUsingLocalAppearance() && is_layer_baked[i]) @@ -6357,7 +6357,7 @@ void LLVOAvatar::updateMeshTextures()  				if (mesh)  				{  					mesh->setLayerSet( layerset ); -				} +			}  			}  		}  		else @@ -6379,7 +6379,7 @@ void LLVOAvatar::updateMeshTextures()  		{  			LLAvatarJointMesh* mesh = (*iter);  			if (mesh) -			{ +		{  				mesh->setColor( color );  				mesh->setTexture( hair_img );  			} @@ -6467,13 +6467,13 @@ void LLVOAvatar::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_com  	for (morph_list_t::const_iterator iter = mBakedTextureDatas[index].mMaskedMorphs.begin();  		 iter != mBakedTextureDatas[index].mMaskedMorphs.end(); ++iter) -	{ +{  		const LLMaskedMorph* maskedMorph = (*iter);  		LLPolyMorphTarget* morph_target = dynamic_cast<LLPolyMorphTarget*>(maskedMorph->mMorphTarget);  		if (morph_target) -		{ +	{  			morph_target->applyMask(tex_data, width, height, num_components, maskedMorph->mInvert); -		} +}  	}  } @@ -6756,12 +6756,12 @@ void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value)  					LLWearableType::getTypeName(LLWearableType::EType(wtype)).c_str()  //					param_location_name(vparam->getParamLocation()).c_str()  		); -} - +	} +	  void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  	const LLAppearanceMessageContents& contents) -{ +	{  	std::string outfilename = get_sequential_numbered_file_name(dump_prefix,".xml");  	const std::vector<F32>& params_for_dump = contents.mParamWeights;  	const LLTEContents& tec = contents.mTEContents; @@ -6771,9 +6771,9 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  	outfile.open(fullpath, LL_APR_WB );  	apr_file_t* file = outfile.getFileHandle();  	if (!file) -	{ -		return; -	} +		{ +			return; +		}  	else  	{  		LL_DEBUGS("Avatar") << "dumping appearance message to " << fullpath << llendl; @@ -6807,7 +6807,7 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,  		apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", i, uuid_str.c_str());  	}  	apr_file_printf(file, "</textures>\n"); -} +	}  void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMessageContents& contents)  { @@ -6824,7 +6824,7 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe  		// For future use:  		//mesgsys->getU32Fast(_PREHASH_AppearanceData, _PREHASH_Flags, appearance_flags, 0);  	} - +	  	// Parse visual params, if any.  	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_VisualParam);  	bool drop_visual_params_debug = gSavedSettings.getBOOL("BlockSomeAvatarAppearanceVisualParams") && (ll_rand(2) == 0); // pretend that ~12% of AvatarAppearance messages arrived without a VisualParam block, for testing @@ -7052,19 +7052,19 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  			LLVisualParam* param = contents.mParams[i];  			F32 newWeight = contents.mParamWeights[i]; -			if (is_first_appearance_message || (param->getWeight() != newWeight)) -			{ -				params_changed = TRUE; -				if(is_first_appearance_message) +				if (is_first_appearance_message || (param->getWeight() != newWeight))  				{ -					param->setWeight(newWeight, FALSE); -				} -				else -				{ -					interp_params = TRUE; -					param->setAnimationTarget(newWeight, FALSE); +					params_changed = TRUE; +					if(is_first_appearance_message) +					{ +						param->setWeight(newWeight, FALSE); +					} +					else +					{ +						interp_params = TRUE; +						param->setAnimationTarget(newWeight, FALSE); +					}  				} -			}  		}  		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT  		if (num_params != expected_tweakable_count) @@ -7320,12 +7320,12 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )  				avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin();  				avatar_joint_mesh_list_t::iterator end  = mBakedTextureDatas[i].mJointMeshes.end();  				for (; iter != end; ++iter) -				{ +			{  					LLAvatarJointMesh* mesh = (*iter);  					if (mesh) -					{ +			{  						mesh->setTexture( image_baked ); -					} +			}  				}  			} @@ -7349,7 +7349,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )  				{  					LLAvatarJointMesh* mesh = (*iter);  					if (mesh) -					{ +				{  						mesh->setColor( LLColor4::white );  					}  				} @@ -7368,7 +7368,7 @@ std::string get_sequential_numbered_file_name(const std::string& prefix,  	file_num_type::iterator it = file_nums.find(prefix);  	S32 num = 0;  	if (it != file_nums.end()) -	{ +{  		num = it->second;  	}  	file_nums[prefix] = num+1; @@ -7385,7 +7385,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  		outprefix = getFullname() + (isSelf()?"_s":"_o");  	}  	if (outprefix.empty()) -	{ +{  		outprefix = getFullname() + (isSelf()?"_s":"_o");  	}  	if (outprefix.empty()) @@ -7414,36 +7414,36 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  	if (group_by_wearables)  	{  		for (S32 type = LLWearableType::WT_SHAPE; type < LLWearableType::WT_COUNT; type++) -		{ -			const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type); -			apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() ); +	{ +		const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type); +		apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() );  			for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam()) +		{ +			LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; +			if( (viewer_param->getWearableType() == type) &&  +				(viewer_param->isTweakable() ) )  			{ -				LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; -				if( (viewer_param->getWearableType() == type) &&  -					(viewer_param->isTweakable() ) ) -				{  					dump_visual_param(file, viewer_param, viewer_param->getWeight()); -				}  			} +		} -			for (U8 te = 0; te < TEX_NUM_INDICES; te++) -			{ +		for (U8 te = 0; te < TEX_NUM_INDICES; te++) +		{  				if (LLAvatarAppearanceDictionary::getTEWearableType((ETextureIndex)te) == type) -				{ -					// MULTIPLE_WEARABLES: extend to multiple wearables? +			{ +				// MULTIPLE_WEARABLES: extend to multiple wearables?  					LLViewerTexture* te_image = getImage((ETextureIndex)te, 0); -					if( te_image ) -					{ -						std::string uuid_str; -						te_image->getID().toString( uuid_str ); -						apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str()); -					} +				if( te_image ) +				{ +					std::string uuid_str; +					te_image->getID().toString( uuid_str ); +					apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str());  				}  			}  		}  	} +		}  	else   	{  		// Just dump all params sequentially. @@ -7455,16 +7455,16 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  		for (U8 te = 0; te < TEX_NUM_INDICES; te++)  		{ -			// MULTIPLE_WEARABLES: extend to multiple wearables? -			LLViewerTexture* te_image = getImage((ETextureIndex)te, 0); -			if( te_image ) -			{ -				std::string uuid_str; -				te_image->getID().toString( uuid_str ); -				apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str()); +				// MULTIPLE_WEARABLES: extend to multiple wearables? +				LLViewerTexture* te_image = getImage((ETextureIndex)te, 0); +				if( te_image ) +				{ +					std::string uuid_str; +					te_image->getID().toString( uuid_str ); +					apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str()); +				}  			}  		} -	}  	apr_file_printf( file, "\t</archetype>\n" );  	apr_file_printf( file, "\n</linden_genepool>\n" ); @@ -7587,14 +7587,14 @@ void LLVOAvatar::startAppearanceAnimation()  	}  } -//virtual +// virtual  void LLVOAvatar::bodySizeChanged() -{ +{	  	if (isSelf() && !LLAppearanceMgr::instance().isInUpdateAppearanceFromCOF())  	{	// notify simulator of change in size  		// but not if we are in the middle of updating appearance  		gAgent.sendAgentSetAppearance(); -	} +}  }  BOOL LLVOAvatar::isUsingServerBakes() const @@ -7606,25 +7606,25 @@ BOOL LLVOAvatar::isUsingServerBakes() const  	F32 wt = appearance_version_param->getWeight();  	F32 expect_wt = mUseServerBakes ? 1.0 : 0.0;  	if (!is_approx_equal(wt,expect_wt)) -	{ +{  		llwarns << "wt " << wt << " differs from expected " << expect_wt << llendl;  	}  #endif  	return mUseServerBakes; -} - +		} +		  void LLVOAvatar::setIsUsingServerBakes(BOOL newval) -{ +		{  	mUseServerBakes = newval;  	LLVisualParam* appearance_version_param = getVisualParam(11000);  	llassert(appearance_version_param);  	appearance_version_param->setWeight(newval ? 1.0 : 0.0, false); -} +		}  // virtual  void LLVOAvatar::removeMissingBakedTextures() -{	 +			{  }  //virtual diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 85f6f25009..e7f249be69 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -128,15 +128,15 @@ protected:  public:  	/*virtual*/ void			updateGL();  	/*virtual*/ LLVOAvatar*		asAvatar(); -	virtual U32    	 	 		processUpdateMessage(LLMessageSystem *mesgsys, +	virtual U32    	 	 	processUpdateMessage(LLMessageSystem *mesgsys,  													 void **user_data,  													 U32 block_num,  													 const EObjectUpdateType update_type,  													 LLDataPacker *dp); -	virtual void   	 	 		idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); +	virtual void   	 	 	idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);  	/*virtual*/ BOOL   	 	 	updateLOD(); -	BOOL  	 	 	 	 		updateJointLODs(); -	void						updateLODRiggedAttachments( void ); +	BOOL  	 	 	 	 	updateJointLODs(); +	void					updateLODRiggedAttachments( void );  	/*virtual*/ BOOL   	 	 	isActive() const; // Whether this object needs to do an idleUpdate.  	S32 						totalTextureMemForUUIDS(std::set<LLUUID>& ids);  	bool 						allTexturesCompletelyDownloaded(std::set<LLUUID>& ids) const; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index d54eb5f040..15628d5ab2 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -602,7 +602,7 @@ LLVOAvatarSelf::~LLVOAvatarSelf()   **                                                                             **   *********************************************************************************/ -// virtual +//virtual  BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)  {  	// update screen joint size @@ -866,10 +866,10 @@ void LLVOAvatarSelf::removeMissingBakedTextures()  		updateMeshTextures();  		if (getRegion() && !getRegion()->getCentralBakeVersion())  		{ -			requestLayerSetUploads(); -		} +		requestLayerSetUploads();  	}  } +}  //virtual  void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) @@ -1310,7 +1310,7 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr  			discard_level < local_tex_obj->getDiscard())  		{  			local_tex_obj->setDiscard(discard_level); -			requestLayerSetUpdate(index); +				requestLayerSetUpdate(index);  			if (isEditingAppearance())  			{  				LLVisualParamHint::requestHintUpdates(); @@ -1799,11 +1799,11 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te  					{  						requestLayerSetUpdate(type);  						if (isEditingAppearance()) -						{ -							LLVisualParamHint::requestHintUpdates(); -						} +					{ +						LLVisualParamHint::requestHintUpdates();  					}  				} +				}  				else  				{					  					tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL); @@ -2580,25 +2580,25 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe  	//if (!covered_by_baked)  	{  		if (imagep->getID() != IMG_DEFAULT_AVATAR) -		{ +	{  			imagep->setNoDelete();  			if (imagep->getDiscardLevel() != 0) -			{ -				F32 desired_pixels; -				desired_pixels = llmin(mPixelArea, (F32)getTexImageArea()); -				 -				imagep->setBoostLevel(getAvatarBoostLevel()); +		{ +			F32 desired_pixels; +			desired_pixels = llmin(mPixelArea, (F32)getTexImageArea()); + +			imagep->setBoostLevel(getAvatarBoostLevel());  				imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ; -				imagep->resetTextureStats(); -				imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); -				imagep->addTextureStats( desired_pixels / texel_area_ratio ); -				imagep->forceUpdateBindStats() ; -				if (imagep->getDiscardLevel() < 0) -				{ -					mHasGrey = TRUE; // for statistics gathering -				} +			imagep->resetTextureStats(); +			imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); +			imagep->addTextureStats( desired_pixels / texel_area_ratio ); +			imagep->forceUpdateBindStats() ; +			if (imagep->getDiscardLevel() < 0) +			{ +				mHasGrey = TRUE; // for statistics gathering  			}  		} +		}  		else  		{  			// texture asset is missing @@ -2921,17 +2921,17 @@ void LLVOAvatarSelf::requestLayerSetUpdate(ETextureIndex index )  LLViewerTexLayerSet* LLVOAvatarSelf::getLayerSet(ETextureIndex index) const  { -       /* switch(index) -               case TEX_HEAD_BAKED: -               case TEX_HEAD_BODYPAINT: -                       return mHeadLayerSet; */ +	/* switch(index) +		case TEX_HEAD_BAKED: +		case TEX_HEAD_BODYPAINT: +			return mHeadLayerSet; */         const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearanceDictionary::getInstance()->getTexture(index); -       if (texture_dict->mIsUsedByBakedTexture) -       { -               const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; +	if (texture_dict->mIsUsedByBakedTexture) +	{ +		const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;                 return getLayerSet(baked_index); -       } -       return NULL; +	} +	return NULL;  }  LLViewerTexLayerSet* LLVOAvatarSelf::getLayerSet(EBakedTextureIndex baked_index) const @@ -2959,7 +2959,7 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch)  		gAgentAvatarp->mUseLocalAppearance = true;  		if (gSavedSettings.getBOOL("AppearanceCameraMovement") && !disable_camera_switch) -		{ +{  			gAgentCamera.changeCameraToCustomizeAvatar();  		} diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 941892a597..df014513ad 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1973,33 +1973,34 @@ S32 LLVOVolume::setTEGlow(const U8 te, const F32 glow)  	return  res;  } -void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams) +void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams, U32 te)  { -	LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << LL_ENDL; -	for (U8 i = 0; i < getNumTEs(); i++) +	LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << " to TE " << te << LL_ENDL; +	LLTextureEntry* texture_entry = getTE(te); +	if (texture_entry && (texture_entry->getMaterialID().isNull() || (texture_entry->getMaterialID() == pMaterialID)))  	{ -		if (getTE(i) && (getTE(i)->getMaterialID().isNull() || (getTE(i)->getMaterialID() == pMaterialID))) -		{ -			setTEMaterialParams(i, pMaterialParams); -		} +		setTEMaterialParams(te, pMaterialParams);  	}  }  S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)  { -		S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID); -		LL_DEBUGS("MaterialTEs") << "te "<< (S32)te << " materialid " << pMaterialID.asString() << " res " << res -								 << ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" ) -								 << LL_ENDL; -		if (res) -		{ -			LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL; -			LLMaterialMgr::instance().get(getRegion()->getRegionID(), pMaterialID, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2)); -			gPipeline.markTextured(mDrawable); -			mFaceMappingChanged = TRUE; -		} -		return  res; +	S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID); +	LL_DEBUGS("MaterialTEs") << "te "<< (S32)te << " materialid " << pMaterialID.asString() << " res " << res +								<< ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" ) +								<< LL_ENDL; +		 +	LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL; +	// Use TE-specific version of boost CB hook-up to avoid cross-contaminatin' +	LLMaterialMgr::instance().getTE(getRegion()->getRegionID(), pMaterialID, te, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2, _3));			 +	setChanged(TEXTURE); +   if (!mDrawable.isNull()) +	{ +		gPipeline.markTextured(mDrawable);  	} +	mFaceMappingChanged = TRUE; +	return TEM_CHANGE_TEXTURE; +}  S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)  { @@ -2007,13 +2008,13 @@ S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialPa  	LL_DEBUGS("MaterialTEs") << "te " << (S32)te << " material " << pMaterialParams->asLLSD() << " res " << res  							 << ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" )  							 << LL_ENDL; -	if (res) +	setChanged(TEXTURE); +	if (!mDrawable.isNull())  	{  		gPipeline.markTextured(mDrawable); -		mFaceMappingChanged = TRUE;  	} -	 -	return res; +	mFaceMappingChanged = TRUE; +	return TEM_CHANGE_TEXTURE;  }  S32 LLVOVolume::setTEScale(const U8 te, const F32 s, const F32 t) diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index d1bfefdc70..a5f933c319 100755 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -187,7 +187,7 @@ public:  	/*virtual*/ S32		setTEMediaFlags(const U8 te, const U8 media_flags);  	/*virtual*/ S32		setTEGlow(const U8 te, const F32 glow);  	/*virtual*/ S32		setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID); -				void	setTEMaterialParamsCallback(const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams); +				void	setTEMaterialParamsCallback(const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams, U32 te);  	/*virtual*/ S32		setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams);  	/*virtual*/ S32		setTEScale(const U8 te, const F32 s, const F32 t);  	/*virtual*/ S32		setTEScaleS(const U8 te, const F32 s); diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index c4627f926b..47d9fec352 100755 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -393,14 +393,9 @@  				<menu_item_call label="Weiblich testen" name="Test Female"/>  				<menu_item_check label="Avatarauswahl zulassen" name="Allow Select Avatar"/>  			</menu> -			<menu label="Animationsgeschwindigkeit" name="Animation Speed"> -				<menu_item_call label="Alle Animationen 10 % schneller" name="All Animations 10 Faster"/> -				<menu_item_call label="Alle Animationen 10 % langsamer" name="All Animations 10 Slower"/> -				<menu_item_call label="Alle Animationsgeschwindigkeiten zurücksetzen" name="Reset All Animation Speed"/> -				<menu_item_check label="Zeitlupen-Animationen" name="Slow Motion Animations"/> -			</menu>  			<menu_item_call label="Param auf Standard erzwingen" name="Force Params to Default"/>  			<menu_item_check label="Animations-Info" name="Animation Info"/> +			<menu_item_check label="Zeitlupen-Animationen" name="Slow Motion Animations"/>  			<menu_item_check label="Kamerafokus anzeigen" name="Show Look At"/>  			<menu_item_check label="Klickpunkt anzeigen??" name="Show Point At"/>  			<menu_item_check label="Fehler in Landaktualisierung beseitigen" name="Debug Joint Updates"/> diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml index 46ba4bd29d..46ba4bd29d 100644..100755 --- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index 28e032ce5f..28e032ce5f 100644..100755 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml index e7c2b80da2..e7c2b80da2 100644..100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index c1ff026a74..c1ff026a74 100644..100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 970a11c6c4..9e582cf0de 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3454,7 +3454,7 @@ or you can install it now.     name="DownloadBackgroundTip"     type="notify">  We have downloaded an update to your [APP_NAME] installation. -Version [VERSION] [[INFO_URL] Information about this update] +Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]      <tag>confirm</tag>      <usetemplate       name="okcancelbuttons" @@ -3467,7 +3467,7 @@ Version [VERSION] [[INFO_URL] Information about this update]   name="DownloadBackgroundDialog"   type="alertmodal">  We have downloaded an update to your [APP_NAME] installation. -Version [VERSION] [[INFO_URL] Information about this update] +Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]      <tag>confirm</tag>      <usetemplate       name="okcancelbuttons" @@ -6923,9 +6923,9 @@ Do not allow access if you do not fully understand why it wants access to your a  [FOOTERTEXT]      </footer>    </notification> -	 -	<notification -	 icon="notify.tga" + +  <notification +   icon="notify.tga"  	 name="UnknownScriptQuestion"  	 persist="false"  	 type="notify"> diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml index b6fc48212a..a5425062ec 100644 --- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml @@ -644,8 +644,8 @@               layout="topleft"  			 label_width="205"               left="10" -             max_val="9999" -             min_val="-9999" +             max_val="180" +             min_val="-180"               name="bumpyRot"               width="265" /> @@ -707,8 +707,8 @@               layout="topleft"  			 label_width="205"               left="10" -             max_val="9999" -             min_val="-9999" +             max_val="180" +             min_val="-180"               name="shinyRot"               width="265" /> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 29393bf749..f7b33b0a4a 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -418,7 +418,7 @@ Please try logging in again in a minute.</string>  	<string name="OverrideYourAnimations">Replace your default animations</string>  	<string name="ScriptReturnObjects">Return objects on your behalf</string>  	<string name="UnknownScriptPermission">(unknown)!</string> -	 +  	<!-- Sim Access labels -->  	<string name="SIM_ACCESS_PG">General</string>  	<string name="SIM_ACCESS_MATURE">Moderate</string> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index 23e8a98e8e..92a9943b93 100755 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -114,6 +114,7 @@  			<menu_item_call label="Купить" name="Menu Object Buy"/>  			<menu_item_call label="Взять" name="Menu Object Take"/>  			<menu_item_call label="Взять копию" name="Take Copy"/> +			<menu_item_call label="Сохранить в моем инвентаре" name="Save Object Back to My Inventory"/>  			<menu_item_call label="Сохранить в контенте объектов" name="Save Object Back to Object Contents"/>  			<menu_item_call label="Вернуть объект" name="Return Object back to Owner"/>  		</menu> @@ -128,7 +129,6 @@  			<menu_item_call label="Наборы связей..." name="pathfinding_linksets_menu_item"/>  			<menu_item_call label="Персонажи..." name="pathfinding_characters_menu_item"/>  			<menu_item_call label="Просмотр/тестирование..." name="pathfinding_console_menu_item"/> -			<menu_item_call label="Восстановить регион" name="pathfinding_rebake_navmesh_item"/>  		</menu>  		<menu label="Параметры" name="Options">  			<menu_item_check label="Показать расширенные разрешения" name="DebugPermissions"/> @@ -158,13 +158,6 @@  	<menu label="Справка" name="Help">  		<menu_item_call label="Инструкции..." name="How To"/>  		<menu_item_call label="Справка по [SECOND_LIFE]" name="Second Life Help"/> -		<menu_item_call label="Руководство пользователя" name="User’s guide"/> -		<menu_item_call label="База знаний" name="Knowledge Base"/> -		<menu_item_call label="Wiki" name="Wiki"/> -		<menu_item_call label="Форумы сообщества" name="Community Forums"/> -		<menu_item_call label="Портал поддержки" name="Support portal"/> -		<menu_item_call label="Новости [SECOND_LIFE]" name="Second Life News"/> -		<menu_item_call label="Блоги [SECOND_LIFE]" name="Second Life Blogs"/>  		<menu_item_call label="Жалоба" name="Report Abuse"/>  		<menu_item_call label="Сообщить об ошибке" name="Report Bug"/>  		<menu_item_call label="О [APP_NAME]" name="About Second Life"/> @@ -391,14 +384,9 @@  				<menu_item_call label="Проверка женщины" name="Test Female"/>  				<menu_item_check label="Разрешить выбор аватара" name="Allow Select Avatar"/>  			</menu> -			<menu label="Скорость анимации" name="Animation Speed"> -				<menu_item_call label="Ускорить все анимации на 10%" name="All Animations 10 Faster"/> -				<menu_item_call label="Замедлить все анимации на 10%" name="All Animations 10 Slower"/> -				<menu_item_call label="Восстановить скорость анимаций" name="Reset All Animation Speed"/> -				<menu_item_check label="Анимация медленных движений" name="Slow Motion Animations"/> -			</menu>  			<menu_item_call label="Скинуть параметры" name="Force Params to Default"/>  			<menu_item_check label="Данные об анимации" name="Animation Info"/> +			<menu_item_check label="Анимация медленных движений" name="Slow Motion Animations"/>  			<menu_item_check label="Показать взгляд" name="Show Look At"/>  			<menu_item_check label="Показать указание" name="Show Point At"/>  			<menu_item_check label="Отладка обновленных движений суставов" name="Debug Joint Updates"/> diff --git a/indra/newview/tests/llviewerassetstats_test.cpp b/indra/newview/tests/llviewerassetstats_test.cpp index a331d9aa9e..a331d9aa9e 100644..100755 --- a/indra/newview/tests/llviewerassetstats_test.cpp +++ b/indra/newview/tests/llviewerassetstats_test.cpp diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 2d3e67c8a4..179ebdbe00 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -731,7 +731,7 @@ class DarwinManifest(ViewerManifest):                                  'SLVoice',                                  ):                       self.path2basename(libdir, libfile) - +                                  # our apps                  for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"),                                           # plugin launcher | 
