diff options
-rw-r--r-- | src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp | 12 | ||||
-rw-r--r-- | src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h | 11 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp index 9ef0d50dfc..16745c18d5 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlUseGlyphCacheWorkaround, QML_USE_GLYPHCACHE_WORKAROUND) +DEFINE_BOOL_CONFIG_OPTION(qsgPreferFullSizeGlyphCacheTextures, QSG_PREFER_FULLSIZE_GLYPHCACHE_TEXTURES) #if !defined(QSG_DEFAULT_DISTANCEFIELD_GLYPH_CACHE_PADDING) # define QSG_DEFAULT_DISTANCEFIELD_GLYPH_CACHE_PADDING 2 @@ -491,6 +492,17 @@ bool QSGDefaultDistanceFieldGlyphCache::useTextureUploadWorkaround() const return useWorkaround; } +bool QSGDefaultDistanceFieldGlyphCache::createFullSizeTextures() const +{ + static bool set = false; + static bool fullSize = false; + if (!set) { + fullSize = qsgPreferFullSizeGlyphCacheTextures() && glyphCount() > QT_DISTANCEFIELD_HIGHGLYPHCOUNT; + set = true; + } + return fullSize; +} + int QSGDefaultDistanceFieldGlyphCache::maxTextureSize() const { if (!m_maxTextureSize) diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h index 3b64eadc6f..cffe02330a 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h @@ -62,6 +62,7 @@ public: bool useTextureResizeWorkaround() const; bool useTextureUploadWorkaround() const; + bool createFullSizeTextures() const; int maxTextureSize() const; void setMaxTextureCount(int max) { m_maxTextureCount = max; } @@ -75,7 +76,7 @@ private: QDistanceField image; int padding; - TextureInfo() : texture(0), padding(-1) + TextureInfo(const QRect &preallocRect = QRect()) : texture(0), allocatedArea(preallocRect), padding(-1) { } }; @@ -84,8 +85,12 @@ private: TextureInfo *textureInfo(int index) { - for (int i = m_textures.count(); i <= index; ++i) - m_textures.append(TextureInfo()); + for (int i = m_textures.count(); i <= index; ++i) { + if (createFullSizeTextures()) + m_textures.append(QRect(0, 0, maxTextureSize(), maxTextureSize())); + else + m_textures.append(TextureInfo()); + } return &m_textures[index]; } |