diff options
Diffstat (limited to 'src/plugins/scenegraph/openvg')
9 files changed, 35 insertions, 16 deletions
diff --git a/src/plugins/scenegraph/openvg/openvg.pro b/src/plugins/scenegraph/openvg/openvg.pro index 6d5b190b37..43c2636343 100644 --- a/src/plugins/scenegraph/openvg/openvg.pro +++ b/src/plugins/scenegraph/openvg/openvg.pro @@ -31,7 +31,6 @@ HEADERS += \ qsgopenvghelpers.h \ qsgopenvgfontglyphcache.h \ qsgopenvgpainternode.h \ - qsgopenvgspritenode.h \ qsgopenvgrenderable.h \ qopenvgoffscreensurface.h @@ -52,6 +51,10 @@ SOURCES += \ qsgopenvghelpers.cpp \ qsgopenvgfontglyphcache.cpp \ qsgopenvgpainternode.cpp \ - qsgopenvgspritenode.cpp \ qsgopenvgrenderable.cpp \ qopenvgoffscreensurface.cpp + +qtConfig(quick-sprite) { + HEADERS += qsgopenvgspritenode.h + SOURCES += qsgopenvgspritenode.cpp +} diff --git a/src/plugins/scenegraph/openvg/qsgopenvgcontext.cpp b/src/plugins/scenegraph/openvg/qsgopenvgcontext.cpp index 41fce7c7fc..76ebb7c4ee 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgcontext.cpp +++ b/src/plugins/scenegraph/openvg/qsgopenvgcontext.cpp @@ -45,7 +45,9 @@ #include "qsgopenvgglyphnode_p.h" #include "qsgopenvgfontglyphcache.h" #include "qsgopenvgpainternode.h" +#if QT_CONFIG(quick_sprite) #include "qsgopenvgspritenode.h" +#endif #include "qopenvgcontext_p.h" @@ -171,11 +173,12 @@ int QSGOpenVGRenderContext::maxTextureSize() const return qMin(width, height); } - +#if QT_CONFIG(quick_sprite) QSGSpriteNode *QSGOpenVGContext::createSpriteNode() { return new QSGOpenVGSpriteNode(); } +#endif QSGRendererInterface *QSGOpenVGContext::rendererInterface(QSGRenderContext *renderContext) { diff --git a/src/plugins/scenegraph/openvg/qsgopenvgcontext_p.h b/src/plugins/scenegraph/openvg/qsgopenvgcontext_p.h index fa9939a253..31a1e8643f 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgcontext_p.h +++ b/src/plugins/scenegraph/openvg/qsgopenvgcontext_p.h @@ -95,7 +95,9 @@ public: QSurfaceFormat defaultSurfaceFormat() const override; QSGInternalRectangleNode *createInternalRectangleNode() override; QSGInternalImageNode *createInternalImageNode() override; +#if QT_CONFIG(quick_sprite) QSGSpriteNode *createSpriteNode() override; +#endif QSGRendererInterface *rendererInterface(QSGRenderContext *renderContext) override; }; diff --git a/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.cpp b/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.cpp index dd630c776f..df47e920af 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.cpp +++ b/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.cpp @@ -94,7 +94,7 @@ void QSGOpenVGFontGlyphCache::populate(const QVector<quint32> &glyphs) referencedGlyphs.insert(glyphIndex); - if (!m_cachedGlyphs.contains(glyphIndex)) { + if (!m_glyphReferences.contains(glyphIndex)) { newGlyphs.insert(glyphIndex); } } @@ -119,17 +119,9 @@ void QSGOpenVGFontGlyphCache::requestGlyphs(const QSet<quint32> &glyphs) { VGfloat origin[2]; VGfloat escapement[2]; - QRectF metrics; QRawFont rawFont = m_referenceFont; - // Before adding any new glyphs, remove any unused glyphs - for (auto glyph : qAsConst(m_unusedGlyphs)) { - vgClearGlyph(m_font, glyph); - } - for (auto glyph : glyphs) { - m_cachedGlyphs.insert(glyph); - // Calculate the path for the glyph and cache it. QPainterPath path = rawFont.pathForGlyph(glyph); VGPath vgPath; @@ -151,12 +143,23 @@ void QSGOpenVGFontGlyphCache::requestGlyphs(const QSet<quint32> &glyphs) void QSGOpenVGFontGlyphCache::referenceGlyphs(const QSet<quint32> &glyphs) { - m_unusedGlyphs -= glyphs; + for (auto glyph : glyphs) { + if (m_glyphReferences.contains(glyph)) + m_glyphReferences[glyph] += 1; + else + m_glyphReferences.insert(glyph, 1); + } } void QSGOpenVGFontGlyphCache::releaseGlyphs(const QSet<quint32> &glyphs) { - m_unusedGlyphs += glyphs; + for (auto glyph : glyphs) { + int references = m_glyphReferences[glyph] -= 1; + if (references == 0) { + vgClearGlyph(m_font, glyph); + m_glyphReferences.remove(glyph); + } + } } QT_END_NAMESPACE diff --git a/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.h b/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.h index a88d28b0fe..107ec0c892 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.h +++ b/src/plugins/scenegraph/openvg/qsgopenvgfontglyphcache.h @@ -87,8 +87,7 @@ private: int m_glyphCount; VGFont m_font; - QSet<quint32> m_cachedGlyphs; - QSet<quint32> m_unusedGlyphs; + QHash<quint32, int> m_glyphReferences; }; diff --git a/src/plugins/scenegraph/openvg/qsgopenvglayer.h b/src/plugins/scenegraph/openvg/qsgopenvglayer.h index 2af0bfb40f..8deedc3347 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvglayer.h +++ b/src/plugins/scenegraph/openvg/qsgopenvglayer.h @@ -83,6 +83,7 @@ public: void setDevicePixelRatio(qreal ratio) override; void setMirrorHorizontal(bool mirror) override; void setMirrorVertical(bool mirror) override; + void setSamples(int) override { } public slots: void markDirtyTexture() override; diff --git a/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.cpp b/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.cpp index 8aa179f705..41606c653a 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.cpp +++ b/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.cpp @@ -43,7 +43,9 @@ #include "qsgopenvgpublicnodes.h" #include "qsgopenvgglyphnode_p.h" #include "qsgopenvgpainternode.h" +#if QT_CONFIG(quick_sprite) #include "qsgopenvgspritenode.h" +#endif #include "qsgopenvgrenderable.h" #include "qopenvgcontext_p.h" @@ -209,6 +211,7 @@ void QSGOpenVGNodeVisitor::endVisit(QSGRootNode *) { } +#if QT_CONFIG(quick_sprite) bool QSGOpenVGNodeVisitor::visit(QSGSpriteNode *node) { renderRenderableNode(static_cast<QSGOpenVGSpriteNode*>(node)); @@ -218,6 +221,7 @@ bool QSGOpenVGNodeVisitor::visit(QSGSpriteNode *node) void QSGOpenVGNodeVisitor::endVisit(QSGSpriteNode *) { } +#endif bool QSGOpenVGNodeVisitor::visit(QSGRenderNode *) { diff --git a/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.h b/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.h index 4805d63024..c6461ca67d 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.h +++ b/src/plugins/scenegraph/openvg/qsgopenvgnodevisitor.h @@ -73,8 +73,10 @@ public: void endVisit(QSGGlyphNode *) override; bool visit(QSGRootNode *) override; void endVisit(QSGRootNode *) override; +#if QT_CONFIG(quick_sprite) bool visit(QSGSpriteNode *) override; void endVisit(QSGSpriteNode *) override; +#endif bool visit(QSGRenderNode *) override; void endVisit(QSGRenderNode *) override; diff --git a/src/plugins/scenegraph/openvg/qsgopenvgspritenode.h b/src/plugins/scenegraph/openvg/qsgopenvgspritenode.h index 3ade2ef8ad..d47b389a0b 100644 --- a/src/plugins/scenegraph/openvg/qsgopenvgspritenode.h +++ b/src/plugins/scenegraph/openvg/qsgopenvgspritenode.h @@ -43,6 +43,8 @@ #include <private/qsgadaptationlayer_p.h> #include "qsgopenvgrenderable.h" +QT_REQUIRE_CONFIG(quick_sprite); + QT_BEGIN_NAMESPACE class QSGOpenVGTexture; class QSGOpenVGSpriteNode : public QSGSpriteNode, public QSGOpenVGRenderable |