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