diff options
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 22 | ||||
-rw-r--r-- | src/datavisualization/engine/drawer_p.h | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/qabstract3dgraph.cpp | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 24 |
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); } } } |