diff options
Diffstat (limited to 'indra/newview')
5 files changed, 91 insertions, 1 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index 3c026796c8..7e83389f6e 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -26,6 +26,13 @@  uniform mat3 normal_matrix;  uniform mat4 texture_matrix0;  uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( +  1, 0, 0, 0, +  0,-1, 0, 0, +  0, 0, 1, 0, +  0, 0, 0, 1 +);   ATTRIBUTE vec3 position;  ATTRIBUTE vec4 diffuse_color; @@ -44,6 +51,10 @@ void main()  	//transform vertex  	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);   	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; +  if(invert_tex_y)  +	{ +		vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; +	}  	passTextureIndex();  	vary_normal = normalize(normal_matrix * normal); diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 8e899e3e0f..2595712882 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -26,6 +26,13 @@  uniform mat4 texture_matrix0;  uniform mat4 modelview_matrix;  uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( +  1, 0, 0, 0, +  0,-1, 0, 0, +  0, 0, 1, 0, +  0, 0, 0, 1 +);  ATTRIBUTE vec3 position; @@ -62,6 +69,10 @@ void main()  #endif  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; +  if(invert_tex_y)  +	{ +		vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; +	}  	calcAtmospherics(pos.xyz); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl index fc20d3270e..a8efcd9857 100755 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl @@ -26,6 +26,14 @@  uniform mat4 texture_matrix0;  uniform mat4 modelview_matrix;  uniform mat4 modelview_projection_matrix; + +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( +  1, 0, 0, 0, +  0,-1, 0, 0, +  0, 0, 1, 0, +  0, 0, 0, 1 +);  ATTRIBUTE vec3 position;  void passTextureIndex(); @@ -49,6 +57,11 @@ void main()  	vec4 pos = (modelview_matrix * vert);  	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; +   +  if(invert_tex_y)  +	{ +		vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; +	}  	calcAtmospherics(pos.xyz); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl index 37a20383e2..c744dc1397 100755 --- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl @@ -27,6 +27,13 @@ uniform mat3 normal_matrix;  uniform mat4 texture_matrix0;  uniform mat4 modelview_matrix;  uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( +  1, 0, 0, 0, +  0,-1, 0, 0, +  0, 0, 1, 0, +  0, 0, 0, 1 +);   ATTRIBUTE vec3 position;  void passTextureIndex(); @@ -51,7 +58,10 @@ void main()  	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0, 0, 1)).xy; -	 +	if(invert_tex_y)  +	{ +		vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; +	}  	vec3 norm = normalize(normal_matrix * normal); diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index f74164aea6..a6cf917cbd 100755 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -473,6 +473,10 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba  				if (params.mTextureList[i].notNull())  				{  					gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); +					if (LLViewerTexture::MEDIA_TEXTURE == params.mTextureList[i]->getType()) +					{ +						gGL.setInverseTexCoordByY(true); +					}  				}  			}  		} @@ -482,13 +486,54 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba  			{  				params.mTexture->addTextureStats(params.mVSize);  				gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; + +				if (!gPipeline.mVertexShadersEnabled) +				{ +					if (LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType() && !params.mTextureMatrix) +					{ +						static const float fIdntInvY[] = { +							1, 0, 0, 0, +							0, -1, 0, 0, +							0, 0, 1, 0, +							0, 0, 0, 1 +						}; + +						gGL.getTexUnit(0)->activate(); +						gGL.matrixMode(LLRender::MM_TEXTURE); +						gGL.loadMatrix((GLfloat*)fIdntInvY); +						gPipeline.mTextureMatrixOps++; + +						tex_setup = true; +					} +				} +				else +				{ +					gGL.setInverseTexCoordByY(LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType()); +				} +  				if (params.mTextureMatrix)  				{  					tex_setup = true;  					gGL.getTexUnit(0)->activate();  					gGL.matrixMode(LLRender::MM_TEXTURE);  					gGL.loadMatrix((GLfloat*) params.mTextureMatrix->mMatrix); + +					if (LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType() && !gPipeline.mVertexShadersEnabled) +					{ +						static const float fIdntInvY[] = { +							1, 0, 0, 0, +							0, -1, 0, 0, +							0, 0, 1, 0, +							0, 0, 0, 1 +						}; + +						gGL.multMatrix(fIdntInvY); +						gPipeline.mMatrixOpCount++; +					} +  					gPipeline.mTextureMatrixOps++; + +					tex_setup = true;  				}  			}  			else | 
