summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/bars3drenderer_p.h
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-07 14:26:32 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-04-10 08:20:49 +0300
commit28e42188efb1544cf6b1433c244d590165ee6ebd (patch)
tree3cc0e1c717a1b21f21616dc87a08db6a9b36bada /src/datavisualization/engine/bars3drenderer_p.h
parent1b5d9a30adc0c9ca4f7929c375db008830586516 (diff)
Optimize multiple series rendering.
Cache all series instead of just the visible ones on all graphs instead of just surface. Changes to one series now trigger data update to only the affected series, which should significantly improve performance in these cases. Task-number: QTRD-2600 Task-number: QTRD-2957 Change-Id: I6db7c689108fce8d25aace6682a193936d6f0eaf Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/bars3drenderer_p.h')
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index fba5d830..549a63f6 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -45,6 +45,7 @@ class ShaderHelper;
class ObjectHelper;
class LabelItem;
class Q3DScene;
+class BarSeriesRenderCache;
class QT_DATAVISUALIZATION_EXPORT Bars3DRenderer : public Abstract3DRenderer
{
@@ -60,7 +61,6 @@ private:
// Internal state
BarRenderItem *m_selectedBar; // points to renderitem array
- QVector<BarRenderSliceItem> m_sliceSelection;
AxisRenderCache *m_sliceCache; // not owned
const LabelItem *m_sliceTitleItem; // not owned
bool m_xFlipped;
@@ -95,12 +95,10 @@ private:
GLfloat m_scaleFactor;
GLfloat m_maxSceneSize;
QPoint m_visualSelectedBarPos;
- int m_visualSelectedBarSeriesIndex;
bool m_resetCameraBaseOrientation;
QPoint m_selectedBarPos;
- const QBar3DSeries *m_selectedBarSeries;
+ BarSeriesRenderCache *m_selectedSeriesCache;
BarRenderItem m_dummyBarRenderItem;
- QVector<BarRenderItemArray> m_renderingArrays;
bool m_noZeroInRange;
float m_seriesScaleX;
float m_seriesScaleZ;
@@ -108,13 +106,16 @@ private:
float m_seriesStart;
QPoint m_clickedPosition;
bool m_keepSeriesUniform;
+ bool m_haveUniformColorSeries;
+ bool m_haveGradientSeries;
public:
explicit Bars3DRenderer(Bars3DController *controller);
~Bars3DRenderer();
void updateData();
- void updateSeries(const QList<QAbstract3DSeries *> &seriesList, bool updateVisibility);
+ void updateSeries(const QList<QAbstract3DSeries *> &seriesList);
+ SeriesRenderCache *createNewCache(QAbstract3DSeries *series);
void updateScene(Q3DScene *scene);
void render(GLuint defaultFboHandle = 0);
@@ -127,7 +128,7 @@ public slots:
const QSizeF &spacing = QSizeF(1.0, 1.0),
bool relative = true);
void updateSlicingActive(bool isSlicing);
- void updateSelectedBar(const QPoint &position, const QBar3DSeries *series);
+ void updateSelectedBar(const QPoint &position, QBar3DSeries *series);
inline QPoint clickedPosition() const { return m_clickedPosition; }
void resetClickedStatus();
@@ -161,7 +162,8 @@ private:
#endif
void calculateSceneScalingFactors();
void calculateHeightAdjustment();
- Abstract3DController::SelectionType isSelected(int row, int bar, int seriesIndex);
+ Abstract3DController::SelectionType isSelected(int row, int bar,
+ const BarSeriesRenderCache *cache);
QPoint selectionColorToArrayPosition(const QVector4D &selectionColor);
QBar3DSeries *selectionColorToSeries(const QVector4D &selectionColor);