diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-05-13 17:13:31 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-05-15 10:55:58 -0700 |
commit | 867555b1c9ef51fec23ce77c682cf7d5b5a23c5e (patch) | |
tree | de380cbb7f5553282b081dce9202cbe9e502ebe5 /src/mbgl/renderer/buckets | |
parent | 1a9e93e8d5fc6fd027160b3126eab03d0809ca69 (diff) | |
download | qtlocation-mapboxgl-867555b1c9ef51fec23ce77c682cf7d5b5a23c5e.tar.gz |
[core] add gfx::UploadPass, split startRender into prepare and uploadupstream/gfx-refactor-7
Diffstat (limited to 'src/mbgl/renderer/buckets')
18 files changed, 75 insertions, 72 deletions
diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp index 376f4e682f..d9ba5f31ca 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.cpp +++ b/src/mbgl/renderer/buckets/circle_bucket.cpp @@ -24,12 +24,12 @@ CircleBucket::CircleBucket(const BucketParameters& parameters, const std::vector CircleBucket::~CircleBucket() = default; -void CircleBucket::upload(gfx::Context& context) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(triangles)); +void CircleBucket::upload(gfx::UploadPass& uploadPass) { + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { - pair.second.upload(context); + pair.second.upload(uploadPass); } uploaded = true; diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp index 58f76327ab..145748f313 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.hpp +++ b/src/mbgl/renderer/buckets/circle_bucket.hpp @@ -25,7 +25,7 @@ public: bool hasData() const override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/debug_bucket.cpp b/src/mbgl/renderer/buckets/debug_bucket.cpp index dac7622996..13380c0905 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.cpp +++ b/src/mbgl/renderer/buckets/debug_bucket.cpp @@ -1,5 +1,4 @@ #include <mbgl/renderer/buckets/debug_bucket.hpp> -#include <mbgl/programs/fill_program.hpp> #include <mbgl/geometry/debug_font_data.hpp> #include <mbgl/tile/tile_id.hpp> #include <mbgl/util/string.hpp> @@ -16,8 +15,7 @@ DebugBucket::DebugBucket(const OverscaledTileID& id, const bool complete_, optional<Timestamp> modified_, optional<Timestamp> expires_, - MapDebugOptions debugMode_, - gfx::Context& context) + MapDebugOptions debugMode_) : renderable(renderable_), complete(complete_), modified(std::move(modified_)), @@ -25,9 +23,6 @@ DebugBucket::DebugBucket(const OverscaledTileID& id, debugMode(debugMode_), drawScopeID("__debug/" + util::toHex(util::nextID())) { - gfx::VertexVector<FillLayoutVertex> vertices; - gfx::IndexVector<gfx::Lines> indices; - auto addText = [&] (const std::string& text, double left, double baseline, double scale) { for (uint8_t c : text) { if (c < 32 || c >= 127) @@ -77,10 +72,12 @@ DebugBucket::DebugBucket(const OverscaledTileID& id, } segments.emplace_back(0, 0, vertices.elements(), indices.elements()); +} +void DebugBucket::upload(gfx::UploadPass& uploadPass) { if (!vertices.empty()) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(indices)); + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(indices)); } } diff --git a/src/mbgl/renderer/buckets/debug_bucket.hpp b/src/mbgl/renderer/buckets/debug_bucket.hpp index 30d5ff67c8..2b735b4987 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.hpp +++ b/src/mbgl/renderer/buckets/debug_bucket.hpp @@ -8,13 +8,14 @@ #include <mbgl/gfx/vertex_buffer.hpp> #include <mbgl/gfx/index_buffer.hpp> #include <mbgl/programs/debug_program.hpp> +#include <mbgl/programs/fill_program.hpp> namespace mbgl { class OverscaledTileID; namespace gl { -class Context; +class UploadPass; } // namespace gl class DebugBucket : private util::noncopyable { @@ -24,8 +25,9 @@ public: bool complete, optional<Timestamp> modified, optional<Timestamp> expires, - MapDebugOptions, - gfx::Context&); + MapDebugOptions); + + void upload(gfx::UploadPass&); const bool renderable; const bool complete; @@ -33,6 +35,10 @@ public: const optional<Timestamp> expires; const MapDebugOptions debugMode; + + gfx::VertexVector<FillLayoutVertex> vertices; + gfx::IndexVector<gfx::Lines> indices; + SegmentVector<DebugAttributes> segments; optional<gfx::VertexBuffer<DebugLayoutVertex>> vertexBuffer; optional<gfx::IndexBuffer> indexBuffer; diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp index c69b60327d..e4cfd339d4 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_bucket.cpp @@ -121,13 +121,13 @@ void FillBucket::addFeature(const GeometryTileFeature& feature, } } -void FillBucket::upload(gfx::Context& context) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - lineIndexBuffer = context.createIndexBuffer(std::move(lines)); - triangleIndexBuffer = context.createIndexBuffer(std::move(triangles)); +void FillBucket::upload(gfx::UploadPass& uploadPass) { + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + lineIndexBuffer = uploadPass.createIndexBuffer(std::move(lines)); + triangleIndexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { - pair.second.upload(context); + pair.second.upload(uploadPass); } uploaded = true; diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp index 217524c945..1a0d77dff7 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_bucket.hpp @@ -33,7 +33,7 @@ public: bool hasData() const override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp index 7fa7293f33..51202b3ee4 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp @@ -165,12 +165,12 @@ void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature, } } -void FillExtrusionBucket::upload(gfx::Context& context) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(triangles)); +void FillExtrusionBucket::upload(gfx::UploadPass& uploadPass) { + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { - pair.second.upload(context); + pair.second.upload(uploadPass); } uploaded = true; diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp index 85867031a7..8fa2f4f8e8 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp @@ -33,7 +33,7 @@ public: bool supportsLayer(const style::Layer::Impl&) const override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; float getQueryRadius(const RenderLayer&) const override; diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.cpp b/src/mbgl/renderer/buckets/heatmap_bucket.cpp index 111911a88c..287c9ed26a 100644 --- a/src/mbgl/renderer/buckets/heatmap_bucket.cpp +++ b/src/mbgl/renderer/buckets/heatmap_bucket.cpp @@ -24,12 +24,12 @@ HeatmapBucket::HeatmapBucket(const BucketParameters& parameters, const std::vect HeatmapBucket::~HeatmapBucket() = default; -void HeatmapBucket::upload(gfx::Context& context) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(triangles)); +void HeatmapBucket::upload(gfx::UploadPass& uploadPass) { + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { - pair.second.upload(context); + pair.second.upload(uploadPass); } uploaded = true; diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp index b11c1626cd..e3d0b7c769 100644 --- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp +++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp @@ -24,7 +24,7 @@ public: const PatternLayerMap&) override; bool hasData() const override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/hillshade_bucket.cpp b/src/mbgl/renderer/buckets/hillshade_bucket.cpp index 3c14845dd8..08f941f990 100644 --- a/src/mbgl/renderer/buckets/hillshade_bucket.cpp +++ b/src/mbgl/renderer/buckets/hillshade_bucket.cpp @@ -26,18 +26,18 @@ DEMData& HillshadeBucket::getDEMData() { return demdata; } -void HillshadeBucket::upload(gfx::Context& context) { +void HillshadeBucket::upload(gfx::UploadPass& uploadPass) { if (!hasData()) { return; } const PremultipliedImage* image = demdata.getImage(); - dem = context.createTexture(*image); + dem = uploadPass.createTexture(*image); if (!segments.empty()) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(indices)); + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(indices)); } uploaded = true; } diff --git a/src/mbgl/renderer/buckets/hillshade_bucket.hpp b/src/mbgl/renderer/buckets/hillshade_bucket.hpp index f3e89642cc..08acdff0c3 100644 --- a/src/mbgl/renderer/buckets/hillshade_bucket.hpp +++ b/src/mbgl/renderer/buckets/hillshade_bucket.hpp @@ -22,7 +22,7 @@ public: HillshadeBucket(DEMData&&); ~HillshadeBucket() override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; bool hasData() const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index c2cce632b3..0536992707 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -508,12 +508,12 @@ void LineBucket::addPieSliceVertex(const GeometryCoordinate& currentVertex, } } -void LineBucket::upload(gfx::Context& context) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(triangles)); +void LineBucket::upload(gfx::UploadPass& uploadPass) { + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { - pair.second.upload(context); + pair.second.upload(uploadPass); } uploaded = true; diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp index 9afe7fecee..342f5cd88c 100644 --- a/src/mbgl/renderer/buckets/line_bucket.hpp +++ b/src/mbgl/renderer/buckets/line_bucket.hpp @@ -33,7 +33,7 @@ public: bool hasData() const override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; float getQueryRadius(const RenderLayer&) const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/raster_bucket.cpp b/src/mbgl/renderer/buckets/raster_bucket.cpp index 7afb6172f5..57d3ba1896 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.cpp +++ b/src/mbgl/renderer/buckets/raster_bucket.cpp @@ -1,7 +1,7 @@ #include <mbgl/renderer/buckets/raster_bucket.hpp> #include <mbgl/renderer/layers/render_raster_layer.hpp> #include <mbgl/programs/raster_program.hpp> -#include <mbgl/gfx/context.hpp> +#include <mbgl/gfx/upload_pass.hpp> #include <mbgl/util/id.hpp> namespace mbgl { @@ -20,16 +20,16 @@ RasterBucket::RasterBucket(std::shared_ptr<PremultipliedImage> image_) RasterBucket::~RasterBucket() = default; -void RasterBucket::upload(gfx::Context& context) { +void RasterBucket::upload(gfx::UploadPass& uploadPass) { if (!hasData()) { return; } if (!texture) { - texture = context.createTexture(*image); + texture = uploadPass.createTexture(*image); } if (!segments.empty()) { - vertexBuffer = context.createVertexBuffer(std::move(vertices)); - indexBuffer = context.createIndexBuffer(std::move(indices)); + vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); + indexBuffer = uploadPass.createIndexBuffer(std::move(indices)); } uploaded = true; } diff --git a/src/mbgl/renderer/buckets/raster_bucket.hpp b/src/mbgl/renderer/buckets/raster_bucket.hpp index db1de4d0d1..b6182f7b2c 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.hpp +++ b/src/mbgl/renderer/buckets/raster_bucket.hpp @@ -18,7 +18,7 @@ public: RasterBucket(std::shared_ptr<PremultipliedImage>); ~RasterBucket() override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; bool hasData() const override; bool supportsLayer(const style::Layer::Impl&) const override; diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index fb5a38f913..f290288114 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -43,76 +43,76 @@ SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layo SymbolBucket::~SymbolBucket() = default; -void SymbolBucket::upload(gfx::Context& context) { +void SymbolBucket::upload(gfx::UploadPass& uploadPass) { if (hasTextData()) { if (!staticUploaded) { - text.indexBuffer = context.createIndexBuffer(std::move(text.triangles), sortFeaturesByY ? gfx::BufferUsageType::StreamDraw : gfx::BufferUsageType::StaticDraw); - text.vertexBuffer = context.createVertexBuffer(std::move(text.vertices)); + text.indexBuffer = uploadPass.createIndexBuffer(std::move(text.triangles), sortFeaturesByY ? gfx::BufferUsageType::StreamDraw : gfx::BufferUsageType::StaticDraw); + text.vertexBuffer = uploadPass.createVertexBuffer(std::move(text.vertices)); for (auto& pair : paintProperties) { - pair.second.textBinders.upload(context); + pair.second.textBinders.upload(uploadPass); } } else if (!sortUploaded) { - context.updateIndexBuffer(*text.indexBuffer, std::move(text.triangles)); + uploadPass.updateIndexBuffer(*text.indexBuffer, std::move(text.triangles)); } if (!dynamicUploaded) { - text.dynamicVertexBuffer = context.createVertexBuffer(std::move(text.dynamicVertices), gfx::BufferUsageType::StreamDraw); + text.dynamicVertexBuffer = uploadPass.createVertexBuffer(std::move(text.dynamicVertices), gfx::BufferUsageType::StreamDraw); } if (!placementChangesUploaded) { if (!text.opacityVertexBuffer) { - text.opacityVertexBuffer = context.createVertexBuffer(std::move(text.opacityVertices), gfx::BufferUsageType::StreamDraw); + text.opacityVertexBuffer = uploadPass.createVertexBuffer(std::move(text.opacityVertices), gfx::BufferUsageType::StreamDraw); } else { - context.updateVertexBuffer(*text.opacityVertexBuffer, std::move(text.opacityVertices)); + uploadPass.updateVertexBuffer(*text.opacityVertexBuffer, std::move(text.opacityVertices)); } } } if (hasIconData()) { if (!staticUploaded) { - icon.indexBuffer = context.createIndexBuffer(std::move(icon.triangles), sortFeaturesByY ? gfx::BufferUsageType::StreamDraw : gfx::BufferUsageType::StaticDraw); - icon.vertexBuffer = context.createVertexBuffer(std::move(icon.vertices)); + icon.indexBuffer = uploadPass.createIndexBuffer(std::move(icon.triangles), sortFeaturesByY ? gfx::BufferUsageType::StreamDraw : gfx::BufferUsageType::StaticDraw); + icon.vertexBuffer = uploadPass.createVertexBuffer(std::move(icon.vertices)); for (auto& pair : paintProperties) { - pair.second.iconBinders.upload(context); + pair.second.iconBinders.upload(uploadPass); } } else if (!sortUploaded) { - context.updateIndexBuffer(*icon.indexBuffer, std::move(icon.triangles)); + uploadPass.updateIndexBuffer(*icon.indexBuffer, std::move(icon.triangles)); } if (!dynamicUploaded) { - icon.dynamicVertexBuffer = context.createVertexBuffer(std::move(icon.dynamicVertices), gfx::BufferUsageType::StreamDraw); + icon.dynamicVertexBuffer = uploadPass.createVertexBuffer(std::move(icon.dynamicVertices), gfx::BufferUsageType::StreamDraw); } if (!placementChangesUploaded) { if (!icon.opacityVertexBuffer) { - icon.opacityVertexBuffer = context.createVertexBuffer(std::move(icon.opacityVertices), gfx::BufferUsageType::StreamDraw); + icon.opacityVertexBuffer = uploadPass.createVertexBuffer(std::move(icon.opacityVertices), gfx::BufferUsageType::StreamDraw); } else { - context.updateVertexBuffer(*icon.opacityVertexBuffer, std::move(icon.opacityVertices)); + uploadPass.updateVertexBuffer(*icon.opacityVertexBuffer, std::move(icon.opacityVertices)); } } } if (hasCollisionBoxData()) { if (!staticUploaded) { - collisionBox.indexBuffer = context.createIndexBuffer(std::move(collisionBox.lines)); - collisionBox.vertexBuffer = context.createVertexBuffer(std::move(collisionBox.vertices)); + collisionBox.indexBuffer = uploadPass.createIndexBuffer(std::move(collisionBox.lines)); + collisionBox.vertexBuffer = uploadPass.createVertexBuffer(std::move(collisionBox.vertices)); } if (!placementChangesUploaded) { if (!collisionBox.dynamicVertexBuffer) { - collisionBox.dynamicVertexBuffer = context.createVertexBuffer(std::move(collisionBox.dynamicVertices), gfx::BufferUsageType::StreamDraw); + collisionBox.dynamicVertexBuffer = uploadPass.createVertexBuffer(std::move(collisionBox.dynamicVertices), gfx::BufferUsageType::StreamDraw); } else { - context.updateVertexBuffer(*collisionBox.dynamicVertexBuffer, std::move(collisionBox.dynamicVertices)); + uploadPass.updateVertexBuffer(*collisionBox.dynamicVertexBuffer, std::move(collisionBox.dynamicVertices)); } } } if (hasCollisionCircleData()) { if (!staticUploaded) { - collisionCircle.indexBuffer = context.createIndexBuffer(std::move(collisionCircle.triangles)); - collisionCircle.vertexBuffer = context.createVertexBuffer(std::move(collisionCircle.vertices)); + collisionCircle.indexBuffer = uploadPass.createIndexBuffer(std::move(collisionCircle.triangles)); + collisionCircle.vertexBuffer = uploadPass.createVertexBuffer(std::move(collisionCircle.vertices)); } if (!placementChangesUploaded) { if (!collisionCircle.dynamicVertexBuffer) { - collisionCircle.dynamicVertexBuffer = context.createVertexBuffer(std::move(collisionCircle.dynamicVertices), gfx::BufferUsageType::StreamDraw); + collisionCircle.dynamicVertexBuffer = uploadPass.createVertexBuffer(std::move(collisionCircle.dynamicVertices), gfx::BufferUsageType::StreamDraw); } else { - context.updateVertexBuffer(*collisionCircle.dynamicVertexBuffer, std::move(collisionCircle.dynamicVertices)); + uploadPass.updateVertexBuffer(*collisionCircle.dynamicVertexBuffer, std::move(collisionCircle.dynamicVertices)); } } } diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 7db17f0062..0b9c5e583f 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -54,7 +54,7 @@ public: const float tilePixelRatio); ~SymbolBucket() override; - void upload(gfx::Context&) override; + void upload(gfx::UploadPass&) override; bool hasData() const override; bool supportsLayer(const style::Layer::Impl&) const override; bool hasTextData() const; |