summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/utils')
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper.cpp2
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper.cpp50
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper_p.h7
3 files changed, 58 insertions, 1 deletions
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
index 9ecdffdd..5e98363e 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
@@ -220,7 +220,7 @@ uint ScatterObjectBufferHelper::createRangeGradientUVs(ScatterSeriesRenderCache
if (!item.isVisible())
continue;
- float y = ((item.translation().y() + m_scaleY) * 0.5f ) / m_scaleY;
+ float y = ((item.translation().y() + m_scaleY) * 0.5f) / m_scaleY;
uv.setY(y);
int offset = pos * uvsCount;
for (int j = 0; j < uvsCount; j++)
diff --git a/src/datavisualization/utils/scatterpointbufferhelper.cpp b/src/datavisualization/utils/scatterpointbufferhelper.cpp
index b14d84ad..2ddee31c 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterpointbufferhelper.cpp
@@ -17,6 +17,7 @@
****************************************************************************/
#include "scatterpointbufferhelper_p.h"
+#include <QtGui/QVector2D>
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -86,9 +87,14 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
if (m_meshDataLoaded) {
// Delete old data
glDeleteBuffers(1, &m_pointbuffer);
+ glDeleteBuffers(1, &m_uvbuffer);
m_bufferedPoints.clear();
}
+ QVector<QVector2D> buffered_uvs;
+ if (cache->colorStyle() == Q3DTheme::ColorStyleRangeGradient)
+ createRangeGradientUVs(cache, buffered_uvs);
+
bool itemsVisible = false;
m_bufferedPoints.resize(renderArraySize);
for (int i = 0; i < renderArraySize; i++) {
@@ -110,10 +116,54 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
glBufferData(GL_ARRAY_BUFFER, m_bufferedPoints.size() * sizeof(QVector3D),
&m_bufferedPoints.at(0),
GL_DYNAMIC_DRAW);
+
+ if (buffered_uvs.size()) {
+ glGenBuffers(1, &m_uvbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
+ glBufferData(GL_ARRAY_BUFFER, buffered_uvs.size() * sizeof(QVector2D),
+ &buffered_uvs.at(0), GL_STATIC_DRAW);
+ }
+
glBindBuffer(GL_ARRAY_BUFFER, 0);
m_meshDataLoaded = true;
}
}
+void ScatterPointBufferHelper::updateUVs(ScatterSeriesRenderCache *cache)
+{
+ QVector<QVector2D> buffered_uvs;
+
+ createRangeGradientUVs(cache, buffered_uvs);
+
+ if (buffered_uvs.size()) {
+ if (!m_uvbuffer)
+ glGenBuffers(1, &m_uvbuffer);
+
+ glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
+ glBufferData(GL_ARRAY_BUFFER, buffered_uvs.size() * sizeof(QVector2D),
+ &buffered_uvs.at(0), GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ }
+}
+
+void ScatterPointBufferHelper::createRangeGradientUVs(ScatterSeriesRenderCache *cache,
+ QVector<QVector2D> &buffered_uvs)
+{
+ const ScatterRenderItemArray &renderArray = cache->renderArray();
+ const uint renderArraySize = renderArray.size();
+ buffered_uvs.resize(renderArraySize);
+
+ QVector2D uv;
+ uv.setX(0.0f);
+ for (uint i = 0; i < renderArraySize; i++) {
+ const ScatterRenderItem &item = renderArray.at(i);
+
+ float y = ((item.translation().y() + m_scaleY) * 0.5f) / m_scaleY;
+ uv.setY(y);
+ buffered_uvs[i] = uv;
+ }
+}
+
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/utils/scatterpointbufferhelper_p.h b/src/datavisualization/utils/scatterpointbufferhelper_p.h
index d09ce0f7..3edc4c8f 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper_p.h
+++ b/src/datavisualization/utils/scatterpointbufferhelper_p.h
@@ -46,14 +46,21 @@ public:
void pushPoint(uint pointIndex);
void popPoint();
void load(ScatterSeriesRenderCache *cache);
+ void setScaleY(float scale) { m_scaleY = scale; }
+ void updateUVs(ScatterSeriesRenderCache *cache);
public:
GLuint m_pointbuffer;
private:
+ void createRangeGradientUVs(ScatterSeriesRenderCache *cache,
+ QVector<QVector2D> &buffered_uvs);
+
+private:
QVector<QVector3D> m_bufferedPoints;
uint m_oldRemoveIndex;
bool m_oldRemove;
+ float m_scaleY;
};
QT_END_NAMESPACE_DATAVISUALIZATION