diff options
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/gl/program.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/gl/segment.hpp | 13 | ||||
-rw-r--r-- | src/mbgl/programs/circle_program.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/programs/collision_box_program.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/programs/debug_program.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/programs/raster_program.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/circle_bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/debug_bucket.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/debug_bucket.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/fill_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/line_bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_background.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_clipping.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_debug.cpp | 21 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_raster.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.hpp | 6 |
18 files changed, 86 insertions, 36 deletions
diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp index 44c16ae671..01fa51e788 100644 --- a/src/mbgl/gl/program.hpp +++ b/src/mbgl/gl/program.hpp @@ -42,7 +42,7 @@ public: UniformValues&& uniformValues, const VertexBuffer<Vertex>& vertexBuffer, const IndexBuffer<DrawMode>& indexBuffer, - const std::vector<Segment>& segments) { + const SegmentVector<Attributes>& segments) { static_assert(std::is_same<Primitive, typename DrawMode::Primitive>::value, "incompatible draw mode"); context.draw({ std::move(drawMode), @@ -66,7 +66,8 @@ public: StencilMode stencilMode, ColorMode colorMode, UniformValues&& uniformValues, - const VertexBuffer<Vertex, DrawMode>& vertexBuffer) { + const VertexBuffer<Vertex, DrawMode>& vertexBuffer, + const SegmentVector<Attributes>& segments) { static_assert(std::is_same<Primitive, typename DrawMode::Primitive>::value, "incompatible draw mode"); context.draw({ std::move(drawMode), @@ -76,7 +77,7 @@ public: program, vertexBuffer.buffer, 0, - {{ 0, 0, vertexBuffer.vertexCount, 0 }}, + segments, Uniforms::binder(uniformsState, std::move(uniformValues)), Attributes::binder(attributesState) }); diff --git a/src/mbgl/gl/segment.hpp b/src/mbgl/gl/segment.hpp index f65f2a5f7e..283b4f572a 100644 --- a/src/mbgl/gl/segment.hpp +++ b/src/mbgl/gl/segment.hpp @@ -23,5 +23,18 @@ public: std::size_t indexLength; }; +template <class Attributes> +class SegmentVector : public std::vector<Segment> { +public: + SegmentVector() = default; + + // This constructor is for unindexed rendering. It creates a SegmentVector with a + // single segment having 0 indexes. + template <class DrawMode> + SegmentVector(const VertexBuffer<typename Attributes::Vertex, DrawMode>& buffer) { + emplace_back(0, 0, buffer.vertexCount, 0); + } +}; + } // namespace gl } // namespace mbgl diff --git a/src/mbgl/programs/circle_program.hpp b/src/mbgl/programs/circle_program.hpp index 75c030b1c8..b428937e33 100644 --- a/src/mbgl/programs/circle_program.hpp +++ b/src/mbgl/programs/circle_program.hpp @@ -14,11 +14,13 @@ MBGL_DEFINE_UNIFORM_SCALAR(bool, u_scale_with_map); MBGL_DEFINE_UNIFORM_SCALAR(float, u_devicepixelratio); } // namespace uniforms +using CircleAttributes = gl::Attributes< + attributes::a_pos>; + class CircleProgram : public Program< shaders::circle, gl::Triangle, - gl::Attributes< - attributes::a_pos>, + CircleAttributes, gl::Uniforms< uniforms::u_matrix, uniforms::u_opacity, diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp index 5eda3fefb0..26e38419a4 100644 --- a/src/mbgl/programs/collision_box_program.hpp +++ b/src/mbgl/programs/collision_box_program.hpp @@ -15,13 +15,15 @@ MBGL_DEFINE_UNIFORM_SCALAR(float, u_scale); MBGL_DEFINE_UNIFORM_SCALAR(float, u_maxzoom); } // namespace uniforms +using CollisionBoxAttributes = gl::Attributes< + attributes::a_pos, + attributes::a_extrude, + attributes::a_data<2>>; + class CollisionBoxProgram : public Program< shaders::collision_box, gl::Line, - gl::Attributes< - attributes::a_pos, - attributes::a_extrude, - attributes::a_data<2>>, + CollisionBoxAttributes, gl::Uniforms< uniforms::u_matrix, uniforms::u_scale, diff --git a/src/mbgl/programs/debug_program.hpp b/src/mbgl/programs/debug_program.hpp index 3596dc1f7e..cd4e08b1bc 100644 --- a/src/mbgl/programs/debug_program.hpp +++ b/src/mbgl/programs/debug_program.hpp @@ -7,11 +7,13 @@ namespace mbgl { +using DebugAttributes = gl::Attributes< + attributes::a_pos>; + class DebugProgram : public Program< shaders::debug, gl::Line, - gl::Attributes< - attributes::a_pos>, + DebugAttributes, gl::Uniforms< uniforms::u_matrix, uniforms::u_color>> @@ -20,4 +22,6 @@ public: using Program::Program; }; +using DebugVertex = DebugProgram::Vertex; + } // namespace mbgl diff --git a/src/mbgl/programs/raster_program.hpp b/src/mbgl/programs/raster_program.hpp index 1bab2d5765..d6179904d2 100644 --- a/src/mbgl/programs/raster_program.hpp +++ b/src/mbgl/programs/raster_program.hpp @@ -23,12 +23,14 @@ MBGL_DEFINE_UNIFORM_VECTOR(float, 3, u_spin_weights); MBGL_DEFINE_UNIFORM_VECTOR(float, 2, u_tl_parent); } // namespace uniforms +using RasterAttributes = gl::Attributes< + attributes::a_pos, + attributes::a_texture_pos>; + class RasterProgram : public Program< shaders::raster, gl::Triangle, - gl::Attributes< - attributes::a_pos, - attributes::a_texture_pos>, + RasterAttributes, gl::Uniforms< uniforms::u_matrix, uniforms::u_image0, diff --git a/src/mbgl/renderer/circle_bucket.hpp b/src/mbgl/renderer/circle_bucket.hpp index a93b052d68..af7041a238 100644 --- a/src/mbgl/renderer/circle_bucket.hpp +++ b/src/mbgl/renderer/circle_bucket.hpp @@ -22,7 +22,7 @@ public: gl::VertexVector<CircleVertex> vertices; gl::IndexVector<gl::Triangles> triangles; - std::vector<gl::Segment> segments; + gl::SegmentVector<CircleAttributes> segments; optional<gl::VertexBuffer<CircleVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; diff --git a/src/mbgl/renderer/debug_bucket.cpp b/src/mbgl/renderer/debug_bucket.cpp index 4beb16a996..deceec6ab7 100644 --- a/src/mbgl/renderer/debug_bucket.cpp +++ b/src/mbgl/renderer/debug_bucket.cpp @@ -80,7 +80,8 @@ DebugBucket::DebugBucket(const OverscaledTileID& id, modified(std::move(modified_)), expires(std::move(expires_)), debugMode(debugMode_), - vertexBuffer(context.createVertexBuffer(buildTextVertices(id, renderable_, complete_, modified_, expires_, debugMode_))) { + vertexBuffer(context.createVertexBuffer(buildTextVertices(id, renderable_, complete_, modified_, expires_, debugMode_))), + segments(vertexBuffer) { } } // namespace mbgl diff --git a/src/mbgl/renderer/debug_bucket.hpp b/src/mbgl/renderer/debug_bucket.hpp index 4c173786ae..96703d87d0 100644 --- a/src/mbgl/renderer/debug_bucket.hpp +++ b/src/mbgl/renderer/debug_bucket.hpp @@ -6,7 +6,7 @@ #include <mbgl/util/optional.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/gl/vertex_buffer.hpp> -#include <mbgl/programs/fill_program.hpp> +#include <mbgl/programs/debug_program.hpp> namespace mbgl { @@ -32,7 +32,8 @@ public: const optional<Timestamp> expires; const MapDebugOptions debugMode; - gl::VertexBuffer<FillVertex, gl::Lines> vertexBuffer; + gl::VertexBuffer<DebugVertex, gl::Lines> vertexBuffer; + gl::SegmentVector<DebugAttributes> segments; }; } // namespace mbgl diff --git a/src/mbgl/renderer/fill_bucket.hpp b/src/mbgl/renderer/fill_bucket.hpp index 4ea558b629..edb1521c1d 100644 --- a/src/mbgl/renderer/fill_bucket.hpp +++ b/src/mbgl/renderer/fill_bucket.hpp @@ -22,8 +22,8 @@ public: gl::VertexVector<FillVertex> vertices; gl::IndexVector<gl::Lines> lines; gl::IndexVector<gl::Triangles> triangles; - std::vector<gl::Segment> lineSegments; - std::vector<gl::Segment> triangleSegments; + gl::SegmentVector<FillAttributes> lineSegments; + gl::SegmentVector<FillAttributes> triangleSegments; optional<gl::VertexBuffer<FillVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Lines>> lineIndexBuffer; diff --git a/src/mbgl/renderer/line_bucket.hpp b/src/mbgl/renderer/line_bucket.hpp index 9903ca1842..ae9d7d7f0e 100644 --- a/src/mbgl/renderer/line_bucket.hpp +++ b/src/mbgl/renderer/line_bucket.hpp @@ -28,7 +28,7 @@ public: gl::VertexVector<LineVertex> vertices; gl::IndexVector<gl::Triangles> triangles; - std::vector<gl::Segment> segments; + gl::SegmentVector<LineAttributes> segments; optional<gl::VertexBuffer<LineVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index a09e3b73fc..9dee668874 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -77,8 +77,11 @@ Painter::Painter(gl::Context& context_, const TransformState& state_) : context(context_), state(state_), tileTriangleVertexBuffer(context.createVertexBuffer(tileTriangles())), - tileLineStripVertexBuffer(context.createVertexBuffer(tileLineStrip())), - rasterVertexBuffer(context.createVertexBuffer(rasterTriangleStrip())) { + tileTriangleSegments(tileTriangleVertexBuffer), + tileBorderVertexBuffer(context.createVertexBuffer(tileLineStrip())), + tileBorderSegments(tileBorderVertexBuffer), + rasterVertexBuffer(context.createVertexBuffer(rasterTriangleStrip())), + rasterSegments(rasterVertexBuffer) { #ifndef NDEBUG gl::debugging::enable(); #endif diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index 3f5f28dad1..2aa317f95a 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -9,6 +9,7 @@ #include <mbgl/renderer/bucket.hpp> #include <mbgl/gl/context.hpp> +#include <mbgl/programs/debug_program.hpp> #include <mbgl/programs/fill_program.hpp> #include <mbgl/programs/raster_program.hpp> @@ -157,8 +158,13 @@ private: #endif gl::VertexBuffer<FillVertex, gl::Triangles> tileTriangleVertexBuffer; - gl::VertexBuffer<FillVertex, gl::LineStrip> tileLineStripVertexBuffer; + gl::SegmentVector<FillAttributes> tileTriangleSegments; + + gl::VertexBuffer<DebugVertex, gl::LineStrip> tileBorderVertexBuffer; + gl::SegmentVector<DebugAttributes> tileBorderSegments; + gl::VertexBuffer<RasterVertex, gl::TriangleStrip> rasterVertexBuffer; + gl::SegmentVector<RasterAttributes> rasterSegments; }; } // namespace mbgl diff --git a/src/mbgl/renderer/painter_background.cpp b/src/mbgl/renderer/painter_background.cpp index 5e71cb7b20..4e87829914 100644 --- a/src/mbgl/renderer/painter_background.cpp +++ b/src/mbgl/renderer/painter_background.cpp @@ -44,7 +44,8 @@ void Painter::renderBackground(PaintParameters& parameters, const BackgroundLaye tileID, state ), - tileTriangleVertexBuffer + tileTriangleVertexBuffer, + tileTriangleSegments ); } } else { @@ -62,7 +63,8 @@ void Painter::renderBackground(PaintParameters& parameters, const BackgroundLaye uniforms::u_outline_color::Value{ properties.backgroundColor.value }, uniforms::u_world::Value{ context.viewport.getCurrentValue().size }, }, - tileTriangleVertexBuffer + tileTriangleVertexBuffer, + tileTriangleSegments ); } } diff --git a/src/mbgl/renderer/painter_clipping.cpp b/src/mbgl/renderer/painter_clipping.cpp index 2054424475..2b876667c9 100644 --- a/src/mbgl/renderer/painter_clipping.cpp +++ b/src/mbgl/renderer/painter_clipping.cpp @@ -26,7 +26,8 @@ void Painter::renderClippingMask(const UnwrappedTileID& tileID, const ClipID& cl uniforms::u_outline_color::Value{ Color {} }, uniforms::u_world::Value{ context.viewport.getCurrentValue().size }, }, - tileTriangleVertexBuffer + tileTriangleVertexBuffer, + tileTriangleSegments ); } diff --git a/src/mbgl/renderer/painter_debug.cpp b/src/mbgl/renderer/painter_debug.cpp index 8969354d23..d0fb9f3435 100644 --- a/src/mbgl/renderer/painter_debug.cpp +++ b/src/mbgl/renderer/painter_debug.cpp @@ -18,7 +18,7 @@ void Painter::renderTileDebug(const RenderTile& renderTile) { MBGL_DEBUG_GROUP(std::string { "debug " } + util::toString(renderTile.id)); - auto draw = [&] (Color color, const auto& vertexBuffer, auto drawMode) { + auto draw = [&] (Color color, const auto& vertexBuffer, const auto& segments, auto drawMode) { programs->debug.draw( context, drawMode, @@ -29,7 +29,8 @@ void Painter::renderTileDebug(const RenderTile& renderTile) { uniforms::u_matrix::Value{ renderTile.matrix }, uniforms::u_color::Value{ color } }, - vertexBuffer + vertexBuffer, + segments ); }; @@ -45,12 +46,22 @@ void Painter::renderTileDebug(const RenderTile& renderTile) { tile.expires, frame.debugOptions, context); } - draw(Color::white(), tile.debugBucket->vertexBuffer, gl::Lines { 4.0f * frame.pixelRatio }); - draw(Color::black(), tile.debugBucket->vertexBuffer, gl::Lines { 2.0f * frame.pixelRatio }); + draw(Color::white(), + tile.debugBucket->vertexBuffer, + tile.debugBucket->segments, + gl::Lines { 4.0f * frame.pixelRatio }); + + draw(Color::black(), + tile.debugBucket->vertexBuffer, + tile.debugBucket->segments, + gl::Lines { 2.0f * frame.pixelRatio }); } if (frame.debugOptions & MapDebugOptions::TileBorders) { - draw(Color::red(), tileLineStripVertexBuffer, gl::LineStrip { 4.0f * frame.pixelRatio }); + draw(Color::red(), + tileBorderVertexBuffer, + tileBorderSegments, + gl::LineStrip { 4.0f * frame.pixelRatio }); } } diff --git a/src/mbgl/renderer/painter_raster.cpp b/src/mbgl/renderer/painter_raster.cpp index e19cde289a..fe25878016 100644 --- a/src/mbgl/renderer/painter_raster.cpp +++ b/src/mbgl/renderer/painter_raster.cpp @@ -75,7 +75,8 @@ void Painter::renderRaster(PaintParameters& parameters, uniforms::u_scale_parent::Value{ 1.0f }, uniforms::u_tl_parent::Value{ std::array<float, 2> {{ 0.0f, 0.0f }} }, }, - rasterVertexBuffer + rasterVertexBuffer, + rasterSegments ); } diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp index 327049b280..e5c44d8a3c 100644 --- a/src/mbgl/renderer/symbol_bucket.hpp +++ b/src/mbgl/renderer/symbol_bucket.hpp @@ -36,7 +36,7 @@ public: struct TextBuffer { gl::VertexVector<SymbolVertex> vertices; gl::IndexVector<gl::Triangles> triangles; - std::vector<gl::Segment> segments; + gl::SegmentVector<SymbolAttributes> segments; optional<gl::VertexBuffer<SymbolVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; @@ -45,7 +45,7 @@ public: struct IconBuffer { gl::VertexVector<SymbolVertex> vertices; gl::IndexVector<gl::Triangles> triangles; - std::vector<gl::Segment> segments; + gl::SegmentVector<SymbolAttributes> segments; optional<gl::VertexBuffer<SymbolVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; @@ -54,7 +54,7 @@ public: struct CollisionBoxBuffer { gl::VertexVector<CollisionBoxVertex> vertices; gl::IndexVector<gl::Lines> lines; - std::vector<gl::Segment> segments; + gl::SegmentVector<CollisionBoxAttributes> segments; optional<gl::VertexBuffer<CollisionBoxVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Lines>> indexBuffer; |