From c46533d9a675613998346671f5b2a98507ec4190 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 16 Jul 2015 21:05:14 -0700 Subject: [PATCH] Make renderGrid handle changing position and dimensions So that audio scope grid moves when Interface window is resized. --- libraries/render-utils/src/GeometryCache.cpp | 24 +++++++++++++------- libraries/render-utils/src/GeometryCache.h | 3 ++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 2bf41bc9b3..30ee7a2108 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -392,7 +392,6 @@ void GeometryCache::renderGrid(int x, int y, int width, int height, int rows, in gpu::GLBackend::renderBatch(batch); } -// TODO: properly handle the x,y,w,h changing for an ID // TODO: why do we seem to create extra BatchItemDetails when we resize the window?? what's that?? void GeometryCache::renderGrid(gpu::Batch& batch, int x, int y, int width, int height, int rows, int cols, const glm::vec4& color, int id) { #ifdef WANT_DEBUG @@ -410,8 +409,23 @@ void GeometryCache::renderGrid(gpu::Batch& batch, int x, int y, int width, int h Vec3Pair colorKey(glm::vec3(color.x, color.y, rows), glm::vec3(color.z, color.y, cols)); int vertices = (cols + 1 + rows + 1) * 2; - if ((registered && !_registeredAlternateGridBuffers.contains(id)) || (!registered && !_alternateGridBuffers.contains(key))) { + if ((registered && (!_registeredAlternateGridBuffers.contains(id) || _lastRegisteredAlternateGridBuffers[id] != key)) + || (!registered && !_alternateGridBuffers.contains(key))) { + + if (registered && _registeredAlternateGridBuffers.contains(id)) { + _registeredAlternateGridBuffers[id].reset(); + #ifdef WANT_DEBUG + qCDebug(renderutils) << "renderGrid()... RELEASING REGISTERED VERTICES BUFFER"; + #endif + } + gpu::BufferPointer verticesBuffer(new gpu::Buffer()); + if (registered) { + _registeredAlternateGridBuffers[id] = verticesBuffer; + _lastRegisteredAlternateGridBuffers[id] = key; + } else { + _alternateGridBuffers[key] = verticesBuffer; + } GLfloat* vertexData = new GLfloat[vertices * 2]; GLfloat* vertex = vertexData; @@ -443,12 +457,6 @@ void GeometryCache::renderGrid(gpu::Batch& batch, int x, int y, int width, int h verticesBuffer->append(sizeof(GLfloat) * vertices * 2, (gpu::Byte*) vertexData); delete[] vertexData; - - if (registered) { - _registeredAlternateGridBuffers[id] = verticesBuffer; - } else { - _alternateGridBuffers[key] = verticesBuffer; - } } if (!_gridColors.contains(colorKey)) { diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 2e64489c3e..47490bca0d 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -337,8 +337,9 @@ private: QHash _registeredDashedLines; QHash _gridBuffers; - QHash _registeredAlternateGridBuffers; QHash _alternateGridBuffers; + QHash _registeredAlternateGridBuffers; + QHash _lastRegisteredAlternateGridBuffers; QHash _gridColors; QHash _sphereVertices;