diff options
| author | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-02-21 16:50:04 -0800 | 
|---|---|---|
| committer | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-02-21 16:50:04 -0800 | 
| commit | 2fd0e6e8f9cea68fbfe77282d623e70c64b52469 (patch) | |
| tree | 58209b1da794413be879b10e7444ced701f5adf1 /indra/newview | |
| parent | 69133ca4e318fc93fed39589c9221251440bcb96 (diff) | |
Merge viewer-cat and resolve conflict with alternate self
Diffstat (limited to 'indra/newview')
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl | 4 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolavatar.cpp | 184 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolavatar.h | 1 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolbump.cpp | 4 | 
5 files changed, 102 insertions, 102 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b302f5c9b9..e06b4bbe13 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9169,6 +9169,17 @@      <key>Value</key>      <integer>0</integer>    </map> +  <key>RenderAutoMuteRenderCostLimit</key> +  <map> +    <key>Comment</key> +    <string>Maximum render cost before an avatar is automatically visually muted (0 for no limit).</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>U32</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>RenderAutoMuteSurfaceAreaLimit</key>    <map>      <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl index bfd9b9b3eb..29a6d842d2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl @@ -31,6 +31,8 @@ out vec4 frag_data[3];  uniform sampler2D diffuseMap; +uniform float minimum_alpha; +  VARYING vec3 vary_normal;  VARYING vec2 vary_texcoord0; @@ -38,7 +40,7 @@ void main()  {  	vec4 diff = texture2D(diffuseMap, vary_texcoord0.xy); -	if (diff.a < 0.2) +	if (diff.a < minimum_alpha)  	{  		discard;  	} diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 38268b102b..6d02ad2b96 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -59,6 +59,7 @@ LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL;  BOOL	LLDrawPoolAvatar::sSkipOpaque = FALSE;  BOOL	LLDrawPoolAvatar::sSkipTransparent = FALSE;  S32 LLDrawPoolAvatar::sDiffuseChannel = 0; +F32 LLDrawPoolAvatar::sMinimumAlpha = 0.2f;  static bool is_deferred_render = false; @@ -272,7 +273,7 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()  	gPipeline.bindDeferredShader(*sVertexProgram); -	sVertexProgram->setMinimumAlpha(0.2f); +	sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);  } @@ -620,7 +621,7 @@ void LLDrawPoolAvatar::beginRigid()  		if (sVertexProgram != NULL)  		{	//eyeballs render with the specular shader  			sVertexProgram->bind(); -			sVertexProgram->setMinimumAlpha(0.2f); +			sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);  		}  	}  	else @@ -671,7 +672,7 @@ void LLDrawPoolAvatar::beginDeferredRigid()  	sVertexProgram = &gDeferredNonIndexedDiffuseAlphaMaskNoColorProgram;  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);  	sVertexProgram->bind(); -	sVertexProgram->setMinimumAlpha(0.2f); +	sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);  }  void LLDrawPoolAvatar::endDeferredRigid() @@ -729,7 +730,7 @@ void LLDrawPoolAvatar::beginSkinned()  	if (LLGLSLShader::sNoFixedFunction)  	{ -		sVertexProgram->setMinimumAlpha(0.2f); +		sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);  	}  } @@ -1027,7 +1028,7 @@ void LLDrawPoolAvatar::beginDeferredSkinned()  	sRenderingSkinned = TRUE;  	sVertexProgram->bind(); -	sVertexProgram->setMinimumAlpha(0.2f); +	sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);  	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);  	gGL.getTexUnit(0)->activate(); @@ -1138,7 +1139,10 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		if (impostor)  		{ -			if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())  +			if (LLPipeline::sRenderDeferred && //rendering a deferred impostor +				!LLPipeline::sReflectionRender &&  +				avatarp->mImpostor.isComplete() && //impostor has required data channels +				avatarp->mImpostor.getNumTextures() >= 3)   			{  				if (normal_channel > -1)  				{ @@ -1151,113 +1155,95 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  			}  			avatarp->renderImpostor(LLColor4U(255,255,255,255), sDiffuseChannel);  		} -		return;  	} - -	llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted()); - -	/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view -	{ -		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f)); -	}*/ -	 -	if (pass == 1) +	else if (pass == 1)  	{  		// render rigid meshes (eyeballs) first  		avatarp->renderRigid(); -		return;  	} - -	if (pass == 3) -	{ -		if (is_deferred_render) -		{ -			renderDeferredRiggedSimple(avatarp); -		} -		else -		{ -			renderRiggedSimple(avatarp); -		} -		return; -	} - -	if (pass == 4) -	{ -		if (is_deferred_render) -		{ -			renderDeferredRiggedBump(avatarp); -		} -		else +	else if (pass >= 3 && pass <= 9) +	{ //render rigged attachments +		if (!avatarp->isVisuallyMuted())  		{ -			renderRiggedFullbright(avatarp); +			if (pass == 3) +			{ +				if (is_deferred_render) +				{ +					renderDeferredRiggedSimple(avatarp); +				} +				else +				{ +					renderRiggedSimple(avatarp); +				} +			} +			else if (pass == 4) +			{ +				if (is_deferred_render) +				{ +					renderDeferredRiggedBump(avatarp); +				} +				else +				{ +					renderRiggedFullbright(avatarp); +				} +			} +			else if (pass == 5) +			{ +				renderRiggedShinySimple(avatarp); +			} +			else if (pass == 6) +			{ +				renderRiggedFullbrightShiny(avatarp); +			} +			else if (pass >= 7 && pass < 9) +			{ +				if (pass == 7) +				{ +					renderRiggedAlpha(avatarp); +				} +				else if (pass == 8) +				{ +					renderRiggedFullbrightAlpha(avatarp); +				} +			} +			else if (pass == 9) +			{ +				renderRiggedGlow(avatarp); +			}  		} - -		return;  	} - -	if (pass == 5) -	{ -		renderRiggedShinySimple(avatarp); -		return; -	} - -	if (pass == 6) -	{ -		renderRiggedFullbrightShiny(avatarp); -		return; -	} - -	if (pass >= 7 && pass < 9) +	else  	{ -		if (pass == 7) +		if ((sShaderLevel >= SHADER_LEVEL_CLOTH))  		{ -			renderRiggedAlpha(avatarp); -			return; +			LLMatrix4 rot_mat; +			LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat); +			LLMatrix4 cfr(OGL_TO_CFR_ROTATION); +			rot_mat *= cfr; +		 +			LLVector4 wind; +			wind.setVec(avatarp->mWindVec); +			wind.mV[VW] = 0; +			wind = wind * rot_mat; +			wind.mV[VW] = avatarp->mWindVec.mV[VW]; + +			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV); +			F32 phase = -1.f * (avatarp->mRipplePhase); + +			F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f); +			LLVector4 sin_params(freq, freq, freq, phase); +			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV); + +			LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f); +			gravity = gravity * rot_mat; +			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);  		} -		if (pass == 8) +		if( !single_avatar || (avatarp == single_avatar) )  		{ -			renderRiggedFullbrightAlpha(avatarp); -			return; +			avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);  		}  	} - -	if (pass == 9) -	{ -		renderRiggedGlow(avatarp); -		 -		return; -	} -	 -	if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) -	{ -		LLMatrix4 rot_mat; -		LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat); -		LLMatrix4 cfr(OGL_TO_CFR_ROTATION); -		rot_mat *= cfr; -		 -		LLVector4 wind; -		wind.setVec(avatarp->mWindVec); -		wind.mV[VW] = 0; -		wind = wind * rot_mat; -		wind.mV[VW] = avatarp->mWindVec.mV[VW]; - -		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV); -		F32 phase = -1.f * (avatarp->mRipplePhase); - -		F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f); -		LLVector4 sin_params(freq, freq, freq, phase); -		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV); - -		LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f); -		gravity = gravity * rot_mat; -		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV); -	} - -	if( !single_avatar || (avatarp == single_avatar) ) -	{ -		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); -	}  }  void LLDrawPoolAvatar::getRiggedGeometry(LLFace* face, LLPointer<LLVertexBuffer>& buffer, U32 data_mask, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) @@ -1547,7 +1533,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)  				LLDrawPoolBump::bindBumpMap(face, normal_channel);  			} -			if (face->mTextureMatrix) +			if (face->mTextureMatrix && vobj->mTexAnimMode)  			{  				gGL.matrixMode(LLRender::MM_TEXTURE);  				gGL.loadMatrix((F32*) face->mTextureMatrix->mMatrix); diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index 5551d8f6d8..544969001d 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -209,6 +209,7 @@ public:  	static BOOL sSkipOpaque;  	static BOOL sSkipTransparent;  	static S32 sDiffuseChannel; +	static F32 sMinimumAlpha;  	static LLGLSLShader* sVertexProgram;  }; diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 079cbe3a21..eacbf2d380 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -461,8 +461,8 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&  				}  			}  		} -        // Placed after shader->disableTex(ENV,TT_CUBE_MAP) above to avoid sequencing false alarm when using RenderDebugGL -        // MAINT-1291 +        // Placed after shader->disableTex(ENV,TT_CUBE_MAP) to avoid sequencing false alarm when using RenderDebugGL +        // MAINT-755  		cube_map->disable();  		cube_map->restoreMatrix();  	} | 
