summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/seriesrendercache.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-28 08:19:37 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-29 09:53:48 +0200
commit527113321ff103835b89543c5d6f670f55b5b0d5 (patch)
tree01b242ef7b1f30a414b718f99f155f19235951bd /src/datavisualization/engine/seriesrendercache.cpp
parent85dda87df2d420dc53959e549d24c4b09ce93d57 (diff)
Move series specific visual elements to series, part 1
Meshes moved to series. Task-number: QTRD-2557 Change-Id: I80050e413faf3bc942eb5a5627a66747de5805d8 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/seriesrendercache.cpp')
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp91
1 files changed, 87 insertions, 4 deletions
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index 53bc97a1..7a4c0a14 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -17,11 +17,17 @@
****************************************************************************/
#include "seriesrendercache_p.h"
+#include "objecthelper_p.h"
+#include "abstract3drenderer_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+const QString smoothString(QStringLiteral("Smooth"));
+
SeriesRenderCache::SeriesRenderCache()
- : m_series(0)
+ : m_series(0),
+ m_object(0),
+ m_mesh(QAbstract3DSeries::MeshCube)
{
}
@@ -29,12 +35,89 @@ SeriesRenderCache::~SeriesRenderCache()
{
}
-void SeriesRenderCache::populate(QAbstract3DSeries *series)
+void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer *renderer)
{
Q_ASSERT(series);
- m_series = series;
- m_itemLabelFormat = series->itemLabelFormat();
+ bool seriesChanged = false;
+
+ if (m_series != series) {
+ m_series = series;
+ seriesChanged = true;
+ }
+
+ QAbstract3DSeriesChangeBitField &changeTracker = series->d_ptr->m_changeTracker;
+
+ if (seriesChanged || changeTracker.itemLabelFormatChanged) {
+ m_itemLabelFormat = series->itemLabelFormat();
+ changeTracker.itemLabelFormatChanged = false;
+ }
+
+ if (seriesChanged || changeTracker.meshChanged || changeTracker.meshSmoothChanged
+ || changeTracker.userDefinedMeshChanged) {
+ m_mesh = series->mesh();
+ changeTracker.meshChanged = false;
+ changeTracker.meshSmoothChanged = false;
+ changeTracker.userDefinedMeshChanged = false;
+
+ QString meshFileName;
+
+ // Compose mesh filename
+ if (m_mesh == QAbstract3DSeries::MeshUserDefined) {
+ // Always use the supplied mesh directly
+ meshFileName = series->userDefinedMesh();
+ } else {
+ switch (m_mesh) {
+ case QAbstract3DSeries::MeshBar:
+ case QAbstract3DSeries::MeshCube:
+ meshFileName = QStringLiteral(":/defaultMeshes/bar");
+ break;
+ case QAbstract3DSeries::MeshPyramid:
+ meshFileName = QStringLiteral(":/defaultMeshes/pyramid");
+ break;
+ case QAbstract3DSeries::MeshCone:
+ meshFileName = QStringLiteral(":/defaultMeshes/cone");
+ break;
+ case QAbstract3DSeries::MeshCylinder:
+ meshFileName = QStringLiteral(":/defaultMeshes/cylinder");
+ break;
+ case QAbstract3DSeries::MeshBevelBar:
+ case QAbstract3DSeries::MeshBevelCube:
+ meshFileName = QStringLiteral(":/defaultMeshes/bevelbar");
+ break;
+ case QAbstract3DSeries::MeshSphere:
+ meshFileName = QStringLiteral(":/defaultMeshes/sphere");
+ break;
+ case QAbstract3DSeries::MeshMinimal:
+ meshFileName = QStringLiteral(":/defaultMeshes/minimal");
+ break;
+ case QAbstract3DSeries::MeshPoint:
+#if defined(QT_OPENGL_ES_2)
+ qWarning("QAbstract3DSeries::MeshPoint is not fully supported on OpenGL ES2");
+#endif
+ break;
+ default:
+ // Default to cube
+ meshFileName = QStringLiteral(":/defaultMeshes/bar");
+ break;
+ }
+
+ if (series->isMeshSmooth() && m_mesh != QAbstract3DSeries::MeshPoint)
+ meshFileName += smoothString;
+
+ // Give renderer an opportunity to customize the mesh
+ renderer->fixMeshFileName(meshFileName, m_mesh);
+ }
+
+ // TODO: Optimize by having some kind of object cache in renderer instead of having separate ObjectHelper for each series?
+ delete m_object;
+ if (meshFileName.isEmpty()) {
+ m_object = 0;
+ } else {
+ m_object = new ObjectHelper(meshFileName);
+ m_object->load();
+ }
+ }
// TODO: Add other visual element extractions
}