Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dspotlight.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5#include "qquick3dobject_p.h"
6
7#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
8
9#include "qquick3dnode_p_p.h"
10
12
138
140{
141 return m_constantFade;
142}
143
145{
146 return m_linearFade;
147}
148
150{
151 return m_quadraticFade;
152}
153
155{
156 return m_coneAngle;
157}
158
160{
161 return m_innerConeAngle;
162}
163
165{
166 if (qFuzzyCompare(m_constantFade, constantFade))
167 return;
168
169 m_constantFade = constantFade;
172 update();
173}
174
176{
177 if (qFuzzyCompare(m_linearFade, linearFade))
178 return;
179
180 m_linearFade = linearFade;
183 update();
184}
185
186void QQuick3DSpotLight::setQuadraticFade(float quadraticFade)
187{
188 if (qFuzzyCompare(m_quadraticFade, quadraticFade))
189 return;
190
191 m_quadraticFade = quadraticFade;
194 update();
195}
196
198{
199 if (coneAngle < 0.f)
200 coneAngle = 0.f;
201 else if (coneAngle > 180.f)
202 coneAngle = 180.f;
203
204 if (qFuzzyCompare(m_coneAngle, coneAngle))
205 return;
206
207 m_coneAngle = coneAngle;
210 update();
211}
212
213void QQuick3DSpotLight::setInnerConeAngle(float innerConeAngle)
214{
215 if (innerConeAngle < 0.f)
216 innerConeAngle = 0.f;
217 else if (innerConeAngle > 180.f)
218 innerConeAngle = 180.f;
219
220 if (qFuzzyCompare(m_innerConeAngle, innerConeAngle))
221 return;
222
223 m_innerConeAngle = innerConeAngle;
226 update();
227}
228
230{
231 if (!node) {
232 markAllDirty();
233 node = new QSSGRenderLight(QSSGRenderLight::Type::SpotLight);
234 }
235
236 QQuick3DAbstractLight::updateSpatialNode(node); // Marks the light node dirty if m_dirtyFlags != 0
237
238 QSSGRenderLight *light = static_cast<QSSGRenderLight *>(node);
239
240 if (m_dirtyFlags.testFlag(DirtyFlag::FadeDirty)) {
241 m_dirtyFlags.setFlag(DirtyFlag::FadeDirty, false);
242 light->m_constantFade = m_constantFade;
243 light->m_linearFade = m_linearFade;
244 light->m_quadraticFade = m_quadraticFade;
245 }
246
247 if (m_dirtyFlags.testFlag(DirtyFlag::AreaDirty)) {
248 m_dirtyFlags.setFlag(DirtyFlag::AreaDirty, false);
249 light->m_coneAngle = qBound(0.0f, m_coneAngle * 0.5, 90.0f);
250 light->m_innerConeAngle = qBound(0.0f, m_innerConeAngle * 0.5, 90.0f);
251 }
252
253 return node;
254}
255
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void setConstantFade(float constantFade)
void setInnerConeAngle(float innerConeAngle)
void constantFadeChanged()
void quadraticFadeChanged()
QQuick3DSpotLight(QQuick3DNode *parent=nullptr)
\qmltype SpotLight \inherits Light \inqmlmodule QtQuick3D
void innerConeAngleChanged()
void linearFadeChanged()
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void setConeAngle(float coneAngle)
void setLinearFade(float linearFade)
void setQuadraticFade(float quadraticFade)
Combined button and popup list for selecting options.
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:333
constexpr const T & qBound(const T &min, const T &val, const T &max)
Definition qminmax.h:44
#define emit
Definition moc.h:23