summaryrefslogtreecommitdiffstats
path: root/src/quick3d/quick3drender/items
diff options
context:
space:
mode:
authorOleg Evseev <ev.mipt@gmail.com>2016-04-30 01:06:30 +0300
committerSean Harmer <sean.harmer@kdab.com>2016-08-13 15:37:44 +0000
commitc818f3b70cdcac27b8aaff0b53a5790beebba9e7 (patch)
treeea746e0263df506362263e3e4c277bd447bcbacb /src/quick3d/quick3drender/items
parent8fed49011d501361e63aef7423a3939301ac8b6c (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.cpp22
-rw-r--r--src/quick3d/quick3drender/items/quick3dbuffer_p.h8
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();