summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp3
-rw-r--r--src/datavisualization/utils/objecthelper.cpp4
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper.cpp24
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper.cpp2
4 files changed, 26 insertions, 7 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index b2e0e6e4..19ead4f7 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -887,7 +887,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
if (drawingPoints != previousDrawingPoints
|| (!drawingPoints &&
(colorStyleIsUniform != (previousMeshColorStyle
- == Q3DTheme::ColorStyleUniform)))) {
+ == Q3DTheme::ColorStyleUniform)))
+ || (!optimizationDefault && drawingPoints)) {
previousDrawingPoints = drawingPoints;
if (drawingPoints) {
if (!optimizationDefault && rangeGradientPoints) {
diff --git a/src/datavisualization/utils/objecthelper.cpp b/src/datavisualization/utils/objecthelper.cpp
index a66e0f7e..b64e8c3f 100644
--- a/src/datavisualization/utils/objecthelper.cpp
+++ b/src/datavisualization/utils/objecthelper.cpp
@@ -122,6 +122,10 @@ void ObjectHelper::load()
m_indexedVertices.clear();
m_indexedUVs.clear();
m_indexedNormals.clear();
+ m_vertexbuffer = 0;
+ m_uvbuffer = 0;
+ m_normalbuffer = 0;
+ m_elementbuffer = 0;
}
QVector<QVector3D> vertices;
QVector<QVector2D> uvs;
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
index 5eb74011..dae60b96 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
@@ -58,6 +58,10 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
glDeleteBuffers(1, &m_uvbuffer);
glDeleteBuffers(1, &m_normalbuffer);
glDeleteBuffers(1, &m_elementbuffer);
+ m_vertexbuffer = 0;
+ m_uvbuffer = 0;
+ m_normalbuffer = 0;
+ m_elementbuffer = 0;
}
// Index vertices
@@ -314,13 +318,14 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
QVector<QVector3D> buffered_vertices;
buffered_vertices.resize(verticeCount * updateSize);
+ int itemCount = 0;
for (int i = 0; i < updateSize; i++) {
int index = updateAll ? i : cache->updateIndices().at(i);
const ScatterRenderItem &item = renderArray.at(index);
if (!item.isVisible())
continue;
- const int offset = i * verticeCount;
+ const int offset = itemCount * verticeCount;
if (item.rotation().isIdentity()) {
for (int j = 0; j < verticeCount; j++)
buffered_vertices[j + offset] = scaled_vertices[j] + item.translation();
@@ -334,18 +339,25 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
buffered_vertices[j + offset] = indexed_vertices[j] * modelMatrix
+ item.translation();
}
+ itemCount++;
}
glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
+ int sizeOfItem = verticeCount * sizeof(QVector3D);
if (updateAll) {
- glBufferData(GL_ARRAY_BUFFER, buffered_vertices.size() * sizeof(QVector3D),
- &buffered_vertices.at(0), GL_DYNAMIC_DRAW);
+ if (itemCount) {
+ glBufferData(GL_ARRAY_BUFFER, itemCount * sizeOfItem,
+ &buffered_vertices.at(0), GL_STATIC_DRAW);
+ }
} else {
- int itemSize = verticeCount * sizeof(QVector3D);
+ itemCount = 0;
for (int i = 0; i < updateSize; i++) {
int index = updateAll ? i : cache->updateIndices().at(i);
- glBufferSubData(GL_ARRAY_BUFFER, cache->bufferIndices().at(index) * itemSize,
- itemSize, &buffered_vertices.at(i * verticeCount));
+ if (renderArray.at(index).isVisible()) {
+ glBufferSubData(GL_ARRAY_BUFFER, cache->bufferIndices().at(index) * sizeOfItem,
+ sizeOfItem, &buffered_vertices.at(itemCount * verticeCount));
+ itemCount++;
+ }
}
}
glBindBuffer(GL_ARRAY_BUFFER, 0);
diff --git a/src/datavisualization/utils/scatterpointbufferhelper.cpp b/src/datavisualization/utils/scatterpointbufferhelper.cpp
index 5076502f..f15ce3ec 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterpointbufferhelper.cpp
@@ -87,6 +87,8 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
glDeleteBuffers(1, &m_pointbuffer);
glDeleteBuffers(1, &m_uvbuffer);
m_bufferedPoints.clear();
+ m_pointbuffer = 0;
+ m_uvbuffer = 0;
}
bool itemsVisible = false;