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