From 358b0305ae1f52b477ae145bcca4b7af242dd5c3 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 6 Jul 2017 08:06:12 -0700 Subject: [core] Per-segment-per-layer vertex arrays Reduces rebinding, matches gl-js, and works around the buggy VAO implementation on PowerVR SGX544 GPUs. --- src/mbgl/programs/program.hpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/mbgl/programs/program.hpp') diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp index 0199752b06..71d7569f53 100644 --- a/src/mbgl/programs/program.hpp +++ b/src/mbgl/programs/program.hpp @@ -58,7 +58,8 @@ public: const SegmentVector& segments, const PaintPropertyBinders& paintPropertyBinders, const typename PaintProperties::PossiblyEvaluated& currentProperties, - float currentZoom) { + float currentZoom, + const std::string& layerID) { typename AllUniforms::Values allUniformValues = uniformValues .concat(paintPropertyBinders.uniformValues(currentZoom, currentProperties)); @@ -66,8 +67,10 @@ public: .concat(paintPropertyBinders.attributeBindings(currentProperties)); for (auto& segment : segments) { - if (!segment.vertexArray) { - segment.vertexArray = context.createVertexArray(); + optional& vertexArray = segment.vertexArrays[layerID]; + + if (!vertexArray) { + vertexArray = context.createVertexArray(); } program.draw( @@ -77,7 +80,7 @@ public: std::move(stencilMode), std::move(colorMode), allUniformValues, - *segment.vertexArray, + *vertexArray, Attributes::offsetBindings(allAttributeBindings, segment.vertexOffset), indexBuffer, segment.indexOffset, -- cgit v1.2.1