diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-11-19 11:38:36 (GMT) |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-11-19 11:57:48 (GMT) |
commit | 72f161739b270b01807f97cd853030440f0fd430 (patch) | |
tree | 430f86276b70fcc59a839eeff1d7c1b585026017 /src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | |
parent | 06d60696fcc88f058b53d08785cc01a580dfb4ed (diff) | |
download | Qt-72f161739b270b01807f97cd853030440f0fd430.zip Qt-72f161739b270b01807f97cd853030440f0fd430.tar.gz Qt-72f161739b270b01807f97cd853030440f0fd430.tar.bz2 |
Fix possible corrupted text when gl glyph cache becomes full
When the OpenGL glyph cache filled up (the max texture size on the
hardware was exceeded) the characters would be drawn as black blocks
instead. As a work-around for this, the cache will now be cleared and
repopulated whenever this happens, meaning that once in a while (when
a lot of different glyphs have been drawn in a font) there will be a
performance hit. A more complete solution is described in QTBUG-13784,
but this requires so much refactoring that it was deemed too risky for
a patch release. This patch fixes the problem with a small penalty
and low risk.
Task-number: QT-3971
Reviewed-by: Samuel
Diffstat (limited to 'src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp')
-rw-r--r-- | src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 28e8c40..705ad09 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -78,7 +78,7 @@ void QGLTextureGlyphCache::setContext(QGLContext *context) SLOT(contextDestroyed(const QGLContext*))); } -QGLTextureGlyphCache::~QGLTextureGlyphCache() +void QGLTextureGlyphCache::clear() { if (ctx) { QGLShareContextScope scope(ctx); @@ -88,7 +88,24 @@ QGLTextureGlyphCache::~QGLTextureGlyphCache() if (m_width || m_height) glDeleteTextures(1, &m_texture); + + m_fbo = 0; + m_texture = 0; + m_width = 0; + m_height = 0; + m_w = 0; + m_h = 0; + m_cx = 0; + m_cy = 0; + m_currentRowHeight = 0; + coords.clear(); } + +} + +QGLTextureGlyphCache::~QGLTextureGlyphCache() +{ + clear(); } void QGLTextureGlyphCache::createTextureData(int width, int height) |