diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 22 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 41 | ||||
| -rw-r--r-- | indra/newview/llface.cpp | 45 | ||||
| -rw-r--r-- | indra/newview/llface.h | 1 | ||||
| -rw-r--r-- | indra/newview/lltexlayer.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 136 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llvotree.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/llwearable.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 12 | 
13 files changed, 194 insertions, 124 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 810b2d9a1d..51ed26505e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1741,6 +1741,17 @@  		<key>Value</key>  		<integer>0</integer>  	</map> +  <key>DebugAvatarLocalTexLoadedTime</key> +  <map> +    <key>Comment</key> +    <string>Display time for loading avatar local textures.</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>      <key>DebugBeaconLineWidth</key>      <map>        <key>Comment</key> @@ -8284,17 +8295,6 @@        <key>Value</key>        <real>1.0</real>      </map> -    <key>RunMultipleThreads</key> -    <map> -      <key>Comment</key> -      <string>If TRUE keep background threads active during render</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>SafeMode</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 58b651ec39..d6ecb2f168 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1108,8 +1108,7 @@ bool LLAppViewer::mainLoop()  			{  				LLMemType mt_sleep(LLMemType::MTYPE_SLEEP);  				LLFastTimer t2(FTM_SLEEP); -				bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads"); - +				  				// yield some time to the os based on command line option  				if(mYieldTime >= 0)  				{ @@ -1147,9 +1146,7 @@ bool LLAppViewer::mainLoop()  				}  				static const F64 FRAME_SLOW_THRESHOLD = 0.5; //2 frames per seconds				 -				const F64 min_frame_time = 0.0; //(.0333 - .0010); // max video frame rate = 30 fps -				const F64 min_idle_time = 0.0; //(.0010); // min idle time = 1 ms -				const F64 max_idle_time = run_multiple_threads ? min_idle_time : llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second +				const F64 max_idle_time = llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second  				idleTimer.reset();  				bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ;  				S32 total_work_pending = 0; @@ -1187,34 +1184,24 @@ bool LLAppViewer::mainLoop()  					total_work_pending += work_pending ;  					total_io_pending += io_pending ; -					F64 frame_time = frameTimer.getElapsedTimeF64(); -					F64 idle_time = idleTimer.getElapsedTimeF64(); -					if (frame_time >= min_frame_time && -						idle_time >= min_idle_time && -						(!work_pending || idle_time >= max_idle_time)) +					 +					if (!work_pending || idleTimer.getElapsedTimeF64() >= max_idle_time)  					{  						break;  					}  				} -				 // Prevent the worker threads from running while rendering. -				// if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client... -				if (run_multiple_threads == FALSE) +				if(!total_work_pending) //pause texture fetching threads if nothing to process.  				{ -					//LLFastTimer ftm(FTM_PAUSE_THREADS); //not necessary. -	 				 -					if(!total_work_pending) //pause texture fetching threads if nothing to process. -					{ -						LLAppViewer::getTextureCache()->pause(); -						LLAppViewer::getImageDecodeThread()->pause(); -						LLAppViewer::getTextureFetch()->pause();  -					} -					if(!total_io_pending) //pause file threads if nothing to process. -					{ -						LLVFSThread::sLocal->pause();  -						LLLFSThread::sLocal->pause();  -					} -				}					 +					LLAppViewer::getTextureCache()->pause(); +					LLAppViewer::getImageDecodeThread()->pause(); +					LLAppViewer::getTextureFetch()->pause();  +				} +				if(!total_io_pending) //pause file threads if nothing to process. +				{ +					LLVFSThread::sLocal->pause();  +					LLLFSThread::sLocal->pause();  +				}									  				if ((LLStartUp::getStartupState() >= STATE_CLEANUP) &&  					(frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index f299518474..db3d90e0a0 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1392,24 +1392,13 @@ F32 LLFace::getTextureVirtualSize()  		face_area =  mPixelArea / llclamp(texel_area, 0.015625f, 128.f);  	} -	if(face_area > LLViewerTexture::sMaxSmallImageSize) +	face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area) ; +	if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.  	{ -		if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res. -		{ -			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ; -			face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ; -		} -		else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. -		{ -			if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res. -			{ -				face_area = LLViewerTexture::sMinLargeImageSize ; -			}	 -			else if(mTexture.notNull() && mTexture->isLargeImage()) -			{		 -				face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); -			}			 -		} +		if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture.notNull() && mTexture->isLargeImage()) +		{		 +			face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); +		}	  	}  	setVirtualSize(face_area) ; @@ -1536,6 +1525,28 @@ F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist)  	return importance ;  } +//static  +F32 LLFace::adjustPixelArea(F32 importance, F32 pixel_area) +{ +	if(pixel_area > LLViewerTexture::sMaxSmallImageSize) +	{ +		if(importance < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res. +		{ +			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ; +			pixel_area = llmin(pixel_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ; +		} +		else if(pixel_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. +		{ +			if(importance < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res. +			{ +				pixel_area = LLViewerTexture::sMinLargeImageSize ; +			}				 +		} +	} + +	return pixel_area ; +} +  BOOL LLFace::verify(const U32* indices_array) const  {  	BOOL ok = TRUE; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index de533a6864..13d3d8824e 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -214,6 +214,7 @@ private:  	BOOL        calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;  public:  	static F32  calcImportanceToCamera(F32 to_view_dir, F32 dist); +	static F32  adjustPixelArea(F32 importance, F32 pixel_area) ;  public: diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 1feb987682..d8b9bc2329 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -581,6 +581,10 @@ void LLTexLayerSetBuffer::doUpdate()  	}  	restartUpdateTimer(); + +	// need to swtich to using this layerset if this is the first update +	// after getting the lowest LOD +	mTexLayerSet->getAvatar()->updateMeshTextures();  	// Print out notification that we uploaded this texture.  	if (gSavedSettings.getBOOL("DebugAvatarRezTime")) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index f4899d0d5d..bd0a43cd54 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -597,7 +597,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			return true; // abort  		}  	} -	if(mImagePriority < 1.0f) +	if(mImagePriority < F_ALMOST_ZERO)  	{  		if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)  		{ diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 9b3243a1bc..7a0f77a7e4 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1489,59 +1489,63 @@ void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height)  //virtual  void LLViewerFetchedTexture::processTextureStats()  { -	if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture. -	{ -		mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ; -	} -  	if(mFullyLoaded)  	{		 -		if(mDesiredDiscardLevel <= mMinDesiredDiscardLevel)//already loaded +		if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more  		{ -			return ; +			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; +			mFullyLoaded = FALSE ;  		} -		mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; -		mFullyLoaded = FALSE ; -		return ; -	} - -	updateVirtualSize() ; -	 -	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); -	 -	if (textures_fullres) -	{ -		mDesiredDiscardLevel = 0; -	} -	else if(!mFullWidth || !mFullHeight) -	{ -		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;  	}  	else -	{	 -		if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight) +	{ +		updateVirtualSize() ; +		 +		static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); +		 +		if (textures_fullres)  		{ -			if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) +			mDesiredDiscardLevel = 0; +		} +		else if(!mFullWidth || !mFullHeight) +		{ +			mDesiredDiscardLevel = 	getMaxDiscardLevel() ; +		} +		else +		{	 +			if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)  			{ -				mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 +				if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) +				{ +					mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 +				} +				else +				{ +					mDesiredDiscardLevel = 0; +				}  			} -			else +			else if(mKnownDrawSizeChanged)//known draw size is set +			{			 +				mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2,  +													 log((F32)mFullHeight / mKnownDrawHeight) / log_2) ; +				mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ; +				mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; +			} +			mKnownDrawSizeChanged = FALSE ; +		 +			if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))  			{ -				mDesiredDiscardLevel = 0; +				mFullyLoaded = TRUE ;  			}  		} -		else if(mKnownDrawSizeChanged)//known draw size is set -		{			 -			mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2,  -					                             log((F32)mFullHeight / mKnownDrawHeight) / log_2) ; -			mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ; -			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; -		} -		mKnownDrawSizeChanged = FALSE ; -		 -		if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel)) +	} + +	if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture. +	{ +		mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ; +		if(getDiscardLevel() < 0 || getDiscardLevel() > mDesiredDiscardLevel)  		{ -			mFullyLoaded = TRUE ; +			mFullyLoaded = FALSE ;  		}  	}  } @@ -1724,6 +1728,11 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority)  	llassert(!mInImageList);   	mDecodePriority = priority; + +	if(mDecodePriority < F_ALMOST_ZERO) +	{ +		mStopFetchingTimer.reset() ; +	}  }  void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority) @@ -1915,7 +1924,12 @@ bool LLViewerFetchedTexture::updateFetch()  // 				llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl;  // 				calcDecodePriority();  // 			} -			LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); +			static const F32 MAX_HOLD_TIME = 5.0f ; //seconds to wait before canceling fecthing if decode_priority is 0.f. +			if(decode_priority > 0.0f || mStopFetchingTimer.getElapsedTimeF32() > MAX_HOLD_TIME) +			{ +				mStopFetchingTimer.reset() ; +				LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); +			}  		}  	} @@ -2075,6 +2089,36 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call  	}  } +void LLViewerFetchedTexture::clearCallbackEntryList() +{ +	if(mLoadedCallbackList.empty()) +	{ +		return ; +	} + +	for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); +			iter != mLoadedCallbackList.end(); ) +	{ +		LLLoadedCallbackEntry *entryp = *iter; +			 +		// We never finished loading the image.  Indicate failure. +		// Note: this allows mLoadedCallbackUserData to be cleaned up. +		entryp->mCallback(FALSE, this, NULL, NULL, 0, TRUE, entryp->mUserData); +		iter = mLoadedCallbackList.erase(iter) ; +		delete entryp; +	} +	gTextureList.mCallbackList.erase(this); +		 +	mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1; +	mLoadedCallbackDesiredDiscardLevel = S8_MAX ; +	if(mForceToSaveRawImage) +	{ +		destroySavedRawImage() ; +	} + +	return ; +} +  void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)  {  	if(mLoadedCallbackList.empty() || !callback_list) @@ -2082,7 +2126,7 @@ void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::so  		return ;  	} -	S32 desired_discard = INVALID_DISCARD_LEVEL ; +	S32 desired_discard = S8_MAX ;  	S32 desired_raw_discard = INVALID_DISCARD_LEVEL ;  	for(callback_list_t::iterator iter = mLoadedCallbackList.begin();  			iter != mLoadedCallbackList.end(); ) @@ -2652,6 +2696,12 @@ void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard, bool from_  }  void LLViewerFetchedTexture::destroySavedRawImage()  { +	clearCallbackEntryList() ; +	//if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0 && mDesiredSavedRawDiscardLevel < getDiscardLevel()) +	//{ +	//	return ; //can not destroy the saved raw image before it is fully fetched, otherwise causing callbacks hanging there. +	//} +  	mSavedRawImage = NULL ;  	mForceToSaveRawImage  = FALSE ;  	mSavedRawDiscardLevel = -1 ; @@ -2902,7 +2952,7 @@ BOOL LLViewerLODTexture::isUpdateFrozen()  void LLViewerLODTexture::processTextureStats()  {  	updateVirtualSize() ; - +	  	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");  	if (textures_fullres) diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 1f0d760daf..6adfd2bae4 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -392,6 +392,7 @@ public:  	void unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list);  	bool doLoadedCallbacks();  	void deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list); +	void clearCallbackEntryList() ;  	void addToCreateTexture(); @@ -562,6 +563,7 @@ protected:  	// Timers  	LLFrameTimer mLastPacketTimer;		// Time since last packet. +	LLFrameTimer mStopFetchingTimer;	// Time since mDecodePriority == 0.f.  	BOOL  mInImageList;				// TRUE if image is in list (in which case don't reset priority!)  	BOOL  mNeedsCreateTexture;	 diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4e00355bbe..c688338000 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6251,10 +6251,14 @@ void LLVOAvatar::updateMeshTextures()  			// When an avatar is changing clothes and not in Appearance mode,  			// use the last-known good baked texture until it finish the first  			// render of the new layerset. + +			const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet  +										  || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() +										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable(); +  			use_lkg_baked_layer[i] = (!is_layer_baked[i]   									  && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR)  -									  && mBakedTextureDatas[i].mTexLayerSet  -									  && !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()); +									  && layerset_invalid);  			if (use_lkg_baked_layer[i])  			{  				mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled(TRUE); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 274dbe6332..534703d15a 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2208,6 +2208,11 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )  void LLVOAvatarSelf::outputRezDiagnostics() const  { +	if(!gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) +	{ +		return ; +	} +  	const F32 final_time = mDebugSelfLoadTimer.getElapsedTimeF32();  	llinfos << "REZTIME: Myself rez stats:" << llendl;  	llinfos << "\t Time from avatar creation to load wearables: " << (S32)mDebugTimeWearablesLoaded << llendl; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 0efe6682be..9c08c0eec1 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -448,22 +448,35 @@ void LLVOTree::render(LLAgent &agent)  void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)  { -	// First calculate values as for any other object (for mAppAngle) -	LLViewerObject::setPixelAreaAndAngle(agent); - -	// Re-calculate mPixelArea accurately +	LLVector3 center = getPositionAgent();//center of tree. +	LLVector3 viewer_pos_agent = gAgentCamera.getCameraPositionAgent(); +	LLVector3 lookAt = center - viewer_pos_agent; +	F32 dist = lookAt.normVec() ;	 +	F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;	 -	// This should be the camera's center, as soon as we move to all region-local. -	LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent(); -	F32 range_squared = relative_position.lengthSquared() ;				 +	F32 range = dist - getMinScale()/2; +	if (range < F_ALMOST_ZERO || isHUDAttachment())		// range == zero +	{ +		mAppAngle = 180.f; +	} +	else +	{ +		mAppAngle = (F32) atan2( getMaxScale(), range) * RAD_TO_DEG;		 +	}  	F32 max_scale = mBillboardScale * getMaxScale();  	F32 area = max_scale * (max_scale*mBillboardRatio); -  	// Compute pixels per meter at the given range -	F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / tan(LLViewerCamera::getInstance()->getView()); +	F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / (tan(LLViewerCamera::getInstance()->getView()) * dist); +	mPixelArea = pixels_per_meter * pixels_per_meter * area ;	 + +	F32 importance = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ; +	mPixelArea = LLFace::adjustPixelArea(importance, mPixelArea) ; +	if (mPixelArea > LLViewerCamera::getInstance()->getScreenPixelArea()) +	{ +		mAppAngle = 180.f; +	} -	mPixelArea = (pixels_per_meter) * (pixels_per_meter) * area / range_squared;  #if 0  	// mAppAngle is a bit of voodoo;  	// use the one calculated LLViewerObject::setPixelAreaAndAngle above diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index c5042ca016..1209b60679 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -52,6 +52,7 @@  #include "llvoavatarself.h"  #include "llvoavatardefines.h"  #include "llwearable.h" +#include "llviewercontrol.h"  using namespace LLVOAvatarDefines; @@ -444,8 +445,10 @@ BOOL LLWearable::importFile( LLFILE* file )  			delete mSavedTEMap[te];  		} -		image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL); - +		if(gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) +		{ +			image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL); +		}  		LLUUID textureid(text_buffer);  		mTEMap[te] = new LLLocalTextureObject(image, textureid);  		mSavedTEMap[te] = new LLLocalTextureObject(image, textureid); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 63ff7047b4..2f6ecd8a34 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1393,17 +1393,7 @@                   function="Advanced.ToggleFeature"                   parameter="flexible" />              </menu_item_check> -        </menu> -        <menu_item_check -         label="Run Multiple Threads" -         name="Run Multiple Threads"> -            <menu_item_check.on_check -             function="CheckControl" -             parameter="RunMultipleThreads" /> -            <menu_item_check.on_click -             function="ToggleControl" -             parameter="RunMultipleThreads" /> -        </menu_item_check> +        </menu>                  <menu_item_check           label="Use Plugin Read Thread"           name="Use Plugin Read Thread"> | 
