7#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
14
15
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
86
87
88
89
90
91
92
93
94
95
96
97
98
101
102
103
104
105
106
107
108
109
110
111
112
113
116
117
118
119
120
121
122
123
124
125
126
127
128
131
132
133
134
135
136
137
138
139
140
141
142
143
146
147
148
149
150
151
152
153
154
155
158
159
160
161
162
163
164
165
166
168QQuick3DDirectionalLight::QQuick3DDirectionalLight(QQuick3DNode *parent)
169 : QQuick3DAbstractLight(*(
new QQuick3DNodePrivate(QQuick3DNodePrivate::Type::DirectionalLight)), parent) {}
171float QQuick3DDirectionalLight::csmSplit1()
const
176float QQuick3DDirectionalLight::csmSplit2()
const
181float QQuick3DDirectionalLight::csmSplit3()
const
186int QQuick3DDirectionalLight::csmNumSplits()
const
188 return m_csmNumSplits;
191float QQuick3DDirectionalLight::csmBlendRatio()
const
193 return m_csmBlendRatio;
196bool QQuick3DDirectionalLight::lockShadowmapTexels()
const
198 return m_lockShadowmapTexels;
201void QQuick3DDirectionalLight::setCsmSplit1(
float newcsmSplit1)
203 newcsmSplit1 = qBound(0.0f, newcsmSplit1, 1.0f);
204 if (qFuzzyCompare(m_csmSplit1, newcsmSplit1))
207 m_csmSplit1 = newcsmSplit1;
208 emit csmSplit1Changed();
209 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
213void QQuick3DDirectionalLight::setCsmSplit2(
float newcsmSplit2)
215 newcsmSplit2 = qBound(0.0f, newcsmSplit2, 1.0f);
216 if (qFuzzyCompare(m_csmSplit2, newcsmSplit2))
219 m_csmSplit2 = newcsmSplit2;
220 emit csmSplit2Changed();
221 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
225void QQuick3DDirectionalLight::setCsmSplit3(
float newcsmSplit3)
227 newcsmSplit3 = qBound(0.0f, newcsmSplit3, 1.0f);
228 if (qFuzzyCompare(m_csmSplit3, newcsmSplit3))
231 m_csmSplit3 = newcsmSplit3;
232 emit csmSplit3Changed();
233 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
237void QQuick3DDirectionalLight::setCsmNumSplits(
int newcsmNumSplits)
239 newcsmNumSplits = qBound(0, newcsmNumSplits, 3);
240 if (m_csmNumSplits == newcsmNumSplits)
243 m_csmNumSplits = newcsmNumSplits;
244 emit csmNumSplitsChanged();
245 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
249void QQuick3DDirectionalLight::setCsmBlendRatio(
float newcsmBlendRatio)
251 newcsmBlendRatio = qBound(0.0, newcsmBlendRatio, 1.0);
252 if (m_csmBlendRatio == newcsmBlendRatio)
255 m_csmBlendRatio = newcsmBlendRatio;
256 emit csmBlendRatioChanged();
257 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
261void QQuick3DDirectionalLight::setLockShadowmapTexels(
bool newLockShadowmapTexels)
263 if (m_lockShadowmapTexels == newLockShadowmapTexels)
266 m_lockShadowmapTexels = newLockShadowmapTexels;
267 emit lockShadowmapTexelsChanged();
268 m_dirtyFlags.setFlag(QQuick3DAbstractLight::DirtyFlag::ShadowDirty);
272QSSGRenderGraphObject *QQuick3DDirectionalLight::updateSpatialNode(QSSGRenderGraphObject *node)
276 node =
new QSSGRenderLight();
279 if (m_dirtyFlags.testFlag(DirtyFlag::ShadowDirty)) {
280 QSSGRenderLight *light =
static_cast<QSSGRenderLight *>(node);
281 light->m_csmSplit1 = m_csmSplit1;
282 light->m_csmSplit2 = m_csmSplit2;
283 light->m_csmSplit3 = m_csmSplit3;
284 light->m_csmNumSplits = m_csmNumSplits;
285 light->m_csmBlendRatio = m_csmBlendRatio;
286 light->m_lockShadowmapTexels = m_lockShadowmapTexels;
289 QQuick3DAbstractLight::updateSpatialNode(node);