diff options
author | Oleg Evseev <ev.mipt@gmail.com> | 2016-04-30 01:06:30 +0300 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-13 15:37:44 +0000 |
commit | c818f3b70cdcac27b8aaff0b53a5790beebba9e7 (patch) | |
tree | ea746e0263df506362263e3e4c277bd447bcbacb /src/quick3d/quick3drender/items | |
parent | 8fed49011d501361e63aef7423a3939301ac8b6c (diff) |
Add partial data update support for QBuffer
Perform upadateData through queue of replacements specified by
QBufferUpdate: start position (offset) and QByteArray (replacing data)
Add example based on custom-mesh-cpp to show how updating data works.
Task-number: QTBUG-50720
Change-Id: I2eceb514af21209deb278d73c94773e39f300fb3
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick3d/quick3drender/items')
-rw-r--r-- | src/quick3d/quick3drender/items/quick3dbuffer.cpp | 22 | ||||
-rw-r--r-- | src/quick3d/quick3drender/items/quick3dbuffer_p.h | 8 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/quick3d/quick3drender/items/quick3dbuffer.cpp b/src/quick3d/quick3drender/items/quick3dbuffer.cpp index 73292a3b5..68ac21577 100644 --- a/src/quick3d/quick3drender/items/quick3dbuffer.cpp +++ b/src/quick3d/quick3drender/items/quick3dbuffer.cpp @@ -57,12 +57,12 @@ namespace { const int jsValueTypeId = qMetaTypeId<QJSValue>(); } -Quick3DBuffer::Quick3DBuffer(QObject *parent) - : QObject(parent) +Quick3DBuffer::Quick3DBuffer(Qt3DCore::QNode *parent) + : Qt3DRender::QBuffer(QBuffer::VertexBuffer, parent) , m_engine(nullptr) , m_v4engine(nullptr) { - QObject::connect(parentBuffer(), &Qt3DRender::QBuffer::dataChanged, this, &Quick3DBuffer::bufferDataChanged); + QObject::connect(this, &Qt3DRender::QBuffer::dataChanged, this, &Quick3DBuffer::bufferDataChanged); } QByteArray Quick3DBuffer::convertToRawData(const QJSValue &jsValue) @@ -83,16 +83,26 @@ QByteArray Quick3DBuffer::convertToRawData(const QJSValue &jsValue) QVariant Quick3DBuffer::bufferData() const { - return QVariant::fromValue(parentBuffer()->data()); + return QVariant::fromValue(data()); } void Quick3DBuffer::setBufferData(const QVariant &bufferData) { if (bufferData.userType() == QMetaType::QByteArray) { - parentBuffer()->setData(bufferData.toByteArray()); + QBuffer::setData(bufferData.toByteArray()); } else if (bufferData.userType() == jsValueTypeId) { QJSValue jsValue = bufferData.value<QJSValue>(); - parentBuffer()->setData(convertToRawData(jsValue)); + QBuffer::setData(convertToRawData(jsValue)); + } +} + +void Quick3DBuffer::updateData(int offset, const QVariant &bufferData) +{ + if (bufferData.userType() == QMetaType::QByteArray) { + QBuffer::updateData(offset, bufferData.toByteArray()); + } else if (bufferData.userType() == jsValueTypeId) { + QJSValue jsValue = bufferData.value<QJSValue>(); + QBuffer::updateData(offset, convertToRawData(jsValue)); } } diff --git a/src/quick3d/quick3drender/items/quick3dbuffer_p.h b/src/quick3d/quick3drender/items/quick3dbuffer_p.h index 512e6936c..c5cb39cdf 100644 --- a/src/quick3d/quick3drender/items/quick3dbuffer_p.h +++ b/src/quick3d/quick3drender/items/quick3dbuffer_p.h @@ -69,17 +69,19 @@ namespace Render { namespace Quick { -class QT3DQUICKRENDERSHARED_PRIVATE_EXPORT Quick3DBuffer : public QObject +class QT3DQUICKRENDERSHARED_PRIVATE_EXPORT Quick3DBuffer : public Qt3DRender::QBuffer { Q_OBJECT Q_PROPERTY(QVariant data READ bufferData WRITE setBufferData NOTIFY bufferDataChanged) public: - explicit Quick3DBuffer(QObject *parent = nullptr); - inline QBuffer *parentBuffer() const { return qobject_cast<QBuffer *>(parent()); } + explicit Quick3DBuffer(Qt3DCore::QNode *parent = nullptr); QVariant bufferData() const; void setBufferData(const QVariant &bufferData); +public Q_SLOTS: + void updateData(int offset, const QVariant &bytes); + Q_SIGNALS: void bufferDataChanged(); |