9#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
90
91
92
93
94
95
96
97
98
99
100
101
102
105
106
107
108
109
110
111
112
113
114
115
116
117
120
121
122
123
124
125
126
127
128
129
130
131
132
135
136
137
138
139
140
141
142
143
144
145
146
147
150
151
152
153
154
155
156
157
158
159
162
163
164
165
166
167
168
169
170
172QQuick3DDirectionalLight::QQuick3DDirectionalLight(QQuick3DNode *parent)
173 : QQuick3DAbstractLight(*(
new QQuick3DNodePrivate(QQuick3DNodePrivate::Type::DirectionalLight)), parent) {}
175float QQuick3DDirectionalLight::csmSplit1()
const
180float QQuick3DDirectionalLight::csmSplit2()
const
185float QQuick3DDirectionalLight::csmSplit3()
const
190int QQuick3DDirectionalLight::csmNumSplits()
const
192 return m_csmNumSplits;
195float QQuick3DDirectionalLight::csmBlendRatio()
const
197 return m_csmBlendRatio;
200bool QQuick3DDirectionalLight::lockShadowmapTexels()
const
202 return m_lockShadowmapTexels;
205void QQuick3DDirectionalLight::setCsmSplit1(
float newcsmSplit1)
207 newcsmSplit1 = qBound(0.0f, newcsmSplit1, 1.0f);
208 if (qFuzzyCompare(m_csmSplit1, newcsmSplit1))
211 m_csmSplit1 = newcsmSplit1;
212 emit csmSplit1Changed();
213 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
217void QQuick3DDirectionalLight::setCsmSplit2(
float newcsmSplit2)
219 newcsmSplit2 = qBound(0.0f, newcsmSplit2, 1.0f);
220 if (qFuzzyCompare(m_csmSplit2, newcsmSplit2))
223 m_csmSplit2 = newcsmSplit2;
224 emit csmSplit2Changed();
225 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
229void QQuick3DDirectionalLight::setCsmSplit3(
float newcsmSplit3)
231 newcsmSplit3 = qBound(0.0f, newcsmSplit3, 1.0f);
232 if (qFuzzyCompare(m_csmSplit3, newcsmSplit3))
235 m_csmSplit3 = newcsmSplit3;
236 emit csmSplit3Changed();
237 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
241void QQuick3DDirectionalLight::setCsmNumSplits(
int newcsmNumSplits)
243 newcsmNumSplits = qBound(0, newcsmNumSplits, 3);
244 if (m_csmNumSplits == newcsmNumSplits)
247 m_csmNumSplits = newcsmNumSplits;
248 emit csmNumSplitsChanged();
249 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
253void QQuick3DDirectionalLight::setCsmBlendRatio(
float newcsmBlendRatio)
255 newcsmBlendRatio = qBound(0.0, newcsmBlendRatio, 1.0);
256 if (m_csmBlendRatio == newcsmBlendRatio)
259 m_csmBlendRatio = newcsmBlendRatio;
260 emit csmBlendRatioChanged();
261 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
265void QQuick3DDirectionalLight::setLockShadowmapTexels(
bool newLockShadowmapTexels)
267 if (m_lockShadowmapTexels == newLockShadowmapTexels)
270 m_lockShadowmapTexels = newLockShadowmapTexels;
271 emit lockShadowmapTexelsChanged();
272 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
276QSSGRenderGraphObject *QQuick3DDirectionalLight::updateSpatialNode(QSSGRenderGraphObject *node)
280 node =
new QSSGRenderLight();
283 if (m_dirtyFlags.testFlag(DirtyFlag::ShadowDirty)) {
284 QSSGRenderLight *light =
static_cast<QSSGRenderLight *>(node);
285 light->m_csmSplit1 = m_csmSplit1;
286 light->m_csmSplit2 = m_csmSplit2;
287 light->m_csmSplit3 = m_csmSplit3;
288 light->m_csmNumSplits = m_csmNumSplits;
289 light->m_csmBlendRatio = m_csmBlendRatio;
290 light->m_lockShadowmapTexels = m_lockShadowmapTexels;
293 QQuick3DAbstractLight::updateSpatialNode(node);
Combined button and popup list for selecting options.