summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl11
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl11
-rwxr-xr-xindra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl13
-rwxr-xr-xindra/newview/app_settings/shaders/class1/objects/simpleV.glsl12
-rwxr-xr-xindra/newview/lldrawpool.cpp45
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