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 "qrenderpassfilter.h"
5#include "qrenderpassfilter_p.h"
6
7#include <Qt3DRender/qfilterkey.h>
8#include <Qt3DRender/qparameter.h>
9
10QT_BEGIN_NAMESPACE
11
12
13namespace Qt3DRender {
14
15using namespace Qt3DCore;
16
17/*!
18 \class Qt3DRender::QRenderPassFilter
19 \inmodule Qt3DRender
20 \since 5.7
21 \brief Provides storage for vectors of Filter Keys and Parameters.
22
23 A Qt3DRender::QRenderPassFilter FrameGraph node is used to select which
24 Qt3DRender::QRenderPass objects are selected for drawing. QRenderPassFilter
25 specifies a list of Qt3DRender::QFilterKey objects and Qt3DRender::QParameter objects.
26 When QRenderPassFilter is present in the FrameGraph, only the QRenderPass objects,
27 whose Qt3DRender::QFilterKey objects match the keys in QRenderPassFilter are
28 selected for rendering. If no QRenderPassFilter is present, then all QRenderPass
29 objects are selected for rendering. The parameters in the list can be used
30 to set values for shader parameters. The parameters in QRenderPassFilter
31 override parameters in QTechniqueFilter, QMaterial, QEffect, QTechnique and QRenderPass.
32*/
33
34/*!
35 \qmltype RenderPassFilter
36 \inqmlmodule Qt3D.Render
37 \since 5.7
38 \nativetype Qt3DRender::QRenderPassFilter
39 \inherits FrameGraphNode
40 \brief Provides storage for vectors of Filter Keys and Parameters.
41
42 A RenderPassFilter FrameGraph node is used to select which RenderPass
43 objects are selected for drawing. When RenderPassFilter is present in the FrameGraph,
44 only the RenderPass objects, whose FilterKey objects match the keys
45 in RenderPassFilter are selected for rendering. If no RenderPassFilter is present,
46 then all RenderPass objects are selected for rendering. RenderPassFilter
47 specifies a list of Parameter objects. The parameters in the list can be used
48 to set values for shader parameters. The parameters in RenderPassFilter
49 override parameters in TechniqueFilter, Material, Effect, Technique and RenderPass.
50*/
51
52/*!
53 \qmlproperty list<FilterKey> RenderPassFilter::matchAny
54 Holds the list of filterkeys used by the RenderPassFilter
55*/
56/*!
57 \qmlproperty list<Parameter> RenderPassFilter::parameters
58 Holds the list of parameters used by the RenderPassFilter
59*/
60
61
62/*!
63 The constructor creates an instance with the specified \a parent.
64 */
65QRenderPassFilter::QRenderPassFilter(QNode *parent)
66 : QFrameGraphNode(*new QRenderPassFilterPrivate, parent)
67{}
68
69/*! \internal */
70QRenderPassFilter::~QRenderPassFilter()
71{
72}
73
74/*! \internal */
75QRenderPassFilter::QRenderPassFilter(QRenderPassFilterPrivate &dd, QNode *parent)
76 : QFrameGraphNode(dd, parent)
77{
78}
79
80/*!
81 Returns a vector of the current keys for the filter.
82 */
83QList<QFilterKey *> QRenderPassFilter::matchAny() const
84{
85 Q_D(const QRenderPassFilter);
86 return d->m_matchList;
87}
88
89/*!
90 Add the \a filterKey to the match vector.
91 */
92void QRenderPassFilter::addMatch(QFilterKey *filterKey)
93{
94 Q_ASSERT(filterKey);
95 Q_D(QRenderPassFilter);
96 if (!d->m_matchList.contains(t: filterKey)) {
97 d->m_matchList.append(t: filterKey);
98
99 // Ensures proper bookkeeping
100 d->registerDestructionHelper(node: filterKey, func: &QRenderPassFilter::removeMatch, d->m_matchList);
101
102 // We need to add it as a child of the current node if it has been declared inline
103 // Or not previously added as a child of the current node so that
104 // 1) The backend gets notified about it's creation
105 // 2) When the current node is destroyed, it gets destroyed as well
106 if (!filterKey->parent())
107 filterKey->setParent(this);
108
109 d->update();
110 }
111}
112
113/*!
114 Remove the \a filterKey from the match vector.
115 */
116void QRenderPassFilter::removeMatch(QFilterKey *filterKey)
117{
118 Q_ASSERT(filterKey);
119 Q_D(QRenderPassFilter);
120
121 if (!d->m_matchList.removeOne(t: filterKey))
122 return;
123 d->update();
124 // Remove bookkeeping connection
125 d->unregisterDestructionHelper(node: filterKey);
126}
127
128/*!
129 Add the given \a parameter to the parameter vector.
130 */
131void QRenderPassFilter::addParameter(QParameter *parameter)
132{
133 Q_ASSERT(parameter);
134 Q_D(QRenderPassFilter);
135 if (!d->m_parameters.contains(t: parameter)) {
136 d->m_parameters.append(t: parameter);
137
138 // Ensures proper bookkeeping
139 d->registerDestructionHelper(node: parameter, func: &QRenderPassFilter::removeParameter, d->m_parameters);
140
141 // We need to add it as a child of the current node if it has been declared inline
142 // Or not previously added as a child of the current node so that
143 // 1) The backend gets notified about it's creation
144 // 2) When the current node is destroyed, the child parameters get destroyed as well
145 if (!parameter->parent())
146 parameter->setParent(this);
147
148 d->update();
149 }
150}
151
152/*!
153 Remove the given \a parameter from the parameter vector.
154 */
155void QRenderPassFilter::removeParameter(QParameter *parameter)
156{
157 Q_ASSERT(parameter);
158 Q_D(QRenderPassFilter);
159
160 if (!d->m_parameters.removeOne(t: parameter))
161 return;
162 d->update();
163 // Remove bookkeeping connection
164 d->unregisterDestructionHelper(node: parameter);
165}
166
167/*!
168 Returns the current vector of parameters.
169 */
170QList<QParameter *> QRenderPassFilter::parameters() const
171{
172 Q_D(const QRenderPassFilter);
173 return d->m_parameters;
174}
175
176} // namespace Qt3DRender
177
178QT_END_NAMESPACE
179
180#include "moc_qrenderpassfilter.cpp"
181

Provided by KDAB

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

source code of qt3d/src/render/framegraph/qrenderpassfilter.cpp