summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-06 15:49:20 +0100
committerPaul Lemire <paul.lemire@kdab.com>2019-09-19 13:42:10 +0200
commit56785807dc5aec77506ea02174fd46a67de57b5f (patch)
tree6733628b760e0995282c17cd1dd6b3cfa939cc62
parent8bb3c656be7df26b260c217cd92bab6c9664981a (diff)
Update QParameter to use direct sync
Change-Id: Iea1a2db5d4bcd2ef563993a434bf8e2166d64ed5 Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
-rw-r--r--src/render/materialsystem/parameter.cpp47
-rw-r--r--src/render/materialsystem/parameter_p.h5
-rw-r--r--tests/auto/render/parameter/tst_parameter.cpp27
4 files changed, 38 insertions, 43 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index b7db4c53e..633343f29 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -286,7 +286,7 @@ void QRenderAspectPrivate::registerBackendTypes()
q->registerBackendType<QAbstractLight, true>(QSharedPointer<Render::RenderLightFunctor>::create(m_renderer, m_nodeManagers));
q->registerBackendType<QEnvironmentLight, true>(QSharedPointer<Render::NodeFunctor<Render::EnvironmentLight, Render::EnvironmentLightManager> >::create(m_renderer));
q->registerBackendType<QMaterial, true>(QSharedPointer<Render::NodeFunctor<Render::Material, Render::MaterialManager> >::create(m_renderer));
- q->registerBackendType<QParameter>(QSharedPointer<Render::NodeFunctor<Render::Parameter, Render::ParameterManager> >::create(m_renderer));
+ q->registerBackendType<QParameter, true>(QSharedPointer<Render::NodeFunctor<Render::Parameter, Render::ParameterManager> >::create(m_renderer));
q->registerBackendType<QRenderPass>(QSharedPointer<Render::NodeFunctor<Render::RenderPass, Render::RenderPassManager> >::create(m_renderer));
q->registerBackendType<QShaderData>(QSharedPointer<Render::RenderShaderDataFunctor>::create(m_renderer, m_nodeManagers));
q->registerBackendType<QShaderProgram>(QSharedPointer<Render::NodeFunctor<Render::Shader, Render::ShaderManager> >::create(m_renderer));
diff --git a/src/render/materialsystem/parameter.cpp b/src/render/materialsystem/parameter.cpp
index 86ca418aa..d32e60a2d 100644
--- a/src/render/materialsystem/parameter.cpp
+++ b/src/render/materialsystem/parameter.cpp
@@ -70,34 +70,33 @@ void Parameter::cleanup()
m_uniformValue = UniformValue();
}
-void Parameter::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
+void Parameter::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
{
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QParameterData>>(change);
- const auto &data = typedChange->data;
- m_name = data.name;
- m_nameId = StringToInt::lookupId(m_name);
- m_uniformValue = UniformValue::fromVariant(data.backendValue);
- markDirty(AbstractRenderer::ParameterDirty);
-}
+ const QParameter *node = qobject_cast<const QParameter *>(frontEnd);
+ if (!node)
+ return;
-void Parameter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
-{
- QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e);
-
- if (e->type() == PropertyUpdated) {
- if (propertyChange->propertyName() == QByteArrayLiteral("name")) {
- m_name = propertyChange->value().toString();
- m_nameId = StringToInt::lookupId(m_name);
- markDirty(AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty);
- } else if (propertyChange->propertyName() == QByteArrayLiteral("value")) {
- m_uniformValue = UniformValue::fromVariant(propertyChange->value());
- markDirty(AbstractRenderer::ParameterDirty);
- } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) {
- markDirty(AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty);
- }
+ AbstractRenderer::BackendNodeDirtySet dirty = firstTime ? AbstractRenderer::ParameterDirty : static_cast<AbstractRenderer::BackendNodeDirtyFlag>(0);
+ if (node->isEnabled() != isEnabled())
+ dirty |= (AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty);
+
+ if (node->name() != m_name) {
+ m_name = node->name();
+ m_nameId = StringToInt::lookupId(m_name);
+ dirty |= (AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty);
}
- BackendNode::sceneChangeEvent(e);
+ QParameterPrivate* d = static_cast<QParameterPrivate *>(QParameterPrivate::get(const_cast<QParameter *>(node)));
+ if (d->m_backendValue != m_backendValue) {
+ m_backendValue = d->m_backendValue;
+ m_uniformValue = UniformValue::fromVariant(m_backendValue);
+ dirty |= (AbstractRenderer::ParameterDirty);
+ }
+
+ if (dirty)
+ markDirty(dirty);
+
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
}
QString Parameter::name() const
diff --git a/src/render/materialsystem/parameter_p.h b/src/render/materialsystem/parameter_p.h
index 4ab04bc8e..9deaa11f3 100644
--- a/src/render/materialsystem/parameter_p.h
+++ b/src/render/materialsystem/parameter_p.h
@@ -71,16 +71,15 @@ public:
void cleanup();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
QString name() const;
int nameId() const Q_DECL_NOTHROW { return m_nameId; }
const UniformValue &uniformValue() const { return m_uniformValue; }
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
-
QString m_name;
+ QVariant m_backendValue;
UniformValue m_uniformValue;
int m_nameId;
};
diff --git a/tests/auto/render/parameter/tst_parameter.cpp b/tests/auto/render/parameter/tst_parameter.cpp
index 3b83c1c82..44e7b7020 100644
--- a/tests/auto/render/parameter/tst_parameter.cpp
+++ b/tests/auto/render/parameter/tst_parameter.cpp
@@ -66,7 +66,7 @@ private Q_SLOTS:
// WHEN
backendParameter.setRenderer(&renderer);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
backendParameter.cleanup();
// THEN
@@ -89,7 +89,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Parameter backendParameter;
backendParameter.setRenderer(&renderer);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
// THEN
QCOMPARE(backendParameter.isEnabled(), true);
@@ -105,7 +105,7 @@ private Q_SLOTS:
Qt3DRender::Render::Parameter backendParameter;
backendParameter.setRenderer(&renderer);
parameter.setEnabled(false);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
// THEN
QCOMPARE(backendParameter.peerId(), parameter.id());
@@ -121,13 +121,14 @@ private Q_SLOTS:
TestRenderer renderer;
backendParameter.setRenderer(&renderer);
+ Qt3DRender::QParameter parameter;
+ simulateInitializationSync(&parameter, &backendParameter);
+
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendParameter.sceneChangeEvent(change);
+ parameter.setEnabled(newValue);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.isEnabled(), newValue);
@@ -137,10 +138,8 @@ private Q_SLOTS:
{
// WHEN
const QString newValue = QStringLiteral("C7");
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("name");
- change->setValue(QVariant::fromValue(newValue));
- backendParameter.sceneChangeEvent(change);
+ parameter.setName(newValue);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.name(), newValue);
@@ -152,10 +151,8 @@ private Q_SLOTS:
// WHEN
const QVariant value = QVariant::fromValue(QVector3D(350.0f, 427.0f, 454.0f));
const Qt3DRender::Render::UniformValue newValue = Qt3DRender::Render::UniformValue::fromVariant(value);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("value");
- change->setValue(value);
- backendParameter.sceneChangeEvent(change);
+ parameter.setValue(value);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.uniformValue(), newValue);