diff options
Diffstat (limited to 'indra')
6 files changed, 137 insertions, 308 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ff3faaf92c..c064b420f3 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -291,17 +291,6 @@        <key>Value</key>        <real>1.0</real>      </map> -    <key>AudioLevelUnderwaterRolloff</key> -    <map> -      <key>Comment</key> -      <string>Controls the distance-based dropoff of audio volume underwater(fraction or multiple of default audio rolloff)</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>F32</string> -      <key>Value</key> -      <real>5.0</real> -    </map>      <key>AudioLevelSFX</key>      <map>        <key>Comment</key> @@ -2015,39 +2004,6 @@        <key>Value</key>        <string />      </map> -	<key>DebugAvatarAppearanceMessage</key> -  <map> -    <key>Comment</key> -    <string>Dump a bunch of XML files when handling appearance messages</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map> -  <key>DebugAvatarExperimentalServerAppearanceUpdate</key> -  <map> -    <key>Comment</key> -    <string>Experiment with sending full cof_contents instead of cof_version</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map> -    <key>DebugAvatarAppearanceServiceURLOverride</key> -    <map> -      <key>Comment</key> -      <string>URL to use for baked texture requests; overrides value returned by login server.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string /> -    </map>  	<key>DebugAvatarRezTime</key>  	<map>  		<key>Comment</key> @@ -2070,17 +2026,6 @@      <key>Value</key>      <integer>1</integer>    </map> -    <key>DebugAvatarCompositeBaked</key> -  <map> -    <key>Comment</key> -    <string>Colorize avatar meshes based on baked/composite state.</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> @@ -2092,17 +2037,6 @@        <key>Value</key>        <integer>1</integer>      </map> -    <key>DebugForceAppearanceRequestFailure</key> -    <map> -      <key>Comment</key> -      <string>Request wrong cof version to test the failure path for server appearance update requests.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>DebugHideEmptySystemFolders</key>      <map>        <key>Comment</key> @@ -4436,28 +4370,6 @@        <key>Value</key>        <real>1.0</real>      </map> -    <key>InventoryDebugSimulateOpFailureRate</key> -    <map> -      <key>Comment</key> -        <string>Rate at which we simulate failures of copy/link requests in some operations</string> -      <key>Persist</key> -        <integer>1</integer> -      <key>Type</key> -        <string>F32</string> -      <key>Value</key> -        <real>0.0</real> -    </map> -    <key>InventoryDebugSimulateLateOpRate</key> -    <map> -      <key>Comment</key> -        <string>Rate at which we simulate late-completing copy/link requests in some operations</string> -      <key>Persist</key> -        <integer>1</integer> -      <key>Type</key> -        <string>F32</string> -      <key>Value</key> -        <real>0.0</real> -    </map>      <key>InventoryDisplayInbox</key>      <map>          <key>Comment</key> @@ -8559,7 +8471,7 @@      <key>Type</key>      <string>U32</string>      <key>Value</key> -    <real>512</real> +    <real>1024</real>    </map>    <key>RenderSpecularResY</key> @@ -8571,7 +8483,7 @@      <key>Type</key>      <string>U32</string>      <key>Value</key> -    <real>128</real> +    <real>256</real>    </map>    <key>RenderSpecularExponent</key> @@ -8980,28 +8892,6 @@        <key>Value</key>        <integer>1</integer>      </map> -    <key>DisableAllRenderTypes</key> -    <map> -      <key>Comment</key> -      <string>Disables all rendering types.</string> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>DisableAllRenderFeatures</key> -    <map> -      <key>Comment</key> -      <string>Disables all rendering features.</string> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>RenderHUDInSnapshot</key>      <map>        <key>Comment</key> @@ -13439,28 +13329,6 @@        <key>Value</key>        <integer>-1</integer>      </map> -    <key>MaxFPS</key> -    <map> -      <key>Comment</key> -      <string>Yield some time to the local host if we reach a threshold framerate.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>F32</string> -      <key>Value</key> -      <integer>-1.0</integer> -    </map> -    <key>ForcePeriodicRenderingTime</key> -    <map> -      <key>Comment</key> -      <string>Periodically enable all rendering masks for a single frame.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>F32</string> -      <key>Value</key> -      <integer>-1.0</integer> -    </map>      <key>ZoomDirect</key>      <map>        <key>Comment</key> @@ -14446,60 +14314,5 @@      <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> -    <key>Persist</key> -    <integer>0</integer> -    <key>Type</key> -    <string>Boolean</string> -    <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> -  <key>DisablePrecacheDelayAfterTeleporting</key> -  <map> -    <key>Comment</key> -    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string> -    <key>Persist</key> -    <integer>0</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map>  </map>  </llsd> diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl index 20a756530a..49ad064364 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl @@ -61,6 +61,6 @@ void main()  	/// Gamma correct for WL (soft clip effect).  	frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0);  	frag_data[1] = vec4(0.0,0.0,0.0,0.0); -	frag_data[2] = vec4(0.5,0.5,0.5,0); +	frag_data[2] = vec4(0.5,0.5,0.0,0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index aafa932b8f..90cf085524 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -297,7 +297,6 @@ void main()  	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);  	vec3 col;  	float bloom = 0.0; -	if (diffuse.a < 0.9)  	{  		calcAtmospherics(pos.xyz, 1.0); @@ -322,23 +321,19 @@ void main()  			col += spec_contrib;  		} +		col = mix(col.rgb, diffuse.rgb, diffuse.a); +  		if (envIntensity > 0.0)  		{ //add environmentmap  			vec3 env_vec = env_mat * refnormpersp;  			col = mix(col.rgb, pow(textureCube(environmentMap, env_vec).rgb, vec3(2.2)) * 2.2,  -				max(envIntensity-diffuse.a*2.0, 0.0));  +				envIntensity);   		}  		col = atmosLighting(col);  		col = scaleSoftClip(col); - -		col = mix(col.rgb, diffuse.rgb, diffuse.a);  	} -	else -	{ -		col = diffuse.rgb; -	} - +	  	frag_color.rgb = col;  	//frag_color.a = bloom; diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 1ae006bc8a..de858b34b5 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -67,6 +67,12 @@ VARYING vec4 littleWave;  VARYING vec4 view;  VARYING vec4 vary_position; +vec2 encode_normal(vec3 n) +{ +	float f = sqrt(8 * n.z + 8); +	return n.xy / f + 0.5; +} +  void main()   {  	vec4 color; @@ -151,8 +157,8 @@ void main()  	//spec *= shadow;  	//color.rgb += spec * specular; -	color.rgb = atmosTransport(color.rgb); -	color.rgb = scaleSoftClip(color.rgb); +	//color.rgb = atmosTransport(color.rgb); +	//color.rgb = scaleSoftClip(color.rgb);  	//color.a = spec * sunAngle2;  	//wavef.z *= 0.1f; @@ -161,5 +167,5 @@ void main()  	frag_data[0] = vec4(color.rgb, 0.5); // diffuse  	frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec -	frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace +	frag_data[2] = vec4(encode_normal(screenspacewavef), 0.0, 0.0); // normalxyz, displace  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 3d39394c32..466714c108 100755 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -300,7 +300,6 @@ void main()  	vec3 col;  	float bloom = 0.0; -	if (diffuse.a < 0.9)  	{  		vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); @@ -331,22 +330,19 @@ void main()  			col += spec_contrib;  		} +		col = mix(col, diffuse.rgb, diffuse.a); +  		if (envIntensity > 0.0)  		{ //add environmentmap  			vec3 env_vec = env_mat * refnormpersp;  			col = mix(col.rgb, pow(textureCube(environmentMap, env_vec).rgb, vec3(2.2)) * 2.2,  -				max(envIntensity-diffuse.a*2.0, 0.0));  +				envIntensity);   		}  		col = atmosLighting(col);  		col = scaleSoftClip(col); - -		col = mix(col, diffuse.rgb, diffuse.a); -	} -	else -	{ -		col = diffuse.rgb;  	} +	  	frag_color.rgb = col;  	frag_color.a = bloom; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 6a79e68c6a..0226efa944 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -51,7 +51,7 @@  #include "llviewerregion.h"  #include "llviewerwindow.h"  #include "llviewershadermgr.h" - +#include "llviewertexture.h"  #define LL_MAX_INDICES_COUNT 1000000 @@ -167,13 +167,11 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  	//special value to indicate uninitialized position  	mIndicesIndex	= 0xFFFFFFFF; -	mIndexInTex[LLRender::DIFFUSE_MAP]  =  -	mIndexInTex[LLRender::NORMAL_MAP]   =  -	mIndexInTex[LLRender::SPECULAR_MAP] = 0; - -	mTexture[LLRender::DIFFUSE_MAP]		=  -	mTexture[LLRender::NORMAL_MAP]		=  -	mTexture[LLRender::SPECULAR_MAP]		= NULL; +	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i) +	{ +		mIndexInTex[i] = 0; +		mTexture[i] = NULL; +	}  	mTEOffset		= -1;  	mTextureIndex = 255; @@ -201,21 +199,14 @@ void LLFace::destroy()  		gPipeline.checkReferences(this);  	} -	if(!mTexture[LLRender::DIFFUSE_MAP].isNull()) +	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)  	{ -		mTexture[LLRender::DIFFUSE_MAP]->removeFace(LLRender::DIFFUSE_MAP, this) ; +		if(mTexture[i].notNull()) +		{ +			mTexture[i]->removeFace(i, this) ; +		}  	} -	if(!mTexture[LLRender::NORMAL_MAP].isNull()) -	{ -		mTexture[LLRender::NORMAL_MAP]->removeFace(LLRender::NORMAL_MAP, this) ; -	} - -	if(!mTexture[LLRender::SPECULAR_MAP].isNull()) -	{ -		mTexture[LLRender::SPECULAR_MAP]->removeFace(LLRender::SPECULAR_MAP, this) ; -	} -  	if (isState(LLFace::PARTICLE))  	{  		LLVOPartGroup::freeVBSlot(getGeomIndex()/4); @@ -253,7 +244,7 @@ void LLFace::destroy()  	}  	setDrawInfo(NULL); -		 +			  	mDrawablep = NULL;  	mVObjp = NULL;  } @@ -306,29 +297,16 @@ void LLFace::setPool(LLFacePool* new_pool, LLViewerTexture *texturep)  	setTexture(texturep) ;  } -void LLFace::setTexture(LLViewerTexture* tex)  -{ -	setTexture(LLRender::DIFFUSE_MAP, tex); -} - -void LLFace::setNormalMap(LLViewerTexture* tex)  -{ -	setTexture(LLRender::NORMAL_MAP, tex); -} - -void LLFace::setSpecularMap(LLViewerTexture* tex)  -{ -	setTexture(LLRender::SPECULAR_MAP, tex); -} -  void LLFace::setTexture(U32 ch, LLViewerTexture* tex)   { +	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); +  	if(mTexture[ch] == tex)  	{  		return ;  	} -	if(!mTexture[ch].isNull()) +	if(mTexture[ch].notNull())  	{  		mTexture[ch]->removeFace(ch, this) ;  	}	 @@ -341,26 +319,53 @@ void LLFace::setTexture(U32 ch, LLViewerTexture* tex)  	mTexture[ch] = tex ;  } +void LLFace::setTexture(LLViewerTexture* tex)  +{ +	setDiffuseMap(tex); +} + +void LLFace::setDiffuseMap(LLViewerTexture* tex) +{ +	setTexture(LLRender::DIFFUSE_MAP, tex); +} + +void LLFace::setNormalMap(LLViewerTexture* tex) +{ +	setTexture(LLRender::NORMAL_MAP, tex); +} + +void LLFace::setSpecularMap(LLViewerTexture* tex) +{ +	setTexture(LLRender::SPECULAR_MAP, tex); +} +  void LLFace::dirtyTexture()  {  	LLDrawable* drawablep = getDrawable(); -	if (mVObjp.notNull() && mVObjp->getVolume() &&  -		!mTexture[LLRender::DIFFUSE_MAP].isNull() && (mTexture[LLRender::DIFFUSE_MAP]->getComponents() == 4)) -	{ //dirty texture on an alpha object should be treated as an LoD update -		LLVOVolume* vobj = drawablep->getVOVolume(); -		if (vobj) +	if (mVObjp.notNull() && mVObjp->getVolume()) +	{ +		for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)  		{ -			vobj->mLODChanged = TRUE; +			if (mTexture[ch].notNull() && mTexture[ch]->getComponents() == 4) +			{ //dirty texture on an alpha object should be treated as an LoD update +				LLVOVolume* vobj = drawablep->getVOVolume(); +				if (vobj) +				{ +					vobj->mLODChanged = TRUE; +				} +				gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE); +			}  		} -		gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE); -	}		 +	}  	gPipeline.markTextured(drawablep);  }  void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)  { +	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); +	  	if(mTexture[ch] == new_texture)  	{  		return ; @@ -371,9 +376,16 @@ void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)  		llerrs << "Can not switch to a null texture." << llendl;  		return;  	} + +	llassert(mTexture[ch].notNull()); +  	new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize()) ; -	getViewerObject()->changeTEImage(mTEOffset, new_texture) ; +	if (ch == LLRender::DIFFUSE_MAP) +	{ +		getViewerObject()->changeTEImage(mTEOffset, new_texture) ; +	} +  	setTexture(ch, new_texture) ;	  	dirtyTexture();  } @@ -582,8 +594,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)  /* removed in lieu of raycast uv detection  void LLFace::renderSelectedUV()  { -	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLGLTexture::BOOST_UI); -	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLGLTexture::BOOST_UI); +	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLViewerTexture::BOOST_UI); +	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLViewerTexture::BOOST_UI);  	LLGLSUVSelect object_select; @@ -1612,11 +1624,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			U8 tex_mode = 0; -			if (isState(TEXTURE_ANIM)) -			{ +			bool tex_anim = false; +  				LLVOVolume* vobj = (LLVOVolume*) (LLViewerObject*) mVObjp;	  				tex_mode = vobj->mTexAnimMode; +			if (vobj->mTextureAnimp) +			{ //texture animation is in play, override specular and normal map tex coords with diffuse texcoords +				tex_anim = true; +			} + +			if (isState(TEXTURE_ANIM)) +			{  				if (!tex_mode)  				{  					clearState(TEXTURE_ANIM); @@ -1652,7 +1671,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			}  			bool do_tex_mat = tex_mode && mTextureMatrix; - +						  			if (!do_bump)  			{ //not bump mapped, might be able to do a cheap update  				mVertexBuffer->getTexCoord0Strider(tex_coords0, mGeomIndex, mGeomCount); @@ -1769,9 +1788,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			else  			{ //bump mapped or has material, just do the whole expensive loop  				LLFastTimer t(FTM_FACE_TEX_DEFAULT); - +				  				std::vector<LLVector2> bump_tc; -		 +  				if (mat)  				{ //writing out normal and specular texture coordinates, not bump offsets  					do_bump = false; @@ -1790,7 +1809,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  							if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1))  							{  								mVertexBuffer->getTexCoord1Strider(dst, mGeomIndex, mGeomCount, map_range); -								if (mat) +								if (mat && !tex_anim)  								{  									r  = mat->getNormalRotation();  									mat->getNormalOffset(os, ot); @@ -1810,7 +1829,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  							if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD2))  							{  								mVertexBuffer->getTexCoord2Strider(dst, mGeomIndex, mGeomCount, map_range); -								if (mat) +								if (mat && !tex_anim)  								{  									r  = mat->getSpecularRotation();  									mat->getSpecularOffset(os, ot); @@ -1828,55 +1847,55 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  					} -				for (S32 i = 0; i < num_vertices; i++) -				{	 -					LLVector2 tc(vf.mTexCoords[i]); +					for (S32 i = 0; i < num_vertices; i++) +					{	 +						LLVector2 tc(vf.mTexCoords[i]); -					LLVector4a& norm = vf.mNormals[i]; +						LLVector4a& norm = vf.mNormals[i]; -					LLVector4a& center = *(vf.mCenter); +						LLVector4a& center = *(vf.mCenter); -					if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) -					{ -						LLVector4a vec = vf.mPositions[i]; +						if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) +						{ +							LLVector4a vec = vf.mPositions[i]; -						vec.mul(scalea); +							vec.mul(scalea); -						switch (texgen) -						{ -							case LLTextureEntry::TEX_GEN_PLANAR: -								planarProjection(tc, norm, center, vec); -								break; -							case LLTextureEntry::TEX_GEN_SPHERICAL: -								sphericalProjection(tc, norm, center, vec); -								break; -							case LLTextureEntry::TEX_GEN_CYLINDRICAL: -								cylindricalProjection(tc, norm, center, vec); -								break; -							default: -								break; -						}		 -					} +							switch (texgen) +							{ +								case LLTextureEntry::TEX_GEN_PLANAR: +									planarProjection(tc, norm, center, vec); +									break; +								case LLTextureEntry::TEX_GEN_SPHERICAL: +									sphericalProjection(tc, norm, center, vec); +									break; +								case LLTextureEntry::TEX_GEN_CYLINDRICAL: +									cylindricalProjection(tc, norm, center, vec); +									break; +								default: +									break; +							}		 +						} -					if (tex_mode && mTextureMatrix) -					{ -						LLVector3 tmp(tc.mV[0], tc.mV[1], 0.f); -						tmp = tmp * *mTextureMatrix; -						tc.mV[0] = tmp.mV[0]; -						tc.mV[1] = tmp.mV[1]; -					} -					else -					{ -						xform(tc, cos_ang, sin_ang, os, ot, ms, mt); -					} +						if (tex_mode && mTextureMatrix) +						{ +							LLVector3 tmp(tc.mV[0], tc.mV[1], 0.f); +							tmp = tmp * *mTextureMatrix; +							tc.mV[0] = tmp.mV[0]; +							tc.mV[1] = tmp.mV[1]; +						} +						else +						{ +							xform(tc, cos_ang, sin_ang, os, ot, ms, mt); +						}  						*dst++ = tc; -					if (do_bump) -					{ -						bump_tc.push_back(tc); +						if (do_bump) +						{ +							bump_tc.push_back(tc); +						}  					}  				} -				}  				if (map_range)  				{ @@ -2016,11 +2035,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			LLFastTimer t(FTM_FACE_GEOM_BINORMAL);  			mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, map_range);  			F32* binormals = (F32*) binorm.get(); -		 +			  			mVObjp->getVolume()->genBinormals(f);  			for (S32 i = 0; i < num_vertices; i++) -			{	 +			{  				LLVector4a binormal;  				mat_normal.rotate(vf.mBinormals[i], binormal);  				binormal.normalize3fast(); @@ -2566,11 +2585,11 @@ LLVector3 LLFace::getPositionAgent() const  }  LLViewerTexture* LLFace::getTexture(U32 ch) const -	{ +{  	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);  	return mTexture[ch] ; -	} +}  void LLFace::setVertexBuffer(LLVertexBuffer* buffer)  { | 
