summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-10 09:41:52 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-10 09:48:54 +0200
commit9a8ef3afd23bfe1ab7f4669a470b38b7927a8b0f (patch)
treecdf8108e39473d54f50184921bae067c6fe1130b
parentb0fa490532581411a63796c9fed5d27e157ba5e8 (diff)
Cache scatter series item size
Task-number: QTRD-2689 Change-Id: I8cd73a74f1ede49ce35c742712fbf3a5357f152e Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp10
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h1
-rw-r--r--tests/scattertest/scatterchart.cpp3
3 files changed, 10 insertions, 4 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 85863519..6a08c934 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -160,10 +160,15 @@ void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis
float maxItemSize = 0.0f;
float itemSize = 0.0f;
+ if (m_cachedItemSize.size() != seriesCount)
+ m_cachedItemSize.resize(seriesCount);
+
for (int series = 0; series < seriesCount; series++) {
itemSize = static_cast<QScatter3DSeries *>(m_visibleSeriesList.at(series).series())->itemSize();
if (maxItemSize < itemSize)
maxItemSize = itemSize;
+ if (m_cachedItemSize.at(series) != itemSize)
+ m_cachedItemSize[series] = itemSize;
}
m_backgroundMargin = defaultMargin;
m_maxItemSize = maxItemSize;
@@ -364,10 +369,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
ObjectHelper *dotObj = m_visibleSeriesList.at(series).object();
bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint);
- // TODO: Accessing series directly during rendering
- float itemSize =
- static_cast<QScatter3DSeries *>(m_visibleSeriesList.at(series).series())->itemSize()
- / itemScaler;
+ float itemSize = m_cachedItemSize.at(series) / itemScaler;
if (itemSize == 0.0f)
itemSize = m_dotSizeScale;
if (drawingPoints) {
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 9153d80a..7eb75de9 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -92,6 +92,7 @@ private:
QVector<ScatterRenderItemArray> m_renderingArrays;
GLfloat m_backgroundMargin;
GLfloat m_maxItemSize;
+ QVector<float> m_cachedItemSize;
public:
explicit Scatter3DRenderer(Scatter3DController *controller);
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index 97562861..6b7fd910 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -112,6 +112,8 @@ void ScatterDataModifier::addData()
m_chart->seriesList().at(0)->dataProxy()->resetArray(dataArray);
m_chart->seriesList().at(1)->dataProxy()->resetArray(dataArray2);
+ m_chart->seriesList().at(0)->setItemSize(0.0f);
+ m_chart->seriesList().at(1)->setItemSize(0.0f);
}
void ScatterDataModifier::changeStyle()
@@ -522,6 +524,7 @@ QScatter3DSeries *ScatterDataModifier::createAndAddSeries()
series->setMesh(QAbstract3DSeries::MeshSphere);
series->setMeshSmooth(true);
series->setBaseColor(QColor(rand() % 256, rand() % 256, rand() % 256));
+ series->setItemSize(float(rand() % 90 + 10) / 100.0f);
QObject::connect(series, &QScatter3DSeries::selectedItemChanged, this,
&ScatterDataModifier::handleSelectionChange);