summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-08-03 18:50:45 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-08-07 11:30:31 +0000
commit661815d71c5748b43e5c6cf2c36c54dc128142a9 (patch)
tree16d5fb89b914a59cccee016da6180540de11f91b /src
parent8efa2c26a51e57b0f519ba45d96c363d6bfb46e7 (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.cpp7
-rw-r--r--src/render/backend/rendergeometryrenderer_p.h2
-rw-r--r--src/render/frontend/qgeometryrenderer.cpp18
-rw-r--r--src/render/frontend/qgeometryrenderer.h4
-rw-r--r--src/render/frontend/qgeometryrenderer_p.h1
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;