summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-08-04 16:46:35 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-08-07 11:31:13 +0000
commit4bbe0ad81a06fb42f3aab592e5645e546bfb90db (patch)
tree7fdc045a24e7ea25b607713572e42a0f724336bd /src/render
parent6daa49156d2d7875a2cfd99a0722055adf1e7484 (diff)
QBuffer/RenderBuffer: add a functor property
Change-Id: Ic896425284c69a4cd71365b592444ce7edbc2dc2 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/backend/renderbuffer.cpp10
-rw-r--r--src/render/backend/renderbuffer_p.h2
-rw-r--r--src/render/io/qbuffer.cpp22
-rw-r--r--src/render/io/qbuffer.h5
-rw-r--r--src/render/io/qbuffer_p.h2
5 files changed, 39 insertions, 2 deletions
diff --git a/src/render/backend/renderbuffer.cpp b/src/render/backend/renderbuffer.cpp
index 3f969c27a..81556322c 100644
--- a/src/render/backend/renderbuffer.cpp
+++ b/src/render/backend/renderbuffer.cpp
@@ -72,6 +72,7 @@ void RenderBuffer::updateFromPeer(QNode *peer)
m_type = buffer->type();
m_usage = buffer->usage();
m_data = buffer->data();
+ m_functor = buffer->bufferFunctor();
m_bufferDirty = true;
}
}
@@ -82,14 +83,19 @@ void RenderBuffer::sceneChangeEvent(const QSceneChangePtr &e)
QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e);
QByteArray propertyName = propertyChange->propertyName();
if (propertyName == QByteArrayLiteral("data")) {
- m_data = propertyChange->value().value<QByteArray>();
- m_bufferDirty = true;
+ QByteArray newData = propertyChange->value().value<QByteArray>();
+ m_bufferDirty |= m_data != newData;
+ m_data = newData;
} else if (propertyName == QByteArrayLiteral("type")) {
m_type = static_cast<QBuffer::BufferType>(propertyChange->value().value<int>());
m_bufferDirty = true;
} else if (propertyName == QByteArrayLiteral("usage")) {
m_usage = static_cast<QBuffer::UsageType>(propertyChange->value().value<int>());
m_bufferDirty = true;
+ } else if (propertyName == QByteArrayLiteral("bufferFunctor")) {
+ QBufferFunctorPtr newFunctor = propertyChange->value().value<QBufferFunctorPtr>();
+ m_bufferDirty |= !(*newFunctor == *m_functor);
+ m_functor = newFunctor;
}
}
}
diff --git a/src/render/backend/renderbuffer_p.h b/src/render/backend/renderbuffer_p.h
index 5a1e2b904..1fd4fd76f 100644
--- a/src/render/backend/renderbuffer_p.h
+++ b/src/render/backend/renderbuffer_p.h
@@ -39,6 +39,7 @@
#include <Qt3DCore/qbackendnode.h>
#include <Qt3DRenderer/qbuffer.h>
+#include <Qt3DRenderer/qbufferfunctor.h>
QT_BEGIN_NAMESPACE
@@ -67,6 +68,7 @@ private:
QBuffer::UsageType m_usage;
QByteArray m_data;
bool m_bufferDirty;
+ QBufferFunctorPtr m_functor;
};
} // Render
diff --git a/src/render/io/qbuffer.cpp b/src/render/io/qbuffer.cpp
index ddaa701e6..7f28151ec 100644
--- a/src/render/io/qbuffer.cpp
+++ b/src/render/io/qbuffer.cpp
@@ -37,6 +37,7 @@
#include "qbuffer.h"
#include "qbuffer_p.h"
#include <Qt3DRenderer/private/renderlogging_p.h>
+#include <Qt3DCore/qscenepropertychange.h>
QT_BEGIN_NAMESPACE
@@ -79,6 +80,7 @@ void QBuffer::copy(const QNode *ref)
const QBuffer *buffer = static_cast<const QBuffer *>(ref);
d_func()->m_type = buffer->d_func()->m_type;
d_func()->m_usage = buffer->d_func()->m_usage;
+ d_func()->m_functor = buffer->d_func()->m_functor;
}
QBuffer::UsageType QBuffer::usage() const
@@ -102,6 +104,26 @@ QBuffer::BufferType QBuffer::type() const
return d->m_type;
}
+void QBuffer::setBufferFunctor(const QBufferFunctorPtr &functor)
+{
+ Q_D(QBuffer);
+ if (functor && d->m_functor && *functor == *d->m_functor)
+ return;
+ d->m_functor = functor;
+ if (d->m_changeArbiter != Q_NULLPTR) {
+ QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id()));
+ change->setPropertyName("bufferFunctor");
+ change->setValue(QVariant::fromValue(d->m_functor));
+ d->notifyObservers(change);
+ }
+}
+
+QBufferFunctorPtr QBuffer::bufferFunctor() const
+{
+ Q_D(const QBuffer);
+ return d->m_functor;
+}
+
void QBuffer::setType(QBuffer::BufferType type)
{
Q_D(QBuffer);
diff --git a/src/render/io/qbuffer.h b/src/render/io/qbuffer.h
index 5e99a1a80..aad1ebcaa 100644
--- a/src/render/io/qbuffer.h
+++ b/src/render/io/qbuffer.h
@@ -51,6 +51,8 @@ GLint tupleSizeFromType(GLint type);
GLuint byteSizeFromType(GLint type);
class QBufferPrivate;
+class QBufferFunctor;
+typedef QSharedPointer<QBufferFunctor> QBufferFunctorPtr;
class QT3DRENDERERSHARED_EXPORT QBuffer : public QAbstractBuffer
{
@@ -91,6 +93,9 @@ public:
void setType(BufferType type);
BufferType type() const;
+ void setBufferFunctor(const QBufferFunctorPtr &functor);
+ QBufferFunctorPtr bufferFunctor() const;
+
protected:
QBuffer(QBufferPrivate &dd, QBuffer::BufferType ty, QNode *parent = 0);
void copy(const QNode *ref) Q_DECL_OVERRIDE;
diff --git a/src/render/io/qbuffer_p.h b/src/render/io/qbuffer_p.h
index 036a9e26d..bab9e95f9 100644
--- a/src/render/io/qbuffer_p.h
+++ b/src/render/io/qbuffer_p.h
@@ -39,6 +39,7 @@
#include <private/qabstractbuffer_p.h>
#include <Qt3DRenderer/qbuffer.h>
+#include <Qt3DRenderer/qbufferfunctor.h>
#include <Qt3DRenderer/qt3drenderer_global.h>
#include <QOpenGLBuffer>
@@ -53,6 +54,7 @@ public:
QBuffer::BufferType m_type;
QBuffer::UsageType m_usage;
+ QBufferFunctorPtr m_functor;
};
} // Qt3D