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