1 /****************************************************************************
2 **
3 ** Copyright (C) 2019 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Quick 3D.
7 **
8 ** $QT_BEGIN_LICENSE:GPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 or (at your option) any later version
20 ** approved by the KDE Free Qt Foundation. The licenses are as published by
21 ** the Free Software Foundation and appearing in the file LICENSE.GPL3
22 ** included in the packaging of this file. Please review the following
23 ** information to ensure the GNU General Public License requirements will
24 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25 **
26 ** $QT_END_LICENSE$
27 **
28 ****************************************************************************/
29 
30 #ifndef QSSGSCENEMANAGER_P_H
31 #define QSSGSCENEMANAGER_P_H
32 
33 //
34 //  W A R N I N G
35 //  -------------
36 //
37 // This file is not part of the Qt API.  It exists purely as an
38 // implementation detail.  This header file may change from version to
39 // version without notice, or even be removed.
40 //
41 // We mean it.
42 //
43 
44 #include <QtCore/QObject>
45 #include <QtCore/QSet>
46 
47 #include <QtQuick3D/private/qtquick3dglobal_p.h>
48 
49 #include "qquick3dobject_p.h"
50 #include "qquick3dnode_p.h"
51 
52 QT_BEGIN_NAMESPACE
53 
54 class QSGDynamicTexture;
55 class QQuickWindow;
56 class QSSGBufferManager;
57 
58 class Q_QUICK3D_PRIVATE_EXPORT QQuick3DSceneManager : public QObject
59 {
60     Q_OBJECT
61 public:
62     explicit QQuick3DSceneManager(QObject *parent = nullptr);
63     ~QQuick3DSceneManager() override;
64 
65     void setWindow(QQuickWindow *window);
66     QQuickWindow *window();
67 
68     void dirtyItem(QQuick3DObject *item);
69     void cleanup(QSSGRenderGraphObject *item);
70 
71     void polishItems();
72     void forcePolish();
73     void sync();
74 
75     void updateDirtyNodes();
76     void updateDirtyNode(QQuick3DObject *object);
77     void updateDirtyResource(QQuick3DObject *resourceObject);
78     void updateDirtySpatialNode(QQuick3DNode *spatialNode);
79     void updateBoundingBoxes(const QSSGRef<QSSGBufferManager> &mgr);
80 
81     QQuick3DObject *lookUpNode(const QSSGRenderGraphObject *node) const;
82 
83     void cleanupNodes();
84 
85     QQuick3DObject *dirtySpatialNodeList;
86     QQuick3DObject *dirtyResourceList;
87     QQuick3DObject *dirtyImageList;
88     QList<QQuick3DObject *> dirtyLightList;
89     QList<QQuick3DObject *> dirtyBoundingBoxList;
90     QList<QSSGRenderGraphObject *> cleanupNodeList;
91     QSet<QQuick3DObject *> parentlessItems;
92     QVector<QSGDynamicTexture *> qsgDynamicTextures;
93     QHash<const QSSGRenderGraphObject *, QQuick3DObject *> m_nodeMap;
94     QQuickWindow *m_window = nullptr;
95     friend QQuick3DObject;
96 
97 Q_SIGNALS:
98     void needsUpdate();
99     void windowChanged();
100 };
101 
102 QT_END_NAMESPACE
103 
104 QML_DECLARE_TYPE(QQuick3DSceneManager)
105 
106 #endif // QSSGSCENEMANAGER_P_H
107