summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2015-04-22 18:27:19 +0200
committerKonstantin Käfer <mail@kkaefer.com>2015-05-04 17:33:04 +0200
commit28b9b3f9d64207a03b6125b3e299efda59952a03 (patch)
treea332f0c57abb345a523fe494d57f3c77109c8203
parent839b19330ee7ca1b3cd42cf77dc4caa08eaf0a63 (diff)
downloadqtlocation-mapboxgl-28b9b3f9d64207a03b6125b3e299efda59952a03.tar.gz
add prepare() function
-rw-r--r--src/mbgl/renderer/bucket.hpp21
-rw-r--r--src/mbgl/renderer/debug_bucket.cpp6
-rw-r--r--src/mbgl/renderer/debug_bucket.hpp4
-rw-r--r--src/mbgl/renderer/fill_bucket.cpp9
-rw-r--r--src/mbgl/renderer/fill_bucket.hpp4
-rw-r--r--src/mbgl/renderer/line_bucket.cpp3
-rw-r--r--src/mbgl/renderer/line_bucket.hpp4
-rw-r--r--src/mbgl/renderer/painter.hpp3
-rw-r--r--src/mbgl/renderer/raster_bucket.cpp9
-rw-r--r--src/mbgl/renderer/raster_bucket.hpp4
-rw-r--r--src/mbgl/renderer/symbol_bucket.cpp9
-rw-r--r--src/mbgl/renderer/symbol_bucket.hpp4
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;