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
qquick3dreflectionprobe_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QSSGREFLECTIONPROBE_H
7#define QSSGREFLECTIONPROBE_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtQuick3D/private/qquick3dnode_p.h>
21#include <QtQuick3D/private/qquick3dgeometry_p.h>
22#include <QtQuick3D/private/qquick3dmodel_p.h>
23#include <QtQuick3D/private/qquick3ddefaultmaterial_p.h>
24#include <QtQuick3D/private/qquick3dviewport_p.h>
25#include <QtQuick3D/private/qquick3dcubemaptexture_p.h>
26#include <QColor>
27
29
30class Q_QUICK3D_EXPORT QQuick3DReflectionProbe : public QQuick3DNode
31{
32 Q_OBJECT
33 Q_PROPERTY(ReflectionQuality quality READ quality WRITE setQuality NOTIFY qualityChanged)
34 Q_PROPERTY(QColor clearColor READ clearColor WRITE setClearColor NOTIFY clearColorChanged)
35 Q_PROPERTY(ReflectionRefreshMode refreshMode READ refreshMode WRITE setRefreshMode NOTIFY refreshModeChanged)
36 Q_PROPERTY(ReflectionTimeSlicing timeSlicing READ timeSlicing WRITE setTimeSlicing NOTIFY timeSlicingChanged)
37 Q_PROPERTY(bool parallaxCorrection READ parallaxCorrection WRITE setParallaxCorrection NOTIFY parallaxCorrectionChanged)
38 Q_PROPERTY(QVector3D boxSize READ boxSize WRITE setBoxSize NOTIFY boxSizeChanged)
39 Q_PROPERTY(QVector3D boxOffset READ boxOffset WRITE setBoxOffset NOTIFY boxOffsetChanged REVISION(6, 4))
40 Q_PROPERTY(bool debugView READ debugView WRITE setDebugView NOTIFY debugViewChanged REVISION(6, 4))
41 Q_PROPERTY(QQuick3DCubeMapTexture *texture READ texture WRITE setTexture NOTIFY textureChanged REVISION(6, 5))
42 QML_NAMED_ELEMENT(ReflectionProbe)
43 QML_ADDED_IN_VERSION(6, 3)
44
45public:
46 enum class ReflectionQuality {
47 VeryLow,
48 Low,
49 Medium,
50 High,
51 VeryHigh
52 };
53 Q_ENUM(ReflectionQuality)
54
55 enum class ReflectionRefreshMode {
56 FirstFrame,
57 EveryFrame
58 };
59 Q_ENUM(ReflectionRefreshMode)
60
61 enum class ReflectionTimeSlicing {
62 None,
63 AllFacesAtOnce,
64 IndividualFaces,
65 };
66 Q_ENUM(ReflectionTimeSlicing)
67
68 explicit QQuick3DReflectionProbe(QQuick3DNode *parent = nullptr);
69 ~QQuick3DReflectionProbe() override { }
70
71 ReflectionQuality quality() const;
72 QColor clearColor() const;
73 ReflectionRefreshMode refreshMode() const;
74 ReflectionTimeSlicing timeSlicing() const;
75 bool parallaxCorrection() const;
76 QVector3D boxSize() const;
77 Q_REVISION(6, 4) bool debugView() const;
78 Q_REVISION(6, 4) QVector3D boxOffset() const;
79
80 Q_REVISION(6, 4) Q_INVOKABLE void scheduleUpdate();
81 Q_REVISION(6, 5) QQuick3DCubeMapTexture *texture() const;
82
83public Q_SLOTS:
84 void setQuality(ReflectionQuality reflectionQuality);
85 void setClearColor(const QColor &clearColor);
86 void setRefreshMode(ReflectionRefreshMode newRefreshMode);
87 void setTimeSlicing(ReflectionTimeSlicing newTimeSlicing);
88 void setParallaxCorrection(bool parallaxCorrection);
89 void setBoxSize(const QVector3D &newBoxSize);
90 Q_REVISION(6, 4) void setDebugView(bool debugView);
91 Q_REVISION(6, 4) void setBoxOffset(const QVector3D &boxOffset);
92 Q_REVISION(6, 5) void setTexture(QQuick3DCubeMapTexture *newTexture);
93
94Q_SIGNALS:
95 void qualityChanged();
96 void clearColorChanged();
97 void refreshModeChanged();
98 void timeSlicingChanged();
99 void parallaxCorrectionChanged();
100
101 void boxSizeChanged();
102 Q_REVISION(6, 4) void debugViewChanged();
103 Q_REVISION(6, 4) void boxOffsetChanged();
104 Q_REVISION(6, 5) void textureChanged();
105
106protected:
107 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
108 void markAllDirty() override;
109 void itemChange(ItemChange, const ItemChangeData &) override;
110
111 enum class DirtyFlag {
112 QualityDirty = (1 << 0),
113 ClearColorDirty = (1 << 1),
114 RefreshModeDirty = (1 << 2),
115 ParallaxCorrectionDirty = (1 << 3),
116 BoxDirty = (1 << 4),
117 TimeSlicingDirty = (1 << 5),
118 TextureDirty = (1 << 6)
119 };
120 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
121
122 static constexpr DirtyFlags AllDirty = DirtyFlags(DirtyFlag::QualityDirty)
123 | DirtyFlags(DirtyFlag::ClearColorDirty)
124 | DirtyFlags(DirtyFlag::RefreshModeDirty)
125 | DirtyFlags(DirtyFlag::ParallaxCorrectionDirty)
126 | DirtyFlags(DirtyFlag::BoxDirty)
127 | DirtyFlags(DirtyFlag::TimeSlicingDirty)
128 | DirtyFlags(DirtyFlag::TextureDirty);
129
130 DirtyFlags m_dirtyFlags = QQuick3DReflectionProbe::AllDirty;
131
132private:
133 quint32 mapToReflectionResolution(ReflectionQuality quality);
134 void findSceneView();
135 void createDebugView();
136 void updateDebugView();
137 void updateSceneManager(QQuick3DSceneManager *window);
138 ReflectionQuality m_quality = ReflectionQuality::Low;
139 QColor m_clearColor = Qt::transparent;
140 ReflectionRefreshMode m_refreshMode = ReflectionRefreshMode::EveryFrame;
141 bool m_parallaxCorrection = false;
142 QVector3D m_boxSize = QVector3D(0, 0, 0);
143 ReflectionTimeSlicing m_timeSlicing = ReflectionTimeSlicing::None;
144 bool m_debugView = false;
145 // These objects are used to visualize the reflection probe box.
146 QQuick3DGeometry *m_debugViewGeometry = nullptr;
147 QQuick3DModel *m_debugViewModel = nullptr;
148 QQuick3DDefaultMaterial *m_debugViewMaterial = nullptr;
149 QVector3D m_boxOffset;
150 QQuick3DViewport* m_sceneView = nullptr;
151 QQuick3DCubeMapTexture *m_texture = nullptr;
152};
153
154QT_END_NAMESPACE
155
156#endif // QSSGREFLECTIONPROBE_H
Combined button and popup list for selecting options.