diff options
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 192 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 74 | ||||
| -rw-r--r-- | indra/newview/llface.cpp | 65 | ||||
| -rw-r--r-- | indra/newview/llface.h | 3 | ||||
| -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 | 186 | 
13 files changed, 292 insertions, 425 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4c52fb015f..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> @@ -5373,6 +5384,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>MultipleAttachments</key> +    <map> +      <key>Comment</key> +      <string>Allow multiple objects to be attached to a single attachment point.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>     <key>MuteAmbient</key>      <map>        <key>Comment</key> @@ -6737,7 +6759,7 @@      <key>Type</key>      <string>U32</string>      <key>Value</key> -    <integer>200</integer> +    <integer>60</integer>    </map>    <key>RenderSSAOFactor</key>    <map> @@ -7112,64 +7134,6 @@      <real>0.01</real>    </map> -  <key>RenderShadowBiasError</key> -  <map> -    <key>Comment</key> -    <string>Error scale for shadow bias (based on altitude).</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>F32</string> -    <key>Value</key> -    <real>0</real> -  </map> -  <key>RenderShadowOffsetError</key> -  <map> -    <key>Comment</key> -    <string>Error scale for shadow offset (based on altitude).</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>F32</string> -    <key>Value</key> -    <real>0</real> -  </map> -   -  <key>RenderSpotLightsInNondeferred</key> -  <map> -    <key>Comment</key> -    <string>Whether to support projectors as spotlights when Lighting and Shadows is disabled</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map> - -  <key>RenderSpotShadowBias</key> -  <map> -    <key>Comment</key> -    <string>Bias value for shadows (prevent shadow acne).</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>F32</string> -    <key>Value</key> -    <real>0.0</real> -  </map> -  <key>RenderSpotShadowOffset</key> -  <map> -    <key>Comment</key> -    <string>Offset value for shadows (prevent shadow acne).</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>F32</string> -    <key>Value</key> -    <real>0.04</real> -  </map> -    <key>RenderShadowResolutionScale</key>    <map>      <key>Comment</key> @@ -7182,6 +7146,8 @@      <real>1.0</real>    </map> + +    <key>RenderDeferredTreeShadowBias</key>    <map>      <key>Comment</key> @@ -7303,7 +7269,7 @@      <key>Type</key>      <string>F32</string>      <key>Value</key> -    <real>8</real> +    <real>1</real>    </map>    <key>RenderDeferred</key> @@ -7318,6 +7284,18 @@      <integer>0</integer>    </map> +  <key>RenderDeferredShadow</key> +  <map> +    <key>Comment</key> +    <string>Enable shadows in deferred renderer.</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +  </map> +    <key>RenderDeferredGI</key>    <map>      <key>Comment</key> @@ -7330,10 +7308,10 @@      <integer>0</integer>    </map> -  <key>RenderDeferredSun</key> +  <key>RenderDeferredSunShadow</key>    <map>      <key>Comment</key> -    <string>Execute sunlight shader in deferred renderer.</string> +    <string>Generate shadows from the sun.</string>      <key>Persist</key>      <integer>1</integer>      <key>Type</key> @@ -7342,10 +7320,10 @@      <integer>1</integer>    </map> -  <key>RenderDeferredAtmospheric</key> +  <key>RenderDeferredSun</key>    <map>      <key>Comment</key> -    <string>Execute atmospheric shader in deferred renderer.</string> +    <string>Execute sunlight shader in deferred renderer.</string>      <key>Persist</key>      <integer>1</integer>      <key>Type</key> @@ -7354,10 +7332,10 @@      <integer>1</integer>    </map> -  <key>RenderDeferredSSAO</key> +  <key>RenderDeferredAtmospheric</key>    <map>      <key>Comment</key> -    <string>Execute screen space ambient occlusion shader in deferred renderer.</string> +    <string>Execute atmospheric shader in deferred renderer.</string>      <key>Persist</key>      <integer>1</integer>      <key>Type</key> @@ -7616,10 +7594,10 @@        <key>Value</key>        <real>256.0</real>      </map> -    <key>RenderAutoMaskAlphaNonDeferred</key> +    <key>RenderFastAlpha</key>      <map>        <key>Comment</key> -      <string>Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode</string> +      <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -7627,17 +7605,6 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>RenderAutoMaskAlphaDeferred</key> -    <map> -      <key>Comment</key> -      <string>Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>RenderFastUI</key>      <map>        <key>Comment</key> @@ -7899,6 +7866,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>RenderLightingDetail</key> +    <map> +      <key>Comment</key> +      <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>RenderMaxPartCount</key>      <map>        <key>Comment</key> @@ -7998,18 +7976,6 @@        <key>Value</key>        <integer>2</integer>      </map> -    <key>RenderShadowDetail</key> -    <map> -      <key>Comment</key> -      <string>Detail of shadows.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>2</integer> -    </map> -      <key>RenderReflectionRes</key>      <map>        <key>Comment</key> @@ -8140,7 +8106,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>1</integer> +      <integer>0</integer>      </map>      <key>RenderUIBuffer</key>      <map> @@ -8296,10 +8262,10 @@        <key>Value</key>        <integer>512</integer>      </map> -    <key>RotateRight</key> +    <key>RenderWaterReflections</key>      <map>        <key>Comment</key> -      <string>Make the agent rotate to its right.</string> +      <string>Reflect the environment in the water.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -8307,27 +8273,27 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>RotationStep</key> +    <key>RotateRight</key>      <map>        <key>Comment</key> -      <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string> +      <string>Make the agent rotate to its right.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> -      <string>F32</string> +      <string>Boolean</string>        <key>Value</key> -      <real>1.0</real> +      <integer>0</integer>      </map> -    <key>RunMultipleThreads</key> +    <key>RotationStep</key>      <map>        <key>Comment</key> -      <string>If TRUE keep background threads active during render</string> +      <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> -      <string>Boolean</string> +      <string>F32</string>        <key>Value</key> -      <integer>0</integer> +      <real>1.0</real>      </map>      <key>SafeMode</key>      <map> @@ -9495,28 +9461,6 @@        <key>Value</key>        <integer>75</integer>      </map> -    <key>SnapshotSharingEnabled</key> -    <map> -      <key>Comment</key> -      <string>Enable uploading of snapshots to a web service.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>SnapshotConfigURL</key> -    <map> -      <key>Comment</key> -      <string>URL to fetch Snapshot Sharing configuration data from.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string>http://photos.apps.staging.avatarsunited.com/viewer_config</string> -    </map>      <key>SnapshotTextureLastResolution</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index d222d94ec6..d6ecb2f168 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -961,11 +961,6 @@ static LLFastTimer::DeclareTimer FTM_LFS("LFS Thread");  static LLFastTimer::DeclareTimer FTM_PAUSE_THREADS("Pause Threads");  static LLFastTimer::DeclareTimer FTM_IDLE("Idle");  static LLFastTimer::DeclareTimer FTM_PUMP("Pump"); -static LLFastTimer::DeclareTimer FTM_PUMP_ARES("Ares"); -static LLFastTimer::DeclareTimer FTM_PUMP_SERVICE("Service"); -static LLFastTimer::DeclareTimer FTM_SERVICE_CALLBACK("Callback"); -static LLFastTimer::DeclareTimer FTM_AGENT_AUTOPILOT("Autopilot"); -static LLFastTimer::DeclareTimer FTM_AGENT_UPDATE("Update");  bool LLAppViewer::mainLoop()  { @@ -1075,20 +1070,10 @@ bool LLAppViewer::mainLoop()  						LLMemType mt_ip(LLMemType::MTYPE_IDLE_PUMP);  						pingMainloopTimeout("Main:ServicePump");				  						LLFastTimer t4(FTM_PUMP); -						{ -							LLFastTimer t(FTM_PUMP_ARES); -							gAres->process(); -						} -						{ -							LLFastTimer t(FTM_PUMP_SERVICE); -							// this pump is necessary to make the login screen show up -							gServicePump->pump(); - -							{ -								LLFastTimer t(FTM_SERVICE_CALLBACK); -								gServicePump->callback(); -							} -						} +						gAres->process(); +						// this pump is necessary to make the login screen show up +						gServicePump->pump(); +						gServicePump->callback();  					}  					resumeMainloopTimeout(); @@ -1123,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)  				{ @@ -1162,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; @@ -1202,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)) @@ -3581,12 +3553,9 @@ void LLAppViewer::idle()  			gAgent.moveYaw(-1.f);  		} -		{ -			LLFastTimer t(FTM_AGENT_AUTOPILOT); -			// Handle automatic walking towards points -			gAgentPilot.updateTarget(); -			gAgent.autoPilot(&yaw); -		} +	    // Handle automatic walking towards points +	    gAgentPilot.updateTarget(); +	    gAgent.autoPilot(&yaw);  	    static LLFrameTimer agent_update_timer;  	    static U32 				last_control_flags; @@ -3597,7 +3566,6 @@ void LLAppViewer::idle()  	    if (flags_changed || (agent_update_time > (1.0f / (F32) AGENT_UPDATES_PER_SECOND)))  	    { -		    LLFastTimer t(FTM_AGENT_UPDATE);  		    // Send avatar and camera info  		    last_control_flags = gAgent.getControlFlags();  		    send_agent_update(TRUE); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index cfe8b4c9a4..db3d90e0a0 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -862,26 +862,6 @@ void LLFace::updateRebuildFlags()  	}  } - -bool LLFace::canRenderAsMask() -{ -	const LLTextureEntry* te = getTextureEntry(); -	return ( -		( -		 (LLPipeline::sRenderDeferred && LLPipeline::sAutoMaskAlphaDeferred) || -		  -		 (!LLPipeline::sRenderDeferred && LLPipeline::sAutoMaskAlphaNonDeferred)		  -		 ) // do we want masks at all? -		&& -		(te->getColor().mV[3] == 1.0f) && // can't treat as mask if we have face alpha -		!(LLPipeline::sRenderDeferred && te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible in deferred rendering mode, need to figure out why - for now, avoid -		(te->getGlow() == 0.f) && // glowing masks are hard to implement - don't mask - -		getTexture()->getIsAlphaMask() // texture actually qualifies for masking (lazily recalculated but expensive) -		); -} - -  static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom");  BOOL LLFace::getGeometryVolume(const LLVolume& volume, @@ -1412,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) ; @@ -1556,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 b20ecfe2b8..13d3d8824e 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -138,10 +138,10 @@ public:  	void			unsetFaceColor(); // switch back to material color  	const LLColor4&	getFaceColor() const { return mFaceColor; }   	const LLColor4& getRenderColor() const; +	  	//for volumes  	void updateRebuildFlags(); -	bool canRenderAsMask(); // logic helper  	BOOL getGeometryVolume(const LLVolume& volume,  						const S32 &f,  						const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, @@ -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 52cf24333f..2f6ecd8a34 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -29,9 +29,7 @@              <menu_item_call.on_click               function="BuyCurrency" />          </menu_item_call> -          <menu_item_separator/> -          <menu_item_call           label="My Profile"           name="Profile"> @@ -126,9 +124,7 @@              <menu_item_call.on_click               function="Advanced.LeaveAdminStatus" />          </menu_item_call> -          <menu_item_separator/> -          <menu_item_call           label="Exit [APP_NAME]"           name="Quit" @@ -157,9 +153,7 @@               function="SideTray.PanelPeopleTab"               parameter="groups_panel" />          </menu_item_call> -          <menu_item_separator/> -          <!--menu_item_call           label="Chat"           name="Chat"> @@ -257,9 +251,7 @@               parameter="region_info" />          </menu_item_call>          </menu> -          <menu_item_separator/> -          <menu_item_call               label="Buy This Land"               name="Buy Land"> @@ -356,9 +348,7 @@                 control="NavBarShowParcelProperties" />            </menu_item_check>          </menu> -          <menu_item_separator/> -  	    <menu_item_call  	     label="Teleport Home"  	     name="Teleport Home" @@ -397,9 +387,7 @@               parameter="ShowNavbarFavoritesPanel" />          </menu_item_check>          <menu_item_separator/>--> -          <menu_item_separator/> -      <menu           create_jump_keys="true"           label="Sun" @@ -442,9 +430,7 @@                   function="World.EnvSettings"                   parameter="default" />              </menu_item_call> -              <menu_item_separator/> -              <menu_item_call               label="Environment Editor"               name="Environment Editor"> @@ -593,7 +579,6 @@              </menu_item_call>          </menu>          <menu_item_separator/> -          <menu_item_call             label="Focus on Selection"             name="Focus on Selection" @@ -614,9 +599,7 @@            <menu_item_call.on_enable               function="Tools.SomethingSelectedNoHUD" />          </menu_item_call> -          <menu_item_separator/> -          <menu           create_jump_keys="true"           label="Object" @@ -718,9 +701,7 @@                 function="EditableSelected" />            </menu_item_call>          </menu> -          <menu_item_separator/> -          <menu           create_jump_keys="true"           label="Options" @@ -736,9 +717,7 @@  				 function="ToggleControl"  				 parameter="DebugPermissions" />  			</menu_item_check> -              <menu_item_separator/> -              <menu_item_check                   label="Select Only My Objects"                   name="Select Only My Objects"> @@ -765,9 +744,7 @@                      <menu_item_check.on_click                       function="Tools.SelectBySurrounding" />              </menu_item_check> -            <menu_item_separator/> -                  <menu_item_check                   label="Show Hidden Selection"                   name="Show Hidden Selection"> @@ -793,9 +770,7 @@                       function="ToggleControl"                       parameter="ShowSelectionBeam" />                  </menu_item_check> -          <menu_item_separator/> -                  <menu_item_check                   label="Snap to Grid"                   name="Snap to Grid" @@ -919,9 +894,7 @@               function="Floater.Show"               parameter="hud" />          </menu_item_call>--> -          <menu_item_separator/> -          <menu_item_call               label="Report Abuse"               name="Report Abuse"> @@ -935,9 +908,7 @@                   function="ShowHelp"                   parameter="report_bug" />              </menu_item_call> -          <menu_item_separator/> -          <menu_item_call           label="About [APP_NAME]"           name="About Second Life"> @@ -951,6 +922,17 @@       name="Advanced"       tear_off="true"       visible="false"> +        <menu_item_check +         label="Show Advanced Menu" +         name="Show Advanced Menu" +         shortcut="control|alt|shift|D"> +          <on_check +           function="CheckControl" +           parameter="UseDebugMenus" /> +          <on_click +           function="ToggleControl" +           parameter="UseDebugMenus" /> +        </menu_item_check>          <menu_item_call           label="Stop Animating Me"           name="Stop Animating My Avatar"> @@ -977,9 +959,7 @@             function="Floater.Show"             parameter="window_size" />          </menu_item_call> -          <menu_item_separator/> -          <menu_item_check           label="Limit Select Distance"           name="Limit Select Distance"> @@ -1000,9 +980,7 @@               function="ToggleControl"               parameter="DisableCameraConstraints" />          </menu_item_check> -          <menu_item_separator/> -          <menu_item_check           label="High-res Snapshot"           name="HighResSnapshot"> @@ -1033,9 +1011,7 @@               function="ToggleControl"               parameter="CompressSnapshotsToDisk" />          </menu_item_check> -          <menu_item_separator/> -          <menu           create_jump_keys="true"           label="Performance Tools" @@ -1148,9 +1124,7 @@                  <menu_item_check.on_click                   function="View.ShowHoverTips" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_check               label="Show Land Tooltips"               name="Land Tips"> @@ -1419,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"> @@ -1457,9 +1421,7 @@               function="ToggleControl"               parameter="MouseSmooth" />          </menu_item_check> -          <menu_item_separator/> -          <menu           label="Shortcuts"           name="Shortcuts" @@ -1503,9 +1465,19 @@                  <menu_item_call.on_click                   function="View.DefaultUISize" />              </menu_item_call> - +            <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility.  The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. --> +            <menu_item_check +               label="Show Advanced Menu - legacy shortcut" +               name="Show Advanced Menu - legacy shortcut" +               shortcut="control|alt|D"> +              <on_check +		 function="CheckControl" +		 parameter="UseDebugMenus" /> +              <on_click +		 function="ToggleControl" +		 parameter="UseDebugMenus" /> +            </menu_item_check>              <menu_item_separator/> -              <menu_item_check               label="Always Run"               name="Always Run" @@ -1526,9 +1498,7 @@                  <menu_item_check.on_enable                   function="Agent.enableFlying" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_call               label="Close Window"               name="Close Window" @@ -1547,9 +1517,7 @@                  <menu_item_call.on_enable                   function="File.EnableCloseAllWindows" />              </menu_item_call> -              <menu_item_separator/> -              <menu_item_call               label="Snapshot to Disk"               name="Snapshot to Disk" @@ -1558,9 +1526,7 @@                  <menu_item_call.on_click                   function="File.TakeSnapshotToDisk" />              </menu_item_call> -              <menu_item_separator/> -              <menu_item_call               label="Mouselook"               name="Mouselook" @@ -1597,9 +1563,7 @@                  <menu_item_call.on_enable                   function="View.EnableLastChatter" />              </menu_item_call> -              <menu_item_separator/> -              <menu               create_jump_keys="true"               label="Select Build Tool" @@ -1646,9 +1610,7 @@                       parameter="land" />                  </menu_item_call>              </menu> -              <menu_item_separator/> -              <menu_item_call               label="Zoom In"               name="Zoom In" @@ -1670,27 +1632,8 @@                  <menu_item_call.on_click                   function="View.ZoomOut" />              </menu_item_call> -            <menu_item_separator -             visible="false"/> -            <!-- Made invisible to avoid a dissonance: menu item toggle menu where it is located. EXT-8069. -              Can't be removed to keep sortcut workable. -            --> -            <menu_item_check -             label="Show Advanced Menu" -             name="Show Advanced Menu" -             shortcut="control|alt|D" -             visible="false"> -                <on_check -                 function="CheckControl" -                 parameter="UseDebugMenus" /> -                <on_click -                 function="ToggleControl" -                 parameter="UseDebugMenus" /> -        </menu_item_check> -        </menu> <!--Shortcuts--> - +        </menu>          <menu_item_separator/> -          <menu_item_call           label="Show Debug Settings"           name="Debug Settings"> @@ -1709,7 +1652,6 @@               function="ToggleControl"               parameter="QAMode" />          </menu_item_check> -          </menu>      <menu       create_jump_keys="true" @@ -1800,9 +1742,7 @@                   function="Advanced.ToggleConsole"                   parameter="memory view" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_call               label="Region Info to Debug Console"               name="Region Info to Debug Console"> @@ -1824,9 +1764,7 @@                   function="Advanced.DumpInfoToConsole"                   parameter="capabilities" />              </menu_item_call> -              <menu_item_separator/> -              <menu_item_check               label="Camera"               name="Camera"> @@ -1914,9 +1852,7 @@                   function="ToggleControl"                   parameter="DebugShowColor" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_check               label="Show Updates to Objects"               name="Show Updates" @@ -1928,9 +1864,7 @@                   function="Advanced.ToggleShowObjectUpdates" />              </menu_item_check>          </menu> -          <menu_item_separator/> -          <menu           create_jump_keys="true"           label="Force an Error" @@ -2224,12 +2158,9 @@              <menu_item_check.on_enable                   function="Advanced.EnableRenderFBO" />             </menu_item_check> - -          <menu_item_separator /> -            <menu_item_check -                       label="Lighting and Shadows" -                       name="Lighting and Shadows"> +                       label="Deferred Rendering" +                       name="Deferred Rendering">              <menu_item_check.on_check               function="CheckControl"               parameter="RenderDeferred" /> @@ -2240,31 +2171,7 @@                   function="Advanced.EnableRenderDeferred" />            </menu_item_check>            <menu_item_check -                       label="   Shadows from Sun/Moon/Projectors" -                       name="Shadows from Sun/Moon/Projectors"> -            <menu_item_check.on_check -             function="Advanced.CheckRenderShadowOption" -             parameter="RenderShadowDetail" /> -            <menu_item_check.on_click -             function="Advanced.ClickRenderShadowOption" -             parameter="RenderShadowDetail" /> -            <menu_item_check.on_enable -                 function="Advanced.EnableRenderDeferredOptions" /> -          </menu_item_check> -          <menu_item_check -                   label="   SSAO and Shadow Smoothing" -                   name="SSAO and Shadow Smoothing"> -            <menu_item_check.on_check -             function="CheckControl" -             parameter="RenderDeferredSSAO" /> -            <menu_item_check.on_click -             function="ToggleControl" -             parameter="RenderDeferredSSAO" /> -            <menu_item_check.on_enable -                 function="Advanced.EnableRenderDeferredOptions" /> -          </menu_item_check> -          <menu_item_check -                   label="   Global Illumination (experimental)" +                   label="Global Illumination"                     name="Global Illumination">              <menu_item_check.on_check               function="CheckControl" @@ -2273,11 +2180,9 @@               function="ToggleControl"               parameter="RenderDeferredGI" />              <menu_item_check.on_enable -                 function="Advanced.EnableRenderDeferredOptions" /> +                 function="Advanced.EnableRenderDeferredGI" />            </menu_item_check> -            <menu_item_separator /> -            <menu_item_check               label="Debug GL"               name="Debug GL"> @@ -2299,24 +2204,14 @@                   parameter="RenderDebugPipeline" />              </menu_item_check>              <menu_item_check -             label="Automatic Alpha Masks (deferred)" -             name="Automatic Alpha Masks (deferred)"> -                <menu_item_check.on_check -                 function="CheckControl" -                 parameter="RenderAutoMaskAlphaDeferred" /> -                <menu_item_check.on_click -                 function="ToggleControl" -                 parameter="RenderAutoMaskAlphaDeferred" /> -            </menu_item_check> -            <menu_item_check -             label="Automatic Alpha Masks (non-deferred)" -             name="Automatic Alpha Masks (non-deferred)"> +             label="Fast Alpha" +             name="Fast Alpha">                  <menu_item_check.on_check                   function="CheckControl" -                 parameter="RenderAutoMaskAlphaNonDeferred" /> +                 parameter="RenderFastAlpha" />                  <menu_item_check.on_click                   function="ToggleControl" -                 parameter="RenderAutoMaskAlphaNonDeferred" /> +                 parameter="RenderFastAlpha" />              </menu_item_check>              <menu_item_check               label="Animation Textures" @@ -2359,7 +2254,7 @@                 parameter="AuditTexture" />              </menu_item_check>              <menu_item_check -             label="Texture Atlas (experimental)" +             label="Texture Atlas"               name="Texture Atlas">                <menu_item_check.on_check                 function="CheckControl" @@ -2415,9 +2310,7 @@                   function="ToggleControl"                   parameter="AgentPause" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_call               label="Enable Message Log"               name="Enable Message Log"> @@ -2430,9 +2323,7 @@                  <menu_item_call.on_click                   function="Advanced.DisableMessageLog" />              </menu_item_call> -              <menu_item_separator/> -              <menu_item_check               label="Velocity Interpolate Objects"               name="Velocity Interpolate Objects"> @@ -2453,9 +2344,7 @@                   function="ToggleControl"                   parameter="PingInterpolate" />              </menu_item_check> -              <menu_item_separator/> -              <menu_item_call               label="Drop a Packet"               name="Drop a Packet" @@ -2643,7 +2532,6 @@              </menu_item_check>              <menu_item_separator /> -              <menu_item_check               label="Debug SelectMgr"               name="Debug SelectMgr"> @@ -2989,9 +2877,7 @@                   function="Advanced.DumpAvatarLocalTextures" />              </menu_item_call>          </menu> -          <menu_item_separator/> -          <menu_item_check           label="HTTP Textures"           name="HTTP Textures"> @@ -3028,9 +2914,7 @@               function="ToggleControl"               parameter="ShowConsoleWindow" />          </menu_item_check> -          <menu_item_separator/> -          <menu_item_check           label="Show Admin Menu"           name="View Admin Options"> @@ -3365,9 +3249,7 @@                       name="PublicIssueTrackerHelp_url"                       parameter="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" />                  </menu_item_call> -                  <menu_item_separator/> -                  <menu_item_call                   label="Bug Reporting 101"                   name="Bug Reporing 101">  | 
