summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/materialsystem/qrenderpass.cpp43
-rw-r--r--src/render/materialsystem/renderpass.cpp51
-rw-r--r--src/render/materialsystem/renderpass_p.h4
-rw-r--r--tests/auto/render/renderpass/tst_renderpass.cpp26
4 files changed, 58 insertions, 66 deletions
diff --git a/src/render/materialsystem/qrenderpass.cpp b/src/render/materialsystem/qrenderpass.cpp
index 66b39455e..c0191512a 100644
--- a/src/render/materialsystem/qrenderpass.cpp
+++ b/src/render/materialsystem/qrenderpass.cpp
@@ -44,6 +44,8 @@
#include "qfilterkey.h"
#include "qrenderstate.h"
#include <Qt3DCore/qnodepropertychange.h>
+#include <Qt3DCore/qnodeaddedpropertychange.h>
+#include <Qt3DCore/qnoderemovedpropertychange.h>
#include <Qt3DCore/private/qnode_p.h>
QT_BEGIN_NAMESPACE
@@ -94,10 +96,9 @@ void QRenderPass::setShaderProgram(QShaderProgram *shaderProgram)
if (d->m_shader != shaderProgram) {
if (d->m_shader != Q_NULLPTR && d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr e(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id()));
- e->setPropertyName("shaderProgram");
- e->setValue(QVariant::fromValue(d->m_shader->id()));
- d->notifyObservers(e);
+ const auto change = QNodeRemovedPropertyChangePtr::create(id(), d->m_shader->id());
+ change->setPropertyName("shaderProgram");
+ d->notifyObservers(change);
}
d->m_shader = shaderProgram;
@@ -110,11 +111,11 @@ void QRenderPass::setShaderProgram(QShaderProgram *shaderProgram)
if (!shaderProgram->parent())
shaderProgram->setParent(this);
- if (d->m_changeArbiter != Q_NULLPTR) {
+ if (d->m_shader && d->m_changeArbiter != Q_NULLPTR) {
QNodePropertyChangePtr e(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id()));
- e->setPropertyName("shaderProgram");
- e->setValue(QVariant::fromValue(shaderProgram->id()));
- d->notifyObservers(e);
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), d->m_shader->id());
+ change->setPropertyName("shaderProgram");
+ d->notifyObservers(change);
}
}
}
@@ -127,6 +128,7 @@ QShaderProgram *QRenderPass::shaderProgram() const
void QRenderPass::addFilterKey(QFilterKey *filterKey)
{
+ Q_ASSERT(filterKey);
Q_D(QRenderPass);
if (!d->m_filterKeyList.contains(filterKey)) {
d->m_filterKeyList.append(filterKey);
@@ -139,9 +141,8 @@ void QRenderPass::addFilterKey(QFilterKey *filterKey)
filterKey->setParent(this);
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id()));
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), filterKey->id());
change->setPropertyName("filterKeys");
- change->setValue(QVariant::fromValue(filterKey->id()));
d->notifyObservers(change);
}
}
@@ -149,11 +150,11 @@ void QRenderPass::addFilterKey(QFilterKey *filterKey)
void QRenderPass::removeFilterKey(QFilterKey *filterKey)
{
+ Q_ASSERT(filterKey);
Q_D(QRenderPass);
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id()));
+ const auto change = QNodeRemovedPropertyChangePtr::create(id(), filterKey->id());
change->setPropertyName("filterKeys");
- change->setValue(QVariant::fromValue(filterKey->id()));
d->notifyObservers(change);
}
d->m_filterKeyList.removeOne(filterKey);
@@ -175,8 +176,8 @@ QVector<QFilterKey *> QRenderPass::filterKeys() const
*/
void QRenderPass::addRenderState(QRenderState *state)
{
+ Q_ASSERT(state);
Q_D(QRenderPass);
-
if (!d->m_renderStates.contains(state)) {
d->m_renderStates.append(state);
@@ -184,9 +185,8 @@ void QRenderPass::addRenderState(QRenderState *state)
state->setParent(this);
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id()));
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), state->id());
change->setPropertyName("renderState");
- change->setValue(QVariant::fromValue(QNodePtr(QNode::clone(state))));
d->notifyObservers(change);
}
}
@@ -197,11 +197,11 @@ void QRenderPass::addRenderState(QRenderState *state)
*/
void QRenderPass::removeRenderState(QRenderState *state)
{
+ Q_ASSERT(state);
Q_D(QRenderPass);
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id()));
+ const auto change = QNodeRemovedPropertyChangePtr::create(id(), state->id());
change->setPropertyName("renderState");
- change->setValue(QVariant::fromValue(state->id()));
d->notifyObservers(change);
}
d->m_renderStates.removeOne(state);
@@ -219,6 +219,7 @@ QVector<QRenderState *> QRenderPass::renderStates() const
void QRenderPass::addParameter(QParameter *parameter)
{
+ Q_ASSERT(parameter);
Q_D(QRenderPass);
if (!d->m_parameters.contains(parameter)) {
d->m_parameters.append(parameter);
@@ -231,9 +232,8 @@ void QRenderPass::addParameter(QParameter *parameter)
parameter->setParent(this);
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id()));
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), parameter->id());
change->setPropertyName("parameter");
- change->setValue(QVariant::fromValue(parameter->id()));
d->notifyObservers(change);
}
}
@@ -241,12 +241,11 @@ void QRenderPass::addParameter(QParameter *parameter)
void QRenderPass::removeParameter(QParameter *parameter)
{
+ Q_ASSERT(parameter);
Q_D(QRenderPass);
-
if (d->m_changeArbiter != Q_NULLPTR) {
- QNodePropertyChangePtr change(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id()));
+ const auto change = QNodeAddedPropertyChangePtr::create(id(), parameter->id());
change->setPropertyName("parameter");
- change->setValue(QVariant::fromValue(parameter->id()));
d->notifyObservers(change);
}
d->m_parameters.removeOne(parameter);
diff --git a/src/render/materialsystem/renderpass.cpp b/src/render/materialsystem/renderpass.cpp
index cfc5d6164..22f3bb252 100644
--- a/src/render/materialsystem/renderpass.cpp
+++ b/src/render/materialsystem/renderpass.cpp
@@ -49,6 +49,8 @@
#include <Qt3DRender/private/renderstateset_p.h>
#include <Qt3DCore/qnodepropertychange.h>
+#include <Qt3DCore/qnodeaddedpropertychange.h>
+#include <Qt3DCore/qnoderemovedpropertychange.h>
QT_BEGIN_NAMESPACE
@@ -81,7 +83,7 @@ void RenderPass::updateFromPeer(Qt3DCore::QNode *peer)
// The RenderPass clones frontend bindings in case the frontend ever removes them
// TO DO: We probably need a QParameterMapper manager
Q_FOREACH (QFilterKey *c, pass->filterKeys())
- appendAnnotation(c->id());
+ appendFilterKey(c->id());
Q_FOREACH (QRenderState *renderState, pass->renderStates())
appendRenderState(renderState->id());
Q_FOREACH (QParameter *p, pass->parameters())
@@ -101,33 +103,30 @@ void RenderPass::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &c
void RenderPass::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
{
- QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e);
switch (e->type()) {
-
case NodeAdded: {
- if (propertyChange->propertyName() == QByteArrayLiteral("filterKeys")) {
- appendAnnotation(propertyChange->value().value<QNodeId>());
- } else if (propertyChange->propertyName() == QByteArrayLiteral("shaderProgram")) {
- m_shaderUuid = propertyChange->value().value<QNodeId>();
- } else if (propertyChange->propertyName() == QByteArrayLiteral("renderState")) {
- QNodePtr nodePtr = propertyChange->value().value<QNodePtr>();
- appendRenderState(nodePtr->id());
- } else if (propertyChange->propertyName() == QByteArrayLiteral("parameter")) {
- m_parameterPack.appendParameter(propertyChange->value().value<QNodeId>());
- }
+ const auto change = qSharedPointerCast<QNodeAddedPropertyChange>(e);
+ if (change->propertyName() == QByteArrayLiteral("filterKeys"))
+ appendFilterKey(change->addedNodeId());
+ else if (change->propertyName() == QByteArrayLiteral("shaderProgram"))
+ m_shaderUuid = change->addedNodeId();
+ else if (change->propertyName() == QByteArrayLiteral("renderState"))
+ appendRenderState(change->addedNodeId());
+ else if (change->propertyName() == QByteArrayLiteral("parameter"))
+ m_parameterPack.appendParameter(change->addedNodeId());
break;
}
case NodeRemoved: {
- if (propertyChange->propertyName() == QByteArrayLiteral("filterKeys")) {
- removeAnnotation(propertyChange->value().value<QNodeId>());
- } else if (propertyChange->propertyName() == QByteArrayLiteral("shaderProgram")) {
+ const auto change = qSharedPointerCast<QNodeRemovedPropertyChange>(e);
+ if (change->propertyName() == QByteArrayLiteral("filterKeys"))
+ removeFilterKey(change->removedNodeId());
+ else if (change->propertyName() == QByteArrayLiteral("shaderProgram"))
m_shaderUuid = QNodeId();
- } else if (propertyChange->propertyName() == QByteArrayLiteral("renderState")) {
- removeRenderState(propertyChange->value().value<QNodeId>());
- } else if (propertyChange->propertyName() == QByteArrayLiteral("parameter")) {
- m_parameterPack.removeParameter(propertyChange->value().value<QNodeId>());
- }
+ else if (change->propertyName() == QByteArrayLiteral("renderState"))
+ removeRenderState(change->removedNodeId());
+ else if (change->propertyName() == QByteArrayLiteral("parameter"))
+ m_parameterPack.removeParameter(change->removedNodeId());
break;
}
@@ -154,15 +153,15 @@ QVector<Qt3DCore::QNodeId> RenderPass::parameters() const
return m_parameterPack.parameters();
}
-void RenderPass::appendAnnotation(Qt3DCore::QNodeId annotationId)
+void RenderPass::appendFilterKey(Qt3DCore::QNodeId filterKeyId)
{
- if (!m_filterKeyList.contains(annotationId))
- m_filterKeyList.append(annotationId);
+ if (!m_filterKeyList.contains(filterKeyId))
+ m_filterKeyList.append(filterKeyId);
}
-void RenderPass::removeAnnotation(Qt3DCore::QNodeId annotationId)
+void RenderPass::removeFilterKey(Qt3DCore::QNodeId filterKeyId)
{
- m_filterKeyList.removeOne(annotationId);
+ m_filterKeyList.removeOne(filterKeyId);
}
} // namespace Render
diff --git a/src/render/materialsystem/renderpass_p.h b/src/render/materialsystem/renderpass_p.h
index 67f7dda97..67aa015b9 100644
--- a/src/render/materialsystem/renderpass_p.h
+++ b/src/render/materialsystem/renderpass_p.h
@@ -88,8 +88,8 @@ public:
QVector<Qt3DCore::QNodeId> parameters() const;
private:
- void appendAnnotation(Qt3DCore::QNodeId criterionId);
- void removeAnnotation(Qt3DCore::QNodeId criterionId);
+ void appendFilterKey(Qt3DCore::QNodeId filterKeyId);
+ void removeFilterKey(Qt3DCore::QNodeId filterKeyId);
void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
diff --git a/tests/auto/render/renderpass/tst_renderpass.cpp b/tests/auto/render/renderpass/tst_renderpass.cpp
index ee91d7b58..213772857 100644
--- a/tests/auto/render/renderpass/tst_renderpass.cpp
+++ b/tests/auto/render/renderpass/tst_renderpass.cpp
@@ -30,6 +30,8 @@
#include <Qt3DRender/private/renderpass_p.h>
#include <Qt3DCore/QNodePropertyChange>
+#include <Qt3DCore/QNodeAddedPropertyChange>
+#include <Qt3DCore/QNodeRemovedPropertyChange>
#include <Qt3DRender/QFilterKey>
#include <Qt3DRender/QRenderPass>
@@ -132,8 +134,7 @@ private slots:
backend.setRenderer(&renderer);
// WHEN
- QNodePropertyChangePtr addChange(new QNodePropertyChange(NodeAdded, QSceneChange::Node, shader->id()));
- addChange->setValue(QVariant::fromValue(shader->id()));
+ const auto addChange = Qt3DCore::QNodeAddedPropertyChangePtr::create(Qt3DCore::QNodeId(), shader->id());
addChange->setPropertyName("shaderProgram");
backend.sceneChangeEvent(addChange);
@@ -142,8 +143,7 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- QNodePropertyChangePtr removeChange(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, shader->id()));
- removeChange->setValue(QVariant::fromValue(shader->id()));
+ const auto removeChange = Qt3DCore::QNodeRemovedPropertyChangePtr::create(Qt3DCore::QNodeId(), shader->id());
removeChange->setPropertyName("shaderProgram");
backend.sceneChangeEvent(removeChange);
@@ -161,8 +161,7 @@ private slots:
backend.setRenderer(&renderer);
// WHEN
- QNodePropertyChangePtr addChange(new QNodePropertyChange(NodeAdded, QSceneChange::Node, annotation->id()));
- addChange->setValue(QVariant::fromValue(annotation->id()));
+ const auto addChange = Qt3DCore::QNodeAddedPropertyChangePtr::create(Qt3DCore::QNodeId(), annotation->id());
addChange->setPropertyName("filterKeys");
backend.sceneChangeEvent(addChange);
@@ -172,8 +171,7 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- QNodePropertyChangePtr removeChange(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, annotation->id()));
- removeChange->setValue(QVariant::fromValue(annotation->id()));
+ const auto removeChange = Qt3DCore::QNodeRemovedPropertyChangePtr::create(Qt3DCore::QNodeId(), annotation->id());
removeChange->setPropertyName("filterKeys");
backend.sceneChangeEvent(removeChange);
@@ -191,8 +189,7 @@ private slots:
backend.setRenderer(&renderer);
// WHEN
- QNodePropertyChangePtr addChange(new QNodePropertyChange(NodeAdded, QSceneChange::Node, parameter->id()));
- addChange->setValue(QVariant::fromValue(parameter->id()));
+ const auto addChange = Qt3DCore::QNodeAddedPropertyChangePtr::create(Qt3DCore::QNodeId(), parameter->id());
addChange->setPropertyName("parameter");
backend.sceneChangeEvent(addChange);
@@ -202,8 +199,7 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- QNodePropertyChangePtr removeChange(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, parameter->id()));
- removeChange->setValue(QVariant::fromValue(parameter->id()));
+ const auto removeChange = Qt3DCore::QNodeRemovedPropertyChangePtr::create(Qt3DCore::QNodeId(), parameter->id());
removeChange->setPropertyName("parameter");
backend.sceneChangeEvent(removeChange);
@@ -224,8 +220,7 @@ private slots:
backendState->setPeer(frontendState);
// WHEN
- QNodePropertyChangePtr addChange(new QNodePropertyChange(NodeAdded, QSceneChange::Node, frontendState->id()));
- addChange->setValue(QVariant::fromValue(frontendStatePtr));
+ const auto addChange = Qt3DCore::QNodeAddedPropertyChangePtr::create(Qt3DCore::QNodeId(), frontendState->id());
addChange->setPropertyName("renderState");
backend.sceneChangeEvent(addChange);
@@ -235,8 +230,7 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- QNodePropertyChangePtr removeChange(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, frontendState->id()));
- removeChange->setValue(QVariant::fromValue(frontendState->id()));
+ const auto removeChange = Qt3DCore::QNodeRemovedPropertyChangePtr::create(Qt3DCore::QNodeId(), frontendState->id());
removeChange->setPropertyName("renderState");
backend.sceneChangeEvent(removeChange);