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
qquick3dsceneenvironment_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 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 QSSGSCENEENVIRONMENT_H
7#define QSSGSCENEENVIRONMENT_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 <QtCore/QObject>
21#include <QtCore/QVector>
22
23#include <QtGui/QColor>
24
25#include <QtQuick3D/private/qquick3dnode_p.h>
26
27#include <QtQml/QQmlListProperty>
28
29#include <QtQuick3D/private/qquick3deffect_p.h>
30#include <QtQuick3D/private/qquick3dlightmapper_p.h>
31#include <QtQuick3D/private/qquick3ddebugsettings_p.h>
32#include <QtQuick3D/private/qquick3dfog_p.h>
33#include <QtQuick3D/private/qquick3drenderpass_p.h>
34
36
37class QQuick3DTexture;
38class QQuick3DCubeMapTexture;
39class Q_QUICK3D_EXPORT QQuick3DSceneEnvironment : public QQuick3DObject
40{
41 Q_OBJECT
42 Q_PROPERTY(QQuick3DEnvironmentAAModeValues antialiasingMode READ antialiasingMode WRITE setAntialiasingMode NOTIFY antialiasingModeChanged)
43 Q_PROPERTY(QQuick3DEnvironmentAAQualityValues antialiasingQuality READ antialiasingQuality WRITE setAntialiasingQuality NOTIFY antialiasingQualityChanged)
44
45 Q_PROPERTY(QQuick3DEnvironmentTemporalAAMode temporalAAMode READ temporalAAMode WRITE setTemporalAAMode NOTIFY temporalAAModeChanged REVISION(6, 11))
46 Q_PROPERTY(bool temporalAAEnabled READ temporalAAEnabled WRITE setTemporalAAEnabled NOTIFY temporalAAEnabledChanged)
47 Q_PROPERTY(float temporalAAStrength READ temporalAAStrength WRITE setTemporalAAStrength NOTIFY temporalAAStrengthChanged)
48 Q_PROPERTY(QQuick3DEnvironmentBackgroundTypes backgroundMode READ backgroundMode WRITE setBackgroundMode NOTIFY backgroundModeChanged)
49 Q_PROPERTY(QColor clearColor READ clearColor WRITE setClearColor NOTIFY clearColorChanged)
50 Q_PROPERTY(bool depthTestEnabled READ depthTestEnabled WRITE setDepthTestEnabled NOTIFY depthTestEnabledChanged)
51 Q_PROPERTY(bool depthPrePassEnabled READ depthPrePassEnabled WRITE setDepthPrePassEnabled NOTIFY depthPrePassEnabledChanged)
52
53 Q_PROPERTY(float aoStrength READ aoStrength WRITE setAoStrength NOTIFY aoStrengthChanged)
54 Q_PROPERTY(float aoDistance READ aoDistance WRITE setAoDistance NOTIFY aoDistanceChanged)
55 Q_PROPERTY(float aoSoftness READ aoSoftness WRITE setAoSoftness NOTIFY aoSoftnessChanged)
56 Q_PROPERTY(bool aoDither READ aoDither WRITE setAoDither NOTIFY aoDitherChanged)
57 Q_PROPERTY(int aoSampleRate READ aoSampleRate WRITE setAoSampleRate NOTIFY aoSampleRateChanged)
58 Q_PROPERTY(float aoBias READ aoBias WRITE setAoBias NOTIFY aoBiasChanged)
59 Q_PROPERTY(bool aoEnabled READ aoEnabled WRITE setAoEnabled NOTIFY aoEnabledChanged REVISION(6, 5))
60
61 Q_PROPERTY(QQuick3DTexture *lightProbe READ lightProbe WRITE setLightProbe NOTIFY lightProbeChanged)
62 Q_PROPERTY(float probeExposure READ probeExposure WRITE setProbeExposure NOTIFY probeExposureChanged)
63 Q_PROPERTY(float probeHorizon READ probeHorizon WRITE setProbeHorizon NOTIFY probeHorizonChanged)
64 Q_PROPERTY(QVector3D probeOrientation READ probeOrientation WRITE setProbeOrientation NOTIFY probeOrientationChanged)
65
66 Q_PROPERTY(QQuick3DCubeMapTexture *skyBoxCubeMap READ skyBoxCubeMap WRITE setSkyBoxCubeMap NOTIFY skyBoxCubeMapChanged REVISION(6, 4))
67
68 Q_PROPERTY(QQuick3DEnvironmentTonemapModes tonemapMode READ tonemapMode WRITE setTonemapMode NOTIFY tonemapModeChanged)
69
70 Q_PROPERTY(QQmlListProperty<QQuick3DEffect> effects READ effects)
71
72 Q_PROPERTY(float skyboxBlurAmount READ skyboxBlurAmount WRITE setSkyboxBlurAmount NOTIFY skyboxBlurAmountChanged REVISION(6, 4))
73 Q_PROPERTY(bool specularAAEnabled READ specularAAEnabled WRITE setSpecularAAEnabled NOTIFY specularAAEnabledChanged REVISION(6, 4))
74
75 Q_PROPERTY(QQuick3DLightmapper *lightmapper READ lightmapper WRITE setLightmapper NOTIFY lightmapperChanged REVISION(6, 4))
76
77 Q_PROPERTY(QQuick3DDebugSettings *debugSettings READ debugSettings WRITE setDebugSettings NOTIFY debugSettingsChanged REVISION(6, 5))
78 Q_PROPERTY(QRect scissorRect READ scissorRect WRITE setScissorRect NOTIFY scissorRectChanged REVISION(6, 5))
79
80 Q_PROPERTY(QQuick3DFog *fog READ fog WRITE setFog NOTIFY fogChanged REVISION(6, 5))
81
82 Q_PROPERTY(QQuick3DEnvironmentOITMethod oitMethod READ oitMethod WRITE setOitMethod NOTIFY oitMethodChanged REVISION(6, 9))
83
84 QML_NAMED_ELEMENT(SceneEnvironment)
85
86public:
87
88 enum QQuick3DEnvironmentAAModeValues {
89 NoAA = 0,
90 SSAA,
91 MSAA,
92 ProgressiveAA
93 };
94 Q_ENUM(QQuick3DEnvironmentAAModeValues)
95
96 enum QQuick3DEnvironmentAAQualityValues {
97 Medium = 2,
98 High = 4,
99 VeryHigh = 8
100 };
101 Q_ENUM(QQuick3DEnvironmentAAQualityValues)
102
103 enum QQuick3DEnvironmentBackgroundTypes {
104 Transparent = 0,
105 Unspecified,
106 Color,
107 SkyBox,
108 SkyBoxCubeMap
109 };
110 Q_ENUM(QQuick3DEnvironmentBackgroundTypes)
111
112 enum QQuick3DEnvironmentTonemapModes {
113 TonemapModeNone = 0,
114 TonemapModeLinear,
115 TonemapModeAces,
116 TonemapModeHejlDawson,
117 TonemapModeFilmic
118 };
119 Q_ENUM(QQuick3DEnvironmentTonemapModes)
120
121 enum QQuick3DEnvironmentOITMethod
122 {
123 OITNone = 0,
124 OITWeightedBlended,
125 OITLinkedList
126 };
127 Q_ENUM(QQuick3DEnvironmentOITMethod)
128
129 enum QQuick3DEnvironmentTemporalAAMode
130 {
131 TAADefault = 0,
132 TAAMotionVector
133 };
134 Q_ENUM(QQuick3DEnvironmentTemporalAAMode)
135
136 explicit QQuick3DSceneEnvironment(QQuick3DObject *parent = nullptr);
137 ~QQuick3DSceneEnvironment() override;
138
139 QQuick3DEnvironmentAAModeValues antialiasingMode() const;
140 QQuick3DEnvironmentAAQualityValues antialiasingQuality() const;
141 Q_REVISION(6, 11) QQuick3DEnvironmentTemporalAAMode temporalAAMode() const;
142 bool temporalAAEnabled() const;
143 float temporalAAStrength() const;
144
145 QQuick3DEnvironmentBackgroundTypes backgroundMode() const;
146 QColor clearColor() const;
147
148 float aoStrength() const;
149 float aoDistance() const;
150 float aoSoftness() const;
151 bool aoDither() const;
152 int aoSampleRate() const;
153 float aoBias() const;
154 Q_REVISION(6, 5) bool aoEnabled() const;
155 Q_REVISION(6, 5) void setAoEnabled(bool newAoEnabled);
156
157 QQuick3DTexture *lightProbe() const;
158 float probeExposure() const;
159 float probeHorizon() const;
160 QVector3D probeOrientation() const;
161
162 bool depthTestEnabled() const;
163 bool depthPrePassEnabled() const;
164
165 QQuick3DEnvironmentTonemapModes tonemapMode() const;
166
167 QQmlListProperty<QQuick3DEffect> effects();
168
169 Q_REVISION(6, 4) float skyboxBlurAmount() const;
170 Q_REVISION(6, 4) bool specularAAEnabled() const;
171 Q_REVISION(6, 4) QQuick3DLightmapper *lightmapper() const;
172 Q_REVISION(6, 4) QQuick3DCubeMapTexture *skyBoxCubeMap() const;
173
174 Q_REVISION(6, 5) QQuick3DDebugSettings *debugSettings() const;
175 Q_REVISION(6, 5) QRect scissorRect() const;
176
177 Q_REVISION(6, 5) QQuick3DFog *fog() const;
178
179 QQuick3DEnvironmentOITMethod Q_REVISION(6, 9) oitMethod() const;
180
181 bool gridEnabled() const;
182 void setGridEnabled(bool newGridEnabled);
183
184 float gridScale() const;
185 void setGridScale(float newGridScale);
186
187 uint gridFlags() const;
188 void setGridFlags(uint newGridFlags);
189
190public Q_SLOTS:
191 void setAntialiasingMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentAAModeValues antialiasingMode);
192 void setAntialiasingQuality(QQuick3DSceneEnvironment::QQuick3DEnvironmentAAQualityValues antialiasingQuality);
193 Q_REVISION(6, 11) void setTemporalAAMode(const QQuick3DEnvironmentTemporalAAMode &newTemporalAAMode);
194 void setTemporalAAEnabled(bool temporalAAEnabled);
195 void setTemporalAAStrength(float strength);
196
197 void setBackgroundMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentBackgroundTypes backgroundMode);
198 void setClearColor(const QColor &clearColor);
199
200 void setAoStrength(float aoStrength);
201 void setAoDistance(float aoDistance);
202 void setAoSoftness(float aoSoftness);
203 void setAoDither(bool aoDither);
204 void setAoSampleRate(int aoSampleRate);
205 void setAoBias(float aoBias);
206
207 void setLightProbe(QQuick3DTexture *lightProbe);
208 void setProbeExposure(float probeExposure);
209 void setProbeHorizon(float probeHorizon);
210 void setProbeOrientation(const QVector3D &orientation);
211
212 void setDepthTestEnabled(bool depthTestEnabled);
213 void setDepthPrePassEnabled(bool depthPrePassEnabled);
214
215 void setTonemapMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentTonemapModes tonemapMode);
216
217 Q_REVISION(6, 4) void setSkyboxBlurAmount(float newSkyboxBlurAmount);
218 Q_REVISION(6, 4) void setSpecularAAEnabled(bool enabled);
219 Q_REVISION(6, 4) void setSkyBoxCubeMap(QQuick3DCubeMapTexture *newSkyBoxCubeMap);
220
221 Q_REVISION(6, 4) void setLightmapper(QQuick3DLightmapper *lightmapper);
222
223 Q_REVISION(6, 5) void setDebugSettings(QQuick3DDebugSettings *newDebugSettings);
224 Q_REVISION(6, 5) void setScissorRect(QRect scissorRect);
225
226 Q_REVISION(6, 5) void setFog(QQuick3DFog *fog);
227
228 Q_REVISION(6, 9) void setOitMethod(QQuick3DSceneEnvironment::QQuick3DEnvironmentOITMethod mode);
229
230Q_SIGNALS:
231 void antialiasingModeChanged();
232 void antialiasingQualityChanged();
233 Q_REVISION(6, 11) void temporalAAModeChanged();
234 void temporalAAEnabledChanged();
235 void temporalAAStrengthChanged();
236
237 void backgroundModeChanged();
238 void clearColorChanged();
239
240 void aoStrengthChanged();
241 void aoDistanceChanged();
242 void aoSoftnessChanged();
243 void aoDitherChanged();
244 void aoSampleRateChanged();
245 void aoBiasChanged();
246 Q_REVISION(6, 5) void aoEnabledChanged();
247
248 void lightProbeChanged();
249 void probeExposureChanged();
250 void probeHorizonChanged();
251 void probeOrientationChanged();
252
253 void depthTestEnabledChanged();
254 void depthPrePassEnabledChanged();
255
256 void tonemapModeChanged();
257
258 Q_REVISION(6, 4) void skyboxBlurAmountChanged();
259 Q_REVISION(6, 4) void specularAAEnabledChanged();
260 Q_REVISION(6, 4) void lightmapperChanged();
261 Q_REVISION(6, 4) void skyBoxCubeMapChanged();
262
263 Q_REVISION(6, 5) void debugSettingsChanged();
264 Q_REVISION(6, 5) void scissorRectChanged();
265
266 Q_REVISION(6, 5) void fogChanged();
267
268 Q_REVISION(6, 9) void oitMethodChanged();
269
270protected:
271 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
272 void itemChange(ItemChange, const ItemChangeData &) override;
273 virtual const QVector<QQuick3DEffect *> &effectList() const;
274 virtual bool useBuiltinTonemapper() const;
275
276private:
277 friend class QQuick3DSceneRenderer;
278
279 static constexpr float defaultAoDistance() { return 5.0f; }
280
281 QVector<QQuick3DEffect *> m_effects;
282
283 static void qmlAppendEffect(QQmlListProperty<QQuick3DEffect> *list, QQuick3DEffect *effect);
284 static QQuick3DEffect *qmlEffectAt(QQmlListProperty<QQuick3DEffect> *list, qsizetype index);
285 static qsizetype qmlEffectsCount(QQmlListProperty<QQuick3DEffect> *list);
286 static void qmlClearEffects(QQmlListProperty<QQuick3DEffect> *list);
287
288 void updateSceneManager(QQuick3DSceneManager *manager);
289
290 QQuick3DEnvironmentAAModeValues m_antialiasingMode = NoAA;
291 QQuick3DEnvironmentAAQualityValues m_antialiasingQuality = High;
292 QQuick3DEnvironmentTemporalAAMode m_temporalAAMode = TAADefault;
293 bool m_temporalAAEnabled = false;
294 float m_temporalAAStrength = 0.3f;
295 bool m_specularAAEnabled = false;
296
297 QQuick3DEnvironmentBackgroundTypes m_backgroundMode = Transparent;
298 QColor m_clearColor = Qt::black;
299
300 float m_aoStrength = 0.0f;
301 float m_aoDistance = defaultAoDistance();
302 float m_aoSoftness = 50.0f;
303 float m_aoBias = 0.0f;
304 int m_aoSampleRate = 2;
305 bool m_aoDither = false;
306 bool m_aoEnabled = false;
307 QQuick3DTexture *m_lightProbe = nullptr;
308 float m_probeExposure = 1.0f;
309 float m_probeHorizon = 0.0f;
310 QVector3D m_probeOrientation;
311
312 bool m_depthTestEnabled = true;
313 bool m_depthPrePassEnabled = false;
314 QQuick3DEnvironmentTonemapModes m_tonemapMode = QQuick3DEnvironmentTonemapModes::TonemapModeLinear;
315 float m_skyboxBlurAmount = 0.0f;
316 QQuick3DLightmapper *m_lightmapper = nullptr;
317 QMetaObject::Connection m_lightmapperSignalConnection;
318 QQuick3DCubeMapTexture *m_skyBoxCubeMap = nullptr;
319 QQuick3DDebugSettings *m_debugSettings = nullptr;
320 QRect m_scissorRect;
321 QMetaObject::Connection m_debugSettingsSignalConnection;
322 bool m_gridEnabled = false;
323 uint m_gridFlags = 0;
324 float m_gridScale = 1.0f;
325 QQuick3DFog *m_fog = nullptr;
326 QMetaObject::Connection m_fogSignalConnection;
327 QQuick3DEnvironmentOITMethod m_oitMethod = QQuick3DEnvironmentOITMethod::OITNone;
328};
329
330QT_END_NAMESPACE
331
332#endif // QSSGSCENEENVIRONMENT_H
Combined button and popup list for selecting options.
static QByteArray prepareCustomShader(QSSGRenderCustomMaterial *customMaterial, const QSSGShaderCustomMaterialAdapter::StringPairList &uniforms, const QByteArray &snippet, QSSGShaderCache::ShaderType shaderType, QSSGCustomShaderMetaData &meta, bool multiViewCompatible)
static QT_BEGIN_NAMESPACE QRhiGraphicsPipeline::BlendFactor toRhiBlendFactor(QQuick3DCustomMaterial::BlendMode mode)
\qmlproperty url CustomMaterial::vertexShader
static void setCustomMaterialFlagsFromShader(QSSGRenderCustomMaterial *material, const QSSGCustomShaderMetaData &meta)