summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-08-19 09:33:53 +0300
committerMika Salmela <mika.salmela@digia.com>2014-08-19 09:47:37 +0300
commit68b3ea782608cbcd457cbe1abc0c83aceb356777 (patch)
tree70f58d966316e0a8462326a839588693d1459dbb /src/datavisualization/engine/scatter3drenderer.cpp
parent1574c9353885ec48dbf9d5d7618e496d00c3862c (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.cpp49
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();
}