Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsgsoftwarerenderablenodeupdater_p.h
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
4#ifndef QSGSOFTWARERENDERABLENODEUPDATER_H
5#define QSGSOFTWARERENDERABLENODEUPDATER_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
20
21#include <private/qsgadaptationlayer_p.h>
22
23#include <QTransform>
24#include <QStack>
25#include <QRectF>
26
28
30{
31public:
34
35 bool visit(QSGTransformNode *) override;
36 void endVisit(QSGTransformNode *) override;
37 bool visit(QSGClipNode *) override;
38 void endVisit(QSGClipNode *) override;
39 bool visit(QSGGeometryNode *) override;
40 void endVisit(QSGGeometryNode *) override;
41 bool visit(QSGOpacityNode *) override;
42 void endVisit(QSGOpacityNode *) override;
43 bool visit(QSGInternalImageNode *) override;
44 void endVisit(QSGInternalImageNode *) override;
45 bool visit(QSGPainterNode *) override;
46 void endVisit(QSGPainterNode *) override;
47 bool visit(QSGInternalRectangleNode *) override;
48 void endVisit(QSGInternalRectangleNode *) override;
49 bool visit(QSGGlyphNode *) override;
50 void endVisit(QSGGlyphNode *) override;
51 bool visit(QSGRootNode *) override;
52 void endVisit(QSGRootNode *) override;
53#if QT_CONFIG(quick_sprite)
54 bool visit(QSGSpriteNode *) override;
55 void endVisit(QSGSpriteNode *) override;
56#endif
57 bool visit(QSGRenderNode *) override;
58 void endVisit(QSGRenderNode *) override;
59
60 void updateNodes(QSGNode *node, bool isNodeRemoved = false);
61
62private:
63 struct NodeState {
64 float opacity;
65 QRegion clip;
66 bool hasClip;
68 QSGNode *parent;
69 };
70
71 NodeState currentState(QSGNode *node) const;
72
73 template<class NODE>
74 bool updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node);
75
77 QStack<float> m_opacityState;
78 QStack<QRegion> m_clipState;
79 bool m_hasClip;
80 QStack<QTransform> m_transformState;
81 QHash<QSGNode*,NodeState> m_stateMap;
82};
83
84template<class NODE>
85bool QSGSoftwareRenderableNodeUpdater::updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node)
86{
87 //Check if we already know about node
88 auto renderableNode = m_renderer->renderableNode(node);
89 if (renderableNode == nullptr) {
90 renderableNode = new QSGSoftwareRenderableNode(type, node);
91 m_renderer->addNodeMapping(node, renderableNode);
92 }
93
94 //Update the node
95 renderableNode->setTransform(m_transformState.top());
96 renderableNode->setOpacity(m_opacityState.top());
97 renderableNode->setClipRegion(m_clipState.top(), m_hasClip);
98
99 renderableNode->update();
100 m_stateMap[node] = currentState(node);
101
102 return true;
103}
104
106
107#endif // QSGSOFTWARERENDERABLENODEUPDATER_H
The QRegion class specifies a clip region for a painter.
Definition qregion.h:27
void addNodeMapping(QSGNode *node, QSGSoftwareRenderableNode *renderableNode)
QSGSoftwareRenderableNode * renderableNode(QSGNode *node) const
The QSGClipNode class implements the clipping functionality in the scene graph.
Definition qsgnode.h:221
The QSGGeometryNode class is used for all rendered content in the scene graph.
Definition qsgnode.h:188
\group qtquick-scenegraph-nodes \title Qt Quick Scene Graph Node classes
Definition qsgnode.h:37
The QSGOpacityNode class is used to change opacity of nodes.
Definition qsgnode.h:276
The QSGRenderNode class represents a set of custom rendering commands targeting the graphics API that...
The QSGRootNode is the toplevel root of any scene graph.
Definition qsgnode.h:259
QSGSoftwareRenderableNodeUpdater(QSGAbstractSoftwareRenderer *renderer)
void updateNodes(QSGNode *node, bool isNodeRemoved=false)
The QSGTransformNode class implements transformations in the scene graph.
Definition qsgnode.h:241
T & top()
Returns a reference to the stack's top item.
Definition qstack.h:19
The QTransform class specifies 2D transformations of a coordinate system.
Definition qtransform.h:20
Combined button and popup list for selecting options.
GLenum type
GLuint GLenum GLenum transform
QSvgRenderer * renderer
[0]