diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2016-06-09 14:58:42 +0900 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-06-11 10:16:12 +0000 |
commit | 86fef4ea205f3001305a6122bfa127b196e2d345 (patch) | |
tree | 21ea2af7c93bfea93fabebddb253e730443f9279 | |
parent | c55d703ea00de67793765f8da7ca17dfb54281fc (diff) |
tdf#99795 drawAlphaBitmap should scale the bitmap if necessary
drawAlphaBitmap didn't use a high quality scaler for scaling
the texture but used the default scaling method in OpenGL (either
GL_NEAREST or GL_LINEAR, whichever is defined when texture
is created) which are low quality scalers - especially when
downscaling textures.
Change-Id: I6236b2ee92b9e5044b176a40a444027072b09b58
(cherry picked from commit 19baa61e1d7b140b9e24717f7080617ab3d324d4)
Reviewed-on: https://gerrit.libreoffice.org/26100
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
-rw-r--r-- | vcl/opengl/gdiimpl.cxx | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index 39ae80640a14..188db65bfeb0 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -2144,12 +2144,25 @@ bool OpenGLSalGraphicsImpl::drawAlphaBitmap( const OpenGLSalBitmap& rBitmap = static_cast<const OpenGLSalBitmap&>(rSalBitmap); const OpenGLSalBitmap& rAlpha = static_cast<const OpenGLSalBitmap&>(rAlphaBitmap); - OpenGLTexture& rTexture( rBitmap.GetTexture() ); - OpenGLTexture& rAlphaTex( rAlpha.GetTexture() ); + OpenGLTexture& rTexture(rBitmap.GetTexture()); + OpenGLTexture& rAlphaTexture(rAlpha.GetTexture()); VCL_GL_INFO( "::drawAlphaBitmap" ); PreDraw(); - DrawTextureWithMask( rTexture, rAlphaTex, rPosAry ); + + if (rPosAry.mnSrcWidth != rPosAry.mnDestWidth || + rPosAry.mnSrcHeight != rPosAry.mnDestHeight) + { + basegfx::B2DPoint aNull(rPosAry.mnDestX,rPosAry.mnDestY); + basegfx::B2DPoint aX(rPosAry.mnDestX + rPosAry.mnDestWidth, rPosAry.mnDestY); + basegfx::B2DPoint aY(rPosAry.mnDestX, rPosAry.mnDestY + rPosAry.mnDestHeight); + DrawTransformedTexture(rTexture, rAlphaTexture, aNull, aX, aY); + } + else + { + DrawTextureWithMask( rTexture, rAlphaTexture, rPosAry ); + } + PostDraw(); return true; } |