summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2017-05-05 15:02:47 -0700
committerAsheem Mamoowala <asheem.mamoowala@mapbox.com>2017-05-18 16:29:06 -0700
commitb8848251cf04ea7c9d6accd9b8b7a92ee0f3be4c (patch)
tree716ea6b5499e8ba48045debf785dba6cbc1265ea
parent5f2586e71023a86ef005c9c25e67c47f1684cf6c (diff)
downloadqtlocation-mapboxgl-b8848251cf04ea7c9d6accd9b8b7a92ee0f3be4c.tar.gz
Move rendering from Painter to RenderLayer
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp9
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.cpp22
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_custom_layer.cpp8
-rw-r--r--src/mbgl/renderer/layers/render_custom_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp22
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.cpp21
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp22
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.hpp3
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp22
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.hpp4
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp21
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.hpp3
-rw-r--r--src/mbgl/renderer/painter.cpp22
-rw-r--r--src/mbgl/renderer/painter.hpp2
-rw-r--r--src/mbgl/renderer/render_item.hpp12
-rw-r--r--src/mbgl/renderer/render_layer.cpp9
-rw-r--r--src/mbgl/renderer/render_layer.hpp13
-rw-r--r--src/mbgl/style/style.cpp4
22 files changed, 205 insertions, 29 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp
index 83ec7bf2db..0e06ac4525 100644
--- a/src/mbgl/renderer/layers/render_background_layer.cpp
+++ b/src/mbgl/renderer/layers/render_background_layer.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/layers/render_background_layer.hpp>
#include <mbgl/style/layers/background_layer_impl.hpp>
#include <mbgl/renderer/bucket.hpp>
+#include <mbgl/gl/context.hpp>
namespace mbgl {
@@ -29,6 +30,14 @@ void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters &paramet
: RenderPass::None;
}
+void RenderBackgroundLayer::uploadBuckets(gl::Context&) {
+}
+
+
+void RenderBackgroundLayer::render(Painter& , PaintParameters& , const RenderSource*) {
+}
+
+
bool RenderBackgroundLayer::hasTransition() const {
return unevaluated.hasTransition();
}
diff --git a/src/mbgl/renderer/layers/render_background_layer.hpp b/src/mbgl/renderer/layers/render_background_layer.hpp
index 0fba3d2bb1..1db17e7e33 100644
--- a/src/mbgl/renderer/layers/render_background_layer.hpp
+++ b/src/mbgl/renderer/layers/render_background_layer.hpp
@@ -15,6 +15,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
// Paint properties
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp
index a8595ce61d..bd313f4816 100644
--- a/src/mbgl/renderer/layers/render_circle_layer.cpp
+++ b/src/mbgl/renderer/layers/render_circle_layer.cpp
@@ -4,6 +4,9 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/util/math.hpp>
#include <mbgl/util/intersection_tests.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -39,6 +42,25 @@ bool RenderCircleLayer::hasTransition() const {
return unevaluated.hasTransition();
}
+void RenderCircleLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderCircleLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
+
bool RenderCircleLayer::queryIntersectsFeature(
const GeometryCoordinates& queryGeometry,
const GeometryTileFeature& feature,
diff --git a/src/mbgl/renderer/layers/render_circle_layer.hpp b/src/mbgl/renderer/layers/render_circle_layer.hpp
index 4ae7399ad1..ef5b2c9756 100644
--- a/src/mbgl/renderer/layers/render_circle_layer.hpp
+++ b/src/mbgl/renderer/layers/render_circle_layer.hpp
@@ -15,6 +15,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
bool queryIntersectsFeature(
const GeometryCoordinates&,
const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp
index add3d0d5ad..a6e67b3974 100644
--- a/src/mbgl/renderer/layers/render_custom_layer.cpp
+++ b/src/mbgl/renderer/layers/render_custom_layer.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/layers/render_custom_layer.hpp>
#include <mbgl/style/layers/custom_layer_impl.hpp>
#include <mbgl/renderer/bucket.hpp>
+#include <mbgl/gl/context.hpp>
namespace mbgl {
@@ -20,6 +21,13 @@ bool RenderCustomLayer::hasTransition() const {
return false;
}
+void RenderCustomLayer::uploadBuckets(gl::Context&) {
+}
+
+void RenderCustomLayer::render(Painter& , PaintParameters& , const RenderSource*) {
+}
+
+
std::unique_ptr<Bucket> RenderCustomLayer::createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const {
assert(false);
return nullptr;
diff --git a/src/mbgl/renderer/layers/render_custom_layer.hpp b/src/mbgl/renderer/layers/render_custom_layer.hpp
index 2f7c2d3239..2b832a7b92 100644
--- a/src/mbgl/renderer/layers/render_custom_layer.hpp
+++ b/src/mbgl/renderer/layers/render_custom_layer.hpp
@@ -14,6 +14,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const final;
const style::CustomLayer::Impl& impl() const;
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
index 551fcc5fc9..16198f1ca5 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
@@ -4,6 +4,9 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/util/math.hpp>
#include <mbgl/util/intersection_tests.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -34,6 +37,25 @@ bool RenderFillExtrusionLayer::hasTransition() const {
return unevaluated.hasTransition();
}
+void RenderFillExtrusionLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderFillExtrusionLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
+
bool RenderFillExtrusionLayer::queryIntersectsFeature(
const GeometryCoordinates& queryGeometry,
const GeometryTileFeature& feature,
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
index 1a55b56836..5265cdb7e8 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
@@ -15,6 +15,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
bool queryIntersectsFeature(
const GeometryCoordinates&,
const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp
index a36e1688a7..3334371431 100644
--- a/src/mbgl/renderer/layers/render_fill_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_layer.cpp
@@ -4,6 +4,9 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/util/math.hpp>
#include <mbgl/util/intersection_tests.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -49,6 +52,24 @@ bool RenderFillLayer::hasTransition() const {
return unevaluated.hasTransition();
}
+void RenderFillLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
bool RenderFillLayer::queryIntersectsFeature(
const GeometryCoordinates& queryGeometry,
const GeometryTileFeature& feature,
diff --git a/src/mbgl/renderer/layers/render_fill_layer.hpp b/src/mbgl/renderer/layers/render_fill_layer.hpp
index 1960fb653f..4748e892be 100644
--- a/src/mbgl/renderer/layers/render_fill_layer.hpp
+++ b/src/mbgl/renderer/layers/render_fill_layer.hpp
@@ -15,6 +15,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
bool queryIntersectsFeature(
const GeometryCoordinates&,
const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp
index 076ee77aff..34a18c7584 100644
--- a/src/mbgl/renderer/layers/render_line_layer.cpp
+++ b/src/mbgl/renderer/layers/render_line_layer.cpp
@@ -4,6 +4,9 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/util/math.hpp>
#include <mbgl/util/intersection_tests.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -41,6 +44,25 @@ bool RenderLineLayer::hasTransition() const {
return unevaluated.hasTransition();
}
+void RenderLineLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderLineLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
+
optional<GeometryCollection> offsetLine(const GeometryCollection& rings, const double offset) {
if (offset == 0) return {};
diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp
index 04ba745533..9a76e3b5a1 100644
--- a/src/mbgl/renderer/layers/render_line_layer.hpp
+++ b/src/mbgl/renderer/layers/render_line_layer.hpp
@@ -15,6 +15,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
bool queryIntersectsFeature(
const GeometryCoordinates&,
const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp
index feb3a4aca9..c42eb5b68e 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.cpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.cpp
@@ -1,6 +1,9 @@
#include <mbgl/renderer/layers/render_raster_layer.hpp>
#include <mbgl/renderer/bucket.hpp>
#include <mbgl/style/layers/raster_layer_impl.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -31,4 +34,23 @@ bool RenderRasterLayer::hasTransition() const {
return unevaluated.hasTransition();
}
+void RenderRasterLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
+
} // namespace mbgl
diff --git a/src/mbgl/renderer/layers/render_raster_layer.hpp b/src/mbgl/renderer/layers/render_raster_layer.hpp
index eecb0cd02d..0383720592 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.hpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.hpp
@@ -3,6 +3,7 @@
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/style/layers/raster_layer_impl.hpp>
#include <mbgl/style/layers/raster_layer_properties.hpp>
+#include <mbgl/renderer/bucket.hpp>
namespace mbgl {
@@ -15,6 +16,9 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
// Paint properties
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp
index 0054d9f874..bcffd60994 100644
--- a/src/mbgl/renderer/layers/render_symbol_layer.cpp
+++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp
@@ -5,6 +5,9 @@
#include <mbgl/renderer/property_evaluation_parameters.hpp>
#include <mbgl/style/layers/symbol_layer_impl.hpp>
#include <mbgl/tile/geometry_tile_data.hpp>
+#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/gl/context.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -109,4 +112,22 @@ style::SymbolPropertyValues RenderSymbolLayer::textPropertyValues(const style::S
};
}
+void RenderSymbolLayer::uploadBuckets(gl::Context& context) {
+ for (const auto& tileRef : renderTiles) {
+ const auto& bucket = tileRef.get().tile.getBucket(*this);
+ if (bucket && bucket->needsUpload()) {
+ bucket->upload(context);
+ }
+ }
+}
+
+void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, const RenderSource*) {
+ for (auto& tileRef : renderTiles) {
+ auto& tile = tileRef.get();
+// MBGL_DEBUG_GROUP(context, getID() + " - " + util::toString(tile.id));
+ auto bucket = tile.tile.getBucket(*this);
+ bucket->render(painter, parameters, *this, tile);
+ }
+}
+
} // namespace mbgl
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.hpp b/src/mbgl/renderer/layers/render_symbol_layer.hpp
index 42205496d9..e8ff41c045 100644
--- a/src/mbgl/renderer/layers/render_symbol_layer.hpp
+++ b/src/mbgl/renderer/layers/render_symbol_layer.hpp
@@ -71,6 +71,9 @@ public:
style::IconPaintProperties::PossiblyEvaluated iconPaintProperties() const;
style::TextPaintProperties::PossiblyEvaluated textPaintProperties() const;
+ void uploadBuckets(gl::Context&) override;
+ void render(Painter& , PaintParameters& , const RenderSource*) override;
+
style::SymbolPropertyValues iconPropertyValues(const style::SymbolLayoutProperties::PossiblyEvaluated&) const;
style::SymbolPropertyValues textPropertyValues(const style::SymbolLayoutProperties::PossiblyEvaluated&) const;
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp
index 33fcdeb3ca..18eddc3322 100644
--- a/src/mbgl/renderer/painter.cpp
+++ b/src/mbgl/renderer/painter.cpp
@@ -179,7 +179,7 @@ void Painter::render(const Style& style, const FrameData& frame_, View& view, Sp
annotationSpriteAtlas.upload(context, 0);
for (const auto& item : order) {
- uploadItem(item);
+ item.layer.uploadBuckets(context);
}
}
@@ -363,22 +363,10 @@ void Painter::renderPass(PaintParameters& parameters,
}
void Painter::renderItem(PaintParameters& parameters, const RenderItem& item) {
- const RenderLayer& layer = item.layer;
- for (auto& tileRef : item.tiles) {
- auto& tile = tileRef.get();
- MBGL_DEBUG_GROUP(context, layer.baseImpl.id + " - " + util::toString(tile.id));
- auto bucket = tile.tile.getBucket(layer);
- bucket->render(*this, parameters, layer, tile);
- }
-}
-
-void Painter::uploadItem(const RenderItem& item) {
- for (const auto& tileRef : item.tiles) {
- const auto& bucket = tileRef.get().tile.getBucket(item.layer);
- if (bucket && bucket->needsUpload()) {
- bucket->upload(context);
- }
- }
+ RenderLayer& layer = item.layer;
+ const RenderSource * source = item.source;
+ MBGL_DEBUG_GROUP(context, layer.getID());// + " - " + util::toString(tile.id));
+ layer.render(*this, parameters, source);
}
mat4 Painter::matrixForTile(const UnwrappedTileID& tileID) {
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp
index 83f6316737..e0fff37171 100644
--- a/src/mbgl/renderer/painter.hpp
+++ b/src/mbgl/renderer/painter.hpp
@@ -95,7 +95,7 @@ public:
void renderBackground(PaintParameters&, const RenderBackgroundLayer&);
void renderItem(PaintParameters&, const RenderItem&);
- void uploadItem(const RenderItem& );
+
#ifndef NDEBUG
// Renders tile clip boundaries, using stencil buffer to calculate fill color.
void renderClipMasks(PaintParameters&);
diff --git a/src/mbgl/renderer/render_item.hpp b/src/mbgl/renderer/render_item.hpp
index 4e557dab26..082bd1b898 100644
--- a/src/mbgl/renderer/render_item.hpp
+++ b/src/mbgl/renderer/render_item.hpp
@@ -17,15 +17,13 @@ namespace style {
class RenderItem {
public:
- RenderItem(const RenderLayer& layer_,
- RenderSource * renderSource_,
- std::vector<std::reference_wrapper<RenderTile>> tiles_ = {})
- : layer(layer_), source(renderSource_), tiles(std::move(tiles_)) {
+ RenderItem(RenderLayer& layer_,
+ RenderSource * renderSource_)
+ : layer(layer_), source(renderSource_) {
}
- const RenderLayer& layer;
- const RenderSource* source;
- std::vector<std::reference_wrapper<RenderTile>> tiles;
+ RenderLayer& layer;
+ const RenderSource * source;
};
class RenderData {
diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp
index cf7f772e16..d485076473 100644
--- a/src/mbgl/renderer/render_layer.cpp
+++ b/src/mbgl/renderer/render_layer.cpp
@@ -8,7 +8,7 @@
#include <mbgl/renderer/layers/render_raster_layer.hpp>
#include <mbgl/renderer/layers/render_symbol_layer.hpp>
#include <mbgl/style/types.hpp>
-
+#include <mbgl/renderer/render_tile.hpp>
namespace mbgl {
using namespace style;
@@ -62,4 +62,9 @@ bool RenderLayer::needsRendering(float zoom) const {
&& baseImpl->maxZoom >= zoom;
}
-} // namespace mbgl
+void RenderLayer::setRenderTiles(std::vector<std::reference_wrapper<RenderTile>> tiles) {
+ renderTiles = std::move(tiles);
+}
+
+} //namespace mbgl
+
diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp
index 263e0039fa..085ad05c8b 100644
--- a/src/mbgl/renderer/render_layer.hpp
+++ b/src/mbgl/renderer/render_layer.hpp
@@ -14,6 +14,14 @@ class Bucket;
class BucketParameters;
class TransitionParameters;
class PropertyEvaluationParameters;
+class Painter;
+class PaintParameters;
+class RenderSource;
+class RenderTile;
+
+namespace gl {
+ class Context;
+}
class RenderLayer {
protected:
@@ -58,6 +66,8 @@ public:
// Checks whether this layer can be rendered.
bool needsRendering(float zoom) const;
+ virtual void uploadBuckets(gl::Context&) = 0;
+ virtual void render(Painter& , PaintParameters& , const RenderSource* source) = 0;
// Check wether the given geometry intersects
// with the feature
virtual bool queryIntersectsFeature(
@@ -69,6 +79,7 @@ public:
virtual std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const = 0;
+ void setRenderTiles(std::vector<std::reference_wrapper<RenderTile>>);
// Private implementation
Immutable<style::Layer::Impl> baseImpl;
void setImpl(Immutable<style::Layer::Impl>);
@@ -79,6 +90,8 @@ protected:
// Stores what render passes this layer is currently enabled for. This depends on the
// evaluated StyleProperties object and is updated accordingly.
RenderPass passes = RenderPass::None;
+ std::vector<std::reference_wrapper<RenderTile>> renderTiles;
+
};
} // namespace mbgl
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 223a967a17..2008f0b5be 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -624,8 +624,8 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const
tile.used = true;
}
}
-
- result.order.emplace_back(*layer, source, std::move(sortedTilesForInsertion));
+ layer->setRenderTiles(std::move(sortedTilesForInsertion));
+ result.order.emplace_back(*layer, source);
}
return result;