summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp14
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper.cpp62
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper.cpp27
3 files changed, 64 insertions, 39 deletions
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 26c393bd..dd50188b 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -444,6 +444,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
}
QVector3D modelScaler(itemSize, itemSize, itemSize);
+ if (!optimizationDefault
+ && ((drawingPoints && cache->bufferPoints()->indexCount() == 0)
+ || (!drawingPoints && cache->bufferObject()->indexCount() == 0))) {
+ continue;
+ }
+
int loopCount = 1;
if (optimizationDefault)
loopCount = renderArraySize;
@@ -709,6 +715,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
#endif
QVector3D modelScaler(itemSize, itemSize, itemSize);
+ if (!optimizationDefault
+ && ((drawingPoints && cache->bufferPoints()->indexCount() == 0)
+ || (!drawingPoints && cache->bufferObject()->indexCount() == 0))) {
+ continue;
+ }
+
// Rebind shader if it has changed
if (drawingPoints != previousDrawingPoints
|| (!drawingPoints &&
@@ -920,7 +932,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
if (!drawingPoints) {
glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(-0.5f, 1.0f);
+ glPolygonOffset(-1.0f, 1.0f);
}
#if !defined(QT_OPENGL_ES_2)
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
index 123588f1..d68b9df4 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
@@ -38,12 +38,16 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
{
initializeOpenGLFunctions();
+ m_meshDataLoaded = false;
+ m_indexCount = 0;
+
ObjectHelper *dotObj = cache->object();
ScatterRenderItemArray &renderArray = cache->renderArray();
const uint renderArraySize = renderArray.size();
+ if (renderArraySize == 0)
+ return; // No use to go forward
uint itemCount = renderArraySize;
QQuaternion seriesRotation(cache->meshRotation());
-
if (m_meshDataLoaded) {
// Delete old data
glDeleteBuffers(1, &m_vertexbuffer);
@@ -51,7 +55,6 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
glDeleteBuffers(1, &m_normalbuffer);
glDeleteBuffers(1, &m_elementbuffer);
}
-
// Index vertices
const QVector<unsigned short> indices = dotObj->indices();
const QVector<QVector3D> indexed_vertices = dotObj->indexedvertices();
@@ -89,6 +92,7 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
buffered_uvs.resize(uvsCount * renderArraySize);
buffered_normals.resize(normalsCount * renderArraySize);
uint pos = 0;
+
for (uint i = 0; i < renderArraySize; i++) {
ScatterRenderItem &item = renderArray[i];
if (!item.isVisible()) {
@@ -130,32 +134,34 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
m_indexCount = indicesCount * itemCount;
- glGenBuffers(1, &m_vertexbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
- glBufferData(GL_ARRAY_BUFFER, verticeCount * itemCount * sizeof(QVector3D),
- &buffered_vertices.at(0),
- GL_STATIC_DRAW);
-
- glGenBuffers(1, &m_normalbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer);
- glBufferData(GL_ARRAY_BUFFER, normalsCount * itemCount * sizeof(QVector3D),
- &buffered_normals.at(0),
- GL_STATIC_DRAW);
-
- glGenBuffers(1, &m_uvbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
- glBufferData(GL_ARRAY_BUFFER, uvsCount * itemCount * sizeof(QVector2D),
- &buffered_uvs.at(0), GL_STATIC_DRAW);
-
- glGenBuffers(1, &m_elementbuffer);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesCount * itemCount * sizeof(GLint),
- &buffered_indices.at(0), GL_STATIC_DRAW);
-
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
-
- m_meshDataLoaded = true;
+ if (itemCount > 0) {
+ glGenBuffers(1, &m_vertexbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
+ glBufferData(GL_ARRAY_BUFFER, verticeCount * itemCount * sizeof(QVector3D),
+ &buffered_vertices.at(0),
+ GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_normalbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer);
+ glBufferData(GL_ARRAY_BUFFER, normalsCount * itemCount * sizeof(QVector3D),
+ &buffered_normals.at(0),
+ GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_uvbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
+ glBufferData(GL_ARRAY_BUFFER, uvsCount * itemCount * sizeof(QVector2D),
+ &buffered_uvs.at(0), GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_elementbuffer);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesCount * itemCount * sizeof(GLint),
+ &buffered_indices.at(0), GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+
+ m_meshDataLoaded = true;
+ }
}
void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal dotScale)
diff --git a/src/datavisualization/utils/scatterpointbufferhelper.cpp b/src/datavisualization/utils/scatterpointbufferhelper.cpp
index cf3bc0fc..b14d84ad 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterpointbufferhelper.cpp
@@ -81,6 +81,7 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
ScatterRenderItemArray &renderArray = cache->renderArray();
const int renderArraySize = renderArray.size();
+ m_indexCount = 0;
if (m_meshDataLoaded) {
// Delete old data
@@ -88,25 +89,31 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
m_bufferedPoints.clear();
}
+ bool itemsVisible = false;
m_bufferedPoints.resize(renderArraySize);
for (int i = 0; i < renderArraySize; i++) {
ScatterRenderItem &item = renderArray[i];
- if (!item.isVisible())
+ if (!item.isVisible()) {
m_bufferedPoints[i] = hiddenPos;
- else
+ } else {
+ itemsVisible = true;
m_bufferedPoints[i] = item.translation();
+ }
}
- m_indexCount = renderArraySize;
+ if (itemsVisible)
+ m_indexCount = renderArraySize;
- glGenBuffers(1, &m_pointbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_pointbuffer);
- glBufferData(GL_ARRAY_BUFFER, m_bufferedPoints.size() * sizeof(QVector3D),
- &m_bufferedPoints.at(0),
- GL_DYNAMIC_DRAW);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
+ if (m_indexCount > 0) {
+ glGenBuffers(1, &m_pointbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_pointbuffer);
+ glBufferData(GL_ARRAY_BUFFER, m_bufferedPoints.size() * sizeof(QVector3D),
+ &m_bufferedPoints.at(0),
+ GL_DYNAMIC_DRAW);
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
- m_meshDataLoaded = true;
+ m_meshDataLoaded = true;
+ }
}
QT_END_NAMESPACE_DATAVISUALIZATION