From 44ee7984fccbeae57e108c1a152050e9d3437174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 13 Feb 2014 21:59:56 +0100 Subject: [PATCH] QOpenGLTextureBlitter: fix source rect when origin is top left This fixes the issue that the blitter required sometimes the texture wrapping to be repeat Change-Id: I86150d008422facf9040873b0983b0e44be9ad24 Reviewed-by: Laszlo Agocs --- src/gui/opengl/qopengltextureblitter.cpp | 5 +++-- .../qopengltextureblitter/qopengltextureblitwindow.cpp | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/opengl/qopengltextureblitter.cpp b/src/gui/opengl/qopengltextureblitter.cpp index 8085089bce9..b776444347f 100644 --- a/src/gui/opengl/qopengltextureblitter.cpp +++ b/src/gui/opengl/qopengltextureblitter.cpp @@ -210,6 +210,7 @@ void QOpenGLTextureBlitterPrivate::blit(GLuint texture, if (textureMatrixUniformState != IdentityFlipped) { QMatrix3x3 flipped; flipped(1,1) = -1; + flipped(1,2) = 1; program->setUniformValue(textureTransformUniformPos, flipped); textureMatrixUniformState = IdentityFlipped; } @@ -375,8 +376,8 @@ QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, qreal y_translate = topLeft.y() / textureSize.height(); if (origin == OriginTopLeft) { - y_translate += (y_translate * 2) + y_scale; - y_scale = y_scale - 1; + y_scale = -y_scale; + y_translate = 1 - y_translate; } QMatrix3x3 matrix; diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp index 503e326f386..8f51f511c98 100644 --- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp @@ -81,6 +81,7 @@ void QOpenGLTextureBlitWindow::render() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); QOpenGLTexture texture(m_image); + texture.setWrapMode(QOpenGLTexture::ClampToEdge); texture.create(); QOpenGLTexture texture_mirrored(m_image_mirrord);