summaryrefslogtreecommitdiff
path: root/vcl/opengl/areaScaleFragmentShader.glsl
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2015-01-20 15:41:51 +0100
committerLuboš Luňák <l.lunak@collabora.com>2015-01-27 18:42:48 +0100
commitc44ee2beb3d8bbe932dd8799f818a2c61a078810 (patch)
treece2b870621b0d4e7b77a567029f05875c70036bb /vcl/opengl/areaScaleFragmentShader.glsl
parentdf290c63451723ae05833cf5f13342d4c93f94cc (diff)
when drawing a transformed bitmap in opengl backend, scale it better
The plain scaling is rather rough, and in fact drawing a scaled bitmap the normal way gives much better results (because OutputDevice pre-scales the bitmap before it's drawn). This one may be a bit slow perhaps, but hopefully nobody there's no code that'd extensively use bitmap drawing with custom transformations (wishful thinking). Change-Id: I83e05307adfaeac0ed0757f1a0b2603f64caf8f8
Diffstat (limited to 'vcl/opengl/areaScaleFragmentShader.glsl')
-rw-r--r--vcl/opengl/areaScaleFragmentShader.glsl13
1 files changed, 13 insertions, 0 deletions
diff --git a/vcl/opengl/areaScaleFragmentShader.glsl b/vcl/opengl/areaScaleFragmentShader.glsl
index 498b0b53ec4b..d72184cc2911 100644
--- a/vcl/opengl/areaScaleFragmentShader.glsl
+++ b/vcl/opengl/areaScaleFragmentShader.glsl
@@ -27,6 +27,12 @@ uniform float ydestconvert;
varying vec2 tex_coord;
+// This mode makes the scaling work like maskedTextureFragmentShader.glsl
+// (instead of like plain textureVertexShader.glsl).
+#ifdef MASKED
+uniform sampler2D mask;
+#endif
+
void main(void)
{
// Convert to pixel coordinates again.
@@ -126,7 +132,14 @@ void main(void)
for( int x = xstart; x <= xend; ++x, ++xpos )
{
vec2 offset = vec2( x * xsrcconvert, y * ysrcconvert );
+#ifndef MASKED
tmp += texture2D( sampler, offset ) * xratio[ xpos ];
+#else
+ vec4 texel;
+ texel = texture2D( sampler, offset );
+ texel.a = 1.0 - texture2D( mask, offset ).r;
+ tmp += texel * xratio[ xpos ];
+#endif
}
sum += tmp * yratio[ ypos ];
}