summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-08-28 10:29:39 +0300
committerMika Salmela <mika.salmela@digia.com>2014-08-28 10:41:50 +0300
commit9a40207d83b66072fff4aaa03eca15b02f8a11c1 (patch)
tree57de189f7f06c0401bf63550b107a571736ce743 /src/datavisualization/engine
parentb2a039ca1db7cbf3e7b5950b277ac28b722df400 (diff)
Range gradient for points on static optimization
Change-Id: Ic44a6a28617f272540d146f02bf50b4bd84cd9c8 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r--src/datavisualization/engine/drawer.cpp22
-rw-r--r--src/datavisualization/engine/drawer_p.h2
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp3
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp24
4 files changed, 41 insertions, 10 deletions
diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp
index 4191efc4..2cb88e5c 100644
--- a/src/datavisualization/engine/drawer.cpp
+++ b/src/datavisualization/engine/drawer.cpp
@@ -223,13 +223,27 @@ void Drawer::drawPoint(ShaderHelper *shader)
glDisableVertexAttribArray(shader->posAtt());
}
-void Drawer::drawPoints(ShaderHelper *shader, ScatterPointBufferHelper *object)
+void Drawer::drawPoints(ShaderHelper *shader, ScatterPointBufferHelper *object, GLuint textureId)
{
+ if (textureId) {
+ // Activate texture
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, textureId);
+ shader->setUniformValue(shader->texture(), 0);
+ }
+
// 1st attribute buffer : vertices
glEnableVertexAttribArray(shader->posAtt());
glBindBuffer(GL_ARRAY_BUFFER, object->pointBuf());
glVertexAttribPointer(shader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
+ // 2nd attribute buffer : UVs
+ if (textureId) {
+ glEnableVertexAttribArray(shader->uvAtt());
+ glBindBuffer(GL_ARRAY_BUFFER, object->uvBuf());
+ glVertexAttribPointer(shader->uvAtt(), 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
+ }
+
// Draw the points
glDrawArrays(GL_POINTS, 0, object->indexCount());
@@ -237,6 +251,12 @@ void Drawer::drawPoints(ShaderHelper *shader, ScatterPointBufferHelper *object)
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableVertexAttribArray(shader->posAtt());
+
+ if (textureId) {
+ glDisableVertexAttribArray(shader->uvAtt());
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ }
}
void Drawer::drawLine(ShaderHelper *shader)
diff --git a/src/datavisualization/engine/drawer_p.h b/src/datavisualization/engine/drawer_p.h
index 709503dd..0c96724c 100644
--- a/src/datavisualization/engine/drawer_p.h
+++ b/src/datavisualization/engine/drawer_p.h
@@ -79,7 +79,7 @@ public:
void drawSelectionObject(ShaderHelper *shader, AbstractObjectHelper *object);
void drawSurfaceGrid(ShaderHelper *shader, SurfaceObject *object);
void drawPoint(ShaderHelper *shader);
- void drawPoints(ShaderHelper *shader, ScatterPointBufferHelper *object);
+ void drawPoints(ShaderHelper *shader, ScatterPointBufferHelper *object, GLuint textureId);
void drawLine(ShaderHelper *shader);
void drawLabel(const AbstractRenderItem &item, const LabelItem &labelItem,
const QMatrix4x4 &viewmatrix, const QMatrix4x4 &projectionmatrix,
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index c797f554..03eeedf6 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -638,8 +638,7 @@ qreal QAbstract3DGraph::aspectRatio() const
* Defines if the rendering optimization is default or static. Default mode provides the full feature set at
* reasonable performance. Static optimizes graph rendering and is ideal for large non-changing data sets.
* It is slower with dynamic data changes and item rotations. Selection is not optimized, so using it with
- * massive data sets is not advisable. Static works only on the Scatter graph and lacks the range gradient
- * color style for points.
+ * massive data sets is not advisable. Static works only on the Scatter graph.
* Defaults to \c{OptimizationDefault}.
*/
void QAbstract3DGraph::setOptimizationHints(OptimizationHints hints)
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 4b6a258e..0a670fe8 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -181,6 +181,7 @@ void Scatter3DRenderer::updateData()
points = new ScatterPointBufferHelper();
cache->setBufferPoints(points);
}
+ points->setScaleY(m_scaleY);
points->load(cache);
} else {
ScatterObjectBufferHelper *object = cache->bufferObject();
@@ -219,7 +220,7 @@ void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis
if (changeTracker.baseGradientChanged || changeTracker.colorStyleChanged) {
ScatterSeriesRenderCache *cache =
static_cast<ScatterSeriesRenderCache *>(m_renderCacheList.value(scatterSeries));
- if (cache && cache->mesh() != QAbstract3DSeries::MeshPoint)
+ if (cache)
cache->setStaticObjectUVDirty(true);
}
}
@@ -265,8 +266,13 @@ void Scatter3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis
}
if (cache->staticObjectUVDirty()) {
- ScatterObjectBufferHelper *object = cache->bufferObject();
- object->updateUVs(cache);
+ if (cache->mesh() == QAbstract3DSeries::MeshPoint) {
+ ScatterPointBufferHelper *object = cache->bufferPoints();
+ object->updateUVs(cache);
+ } else {
+ ScatterObjectBufferHelper *object = cache->bufferObject();
+ object->updateUVs(cache);
+ }
cache->setStaticObjectUVDirty(false);
}
}
@@ -522,7 +528,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
if (optimizationDefault)
m_drawer->drawPoint(m_depthShader);
else
- m_drawer->drawPoints(m_depthShader, cache->bufferPoints());
+ m_drawer->drawPoints(m_depthShader, cache->bufferPoints(), 0);
} else {
if (optimizationDefault) {
// 1st attribute buffer : vertices
@@ -853,6 +859,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
gradientTexture = cache->baseGradientTexture();
}
+ if (!optimizationDefault && rangeGradientPoints) {
+ dotShader = m_labelShader;
+ dotShader->bind();
+ gradientTexture = cache->baseGradientTexture();
+ }
+
GLfloat lightStrength = m_cachedTheme->lightStrength();
if (optimizationDefault && selectedSeries && (m_selectedItemIndex == i)) {
if (useColor)
@@ -905,7 +917,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
if (optimizationDefault)
m_drawer->drawPoint(dotShader);
else
- m_drawer->drawPoints(dotShader, cache->bufferPoints());
+ m_drawer->drawPoints(dotShader, cache->bufferPoints(), gradientTexture);
}
} else
#endif
@@ -923,7 +935,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
if (optimizationDefault)
m_drawer->drawPoint(dotShader);
else
- m_drawer->drawPoints(dotShader, cache->bufferPoints());
+ m_drawer->drawPoints(dotShader, cache->bufferPoints(), gradientTexture);
}
}
}