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
qquick3dabstractlight_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 QSSGABSTRACTLIGHT_H
7#define QSSGABSTRACTLIGHT_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
22#include <QColor>
23
25
26class Q_QUICK3D_EXPORT QQuick3DAbstractLight : public QQuick3DNode
27{
28 Q_OBJECT
29 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
30 Q_PROPERTY(QColor ambientColor READ ambientColor WRITE setAmbientColor NOTIFY ambientColorChanged)
31 Q_PROPERTY(float brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged)
32 Q_PROPERTY(QQuick3DNode *scope READ scope WRITE setScope NOTIFY scopeChanged)
33 Q_PROPERTY(bool castsShadow READ castsShadow WRITE setCastsShadow NOTIFY castsShadowChanged)
34 Q_PROPERTY(float shadowBias READ shadowBias WRITE setShadowBias NOTIFY shadowBiasChanged)
35 Q_PROPERTY(float shadowFactor READ shadowFactor WRITE setShadowFactor NOTIFY shadowFactorChanged)
36 Q_PROPERTY(QSSGShadowMapQuality shadowMapQuality READ shadowMapQuality WRITE setShadowMapQuality NOTIFY shadowMapQualityChanged)
37 Q_PROPERTY(float shadowMapFar READ shadowMapFar WRITE setShadowMapFar NOTIFY shadowMapFarChanged)
38 Q_PROPERTY(float shadowFilter READ shadowFilter WRITE setShadowFilter NOTIFY shadowFilterChanged)
39 Q_PROPERTY(QSSGBakeMode bakeMode READ bakeMode WRITE setBakeMode NOTIFY bakeModeChanged)
40 Q_PROPERTY(QSSGSoftShadowQuality softShadowQuality READ softShadowQuality WRITE setSoftShadowQuality NOTIFY softShadowQualityChanged FINAL REVISION(6, 8))
41 Q_PROPERTY(float pcfFactor READ pcfFactor WRITE setPcfFactor NOTIFY pcfFactorChanged FINAL REVISION(6, 8))
42 Q_PROPERTY(bool use32BitShadowmap READ use32BitShadowmap WRITE setUse32BitShadowmap NOTIFY use32BitShadowmapChanged FINAL REVISION(6, 9))
43
44 QML_NAMED_ELEMENT(Light)
45 QML_UNCREATABLE("Light is Abstract")
46public:
47 ~QQuick3DAbstractLight() override;
48
49 enum class QSSGShadowMapQuality {
50 ShadowMapQualityLow,
51 ShadowMapQualityMedium,
52 ShadowMapQualityHigh,
53 ShadowMapQualityVeryHigh,
54 ShadowMapQualityUltra,
55 };
56 Q_ENUM(QSSGShadowMapQuality)
57
58 enum class QSSGSoftShadowQuality {
59 Hard,
60 PCF4,
61 PCF8,
62 PCF16,
63 PCF32,
64 PCF64,
65 };
66 Q_ENUM(QSSGSoftShadowQuality)
67
68 enum class QSSGBakeMode {
69 BakeModeDisabled,
70 BakeModeIndirect,
71 BakeModeAll
72 };
73 Q_ENUM(QSSGBakeMode)
74
75 QColor color() const;
76 QColor ambientColor() const;
77 float brightness() const;
78 QQuick3DNode *scope() const;
79 bool castsShadow() const;
80 float shadowBias() const;
81 float shadowFactor() const;
82 QSSGShadowMapQuality shadowMapQuality() const;
83 float shadowMapFar() const;
84 float shadowFilter() const;
85 QSSGBakeMode bakeMode() const;
86 Q_REVISION(6, 8) QSSGSoftShadowQuality softShadowQuality() const;
87 Q_REVISION(6, 8) float pcfFactor() const;
88 Q_REVISION(6, 9) bool use32BitShadowmap() const;
89
90public Q_SLOTS:
91 void setColor(const QColor &color);
92 void setAmbientColor(const QColor &ambientColor);
93 void setBrightness(float brightness);
94 void setScope(QQuick3DNode *scope);
95 void setCastsShadow(bool castsShadow);
96 void setShadowBias(float shadowBias);
97 void setShadowFactor(float shadowFactor);
98 void setShadowMapQuality(QQuick3DAbstractLight::QSSGShadowMapQuality shadowMapQuality);
99 void setShadowMapFar(float shadowMapFar);
100 void setShadowFilter(float shadowFilter);
101 void setBakeMode(QQuick3DAbstractLight::QSSGBakeMode bakeMode);
102 Q_REVISION(6, 8) void setSoftShadowQuality(QQuick3DAbstractLight::QSSGSoftShadowQuality softShadowQuality);
103 Q_REVISION(6, 8) void setPcfFactor(float pcfFactor);
104 Q_REVISION(6, 9) void setUse32BitShadowmap(bool use32BitShadowmap);
105
106Q_SIGNALS:
107 void colorChanged();
108 void ambientColorChanged();
109 void brightnessChanged();
110 void scopeChanged();
111 void castsShadowChanged();
112 void shadowBiasChanged();
113 void shadowFactorChanged();
114 void shadowMapQualityChanged();
115 void shadowMapFarChanged();
116 void shadowFilterChanged();
117 void bakeModeChanged();
118 Q_REVISION(6, 8) void softShadowQualityChanged();
119 Q_REVISION(6, 8) void pcfFactorChanged();
120 Q_REVISION(6, 9) void use32BitShadowmapChanged();
121
122protected:
123 explicit QQuick3DAbstractLight(QQuick3DNodePrivate &dd, QQuick3DNode *parent = nullptr);
124
125 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
126 void markAllDirty() override;
127
128 enum class DirtyFlag {
129 ShadowDirty = (1 << 0),
130 ColorDirty = (1 << 1),
131 BrightnessDirty = (1 << 2),
132 FadeDirty = (1 << 3),
133 AreaDirty = (1 << 4),
134 BakeModeDirty = (1 << 5)
135 };
136 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
137
138 DirtyFlags m_dirtyFlags = DirtyFlags(DirtyFlag::ShadowDirty)
139 | DirtyFlags(DirtyFlag::ColorDirty)
140 | DirtyFlags(DirtyFlag::BrightnessDirty)
141 | DirtyFlags(DirtyFlag::FadeDirty)
142 | DirtyFlags(DirtyFlag::AreaDirty);
143private:
144 quint32 mapToShadowResolution(QSSGShadowMapQuality resolution);
145
146 QColor m_color;
147 QColor m_ambientColor;
148 float m_brightness = 1.0f;
149 QQuick3DNode *m_scope = nullptr;
150 bool m_castsShadow = false;
151 float m_shadowBias = 10.0f;
152 float m_shadowFactor = 75.0f;
153 QSSGShadowMapQuality m_shadowMapQuality = QSSGShadowMapQuality::ShadowMapQualityLow;
154 QSSGSoftShadowQuality m_softShadowQuality = QSSGSoftShadowQuality::PCF4;
155 float m_shadowMapFar = 5000.0f;
156 float m_shadowFilter = 5.0f;
157 float m_pcfFactor = 2.0f;
158 QSSGBakeMode m_bakeMode = QSSGBakeMode::BakeModeDisabled;
159 bool m_use32BitShadowmap = false;
160};
161
162QT_END_NAMESPACE
163#endif // QSSGDIRECTIONALLIGHT_H
Combined button and popup list for selecting options.