diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2016-02-11 15:57:27 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2016-02-11 17:08:44 +0000 |
commit | 54e3ea8a86a309990f5edf78948bfe18dd2de96b (patch) | |
tree | b4663566575cfe7b36bbb57ebc47cb5cb711432f /vcl/opengl | |
parent | 2f048d891d2a3799e5d11bca90978849726a9ffb (diff) |
tdf#97715 fix inv. scale calculation in DrawTransformedTexture
When image was rotated towards 90 degree the ixscale and iyscale
went towards infinity. That caused problems in fragment shader
areaScaleFastFragmentShader. The problem was with calculation
of destination width and height which didn't take rotation
into account correctly. This commit takes this calculation
from WinSalGraphicsImpl::drawTransformedBitmap.
Change-Id: I30f14a1ecda21ef167e58eda8e2fcef00bdfa2b7
Reviewed-on: https://gerrit.libreoffice.org/22289
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'vcl/opengl')
-rw-r--r-- | vcl/opengl/gdiimpl.cxx | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index fc738ca2ae9f..6676baf040cb 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -1068,8 +1068,13 @@ void OpenGLSalGraphicsImpl::DrawTransformedTexture( // If downscaling at a higher scale ratio, use the area scaling algorithm rather // than plain OpenGL's scaling, for better results. // See OpenGLSalBitmap::ImplScaleArea(). - double ixscale = rTexture.GetWidth() / fabs( rX.getX() - rNull.getX()); - double iyscale = rTexture.GetHeight() / fabs( rY.getY() - rNull.getY()); + + const long nDestWidth = basegfx::fround(basegfx::B2DVector(rX - rNull).getLength()); + const long nDestHeight = basegfx::fround(basegfx::B2DVector(rY - rNull).getLength()); + + const double ixscale = rTexture.GetWidth() / nDestWidth; + const double iyscale = rTexture.GetHeight() / nDestHeight; + bool areaScaling = false; bool fastAreaScaling = false; OUString textureFragmentShader; |