diff options
author | Mika Salmela <mika.salmela@digia.com> | 2014-08-19 09:33:53 +0300 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2014-08-19 09:47:37 +0300 |
commit | 68b3ea782608cbcd457cbe1abc0c83aceb356777 (patch) | |
tree | 70f58d966316e0a8462326a839588693d1459dbb /src/datavisualization/engine/scatter3drenderer.cpp | |
parent | 1574c9353885ec48dbf9d5d7618e496d00c3862c (diff) |
Gradient color style support for complex meshes on static
Change-Id: Ie9f135a2f3139a429a451c338e03dcf0ea6b4533
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/scatter3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 13f6e02c..bc3893b9 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -190,6 +190,7 @@ void Scatter3DRenderer::updateData() } if (renderArraySize != cache->oldArraySize() || cache->object()->objectFile() != cache->oldMeshFileName()) { + object->setScaleY(m_scaleY); object->fullLoad(cache, m_dotSizeScale); cache->setOldArraySize(renderArraySize); cache->setOldMeshFileName(cache->object()->objectFile()); @@ -207,9 +208,26 @@ void Scatter3DRenderer::updateData() void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesList) { + int seriesCount = seriesList.size(); + + // Check OptimizationStatic specific issues before populate marks changeTracker done + if (m_cachedOptimizationHint.testFlag(QAbstract3DGraph::OptimizationStatic)) { + for (int i = 0; i < seriesCount; i++) { + QScatter3DSeries *scatterSeries = static_cast<QScatter3DSeries *>(seriesList[i]); + if (scatterSeries->isVisible()) { + QAbstract3DSeriesChangeBitField &changeTracker = scatterSeries->d_ptr->m_changeTracker; + if (changeTracker.baseGradientChanged || changeTracker.colorStyleChanged) { + ScatterSeriesRenderCache *cache = + static_cast<ScatterSeriesRenderCache *>(m_renderCacheList.value(scatterSeries)); + if (cache && cache->mesh() != QAbstract3DSeries::MeshPoint) + cache->setStaticObjectUVDirty(true); + } + } + } + } + Abstract3DRenderer::updateSeries(seriesList); - int seriesCount = seriesList.size(); float maxItemSize = 0.0f; float itemSize = 0.0f; bool noSelection = true; @@ -245,6 +263,12 @@ void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis else m_haveGradientMeshSeries = true; } + + if (cache->staticObjectUVDirty()) { + ScatterObjectBufferHelper *object = cache->bufferObject(); + object->updateUVs(cache); + cache->setStaticObjectUVDirty(false); + } } } m_maxItemSize = maxItemSize; @@ -313,6 +337,28 @@ void Scatter3DRenderer::updateAxisTitleVisibility(QAbstract3DAxis::AxisOrientati calculateSceneScalingFactors(); } +void Scatter3DRenderer::updateOptimizationHint(QAbstract3DGraph::OptimizationHints hint) +{ + Abstract3DRenderer::updateOptimizationHint(hint); + + if (m_cachedOptimizationHint.testFlag(QAbstract3DGraph::OptimizationStatic)) { +#if !defined(QT_OPENGL_ES_2) + if (m_cachedShadowQuality > QAbstract3DGraph::ShadowQualityNone) { + initGradientShaders(QStringLiteral(":/shaders/vertexShadow"), + QStringLiteral(":/shaders/fragmentShadow")); + } else { + initGradientShaders(QStringLiteral(":/shaders/vertexTexture"), + QStringLiteral(":/shaders/fragmentTexture")); + } +#else + initGradientShaders(QStringLiteral(":/shaders/vertexTexture"), + QStringLiteral(":/shaders/fragmentTexture")); +#endif + } else { + Abstract3DRenderer::reInitShaders(); + } +} + void Scatter3DRenderer::resetClickedStatus() { m_clickedIndex = Scatter3DController::invalidSelectionIndex(); @@ -2088,6 +2134,7 @@ void Scatter3DRenderer::initGradientShaders(const QString &vertexShader, { if (m_dotGradientShader) delete m_dotGradientShader; + m_dotGradientShader = new ShaderHelper(this, vertexShader, fragmentShader); m_dotGradientShader->initialize(); } |