diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-08-03 18:50:45 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-08-07 11:30:31 +0000 |
commit | 661815d71c5748b43e5c6cf2c36c54dc128142a9 (patch) | |
tree | 16d5fb89b914a59cccee016da6180540de11f91b /src | |
parent | 8efa2c26a51e57b0f519ba45d96c363d6bfb46e7 (diff) |
QGeometryRenderer: add a primitiveCount property
This will be used as the count to pass to the draw calls
Change-Id: I2bccb35775cd6ba1132944d4d91aa5724ab00033
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/backend/rendergeometryrenderer.cpp | 7 | ||||
-rw-r--r-- | src/render/backend/rendergeometryrenderer_p.h | 2 | ||||
-rw-r--r-- | src/render/frontend/qgeometryrenderer.cpp | 18 | ||||
-rw-r--r-- | src/render/frontend/qgeometryrenderer.h | 4 | ||||
-rw-r--r-- | src/render/frontend/qgeometryrenderer_p.h | 1 |
5 files changed, 31 insertions, 1 deletions
diff --git a/src/render/backend/rendergeometryrenderer.cpp b/src/render/backend/rendergeometryrenderer.cpp index fc06f8632..0cf9bc7ed 100644 --- a/src/render/backend/rendergeometryrenderer.cpp +++ b/src/render/backend/rendergeometryrenderer.cpp @@ -47,6 +47,7 @@ namespace Render { RenderGeometryRenderer::RenderGeometryRenderer() : QBackendNode(ReadOnly) , m_instanceCount(0) + , m_primitiveCount(0) , m_baseVertex(0) , m_baseInstance(0) , m_restartIndex(-1) @@ -59,12 +60,12 @@ RenderGeometryRenderer::RenderGeometryRenderer() RenderGeometryRenderer::~RenderGeometryRenderer() { - } void RenderGeometryRenderer::cleanup() { m_instanceCount = 0; + m_primitiveCount = 0; m_baseVertex = 0; m_baseInstance = 0; m_restartIndex = -1; @@ -84,6 +85,7 @@ void RenderGeometryRenderer::updateFromPeer(QNode *peer) QGeometryRenderer *geometryRenderer = static_cast<QGeometryRenderer *>(peer); if (geometryRenderer) { m_instanceCount = geometryRenderer->instanceCount(); + m_primitiveCount = geometryRenderer->primitiveCount(); m_baseVertex = geometryRenderer->baseVertex(); m_baseInstance = geometryRenderer->baseInstance(); m_restartIndex = geometryRenderer->restartIndex(); @@ -109,6 +111,9 @@ void RenderGeometryRenderer::sceneChangeEvent(const QSceneChangePtr &e) if (propertyName == QByteArrayLiteral("instanceCount")) { m_instanceCount = propertyChange->value().value<int>(); m_dirty = true; + } else if (propertyName == QByteArrayLiteral("primitiveCount")) { + m_primitiveCount = propertyChange->value().value<int>(); + m_dirty = true; } else if (propertyName == QByteArrayLiteral("baseVertex")) { m_baseVertex = propertyChange->value().value<int>(); m_dirty = true; diff --git a/src/render/backend/rendergeometryrenderer_p.h b/src/render/backend/rendergeometryrenderer_p.h index 7a3ca4552..587727fc4 100644 --- a/src/render/backend/rendergeometryrenderer_p.h +++ b/src/render/backend/rendergeometryrenderer_p.h @@ -61,6 +61,7 @@ public: inline QNodeId geometryId() const { return m_geometryId; } inline int instanceCount() const { return m_instanceCount; } + inline int primitiveCount() const { return m_primitiveCount; } inline int baseVertex() const { return m_baseVertex; } inline int baseInstance() const { return m_baseInstance; } inline int restartIndex() const { return m_restartIndex; } @@ -72,6 +73,7 @@ public: private: QNodeId m_geometryId; int m_instanceCount; + int m_primitiveCount; int m_baseVertex; int m_baseInstance; int m_restartIndex; diff --git a/src/render/frontend/qgeometryrenderer.cpp b/src/render/frontend/qgeometryrenderer.cpp index b5acdd02f..eb67f63cf 100644 --- a/src/render/frontend/qgeometryrenderer.cpp +++ b/src/render/frontend/qgeometryrenderer.cpp @@ -47,6 +47,7 @@ namespace Qt3D { QGeometryRendererPrivate::QGeometryRendererPrivate() : QComponentPrivate() , m_instanceCount(1) + , m_primitiveCount(0) , m_baseVertex(0) , m_baseInstance(0) , m_restartIndex(-1) @@ -77,6 +78,12 @@ int QGeometryRenderer::instanceCount() const return d->m_instanceCount; } +int QGeometryRenderer::primitiveCount() const +{ + Q_D(const QGeometryRenderer); + return d->m_primitiveCount; +} + int QGeometryRenderer::baseVertex() const { Q_D(const QGeometryRenderer); @@ -123,6 +130,16 @@ void QGeometryRenderer::setInstanceCount(int instanceCount) emit instanceCountChanged(); } +void QGeometryRenderer::setPrimitiveCount(int primitiveCount) +{ + Q_D(QGeometryRenderer); + if (d->m_primitiveCount == primitiveCount) + return; + + d->m_primitiveCount = primitiveCount; + emit primitiveCountChanged(); +} + void QGeometryRenderer::setBaseVertex(int baseVertex) { Q_D(QGeometryRenderer); @@ -207,6 +224,7 @@ void QGeometryRenderer::copy(const QNode *ref) QComponent::copy(ref); const QGeometryRenderer *other = static_cast<const QGeometryRenderer *>(ref); d_func()->m_instanceCount = other->d_func()->m_instanceCount; + d_func()->m_primitiveCount = other->d_func()->m_primitiveCount; d_func()->m_baseVertex = other->d_func()->m_baseVertex; d_func()->m_baseInstance = other->d_func()->m_baseInstance; d_func()->m_restartIndex = other->d_func()->m_restartIndex; diff --git a/src/render/frontend/qgeometryrenderer.h b/src/render/frontend/qgeometryrenderer.h index 3258b6082..7ffd442d2 100644 --- a/src/render/frontend/qgeometryrenderer.h +++ b/src/render/frontend/qgeometryrenderer.h @@ -51,6 +51,7 @@ class QT3DRENDERERSHARED_EXPORT QGeometryRenderer : public QComponent { Q_OBJECT Q_PROPERTY(int instanceCount READ instanceCount WRITE setInstanceCount NOTIFY instanceCountChanged) + Q_PROPERTY(int primitiveCount READ primitiveCount WRITE setPrimitiveCount NOTIFY primitiveCountChanged) Q_PROPERTY(int baseVertex READ baseVertex WRITE setBaseVertex NOTIFY baseVertexChanged) Q_PROPERTY(int baseInstance READ baseInstance WRITE setBaseInstance NOTIFY baseInstanceChanged) Q_PROPERTY(int restartIndex READ restartIndex WRITE setRestartIndex NOTIFY restartIndexChanged) @@ -82,6 +83,7 @@ public: // also how to figure out which attribute(s?) hold the indices? int instanceCount() const; + int primitiveCount() const; int baseVertex() const; int baseInstance() const; int restartIndex() const; @@ -90,6 +92,7 @@ public: PrimitiveType primitiveType() const; void setInstanceCount(int instanceCount); + void setPrimitiveCount(int primitiveCount); void setBaseVertex(int baseVertex); void setBaseInstance(int baseInstance); void setRestartIndex(int index); @@ -99,6 +102,7 @@ public: Q_SIGNALS: void instanceCountChanged(); + void primitiveCountChanged(); void baseVertexChanged(); void baseInstanceChanged(); void restartIndexChanged(); diff --git a/src/render/frontend/qgeometryrenderer_p.h b/src/render/frontend/qgeometryrenderer_p.h index c32c2df41..13df2cd9f 100644 --- a/src/render/frontend/qgeometryrenderer_p.h +++ b/src/render/frontend/qgeometryrenderer_p.h @@ -51,6 +51,7 @@ public: Q_DECLARE_PUBLIC(QGeometryRenderer) int m_instanceCount; + int m_primitiveCount; int m_baseVertex; int m_baseInstance; int m_restartIndex; |