From: Yoann Lopes Date: Mon, 23 May 2011 11:39:53 +0000 (+0200) Subject: Optimize distance-field glyph recycling. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=7aa14bb332a737490698f2d2381877980cdc25ee;p=konrad%2Fqtdeclarative.git Optimize distance-field glyph recycling. Unused glyphs in the cache should not be overwritten if they are immediatly reused after being unreferenced. --- diff --git a/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp b/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp index a21fcce..27da408 100644 --- a/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp +++ b/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp @@ -678,6 +678,15 @@ int QSGDistanceFieldGlyphCache::distanceFieldRadius() const void QSGDistanceFieldGlyphCache::populate(int count, const glyph_t *glyphs) { + // Avoid useless and costly glyph re-generation + if (cacheIsFull() && !m_textureData->unusedGlyphs.isEmpty()) { + for (int i = 0; i < count; ++i) { + glyph_t glyphIndex = glyphs[i]; + if (m_textureData->texCoords.contains(glyphIndex) && m_textureData->unusedGlyphs.contains(glyphIndex)) + m_textureData->unusedGlyphs.remove(glyphIndex); + } + } + for (int i = 0; i < count; ++i) { glyph_t glyphIndex = glyphs[i]; if ((int) glyphIndex >= glyphCount()) {