From 63e81b9aa8ad1a96e47a296db57e33c866315bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 1 Mar 2019 10:00:43 +0100 Subject: [PATCH] [core] move VertexVector/IndexVector to gfx namespace --- src/core-files.json | 2 + src/mbgl/gfx/index_vector.hpp | 50 +++++++++++++++++++ src/mbgl/gfx/vertex_vector.hpp | 50 +++++++++++++++++++ src/mbgl/gl/context.hpp | 10 ++-- src/mbgl/gl/index_buffer.hpp | 27 ---------- src/mbgl/gl/vertex_buffer.hpp | 26 ---------- src/mbgl/layout/symbol_projection.cpp | 8 +-- src/mbgl/layout/symbol_projection.hpp | 2 +- src/mbgl/renderer/buckets/circle_bucket.hpp | 4 +- src/mbgl/renderer/buckets/debug_bucket.cpp | 4 +- src/mbgl/renderer/buckets/fill_bucket.hpp | 6 +-- .../buckets/fill_extrusion_bucket.hpp | 4 +- src/mbgl/renderer/buckets/heatmap_bucket.hpp | 4 +- .../renderer/buckets/hillshade_bucket.hpp | 4 +- src/mbgl/renderer/buckets/line_bucket.hpp | 4 +- src/mbgl/renderer/buckets/raster_bucket.hpp | 4 +- src/mbgl/renderer/buckets/symbol_bucket.cpp | 2 +- src/mbgl/renderer/buckets/symbol_bucket.hpp | 24 ++++----- src/mbgl/renderer/paint_property_binder.hpp | 10 ++-- src/mbgl/renderer/render_static_data.cpp | 20 ++++---- 20 files changed, 158 insertions(+), 107 deletions(-) create mode 100644 src/mbgl/gfx/index_vector.hpp create mode 100644 src/mbgl/gfx/vertex_vector.hpp diff --git a/src/core-files.json b/src/core-files.json index 42a30a3ea..e6d25c679 100644 --- a/src/core-files.json +++ b/src/core-files.json @@ -500,10 +500,12 @@ "mbgl/gfx/cull_face_mode.hpp": "src/mbgl/gfx/cull_face_mode.hpp", "mbgl/gfx/depth_mode.hpp": "src/mbgl/gfx/depth_mode.hpp", "mbgl/gfx/draw_mode.hpp": "src/mbgl/gfx/draw_mode.hpp", + "mbgl/gfx/index_vector.hpp": "src/mbgl/gfx/index_vector.hpp", "mbgl/gfx/primitives.hpp": "src/mbgl/gfx/primitives.hpp", "mbgl/gfx/stencil_mode.hpp": "src/mbgl/gfx/stencil_mode.hpp", "mbgl/gfx/types.hpp": "src/mbgl/gfx/types.hpp", "mbgl/gfx/uniform.hpp": "src/mbgl/gfx/uniform.hpp", + "mbgl/gfx/vertex_vector.hpp": "src/mbgl/gfx/vertex_vector.hpp", "mbgl/gl/attribute.hpp": "src/mbgl/gl/attribute.hpp", "mbgl/gl/context.hpp": "src/mbgl/gl/context.hpp", "mbgl/gl/debugging.hpp": "src/mbgl/gl/debugging.hpp", diff --git a/src/mbgl/gfx/index_vector.hpp b/src/mbgl/gfx/index_vector.hpp new file mode 100644 index 000000000..b477c2978 --- /dev/null +++ b/src/mbgl/gfx/index_vector.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include + +#include + +namespace mbgl { +namespace gfx { + +template +class IndexVector { +public: + static constexpr std::size_t groupSize = DrawMode::bufferGroupSize; + + template + void emplace_back(Args&&... args) { + static_assert(sizeof...(args) == groupSize, "wrong buffer element count"); + util::ignore({ (v.emplace_back(std::forward(args)), 0)... }); + } + + std::size_t indexSize() const { + return v.size(); + } + + std::size_t byteSize() const { + return v.size() * sizeof(uint16_t); + } + + bool empty() const { + return v.empty(); + } + + void clear() { + v.clear(); + } + + const uint16_t* data() const { + return v.data(); + } + + const std::vector& vector() const { + return v; + } + +private: + std::vector v; +}; + +} // namespace gfx +} // namespace mbgl diff --git a/src/mbgl/gfx/vertex_vector.hpp b/src/mbgl/gfx/vertex_vector.hpp new file mode 100644 index 000000000..5d892e913 --- /dev/null +++ b/src/mbgl/gfx/vertex_vector.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include + +#include + +namespace mbgl { +namespace gfx { + +template +class VertexVector { +public: + using Vertex = V; + + template + void emplace_back(Args&&... args) { + static_assert(sizeof...(args) == 1, "wrong buffer element count"); + util::ignore({ (v.emplace_back(std::forward(args)), 0)... }); + } + + std::size_t vertexSize() const { + return v.size(); + } + + std::size_t byteSize() const { + return v.size() * sizeof(Vertex); + } + + bool empty() const { + return v.empty(); + } + + void clear() { + v.clear(); + } + + const Vertex* data() const { + return v.data(); + } + + const std::vector& vector() const { + return v; + } + +private: + std::vector v; +}; + +} // namespace gfx +} // namespace mbgl diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index 7bc139da3..f9b075406 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -64,7 +66,7 @@ public: optional> getBinaryProgram(ProgramID) const; template - VertexBuffer createVertexBuffer(VertexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { + VertexBuffer createVertexBuffer(gfx::VertexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { return VertexBuffer { v.vertexSize(), createVertexBuffer(v.data(), v.byteSize(), usage) @@ -72,13 +74,13 @@ public: } template - void updateVertexBuffer(VertexBuffer& buffer, VertexVector&& v) { + void updateVertexBuffer(VertexBuffer& buffer, gfx::VertexVector&& v) { assert(v.vertexSize() == buffer.vertexCount); updateVertexBuffer(buffer.buffer, v.data(), v.byteSize()); } template - IndexBuffer createIndexBuffer(IndexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { + IndexBuffer createIndexBuffer(gfx::IndexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { return IndexBuffer { v.indexSize(), createIndexBuffer(v.data(), v.byteSize(), usage) @@ -86,7 +88,7 @@ public: } template - void updateIndexBuffer(IndexBuffer& buffer, IndexVector&& v) { + void updateIndexBuffer(IndexBuffer& buffer, gfx::IndexVector&& v) { assert(v.indexSize() == buffer.indexCount); updateIndexBuffer(buffer.buffer, v.data(), v.byteSize()); } diff --git a/src/mbgl/gl/index_buffer.hpp b/src/mbgl/gl/index_buffer.hpp index 14bdcf09e..bf2093245 100644 --- a/src/mbgl/gl/index_buffer.hpp +++ b/src/mbgl/gl/index_buffer.hpp @@ -1,37 +1,10 @@ #pragma once #include -#include -#include - -#include namespace mbgl { namespace gl { -template -class IndexVector { -public: - static constexpr std::size_t groupSize = DrawMode::bufferGroupSize; - - template - void emplace_back(Args&&... args) { - static_assert(sizeof...(args) == groupSize, "wrong buffer element count"); - util::ignore({(v.emplace_back(std::forward(args)), 0)...}); - } - - std::size_t indexSize() const { return v.size(); } - std::size_t byteSize() const { return v.size() * sizeof(uint16_t); } - - bool empty() const { return v.empty(); } - void clear() { v.clear(); } - const uint16_t* data() const { return v.data(); } - const std::vector& vector() const { return v; } - -private: - std::vector v; -}; - template class IndexBuffer { public: diff --git a/src/mbgl/gl/vertex_buffer.hpp b/src/mbgl/gl/vertex_buffer.hpp index 0e2db2608..0b62b86c1 100644 --- a/src/mbgl/gl/vertex_buffer.hpp +++ b/src/mbgl/gl/vertex_buffer.hpp @@ -1,38 +1,12 @@ #pragma once #include -#include -#include -#include #include namespace mbgl { namespace gl { -template -class VertexVector { -public: - using Vertex = V; - - template - void emplace_back(Args&&... args) { - static_assert(sizeof...(args) == 1, "wrong buffer element count"); - util::ignore({(v.emplace_back(std::forward(args)), 0)...}); - } - - std::size_t vertexSize() const { return v.size(); } - std::size_t byteSize() const { return v.size() * sizeof(Vertex); } - - bool empty() const { return v.empty(); } - void clear() { v.clear(); } - const Vertex* data() const { return v.data(); } - const std::vector& vector() const { return v; } - -private: - std::vector v; -}; - template class VertexBuffer { public: diff --git a/src/mbgl/layout/symbol_projection.cpp b/src/mbgl/layout/symbol_projection.cpp index 293cdc542..dff2a569a 100644 --- a/src/mbgl/layout/symbol_projection.cpp +++ b/src/mbgl/layout/symbol_projection.cpp @@ -122,7 +122,7 @@ namespace mbgl { } void addDynamicAttributes(const Point& anchorPoint, const float angle, - gl::VertexVector>& dynamicVertexArray) { + gfx::VertexVector>& dynamicVertexArray) { auto dynamicVertex = SymbolSDFIconProgram::dynamicLayoutVertex(anchorPoint, angle); dynamicVertexArray.emplace_back(dynamicVertex); dynamicVertexArray.emplace_back(dynamicVertex); @@ -130,7 +130,7 @@ namespace mbgl { dynamicVertexArray.emplace_back(dynamicVertex); } - void hideGlyphs(size_t numGlyphs, gl::VertexVector>& dynamicVertexArray) { + void hideGlyphs(size_t numGlyphs, gfx::VertexVector>& dynamicVertexArray) { const Point offscreenPoint = { -INFINITY, -INFINITY }; for (size_t i = 0; i < numGlyphs; i++) { addDynamicAttributes(offscreenPoint, 0, dynamicVertexArray); @@ -288,7 +288,7 @@ namespace mbgl { const mat4& posMatrix, const mat4& labelPlaneMatrix, const mat4& glCoordMatrix, - gl::VertexVector>& dynamicVertexArray, + gfx::VertexVector>& dynamicVertexArray, const Point& projectedAnchorPoint, const float aspectRatio) { const float fontScale = fontSize / 24.0; @@ -360,7 +360,7 @@ namespace mbgl { } - void reprojectLineLabels(gl::VertexVector>& dynamicVertexArray, const std::vector& placedSymbols, + void reprojectLineLabels(gfx::VertexVector>& dynamicVertexArray, const std::vector& placedSymbols, const mat4& posMatrix, const style::SymbolPropertyValues& values, const RenderTile& tile, const SymbolSizeBinder& sizeBinder, const TransformState& state) { diff --git a/src/mbgl/layout/symbol_projection.hpp b/src/mbgl/layout/symbol_projection.hpp index f3dd29add..a13769dca 100644 --- a/src/mbgl/layout/symbol_projection.hpp +++ b/src/mbgl/layout/symbol_projection.hpp @@ -46,7 +46,7 @@ namespace mbgl { using PointAndCameraDistance = std::pair,float>; PointAndCameraDistance project(const Point& point, const mat4& matrix); - void reprojectLineLabels(gl::VertexVector>&, const std::vector&, + void reprojectLineLabels(gfx::VertexVector>&, const std::vector&, const mat4& posMatrix, const style::SymbolPropertyValues&, const RenderTile&, const SymbolSizeBinder& sizeBinder, const TransformState&); diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp index 70995733e..b823c3ec9 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.hpp +++ b/src/mbgl/renderer/buckets/circle_bucket.hpp @@ -30,8 +30,8 @@ public: float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; - gl::VertexVector vertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::IndexVector triangles; SegmentVector segments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/debug_bucket.cpp b/src/mbgl/renderer/buckets/debug_bucket.cpp index 52bb6ca4b..ca96bb62d 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.cpp +++ b/src/mbgl/renderer/buckets/debug_bucket.cpp @@ -23,8 +23,8 @@ DebugBucket::DebugBucket(const OverscaledTileID& id, expires(std::move(expires_)), debugMode(debugMode_) { - gl::VertexVector vertices; - gl::IndexVector indices; + gfx::VertexVector vertices; + gfx::IndexVector indices; auto addText = [&] (const std::string& text, double left, double baseline, double scale) { for (uint8_t c : text) { diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp index b74489ae1..d205ca801 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_bucket.hpp @@ -40,9 +40,9 @@ public: float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; - gl::VertexVector vertices; - gl::IndexVector lines; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::IndexVector lines; + gfx::IndexVector triangles; SegmentVector lineSegments; SegmentVector triangleSegments; diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp index 9f8b78f0d..7ff6b5e84 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp @@ -39,8 +39,8 @@ public: float getQueryRadius(const RenderLayer&) const override; - gl::VertexVector vertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::IndexVector triangles; SegmentVector triangleSegments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp index e72e0e5c6..437a6f647 100644 --- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp +++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp @@ -29,8 +29,8 @@ public: float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; - gl::VertexVector vertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::IndexVector triangles; SegmentVector segments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/hillshade_bucket.hpp b/src/mbgl/renderer/buckets/hillshade_bucket.hpp index 15d48d4df..54c16dcbd 100644 --- a/src/mbgl/renderer/buckets/hillshade_bucket.hpp +++ b/src/mbgl/renderer/buckets/hillshade_bucket.hpp @@ -46,8 +46,8 @@ public: } // Raster-DEM Tile Sources use the default buffers from Painter - gl::VertexVector vertices; - gl::IndexVector indices; + gfx::VertexVector vertices; + gfx::IndexVector indices; SegmentVector segments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp index 5db561f90..702f55d66 100644 --- a/src/mbgl/renderer/buckets/line_bucket.hpp +++ b/src/mbgl/renderer/buckets/line_bucket.hpp @@ -43,8 +43,8 @@ public: PossiblyEvaluatedLayoutProperties layout; - gl::VertexVector vertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::IndexVector triangles; SegmentVector segments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/raster_bucket.hpp b/src/mbgl/renderer/buckets/raster_bucket.hpp index 8cf71d523..d61054841 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.hpp +++ b/src/mbgl/renderer/buckets/raster_bucket.hpp @@ -32,8 +32,8 @@ public: // Bucket specific vertices are used for Image Sources only // Raster Tile Sources use the default buffers from Painter - gl::VertexVector vertices; - gl::IndexVector indices; + gfx::VertexVector vertices; + gfx::IndexVector indices; SegmentVector segments; optional> vertexBuffer; diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index af9ce91b3..cea46a54e 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -152,7 +152,7 @@ void SymbolBucket::updateOpacity() { uploaded = false; } -void addPlacedSymbol(gl::IndexVector& triangles, const PlacedSymbol& placedSymbol) { +void addPlacedSymbol(gfx::IndexVector& triangles, const PlacedSymbol& placedSymbol) { auto endIndex = placedSymbol.vertexStartIndex + placedSymbol.glyphOffsets.size() * 4; for (auto vertexIndex = placedSymbol.vertexStartIndex; vertexIndex < endIndex; vertexIndex += 4) { triangles.emplace_back(vertexIndex + 0, vertexIndex + 1, vertexIndex + 2); diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 5b9b11cf4..2ebeb9906 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -88,10 +88,10 @@ public: std::unique_ptr textSizeBinder; struct TextBuffer { - gl::VertexVector vertices; - gl::VertexVector> dynamicVertices; - gl::VertexVector> opacityVertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::VertexVector> dynamicVertices; + gfx::VertexVector> opacityVertices; + gfx::IndexVector triangles; SegmentVector segments; std::vector placedSymbols; @@ -104,10 +104,10 @@ public: std::unique_ptr iconSizeBinder; struct IconBuffer { - gl::VertexVector vertices; - gl::VertexVector> dynamicVertices; - gl::VertexVector> opacityVertices; - gl::IndexVector triangles; + gfx::VertexVector vertices; + gfx::VertexVector> dynamicVertices; + gfx::VertexVector> opacityVertices; + gfx::IndexVector triangles; SegmentVector segments; std::vector placedSymbols; PremultipliedImage atlasImage; @@ -119,8 +119,8 @@ public: } icon; struct CollisionBuffer { - gl::VertexVector> vertices; - gl::VertexVector> dynamicVertices; + gfx::VertexVector> vertices; + gfx::VertexVector> dynamicVertices; SegmentVector segments; optional>> vertexBuffer; @@ -128,12 +128,12 @@ public: }; struct CollisionBoxBuffer : public CollisionBuffer { - gl::IndexVector lines; + gfx::IndexVector lines; optional> indexBuffer; } collisionBox; struct CollisionCircleBuffer : public CollisionBuffer { - gl::IndexVector triangles; + gfx::IndexVector triangles; optional> indexBuffer; } collisionCircle; diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp index 56f187507..874fab5ad 100644 --- a/src/mbgl/renderer/paint_property_binder.hpp +++ b/src/mbgl/renderer/paint_property_binder.hpp @@ -221,7 +221,7 @@ public: private: style::PropertyExpression expression; T defaultValue; - gl::VertexVector vertexVector; + gfx::VertexVector vertexVector; optional> vertexBuffer; }; @@ -284,7 +284,7 @@ private: style::PropertyExpression expression; T defaultValue; Range zoomRange; - gl::VertexVector vertexVector; + gfx::VertexVector vertexVector; optional> vertexBuffer; }; @@ -375,9 +375,9 @@ private: style::PropertyExpression expression; T defaultValue; Range zoomRange; - gl::VertexVector patternToVertexVector; - gl::VertexVector zoomInVertexVector; - gl::VertexVector zoomOutVertexVector; + gfx::VertexVector patternToVertexVector; + gfx::VertexVector zoomInVertexVector; + gfx::VertexVector zoomOutVertexVector; optional> patternToVertexBuffer; optional> zoomInVertexBuffer; optional> zoomOutVertexBuffer; diff --git a/src/mbgl/renderer/render_static_data.cpp b/src/mbgl/renderer/render_static_data.cpp index 7313f95ec..cae0e0a82 100644 --- a/src/mbgl/renderer/render_static_data.cpp +++ b/src/mbgl/renderer/render_static_data.cpp @@ -3,8 +3,8 @@ namespace mbgl { -static gl::VertexVector> tileVertices() { - gl::VertexVector> result; +static gfx::VertexVector> tileVertices() { + gfx::VertexVector> result; result.emplace_back(gfx::Vertex({{{ 0, 0 }}})); result.emplace_back(gfx::Vertex({{{ util::EXTENT, 0 }}})); result.emplace_back(gfx::Vertex({{{ 0, util::EXTENT }}})); @@ -12,15 +12,15 @@ static gl::VertexVector> tileVertices( return result; } -static gl::IndexVector quadTriangleIndices() { - gl::IndexVector result; +static gfx::IndexVector quadTriangleIndices() { + gfx::IndexVector result; result.emplace_back(0, 1, 2); result.emplace_back(1, 2, 3); return result; } -static gl::IndexVector tileLineStripIndices() { - gl::IndexVector result; +static gfx::IndexVector tileLineStripIndices() { + gfx::IndexVector result; result.emplace_back(0); result.emplace_back(1); result.emplace_back(3); @@ -29,8 +29,8 @@ static gl::IndexVector tileLineStripIndices() { return result; } -static gl::VertexVector rasterVertices() { - gl::VertexVector result; +static gfx::VertexVector rasterVertices() { + gfx::VertexVector result; result.emplace_back(RasterProgram::layoutVertex({ 0, 0 }, { 0, 0 })); result.emplace_back(RasterProgram::layoutVertex({ util::EXTENT, 0 }, { util::EXTENT, 0 })); result.emplace_back(RasterProgram::layoutVertex({ 0, util::EXTENT }, { 0, util::EXTENT })); @@ -38,8 +38,8 @@ static gl::VertexVector rasterVertices() { return result; } -static gl::VertexVector extrusionTextureVertices() { - gl::VertexVector result; +static gfx::VertexVector extrusionTextureVertices() { + gfx::VertexVector result; result.emplace_back(ExtrusionTextureProgram::layoutVertex({ 0, 0 })); result.emplace_back(ExtrusionTextureProgram::layoutVertex({ 1, 0 })); result.emplace_back(ExtrusionTextureProgram::layoutVertex({ 0, 1 }));