summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2015-10-11 13:03:49 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-10-14 18:52:33 +0000
commitc8b386a57d53eb2c24f1e32f483569c56db6f362 (patch)
tree4bed01feb9b11e612c8ddd72926bc2e0437f551b /src
parentf85ae770b47e0e482e88ed5e7b14d8dfb3ea7e97 (diff)
RenderBuffer: handle the sync property
And update the frontend QBuffer with the data obtained from the functor if sync is true. Change-Id: I86e4dff50fedf3fbc6057843a8a60c978d68b047 Task-number: QTBUG-48454 Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/geometry/buffer.cpp16
-rw-r--r--src/render/geometry/buffer_p.h2
-rw-r--r--src/render/geometry/qbuffer.cpp10
-rw-r--r--src/render/geometry/qbuffer.h1
4 files changed, 28 insertions, 1 deletions
diff --git a/src/render/geometry/buffer.cpp b/src/render/geometry/buffer.cpp
index 762148182..0fdd258a1 100644
--- a/src/render/geometry/buffer.cpp
+++ b/src/render/geometry/buffer.cpp
@@ -36,6 +36,7 @@
#include "buffer_p.h"
#include <Qt3DCore/qscenepropertychange.h>
+#include <Qt3DCore/qbackendscenepropertychange.h>
#include <Qt3DRenderer/private/buffermanager_p.h>
QT_BEGIN_NAMESPACE
@@ -46,10 +47,11 @@ namespace Qt3DRender {
namespace Render {
Buffer::Buffer()
- : QBackendNode(QBackendNode::ReadOnly)
+ : QBackendNode(QBackendNode::ReadWrite)
, m_type(QBuffer::VertexBuffer)
, m_usage(QBuffer::StaticDraw)
, m_bufferDirty(false)
+ , m_sync(false)
, m_manager(Q_NULLPTR)
{
// Maybe it could become read write if we want to inform
@@ -67,6 +69,7 @@ void Buffer::cleanup()
m_data.clear();
m_functor.reset();
m_bufferDirty = false;
+ m_sync = false;
}
@@ -79,6 +82,14 @@ void Buffer::executeFunctor()
{
Q_ASSERT(m_functor);
m_data = (*m_functor)();
+ if (m_sync) {
+ // Send data back to the frontend
+ QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerUuid()));
+ e->setPropertyName("data");
+ e->setTargetNode(peerUuid());
+ e->setValue(QVariant::fromValue(m_data));
+ notifyObservers(e);
+ }
}
void Buffer::updateFromPeer(Qt3DCore::QNode *peer)
@@ -93,6 +104,7 @@ void Buffer::updateFromPeer(Qt3DCore::QNode *peer)
if (m_functor && m_manager != Q_NULLPTR)
m_manager->addDirtyBuffer(peerUuid());
m_bufferDirty = true;
+ m_sync = buffer->isSync();
}
}
@@ -117,6 +129,8 @@ void Buffer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
m_functor = newFunctor;
if (m_functor && m_manager != Q_NULLPTR)
m_manager->addDirtyBuffer(peerUuid());
+ } else if (propertyName == QByteArrayLiteral("sync")) {
+ m_sync = propertyChange->value().toBool();
}
}
}
diff --git a/src/render/geometry/buffer_p.h b/src/render/geometry/buffer_p.h
index 1d5d02dae..7da08a2a2 100644
--- a/src/render/geometry/buffer_p.h
+++ b/src/render/geometry/buffer_p.h
@@ -78,6 +78,7 @@ public:
inline QByteArray data() const { return m_data; }
inline bool isDirty() const { return m_bufferDirty; }
inline QBufferFunctorPtr bufferFunctor() const { return m_functor; }
+ inline bool isSync() const { return m_sync; }
void unsetDirty();
private:
@@ -85,6 +86,7 @@ private:
QBuffer::UsageType m_usage;
QByteArray m_data;
bool m_bufferDirty;
+ bool m_sync;
QBufferFunctorPtr m_functor;
BufferManager *m_manager;
};
diff --git a/src/render/geometry/qbuffer.cpp b/src/render/geometry/qbuffer.cpp
index 41c10e7e1..df789486b 100644
--- a/src/render/geometry/qbuffer.cpp
+++ b/src/render/geometry/qbuffer.cpp
@@ -87,6 +87,16 @@ void QBuffer::copy(const QNode *ref)
d_func()->m_sync = buffer->d_func()->m_sync;
}
+void QBuffer::sceneChangeEvent(const QSceneChangePtr &change)
+{
+ QScenePropertyChangePtr e = qSharedPointerCast<QScenePropertyChange>(change);
+ if (e->type() == NodeUpdated && e->propertyName() == QByteArrayLiteral("data")) {
+ const bool blocked = blockNotifications(true);
+ setData(e->value().toByteArray());
+ blockNotifications(blocked);
+ }
+}
+
QBuffer::UsageType QBuffer::usage() const
{
Q_D(const QBuffer);
diff --git a/src/render/geometry/qbuffer.h b/src/render/geometry/qbuffer.h
index 186f236a6..c2da32fbe 100644
--- a/src/render/geometry/qbuffer.h
+++ b/src/render/geometry/qbuffer.h
@@ -103,6 +103,7 @@ public:
protected:
QBuffer(QBufferPrivate &dd, QBuffer::BufferType ty, Qt3DCore::QNode *parent = 0);
void copy(const Qt3DCore::QNode *ref) Q_DECL_OVERRIDE;
+ void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) Q_DECL_OVERRIDE;
Q_SIGNALS:
void typeChanged();