diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2015-01-20 15:41:51 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2015-01-27 18:42:48 +0100 |
commit | c44ee2beb3d8bbe932dd8799f818a2c61a078810 (patch) | |
tree | ce2b870621b0d4e7b77a567029f05875c70036bb /vcl/opengl/areaScaleFragmentShader.glsl | |
parent | df290c63451723ae05833cf5f13342d4c93f94cc (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.glsl | 13 |
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 ]; } |