diff options
Diffstat (limited to 'src/mbgl/renderer/symbol_bucket.cpp')
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index 3ef0686e4d..0c41031c93 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -22,12 +22,17 @@ SymbolBucket::SymbolBucket(const MapMode mode_, void SymbolBucket::upload(gl::Context& context) { if (hasTextData()) { - text.vertices.upload(context); - text.triangles.upload(context); + text.vertexBuffer = context.createVertexBuffer(std::move(text.vertices)); + text.indexBuffer = context.createIndexBuffer(std::move(text.triangles)); } + if (hasIconData()) { - icon.vertices.upload(context); - icon.triangles.upload(context); + icon.vertexBuffer = context.createVertexBuffer(std::move(icon.vertices)); + icon.indexBuffer = context.createIndexBuffer(std::move(icon.triangles)); + } + + if (hasCollisionBoxData()) { + collisionBox.vertexBuffer = context.createVertexBuffer(std::move(collisionBox.vertices)); } uploaded = true; @@ -69,11 +74,11 @@ void SymbolBucket::drawGlyphs(SDFShader& shader, for (auto& group : text.groups) { assert(group); group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind( - shader, text.vertices, text.triangles, vertex_index, context); + shader, *text.vertexBuffer, *text.indexBuffer, vertex_index, context); MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index)); - vertex_index += group->vertex_length * text.vertices.itemSize; - elements_index += group->elements_length * text.triangles.itemSize; + vertex_index += group->vertex_length * text.vertexBuffer->vertexSize; + elements_index += group->elements_length * text.indexBuffer->primitiveSize; } } @@ -85,11 +90,11 @@ void SymbolBucket::drawIcons(SDFShader& shader, for (auto& group : icon.groups) { assert(group); group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind( - shader, icon.vertices, icon.triangles, vertex_index, context); + shader, *icon.vertexBuffer, *icon.indexBuffer, vertex_index, context); MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index)); - vertex_index += group->vertex_length * icon.vertices.itemSize; - elements_index += group->elements_length * icon.triangles.itemSize; + vertex_index += group->vertex_length * icon.vertexBuffer->vertexSize; + elements_index += group->elements_length * icon.indexBuffer->primitiveSize; } } @@ -101,11 +106,11 @@ void SymbolBucket::drawIcons(IconShader& shader, for (auto& group : icon.groups) { assert(group); group->array[paintMode == PaintMode::Overdraw ? 3 : 2].bind( - shader, icon.vertices, icon.triangles, vertex_index, context); + shader, *icon.vertexBuffer, *icon.indexBuffer, vertex_index, context); MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index)); - vertex_index += group->vertex_length * icon.vertices.itemSize; - elements_index += group->elements_length * icon.triangles.itemSize; + vertex_index += group->vertex_length * icon.vertexBuffer->vertexSize; + elements_index += group->elements_length * icon.indexBuffer->primitiveSize; } } @@ -113,7 +118,7 @@ void SymbolBucket::drawCollisionBoxes(CollisionBoxShader& shader, gl::Context& context) { GLbyte* vertex_index = BUFFER_OFFSET_0; for (auto& group : collisionBox.groups) { - group->array[0].bind(shader, collisionBox.vertices, vertex_index, context); + group->array[0].bind(shader, *collisionBox.vertexBuffer, vertex_index, context); MBGL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, group->vertex_length)); } } |