summaryrefslogtreecommitdiff
path: root/recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch')
-rw-r--r--recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch b/recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch
new file mode 100644
index 0000000000..548ed9246f
--- /dev/null
+++ b/recipes/qt4/qt-4.6.0/1205-Fix-text-rendering-on-GL2-paint-engine.patch
@@ -0,0 +1,83 @@
+From a8c3ed1dbe209488866e687d1a63c6143a04cfe0 Mon Sep 17 00:00:00 2001
+From: Tom Cooksey <thomas.cooksey@nokia.com>
+Date: Wed, 23 Dec 2009 10:38:56 +0100
+Subject: [PATCH 1205/1244] Fix text rendering on GL2 paint engine
+
+If you draw with a brush, then draw a pixmap, then draw with the
+same brush, the GL2 engine wouldn't update the fragment shader to
+use the brush. This is because it detected the brush hadn't changed
+and so didn't need updating. To fix this, we now set the current
+brush to noBrush when drawing an image/pixmap so the engine knows
+it needs to update the GL state for the brush.
+
+Reviewed-By: Kim
+---
+ .../gl2paintengineex/qpaintengineex_opengl2.cpp | 15 ++++++++++-----
+ .../gl2paintengineex/qpaintengineex_opengl2_p.h | 1 +
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+index f52ed92..32fa3dc 100644
+--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
++++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+@@ -388,21 +388,24 @@ inline QColor qt_premultiplyColor(QColor c, GLfloat opacity)
+
+ void QGL2PaintEngineExPrivate::setBrush(const QBrush& brush)
+ {
+- Q_ASSERT(brush.style() != Qt::NoBrush);
+-
+ if (qbrush_fast_equals(currentBrush, brush))
+ return;
+
++ const Qt::BrushStyle newStyle = qbrush_style(brush);
++ Q_ASSERT(newStyle != Qt::NoBrush);
++
+ currentBrush = brush;
++ brushUniformsDirty = true; // All brushes have at least one uniform
++
++ if (newStyle > Qt::SolidPattern)
++ brushTextureDirty = true;
+
+- brushTextureDirty = true;
+- brushUniformsDirty = true;
+ if (currentBrush.style() == Qt::TexturePattern
+ && qHasPixmapTexture(brush) && brush.texture().isQBitmap())
+ {
+ shaderManager->setSrcPixelType(QGLEngineShaderManager::TextureSrcWithPattern);
+ } else {
+- shaderManager->setSrcPixelType(currentBrush.style());
++ shaderManager->setSrcPixelType(newStyle);
+ }
+ shaderManager->optimiseForBrushTransform(currentBrush.transform());
+ }
+@@ -700,6 +703,7 @@ static inline void setCoords(GLfloat *coords, const QGLRect &rect)
+ void QGL2PaintEngineExPrivate::drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque, bool pattern)
+ {
+ // Setup for texture drawing
++ currentBrush = noBrush;
+ shaderManager->setSrcPixelType(pattern ? QGLEngineShaderManager::PatternSrc : QGLEngineShaderManager::ImageSrc);
+ if (prepareForDraw(opaque))
+ shaderManager->currentProgram()->setUniformValue(location(QGLEngineShaderManager::ImageTexture), QT_IMAGE_TEXTURE_UNIT);
+@@ -1782,6 +1786,7 @@ void QGL2PaintEngineEx::drawPixmaps(const QDrawPixmaps::Data *drawingData, int d
+ state()->renderHints & QPainter::SmoothPixmapTransform, texture->id);
+
+ // Setup for texture drawing
++ d->currentBrush = d->noBrush;
+ d->shaderManager->setSrcPixelType(isBitmap ? QGLEngineShaderManager::PatternSrc : QGLEngineShaderManager::ImageSrc);
+ if (d->prepareForDraw(isOpaque))
+ d->shaderManager->currentProgram()->setUniformValue(d->location(QGLEngineShaderManager::ImageTexture), QT_IMAGE_TEXTURE_UNIT);
+diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+index f1ec6e6..8de4a82 100644
+--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
++++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+@@ -244,6 +244,7 @@ public:
+ uint maxClip;
+
+ QBrush currentBrush; // May not be the state's brush!
++ const QBrush noBrush;
+
+ GLfloat inverseScale;
+
+--
+1.6.5
+