diff options
author | Lauren Budorick <lbudorick@gmail.com> | 2014-08-12 10:55:22 -0700 |
---|---|---|
committer | Lauren Budorick <lbudorick@gmail.com> | 2014-08-12 10:55:22 -0700 |
commit | 3941908cee9d91ac505908e3443b4490644b2cf7 (patch) | |
tree | df14f963c5b2d42c027c371b64aa0b9383c096b9 /include/mbgl/renderer | |
parent | 46e754f806e24af7b88ef19dcf786e7ee006ba40 (diff) | |
parent | 28d8c13c2c1852062857070c17bc211d26902ba0 (diff) | |
download | qtlocation-mapboxgl-3941908cee9d91ac505908e3443b4490644b2cf7.tar.gz |
Merge pull request #400 from mapbox/rasterize
raster prerendering (parity)
Diffstat (limited to 'include/mbgl/renderer')
-rw-r--r-- | include/mbgl/renderer/bucket.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/renderer/debug_bucket.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/renderer/fill_bucket.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/renderer/line_bucket.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/renderer/painter.hpp | 33 | ||||
-rw-r--r-- | include/mbgl/renderer/prerendered_texture.hpp | 7 | ||||
-rw-r--r-- | include/mbgl/renderer/raster_bucket.hpp | 16 | ||||
-rw-r--r-- | include/mbgl/renderer/symbol_bucket.hpp | 2 |
8 files changed, 40 insertions, 28 deletions
diff --git a/include/mbgl/renderer/bucket.hpp b/include/mbgl/renderer/bucket.hpp index 18f58ee464..1391f6e3e3 100644 --- a/include/mbgl/renderer/bucket.hpp +++ b/include/mbgl/renderer/bucket.hpp @@ -5,7 +5,6 @@ #include <memory> #include <mbgl/map/tile.hpp> #include <mbgl/util/noncopyable.hpp> -#include <mbgl/renderer/prerendered_texture.hpp> namespace mbgl { @@ -14,11 +13,10 @@ class StyleLayer; class Bucket : private util::noncopyable { public: - virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id) = 0; + virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix) = 0; virtual bool hasData() const = 0; virtual ~Bucket() {} - std::unique_ptr<PrerenderedTexture> prerendered; }; } diff --git a/include/mbgl/renderer/debug_bucket.hpp b/include/mbgl/renderer/debug_bucket.hpp index ac4f18cc2c..660b7fcba8 100644 --- a/include/mbgl/renderer/debug_bucket.hpp +++ b/include/mbgl/renderer/debug_bucket.hpp @@ -20,7 +20,7 @@ class DebugBucket : public Bucket { public: DebugBucket(DebugFontBuffer& fontBuffer); - virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); virtual bool hasData() const; void drawLines(PlainShader& shader); diff --git a/include/mbgl/renderer/fill_bucket.hpp b/include/mbgl/renderer/fill_bucket.hpp index 9193b09149..e9340cce68 100644 --- a/include/mbgl/renderer/fill_bucket.hpp +++ b/include/mbgl/renderer/fill_bucket.hpp @@ -44,7 +44,7 @@ public: const StyleBucketFill& properties); ~FillBucket(); - virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); virtual bool hasData() const; void addGeometry(pbf& data); diff --git a/include/mbgl/renderer/line_bucket.hpp b/include/mbgl/renderer/line_bucket.hpp index d42b10bfb7..f65ca35605 100644 --- a/include/mbgl/renderer/line_bucket.hpp +++ b/include/mbgl/renderer/line_bucket.hpp @@ -28,7 +28,7 @@ public: PointElementsBuffer& pointElementsBuffer, const StyleBucketLine& properties); - virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); virtual bool hasData() const; void addGeometry(pbf& data); diff --git a/include/mbgl/renderer/painter.hpp b/include/mbgl/renderer/painter.hpp index b4023de167..db85d8703d 100644 --- a/include/mbgl/renderer/painter.hpp +++ b/include/mbgl/renderer/painter.hpp @@ -29,6 +29,8 @@ namespace mbgl { +enum class RenderPass : bool { Opaque, Translucent }; + class Transform; class Style; class Tile; @@ -40,8 +42,10 @@ class FillBucket; class LineBucket; class SymbolBucket; class RasterBucket; +class PrerenderedTexture; struct FillProperties; +struct RasterProperties; struct CompositeProperties; class LayerDescription; @@ -69,27 +73,27 @@ public: void changeMatrix(); // Renders a particular layer from a tile. - void renderTileLayer(const Tile& tile, std::shared_ptr<StyleLayer> layer_desc); + void renderTileLayer(const Tile& tile, std::shared_ptr<StyleLayer> layer_desc, const mat4 &matrix); // Renders debug information for a tile. void renderTileDebug(const Tile& tile); // Renders the red debug frame around a tile, visualizing its perimeter. - void renderDebugFrame(); + void renderDebugFrame(const mat4 &matrix); - void renderDebugText(DebugBucket& bucket); + void renderDebugText(DebugBucket& bucket, const mat4 &matrix); void renderDebugText(const std::vector<std::string> &strings); - void renderFill(FillBucket& bucket, const FillProperties& properties, const Tile::ID& id, const mat4 &mat); - void renderFill(FillBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); - void renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); - void renderSymbol(SymbolBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); - void renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); + void renderFill(FillBucket& bucket, const FillProperties& properties, const Tile::ID& id, const mat4 &matrix); + void renderFill(FillBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); + void renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); + void renderSymbol(SymbolBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); + void renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); + + void preparePrerender(RasterBucket &bucket); - void preparePrerender(PrerenderedTexture &texture); - void finishPrerender(PrerenderedTexture &texture); + void renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix, const RasterProperties& properties); - template <typename Properties> - void renderPrerenderedTexture(PrerenderedTexture &texture, const Properties &properties); + void createPrerendered(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); void resize(); @@ -117,7 +121,7 @@ public: bool needsAnimation() const; private: void setupShaders(); - const mat4 &translatedMatrix(const std::array<float, 2> &translation, const Tile::ID &id, TranslateAnchorType anchor = TranslateAnchorType::Map); + const mat4 &translatedMatrix(const mat4& matrix, const std::array<float, 2> &translation, const Tile::ID &id, TranslateAnchorType anchor = TranslateAnchorType::Map); void prepareTile(const Tile& tile); @@ -127,7 +131,6 @@ public: void depthMask(bool value); public: - mat4 matrix; mat4 vtxMatrix; mat4 projMatrix; mat4 nativeMatrix; @@ -153,7 +156,7 @@ private: bool gl_depthMask = true; std::array<uint16_t, 2> gl_viewport = {{ 0, 0 }}; float strata = 0; - enum { Opaque, Translucent } pass = Opaque; + RenderPass pass = RenderPass::Opaque; const float strata_epsilon = 1.0f / (1 << 16); public: diff --git a/include/mbgl/renderer/prerendered_texture.hpp b/include/mbgl/renderer/prerendered_texture.hpp index 9c72e14b88..e4dc610418 100644 --- a/include/mbgl/renderer/prerendered_texture.hpp +++ b/include/mbgl/renderer/prerendered_texture.hpp @@ -3,15 +3,15 @@ #include <mbgl/util/noncopyable.hpp> #include <mbgl/platform/gl.hpp> -#include <mbgl/style/rasterize_properties.hpp> namespace mbgl { +class StyleBucketRaster; class Painter; class PrerenderedTexture : private util::noncopyable { public: - PrerenderedTexture(const RasterizedProperties &properties); + PrerenderedTexture(const StyleBucketRaster &properties); ~PrerenderedTexture(); void bindTexture(); @@ -23,12 +23,13 @@ public: void blur(Painter& painter, uint16_t passes); public: - const RasterizedProperties properties; + const StyleBucketRaster &properties; private: GLint previous_fbo = 0; GLuint fbo = 0; GLuint texture = 0; + GLuint fbo_depth_stencil = 0; }; } diff --git a/include/mbgl/renderer/raster_bucket.hpp b/include/mbgl/renderer/raster_bucket.hpp index c111193126..a68475565b 100644 --- a/include/mbgl/renderer/raster_bucket.hpp +++ b/include/mbgl/renderer/raster_bucket.hpp @@ -3,6 +3,10 @@ #include <mbgl/renderer/bucket.hpp> #include <mbgl/util/raster.hpp> +#include <mbgl/renderer/prerendered_texture.hpp> +#include <mbgl/style/style_bucket.hpp> + + namespace mbgl { @@ -12,17 +16,23 @@ class VertexArrayObject; class RasterBucket : public Bucket { public: - RasterBucket(const std::shared_ptr<Texturepool> &texturepool); + RasterBucket(const std::shared_ptr<Texturepool> &texturepool, const StyleBucketRaster& properties); - virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix); virtual bool hasData() const; bool setImage(const std::string &data); + const StyleBucketRaster &properties; + PrerenderedTexture texture; + void drawRaster(RasterShader& shader, VertexBuffer &vertices, VertexArrayObject &array); -private: + void drawRaster(RasterShader& shader, VertexBuffer &vertices, VertexArrayObject &array, GLuint texture); + Raster raster; + +private: }; } diff --git a/include/mbgl/renderer/symbol_bucket.hpp b/include/mbgl/renderer/symbol_bucket.hpp index c003230cae..e890274238 100644 --- a/include/mbgl/renderer/symbol_bucket.hpp +++ b/include/mbgl/renderer/symbol_bucket.hpp @@ -53,7 +53,7 @@ class SymbolBucket : public Bucket { public: SymbolBucket(const StyleBucketSymbol &properties, Collision &collision); - virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID &id); + virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID &id, const mat4 &matrix); virtual bool hasData() const; virtual bool hasTextData() const; virtual bool hasIconData() const; |