1// Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "rendersettings_p.h"
5
6#include <Qt3DRender/QFrameGraphNode>
7#include <Qt3DRender/private/abstractrenderer_p.h>
8#include <Qt3DRender/private/qrendersettings_p.h>
9#include <Qt3DRender/private/qrendercapabilities_p.h>
10
11QT_BEGIN_NAMESPACE
12
13
14namespace Qt3DRender {
15namespace Render {
16
17using namespace Qt3DCore;
18
19RenderSettings::RenderSettings()
20 : BackendNode()
21 , m_renderPolicy(QRenderSettings::OnDemand)
22 , m_pickMethod(QPickingSettings::BoundingVolumePicking)
23 , m_pickResultMode(QPickingSettings::NearestPick)
24 , m_faceOrientationPickingMode(QPickingSettings::FrontFace)
25 , m_pickWorldSpaceTolerance(.1f)
26 , m_activeFrameGraph()
27{
28}
29
30void RenderSettings::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
31{
32 const QRenderSettings *node = qobject_cast<const QRenderSettings *>(object: frontEnd);
33 if (!node)
34 return;
35
36 BackendNode::syncFromFrontEnd(frontEnd, firstTime);
37
38 const Qt3DCore::QNodeId activeFGId = Qt3DCore::qIdForNode(node: node->activeFrameGraph());
39 if (activeFGId != m_activeFrameGraph) {
40 m_activeFrameGraph = activeFGId;
41 }
42
43 if (node->renderPolicy() != m_renderPolicy) {
44 m_renderPolicy = node->renderPolicy();
45 }
46
47 auto ncnode = const_cast<QRenderSettings *>(node);
48 if (ncnode->pickingSettings()->pickMethod() != m_pickMethod) {
49 m_pickMethod = ncnode->pickingSettings()->pickMethod();
50 }
51
52 if (ncnode->pickingSettings()->pickResultMode() != m_pickResultMode) {
53 m_pickResultMode = ncnode->pickingSettings()->pickResultMode();
54 }
55
56 if (!qFuzzyCompare(p1: ncnode->pickingSettings()->worldSpaceTolerance(), p2: m_pickWorldSpaceTolerance)) {
57 m_pickWorldSpaceTolerance = ncnode->pickingSettings()->worldSpaceTolerance();
58 }
59
60 if (ncnode->pickingSettings()->faceOrientationPickingMode() != m_faceOrientationPickingMode) {
61 m_faceOrientationPickingMode = ncnode->pickingSettings()->faceOrientationPickingMode();
62 }
63
64 if (firstTime)
65 m_capabilities = QRenderCapabilitiesPrivate::get(q: const_cast<QRenderSettings *>(node)->renderCapabilities())->toString();
66
67 // Either because something above as changed or if QRenderSettingsPrivate::invalidFrame()
68 // was called
69 markDirty(changes: AbstractRenderer::AllDirty);
70}
71
72RenderSettingsFunctor::RenderSettingsFunctor(AbstractRenderer *renderer)
73 : m_renderer(renderer)
74{
75}
76
77Qt3DCore::QBackendNode *RenderSettingsFunctor::create(Qt3DCore::QNodeId) const
78{
79 if (m_renderer->settings() != nullptr) {
80 qWarning() << "Renderer settings already exists";
81 return nullptr;
82 }
83
84 RenderSettings *settings = new RenderSettings;
85 settings->setRenderer(m_renderer);
86 m_renderer->setSettings(settings);
87 return settings;
88}
89
90Qt3DCore::QBackendNode *RenderSettingsFunctor::get(Qt3DCore::QNodeId id) const
91{
92 Q_UNUSED(id);
93 return m_renderer->settings();
94}
95
96void RenderSettingsFunctor::destroy(Qt3DCore::QNodeId id) const
97{
98 Q_UNUSED(id);
99 // Deletes the old settings object
100 auto settings = m_renderer->settings();
101 if (settings && settings->peerId() == id) {
102 m_renderer->setSettings(nullptr);
103 delete settings;
104 }
105}
106
107} // namespace Render
108} // namespace Qt3DRender
109
110QT_END_NAMESPACE
111

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qt3d/src/render/backend/rendersettings.cpp