summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-27 11:04:58 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-27 11:39:25 +0300
commitd4d99e49c147f4f61c0d5e84e59c023789fae17d (patch)
treeba01feecf4a818b95b5260d6419589c7b5536768 /src/datavisualization/engine/scatter3drenderer.cpp
parent2d9dbd6bcb2c1a75f0a4230868854c495b2d530a (diff)
Allow resetting with existing array for bars and scatter
Improves performance when array dimensions do not change Task-number: QTRD-2335 Change-Id: I2733ff3552009a19cf285bc91426f595b64795dd Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/scatter3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 5c643bb2..28359c5a 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -140,23 +140,24 @@ void Scatter3DRenderer::initializeOpenGL()
void Scatter3DRenderer::updateDataModel(QScatterDataProxy *dataProxy)
{
- int actualDataSize = 0;
const QScatterDataArray &dataArray = *dataProxy->array();
calculateSceneScalingFactors();
int dataSize = dataArray.size();
- m_renderItemArray.resize(dataSize);
+ if (dataSize != m_renderItemArray.size())
+ m_renderItemArray.resize(dataSize);
for (int i = 0; i < dataSize ; i++) {
QVector3D dotPos = dataArray.at(i).position();
if ((dotPos.x() >= m_axisCacheX.min() && dotPos.x() <= m_axisCacheX.max())
&& (dotPos.y() >= m_axisCacheY.min() && dotPos.y() <= m_axisCacheY.max())
&& (dotPos.z() >= m_axisCacheZ.min() && dotPos.z() <= m_axisCacheZ.max())) {
- m_renderItemArray[actualDataSize].setPosition(dotPos);
- calculateTranslation(m_renderItemArray[actualDataSize]);
- actualDataSize++;
+ m_renderItemArray[i].setPosition(dotPos);
+ m_renderItemArray[i].setVisible(true);
+ calculateTranslation(m_renderItemArray[i]);
+ } else {
+ m_renderItemArray[i].setVisible(false);
}
}
- m_renderItemArray.resize(actualDataSize);
- m_dotSizeScale = (GLfloat)qBound(0.01, (2.0 / qSqrt((qreal)actualDataSize)), 0.1);
+ m_dotSizeScale = (GLfloat)qBound(0.01, (2.0 / qSqrt((qreal)dataSize)), 0.1);
m_selectedItem = 0;
Abstract3DRenderer::updateDataModel(dataProxy);
@@ -295,6 +296,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Draw dots to depth buffer
for (int dot = 0; dot < m_renderItemArray.size(); dot++) {
const ScatterRenderItem &item = m_renderItemArray.at(dot);
+ if (!item.isVisible())
+ continue;
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
@@ -382,6 +385,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
for (int dot = 0; dot < arraySize; dot++) {
const ScatterRenderItem &item = m_renderItemArray.at(dot);
+ if (!item.isVisible())
+ continue;
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
@@ -479,6 +484,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
for (int dot = 0; dot < m_renderItemArray.size(); dot++) {
ScatterRenderItem &item = m_renderItemArray[dot];
+ if (!item.isVisible())
+ continue;
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;