Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qsgopenvgcontext.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
12#if QT_CONFIG(quick_sprite)
13#include "qsgopenvgspritenode.h"
14#endif
15
17
18#include <private/qsgrenderer_p.h>
21
22// polish, animations, sync, render and swap in the render loop
23Q_LOGGING_CATEGORY(QSG_OPENVG_LOG_TIME_RENDERLOOP, "qt.scenegraph.time.renderloop")
24
25QT_BEGIN_NAMESPACE
26
27QSGOpenVGRenderContext::QSGOpenVGRenderContext(QSGContext *context)
28 : QSGRenderContext(context)
29 , m_vgContext(nullptr)
30 , m_glyphCacheManager(nullptr)
31{
32
33}
34
35void QSGOpenVGRenderContext::initialize(const QSGRenderContext::InitParams *params)
36{
37 const InitParams *vgparams = static_cast<const InitParams *>(params);
38 if (vgparams->sType != INIT_PARAMS_MAGIC)
39 qFatal("Invalid OpenVG render context parameters");
40
41 m_vgContext = vgparams->context;
42 QSGRenderContext::initialize(params);
43 emit initialized();
44}
45
47{
48 m_vgContext = nullptr;
49 delete m_glyphCacheManager;
50 m_glyphCacheManager = nullptr;
51 QSGRenderContext::invalidate();
52 emit invalidated();
53}
54
55void QSGOpenVGRenderContext::renderNextFrame(QSGRenderer *renderer)
56{
57 renderer->renderScene();
58}
59
60QSGTexture *QSGOpenVGRenderContext::createTexture(const QImage &image, uint flags) const
61{
62 QImage tmp = image;
63
64 // Make sure image is not larger than maxTextureSize
65 int maxSize = maxTextureSize();
66 if (tmp.width() > maxSize || tmp.height() > maxSize) {
67 tmp = tmp.scaled(qMin(maxSize, tmp.width()), qMin(maxSize, tmp.height()), Qt::IgnoreAspectRatio, Qt::FastTransformation);
68 }
69
70 return new QSGOpenVGTexture(tmp, flags);
71}
72
74{
75 return new QSGOpenVGRenderer(this);
76}
77
78QSGOpenVGContext::QSGOpenVGContext(QObject *parent)
79{
80 Q_UNUSED(parent);
81}
82
84{
85 return new QSGOpenVGRenderContext(this);
86}
87
92
97
99{
100 Q_UNUSED(item);
101 return new QSGOpenVGPainterNode(item);
102}
103
104QSGGlyphNode *QSGOpenVGContext::createGlyphNode(QSGRenderContext *rc, bool preferNativeGlyphNode, int renderTypeQuality)
105{
106 Q_UNUSED(preferNativeGlyphNode);
107 Q_UNUSED(renderTypeQuality);
108 return new QSGOpenVGGlyphNode(rc);
109}
110
115
116QSGLayer *QSGOpenVGContext::createLayer(QSGRenderContext *renderContext)
117{
118 return new QSGOpenVGLayer(renderContext);
119}
120
122{
123 QSurfaceFormat format = QSurfaceFormat::defaultFormat();
124 format.setRenderableType(QSurfaceFormat::OpenVG);
125 format.setMajorVersion(1);
126 return format;
127}
128
133
134QSGInternalImageNode *QSGOpenVGContext::createInternalImageNode(QSGRenderContext *)
135{
137}
138
140{
141 VGint width = vgGeti(VG_MAX_IMAGE_WIDTH);
142 VGint height = vgGeti(VG_MAX_IMAGE_HEIGHT);
143
144 return qMin(width, height);
145}
146
147#if QT_CONFIG(quick_sprite)
148QSGSpriteNode *QSGOpenVGContext::createSpriteNode()
149{
150 return new QSGOpenVGSpriteNode();
151}
152#endif
153
154QSGRendererInterface *QSGOpenVGContext::rendererInterface(QSGRenderContext *renderContext)
155{
156 return static_cast<QSGOpenVGRenderContext *>(renderContext);
157}
158
163
165{
166 return UnknownShadingLanguage;
167}
168
173
178
180{
181 if (!m_glyphCacheManager)
182 m_glyphCacheManager = new QSGOpenVGFontGlyphCacheManager;
183
184 QSGOpenVGFontGlyphCache *cache = m_glyphCacheManager->cache(rawFont);
185 if (!cache) {
186 cache = new QSGOpenVGFontGlyphCache(m_glyphCacheManager, rawFont);
187 m_glyphCacheManager->insertCache(rawFont, cache);
188 }
189
190 return cache;
191}
192
193QT_END_NAMESPACE
QSurfaceFormat defaultSurfaceFormat() const override
QSGNinePatchNode * createNinePatchNode() override
QSGRenderContext * createRenderContext() override
QSGImageNode * createImageNode() override
QSGInternalRectangleNode * createInternalRectangleNode() override
QSGRectangleNode * createRectangleNode() override
QSGPainterNode * createPainterNode(QQuickPaintedItem *item) override
QSGOpenVGGlyphNode(QSGRenderContext *rc)
ShaderSourceTypes shaderSourceType() const override
void renderNextFrame(QSGRenderer *renderer) override
int maxTextureSize() const override
static const int INIT_PARAMS_MAGIC
ShaderType shaderType() const override
GraphicsApi graphicsApi() const override
Returns the graphics API that is in use by the Qt Quick scenegraph.
void initialize(const QSGRenderContext::InitParams *params) override
ShaderCompilationTypes shaderCompilationType() const override
QSGRenderer * createRenderer(QSGRendererInterface::RenderMode renderMode=QSGRendererInterface::RenderMode2D) override
QSGTexture * createTexture(const QImage &image, uint flags) const override
QSGOpenVGFontGlyphCache * glyphCache(const QRawFont &rawFont)
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")