summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/utils/scatterpointbufferhelper.cpp
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-06-06 10:19:38 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-06-06 10:23:27 +0300
commite8e5286ff5c5e5ba822e798dc0c1f8270817a562 (patch)
treee92e222e7df5e5ce773756ff1d037088c5a61325 /src/datavisualization/utils/scatterpointbufferhelper.cpp
parent69d19ccc2925e8889e5ba77c416a227970d169cf (diff)
Fix for static optimization crash on android
Added checks if visible items really exists and if buffers are empty. Change-Id: Id29f87924e098c6f8b7b57bc74543ce37787995f Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/utils/scatterpointbufferhelper.cpp')
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper.cpp27
1 files changed, 17 insertions, 10 deletions
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