summaryrefslogtreecommitdiffstats
path: root/src/render/geometry
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2016-05-03 21:26:04 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-05-04 15:33:03 +0000
commit333a10969112566c78e1725472ca07edb73c5e2a (patch)
treefa5f46776c754d5b3d090ed803804ca054613965 /src/render/geometry
parent7fa8b1523a0791a159c594687c89af7ae621752a (diff)
Add firstVertex to QGeometryRenderer API
To support glDrawArraysInstancedBaseInstance Task-number: QTBUG-51515 Change-Id: I0c95b351ff7a3668f17256d0d875c3c36537fd01 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/geometry')
-rw-r--r--src/render/geometry/geometryrenderer.cpp6
-rw-r--r--src/render/geometry/geometryrenderer_p.h2
-rw-r--r--src/render/geometry/qgeometryrenderer.cpp29
-rw-r--r--src/render/geometry/qgeometryrenderer.h4
-rw-r--r--src/render/geometry/qgeometryrenderer_p.h2
5 files changed, 43 insertions, 0 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp
index bc89a968c..da8b1aca0 100644
--- a/src/render/geometry/geometryrenderer.cpp
+++ b/src/render/geometry/geometryrenderer.cpp
@@ -63,6 +63,7 @@ GeometryRenderer::GeometryRenderer()
, m_vertexCount(0)
, m_indexOffset(0)
, m_firstInstance(0)
+ , m_firstVertex(0)
, m_restartIndexValue(-1)
, m_verticesPerPatch(0)
, m_primitiveRestartEnabled(false)
@@ -83,6 +84,7 @@ void GeometryRenderer::cleanup()
m_vertexCount = 0;
m_indexOffset = 0;
m_firstInstance = 0;
+ m_firstVertex = 0;
m_restartIndexValue = -1;
m_verticesPerPatch = 0;
m_primitiveRestartEnabled = false;
@@ -108,6 +110,7 @@ void GeometryRenderer::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBase
m_vertexCount = data.vertexCount;
m_indexOffset = data.indexOffset;
m_firstInstance = data.firstInstance;
+ m_firstVertex = data.firstVertex;
m_restartIndexValue = data.restartIndexValue;
m_verticesPerPatch = data.verticesPerPatch;
m_primitiveRestartEnabled = data.primitiveRestart;
@@ -140,6 +143,9 @@ void GeometryRenderer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
} else if (propertyName == QByteArrayLiteral("firstInstance")) {
m_firstInstance = propertyChange->value().value<int>();
m_dirty = true;
+ } else if (propertyName == QByteArrayLiteral("firstVertex")) {
+ m_firstVertex = propertyChange->value().value<int>();
+ m_dirty = true;
} else if (propertyName == QByteArrayLiteral("restartIndexValue")) {
m_restartIndexValue = propertyChange->value().value<int>();
m_dirty = true;
diff --git a/src/render/geometry/geometryrenderer_p.h b/src/render/geometry/geometryrenderer_p.h
index 640840962..3399e6f70 100644
--- a/src/render/geometry/geometryrenderer_p.h
+++ b/src/render/geometry/geometryrenderer_p.h
@@ -81,6 +81,7 @@ public:
inline int vertexCount() const { return m_vertexCount; }
inline int indexOffset() const { return m_indexOffset; }
inline int firstInstance() const { return m_firstInstance; }
+ inline int firstVertex() const { return m_firstVertex; }
inline int restartIndexValue() const { return m_restartIndexValue; }
inline int verticesPerPatch() const { return m_verticesPerPatch; }
inline bool primitiveRestartEnabled() const { return m_primitiveRestartEnabled; }
@@ -102,6 +103,7 @@ private:
int m_vertexCount;
int m_indexOffset;
int m_firstInstance;
+ int m_firstVertex;
int m_restartIndexValue;
int m_verticesPerPatch;
bool m_primitiveRestartEnabled;
diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp
index 716417bc5..87ca16f11 100644
--- a/src/render/geometry/qgeometryrenderer.cpp
+++ b/src/render/geometry/qgeometryrenderer.cpp
@@ -57,6 +57,7 @@ QGeometryRendererPrivate::QGeometryRendererPrivate()
, m_vertexCount(0)
, m_indexOffset(0)
, m_firstInstance(0)
+ , m_firstVertex(0)
, m_restartIndexValue(-1)
, m_verticesPerPatch(0)
, m_primitiveRestart(false)
@@ -92,6 +93,12 @@ QGeometryRendererPrivate::QGeometryRendererPrivate()
/*!
* \qmlproperty int GeometryRenderer::firstInstance
*
+ * Holds the first vertex.
+ */
+
+/*!
+ * \qmlproperty int GeometryRenderer::firstVertex
+ *
* Holds the base instance.
*/
@@ -213,6 +220,17 @@ int QGeometryRenderer::firstInstance() const
}
/*!
+ * \property QGeometryRenderer::firstVertex
+ *
+ * Holds the base vertex.
+ */
+int QGeometryRenderer::firstVertex() const
+{
+ Q_D(const QGeometryRenderer);
+ return d->m_firstVertex;
+}
+
+/*!
* \property QGeometryRenderer::restartIndex
*
* Holds the restart index.
@@ -316,6 +334,16 @@ void QGeometryRenderer::setFirstInstance(int firstInstance)
emit firstInstanceChanged(firstInstance);
}
+void QGeometryRenderer::setFirstVertex(int firstVertex)
+{
+ Q_D(QGeometryRenderer);
+ if (d->m_firstVertex == firstVertex)
+ return;
+
+ d->m_firstVertex = firstVertex;
+ emit firstVertexChanged(firstVertex);
+}
+
void QGeometryRenderer::setRestartIndexValue(int index)
{
Q_D(QGeometryRenderer);
@@ -423,6 +451,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QGeometryRenderer::createNodeCreationChange(
data.vertexCount = d->m_vertexCount;
data.indexOffset = d->m_indexOffset;
data.firstInstance = d->m_firstInstance;
+ data.firstVertex = d->m_firstVertex;
data.restartIndexValue = d->m_restartIndexValue;
data.verticesPerPatch = d->m_verticesPerPatch;
data.primitiveRestart = d->m_primitiveRestart;
diff --git a/src/render/geometry/qgeometryrenderer.h b/src/render/geometry/qgeometryrenderer.h
index a6d211c7a..cc4560921 100644
--- a/src/render/geometry/qgeometryrenderer.h
+++ b/src/render/geometry/qgeometryrenderer.h
@@ -60,6 +60,7 @@ class QT3DRENDERSHARED_EXPORT QGeometryRenderer : public Qt3DCore::QComponent
Q_PROPERTY(int vertexCount READ vertexCount WRITE setVertexCount NOTIFY vertexCountChanged)
Q_PROPERTY(int indexOffset READ indexOffset WRITE setIndexOffset NOTIFY indexOffsetChanged)
Q_PROPERTY(int firstInstance READ firstInstance WRITE setFirstInstance NOTIFY firstInstanceChanged)
+ Q_PROPERTY(int firstVertex READ firstVertex WRITE setFirstVertex NOTIFY firstVertexChanged)
Q_PROPERTY(int restartIndexValue READ restartIndexValue WRITE setRestartIndexValue NOTIFY restartIndexValueChanged)
Q_PROPERTY(int verticesPerPatch READ verticesPerPatch WRITE setVerticesPerPatch NOTIFY verticesPerPatchChanged)
Q_PROPERTY(bool primitiveRestartEnabled READ primitiveRestartEnabled WRITE setPrimitiveRestartEnabled NOTIFY primitiveRestartEnabledChanged)
@@ -92,6 +93,7 @@ public:
int vertexCount() const;
int indexOffset() const;
int firstInstance() const;
+ int firstVertex() const;
int restartIndexValue() const;
int verticesPerPatch() const;
bool primitiveRestartEnabled() const;
@@ -106,6 +108,7 @@ public Q_SLOTS:
void setVertexCount(int vertexCount);
void setIndexOffset(int indexOffset);
void setFirstInstance(int firstInstance);
+ void setFirstVertex(int firstVertex);
void setRestartIndexValue(int index);
void setVerticesPerPatch(int verticesPerPatch);
void setPrimitiveRestartEnabled(bool enabled);
@@ -117,6 +120,7 @@ Q_SIGNALS:
void vertexCountChanged(int vertexCount);
void indexOffsetChanged(int indexOffset);
void firstInstanceChanged(int firstInstance);
+ void firstVertexChanged(int firstVertex);
void restartIndexValueChanged(int restartIndexValue);
void verticesPerPatchChanged(int verticesPerPatch);
void primitiveRestartEnabledChanged(bool primitiveRestartEnabled);
diff --git a/src/render/geometry/qgeometryrenderer_p.h b/src/render/geometry/qgeometryrenderer_p.h
index 3341a7758..465c7fdca 100644
--- a/src/render/geometry/qgeometryrenderer_p.h
+++ b/src/render/geometry/qgeometryrenderer_p.h
@@ -71,6 +71,7 @@ public:
int m_vertexCount;
int m_indexOffset;
int m_firstInstance;
+ int m_firstVertex;
int m_restartIndexValue;
int m_verticesPerPatch;
bool m_primitiveRestart;
@@ -85,6 +86,7 @@ struct QGeometryRendererData
int vertexCount;
int indexOffset;
int firstInstance;
+ int firstVertex;
int restartIndexValue;
int verticesPerPatch;
bool primitiveRestart;