1// Copyright (C) 2014 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 <Qt3DRender/private/rendertarget_p.h>
5#include <Qt3DRender/qrendertarget.h>
6#include <Qt3DRender/private/qrendertarget_p.h>
7#include <Qt3DRender/qrendertargetoutput.h>
8#include <Qt3DRender/private/managers_p.h>
9#include <QVariant>
10
11QT_BEGIN_NAMESPACE
12
13
14namespace Qt3DRender {
15namespace Render {
16
17using namespace Qt3DCore;
18
19RenderTarget::RenderTarget()
20 : BackendNode()
21 , m_dirty(false)
22{
23}
24
25void RenderTarget::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
26{
27 const QRenderTarget *node = qobject_cast<const QRenderTarget *>(object: frontEnd);
28 if (!node)
29 return;
30
31 BackendNode::syncFromFrontEnd(frontEnd, firstTime);
32
33 auto outputIds = qIdsForNodes(nodes: node->outputs());
34 std::sort(first: std::begin(cont&: outputIds), last: std::end(cont&: outputIds));
35
36 if (m_renderOutputs != outputIds) {
37 m_renderOutputs = outputIds;
38 m_dirty = true;
39 markDirty(changes: AbstractRenderer::AllDirty);
40 }
41}
42
43void RenderTarget::cleanup()
44{
45 m_renderOutputs.clear();
46 m_dirty = false;
47 QBackendNode::setEnabled(false);
48}
49
50QList<Qt3DCore::QNodeId> RenderTarget::renderOutputs() const
51{
52 return m_renderOutputs;
53}
54
55bool RenderTarget::isDirty() const
56{
57 return m_dirty;
58}
59
60void RenderTarget::unsetDirty()
61{
62 m_dirty = false;
63}
64
65RenderTargetFunctor::RenderTargetFunctor(AbstractRenderer *renderer, RenderTargetManager *manager)
66 : m_renderer(renderer)
67 , m_renderTargetManager(manager)
68{
69}
70
71QBackendNode *RenderTargetFunctor::create(QNodeId id) const
72{
73 RenderTarget *backend = m_renderTargetManager->getOrCreateResource(id);
74 // Remove from the list of ids to destroy in case we were added to it
75 m_renderTargetManager->removeRenderTargetToCleanup(id);
76 backend->setRenderer(m_renderer);
77 return backend;
78}
79
80QBackendNode *RenderTargetFunctor::get(QNodeId id) const
81{
82 return m_renderTargetManager->lookupResource(id);
83}
84
85void RenderTargetFunctor::destroy(QNodeId id) const
86{
87 // We add ourselves to the dirty list to tell the renderer that this rendertarget has been destroyed
88 m_renderTargetManager->addRenderTargetIdToCleanup(id);
89 m_renderTargetManager->releaseResource(id);
90}
91
92} // namespace Render
93} // namespace Qt3DRender
94
95QT_END_NAMESPACE
96

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

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