summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp106
1 files changed, 30 insertions, 76 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index bafe6727..3ef01b71 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -40,10 +40,6 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_cachedShadowQuality(QDataVis::ShadowQualityMedium),
m_autoScaleAdjustment(1.0f),
m_cachedSelectionMode(QDataVis::SelectionNone),
- m_cachedColorStyle(Q3DTheme::ColorStyleUniform),
- m_objectGradientTexture(0),
- m_singleHighlightGradientTexture(0),
- m_multiHighlightGradientTexture(0),
m_textureHelper(0),
m_cachedScene(new Q3DScene()),
m_selectionDirty(true),
@@ -63,17 +59,12 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
Abstract3DRenderer::~Abstract3DRenderer()
{
- if (m_textureHelper) {
- m_textureHelper->deleteTexture(&m_objectGradientTexture);
- m_textureHelper->deleteTexture(&m_singleHighlightGradientTexture);
- m_textureHelper->deleteTexture(&m_multiHighlightGradientTexture);
- }
+ for (int i = 0; i < m_visibleSeriesList.size(); i++)
+ m_visibleSeriesList[i].cleanup(m_textureHelper);
delete m_drawer;
delete m_textureHelper;
delete m_cachedScene;
- for (int i = 0; i < m_visibleSeriesList.size(); i++)
- delete m_visibleSeriesList.at(i).object();
}
void Abstract3DRenderer::initializeOpenGL()
@@ -153,6 +144,13 @@ void Abstract3DRenderer::updateInputPosition(const QPoint &position)
m_inputPosition = position;
}
+void Abstract3DRenderer::initGradientShaders(const QString &vertexShader, const QString &fragmentShader)
+{
+ // Do nothing by default
+ Q_UNUSED(vertexShader)
+ Q_UNUSED(fragmentShader)
+}
+
void Abstract3DRenderer::updateBoundingRect(const QRect &boundingRect)
{
m_cachedBoundingRect = boundingRect;
@@ -210,34 +208,25 @@ void Abstract3DRenderer::reInitShaders()
{
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) {
- if (m_cachedColorStyle != Q3DTheme::ColorStyleUniform) {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTex"));
- }
+ initGradientShaders(QStringLiteral(":/shaders/vertexShadow"),
+ QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY"));
+ initShaders(QStringLiteral(":/shaders/vertexShadow"),
+ QStringLiteral(":/shaders/fragmentShadowNoTex"));
initBackgroundShaders(QStringLiteral(":/shaders/vertexShadow"),
QStringLiteral(":/shaders/fragmentShadowNoTex"));
} else {
- if (m_cachedColorStyle != Q3DTheme::ColorStyleUniform) {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragmentColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragment"));
- }
+ initGradientShaders(QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentColorOnY"));
+ initShaders(QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragment"));
initBackgroundShaders(QStringLiteral(":/shaders/vertex"),
QStringLiteral(":/shaders/fragment"));
}
#else
- if (m_cachedColorStyle != Q3DTheme::ColorStyleUniform) {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragmentColorOnYES2"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragmentES2"));
- }
+ initGradientShaders(QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentColorOnYES2"));
+ initShaders(QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentES2"));
initBackgroundShaders(QStringLiteral(":/shaders/vertex"),
QStringLiteral(":/shaders/fragmentES2"));
#endif
@@ -320,49 +309,6 @@ void Abstract3DRenderer::updateAxisLabelFormat(Q3DAbstractAxis::AxisOrientation
axisCacheForOrientation(orientation).setLabelFormat(format);
}
-void Abstract3DRenderer::updateColorStyle(Q3DTheme::ColorStyle style)
-{
- bool changed = (m_cachedColorStyle != style);
-
- m_cachedColorStyle = style;
-
- if (changed)
- reInitShaders();
-}
-
-void Abstract3DRenderer::updateObjectColor(const QColor &color)
-{
- m_cachedObjectColor = color;
-}
-
-void Abstract3DRenderer::updateObjectGradient(const QLinearGradient &gradient)
-{
- m_cachedObjectGradient = gradient;
- fixGradient(&m_cachedObjectGradient, &m_objectGradientTexture);
-}
-
-void Abstract3DRenderer::updateSingleHighlightColor(const QColor &color)
-{
- m_cachedSingleHighlightColor = color;
-}
-
-void Abstract3DRenderer::updateSingleHighlightGradient(const QLinearGradient &gradient)
-{
- m_cachedSingleHighlightGradient = gradient;
- fixGradient(&m_cachedSingleHighlightGradient, &m_singleHighlightGradientTexture);
-}
-
-void Abstract3DRenderer::updateMultiHighlightColor(const QColor &color)
-{
- m_cachedMultiHighlightColor = color;
-}
-
-void Abstract3DRenderer::updateMultiHighlightGradient(const QLinearGradient &gradient)
-{
- m_cachedMultiHighlightGradient = gradient;
- fixGradient(&m_cachedMultiHighlightGradient, &m_multiHighlightGradientTexture);
-}
-
void Abstract3DRenderer::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh)
{
// Default implementation does nothing.
@@ -375,12 +321,20 @@ void Abstract3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLi
{
int visibleCount = 0;
if (updateVisibility) {
+ int oldSize = m_visibleSeriesList.size();
foreach (QAbstract3DSeries *current, seriesList) {
if (current->isVisible())
visibleCount++;
}
- if (visibleCount != m_visibleSeriesList.size())
+ // Clean up series caches that are about to be permanently deleted.
+ // Can't just use cache destructor, as resize will call that to all items.
+ if (visibleCount < oldSize) {
+ for (int i = visibleCount; i < oldSize; i++)
+ m_visibleSeriesList[i].cleanup(m_textureHelper);
+ }
+
+ if (visibleCount != oldSize)
m_visibleSeriesList.resize(visibleCount);
visibleCount = 0;