diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-04-22 18:27:19 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2015-05-04 17:33:04 +0200 |
commit | 28b9b3f9d64207a03b6125b3e299efda59952a03 (patch) | |
tree | a332f0c57abb345a523fe494d57f3c77109c8203 | |
parent | 839b19330ee7ca1b3cd42cf77dc4caa08eaf0a63 (diff) | |
download | qtlocation-mapboxgl-28b9b3f9d64207a03b6125b3e299efda59952a03.tar.gz |
add prepare() function
-rw-r--r-- | src/mbgl/renderer/bucket.hpp | 21 | ||||
-rw-r--r-- | src/mbgl/renderer/debug_bucket.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/debug_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/fill_bucket.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/fill_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/line_bucket.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/line_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/raster_bucket.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/raster_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.hpp | 4 |
12 files changed, 60 insertions, 20 deletions
diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 2ea73f9b97..282a6aa367 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -10,11 +10,32 @@ class Painter; class StyleLayer; class TileID; +enum class RenderPass : uint8_t { + Prepare = 1 << 0, + Opaque = 1 << 1, + Translucent = 1 << 2, +}; + class Bucket : private util::noncopyable { public: + // As long as this bucket has a Prepare render pass, this function is getting called. Typically, + // this only happens once when the bucket is being rendered for the first time. + virtual void prepare() = 0; + + // Every time this bucket is getting rendered, this function is called. This happens either + // once or twice (for Opaque and Transparent render passes). virtual void render(Painter&, const StyleLayer&, const TileID&, const mat4&) = 0; + virtual ~Bucket() {} + inline bool hasRenderPass(RenderPass pass) const { + return static_cast<std::underlying_type<RenderPass>::type>(renderPass) & + static_cast<std::underlying_type<RenderPass>::type>(pass); + } + +protected: + RenderPass renderPass = RenderPass::Prepare; + }; } diff --git a/src/mbgl/renderer/debug_bucket.cpp b/src/mbgl/renderer/debug_bucket.cpp index a8a8acc3dd..7e367a95b5 100644 --- a/src/mbgl/renderer/debug_bucket.cpp +++ b/src/mbgl/renderer/debug_bucket.cpp @@ -16,8 +16,10 @@ DebugBucket::DebugBucket(DebugFontBuffer& fontBuffer_) : fontBuffer(fontBuffer_) { } -void DebugBucket::render(Painter &painter, const StyleLayer & /*layer_desc*/, - const TileID & /*id*/, const mat4 &matrix) { +void DebugBucket::prepare() { +} + +void DebugBucket::render(Painter& painter, const StyleLayer&, const TileID&, const mat4& matrix) { painter.renderDebugText(*this, matrix); } diff --git a/src/mbgl/renderer/debug_bucket.hpp b/src/mbgl/renderer/debug_bucket.hpp index 24cc88b260..784530337b 100644 --- a/src/mbgl/renderer/debug_bucket.hpp +++ b/src/mbgl/renderer/debug_bucket.hpp @@ -15,8 +15,8 @@ class DebugBucket : public Bucket { public: DebugBucket(DebugFontBuffer& fontBuffer); - void render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) override; + void prepare() override; + void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; void drawLines(PlainShader& shader); void drawPoints(PlainShader& shader); diff --git a/src/mbgl/renderer/fill_bucket.cpp b/src/mbgl/renderer/fill_bucket.cpp index 77b7b11888..f8e604ee29 100644 --- a/src/mbgl/renderer/fill_bucket.cpp +++ b/src/mbgl/renderer/fill_bucket.cpp @@ -200,8 +200,13 @@ void FillBucket::tessellate() { lineGroup.vertex_length += total_vertex_count; } -void FillBucket::render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) { +void FillBucket::prepare() { +} + +void FillBucket::render(Painter& painter, + const StyleLayer& layer_desc, + const TileID& id, + const mat4& matrix) { painter.renderFill(*this, layer_desc, id, matrix); } diff --git a/src/mbgl/renderer/fill_bucket.hpp b/src/mbgl/renderer/fill_bucket.hpp index 0d7d7ab93f..579b04acf6 100644 --- a/src/mbgl/renderer/fill_bucket.hpp +++ b/src/mbgl/renderer/fill_bucket.hpp @@ -33,8 +33,8 @@ public: LineElementsBuffer &lineElementsBuffer); ~FillBucket() override; - void render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) override; + void prepare() override; + void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const; void addGeometry(const GeometryCollection&); diff --git a/src/mbgl/renderer/line_bucket.cpp b/src/mbgl/renderer/line_bucket.cpp index 97237901fc..8e3a8ce9c5 100644 --- a/src/mbgl/renderer/line_bucket.cpp +++ b/src/mbgl/renderer/line_bucket.cpp @@ -342,6 +342,9 @@ void LineBucket::addCurrentVertex(const Coordinate& currentVertex, e2 = e3; } +void LineBucket::prepare() { +} + void LineBucket::render(Painter& painter, const StyleLayer& layer_desc, const TileID& id, diff --git a/src/mbgl/renderer/line_bucket.hpp b/src/mbgl/renderer/line_bucket.hpp index 4a83fdace4..9999fb6375 100644 --- a/src/mbgl/renderer/line_bucket.hpp +++ b/src/mbgl/renderer/line_bucket.hpp @@ -28,8 +28,8 @@ public: LineBucket(LineVertexBuffer &vertexBuffer, TriangleElementsBuffer &triangleElementsBuffer); ~LineBucket() override; - void render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) override; + void prepare() override; + void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const; void addGeometry(const GeometryCollection&); diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index be21ef2b69..7010a933b3 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -4,6 +4,7 @@ #include <mbgl/map/transform_state.hpp> #include <mbgl/renderer/frame_history.hpp> +#include <mbgl/renderer/bucket.hpp> #include <mbgl/geometry/vao.hpp> #include <mbgl/geometry/static_vertex_buffer.hpp> @@ -21,8 +22,6 @@ namespace mbgl { -enum class RenderPass : bool { Opaque, Translucent }; - class Style; class StyleLayer; class Tile; diff --git a/src/mbgl/renderer/raster_bucket.cpp b/src/mbgl/renderer/raster_bucket.cpp index bcaf6e7daf..7f1f92b5ca 100644 --- a/src/mbgl/renderer/raster_bucket.cpp +++ b/src/mbgl/renderer/raster_bucket.cpp @@ -13,8 +13,13 @@ RasterBucket::RasterBucket(TexturePool& texturePool, const StyleLayoutRaster& la raster(texturePool) { } -void RasterBucket::render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) { +void RasterBucket::prepare() { +} + +void RasterBucket::render(Painter& painter, + const StyleLayer& layer_desc, + const TileID& id, + const mat4& matrix) { painter.renderRaster(*this, layer_desc, id, matrix); } diff --git a/src/mbgl/renderer/raster_bucket.hpp b/src/mbgl/renderer/raster_bucket.hpp index 26a216ae33..3faece5461 100644 --- a/src/mbgl/renderer/raster_bucket.hpp +++ b/src/mbgl/renderer/raster_bucket.hpp @@ -16,8 +16,8 @@ class RasterBucket : public Bucket { public: RasterBucket(TexturePool&, const StyleLayoutRaster&); - void render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) override; + void prepare() override; + void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const; bool setImage(const std::string &data); diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index 6d61761968..d520e4de2e 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -36,8 +36,13 @@ SymbolBucket::~SymbolBucket() { // Do not remove. header file only contains forward definitions to unique pointers. } -void SymbolBucket::render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) { +void SymbolBucket::prepare() { +} + +void SymbolBucket::render(Painter& painter, + const StyleLayer& layer_desc, + const TileID& id, + const mat4& matrix) { painter.renderSymbol(*this, layer_desc, id, matrix); } diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp index c54a593210..1c05150f4c 100644 --- a/src/mbgl/renderer/symbol_bucket.hpp +++ b/src/mbgl/renderer/symbol_bucket.hpp @@ -55,8 +55,8 @@ public: SymbolBucket(Collision &collision); ~SymbolBucket() override; - void render(Painter &painter, const StyleLayer &layer_desc, const TileID &id, - const mat4 &matrix) override; + void prepare() override; + void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const; bool hasTextData() const; bool hasIconData() const; |