From 28b9b3f9d64207a03b6125b3e299efda59952a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 22 Apr 2015 18:27:19 +0200 Subject: add prepare() function --- src/mbgl/renderer/bucket.hpp | 21 +++++++++++++++++++++ src/mbgl/renderer/debug_bucket.cpp | 6 ++++-- src/mbgl/renderer/debug_bucket.hpp | 4 ++-- src/mbgl/renderer/fill_bucket.cpp | 9 +++++++-- src/mbgl/renderer/fill_bucket.hpp | 4 ++-- src/mbgl/renderer/line_bucket.cpp | 3 +++ src/mbgl/renderer/line_bucket.hpp | 4 ++-- src/mbgl/renderer/painter.hpp | 3 +-- src/mbgl/renderer/raster_bucket.cpp | 9 +++++++-- src/mbgl/renderer/raster_bucket.hpp | 4 ++-- src/mbgl/renderer/symbol_bucket.cpp | 9 +++++++-- 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::type>(renderPass) & + static_cast::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 #include +#include #include #include @@ -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; -- cgit v1.2.1