diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2017-10-25 11:18:57 -0400 |
---|---|---|
committer | Ansis Brammanis <ansis@mapbox.com> | 2017-10-25 11:19:49 -0400 |
commit | 6480671782f24e5bd87a92a68fc16eb53630e873 (patch) | |
tree | 32e520910309834e6fb79c96e395cfd823bc41de /src/mbgl/programs/collision_box_program.hpp | |
parent | 74701079c297ce390de74ea2e9cfe7f1b2d4ec83 (diff) | |
download | qtlocation-mapboxgl-6480671782f24e5bd87a92a68fc16eb53630e873.tar.gz |
use the values in the collisionbox opacity buffer [skip ci]upstream/start-collision-debug
Diffstat (limited to 'src/mbgl/programs/collision_box_program.hpp')
-rw-r--r-- | src/mbgl/programs/collision_box_program.hpp | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp index d4b5ea0e5a..2547da9f18 100644 --- a/src/mbgl/programs/collision_box_program.hpp +++ b/src/mbgl/programs/collision_box_program.hpp @@ -11,7 +11,7 @@ namespace mbgl { -using CollisionBoxAttributes = gl::Attributes< +using CollisionBoxLayoutAttributes = gl::Attributes< attributes::a_pos, attributes::a_anchor_pos, attributes::a_extrude>; @@ -27,7 +27,7 @@ struct CollisionBoxOpacityAttributes : gl::Attributes<attributes::a_placed> { class CollisionBoxProgram : public Program< shaders::collision_box, gl::Line, - CollisionBoxAttributes, + gl::ConcatenateAttributes<CollisionBoxLayoutAttributes, CollisionBoxOpacityAttributes>, gl::Uniforms< uniforms::u_matrix, uniforms::u_extrude_scale, @@ -37,8 +37,8 @@ class CollisionBoxProgram : public Program< public: using Program::Program; - static LayoutVertex vertex(Point<float> a, Point<float> anchor, Point<float> o) { - return LayoutVertex { + static CollisionBoxLayoutAttributes::Vertex vertex(Point<float> a, Point<float> anchor, Point<float> o) { + return CollisionBoxLayoutAttributes::Vertex { {{ static_cast<int16_t>(a.x), static_cast<int16_t>(a.y) @@ -53,6 +53,51 @@ public: }} }; } + + template <class DrawMode> + void draw(gl::Context& context, + DrawMode drawMode, + gl::DepthMode depthMode, + gl::StencilMode stencilMode, + gl::ColorMode colorMode, + const UniformValues& uniformValues, + const gl::VertexBuffer<CollisionBoxLayoutAttributes::Vertex>& layoutVertexBuffer, + const gl::VertexBuffer<CollisionBoxOpacityAttributes::Vertex>& opacityVertexBuffer, + const gl::IndexBuffer<DrawMode>& indexBuffer, + const SegmentVector<Attributes>& segments, + const PaintPropertyBinders& paintPropertyBinders, + const typename PaintProperties::PossiblyEvaluated& currentProperties, + float currentZoom, + const std::string& layerID) { + typename AllUniforms::Values allUniformValues = uniformValues + .concat(paintPropertyBinders.uniformValues(currentZoom, currentProperties)); + + typename Attributes::Bindings allAttributeBindings = CollisionBoxLayoutAttributes::bindings(layoutVertexBuffer) + .concat(CollisionBoxOpacityAttributes::bindings(opacityVertexBuffer)) + .concat(paintPropertyBinders.attributeBindings(currentProperties)); + + for (auto& segment : segments) { + auto vertexArrayIt = segment.vertexArrays.find(layerID); + + if (vertexArrayIt == segment.vertexArrays.end()) { + vertexArrayIt = segment.vertexArrays.emplace(layerID, context.createVertexArray()).first; + } + + program.draw( + context, + std::move(drawMode), + std::move(depthMode), + std::move(stencilMode), + std::move(colorMode), + allUniformValues, + vertexArrayIt->second, + Attributes::offsetBindings(allAttributeBindings, segment.vertexOffset), + indexBuffer, + segment.indexOffset, + segment.indexLength); + } + } + }; using CollisionBoxVertex = CollisionBoxProgram::LayoutVertex; |