diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/llmr/map/map.hpp | 2 | ||||
-rw-r--r-- | include/llmr/renderer/bucket.hpp | 3 | ||||
-rw-r--r-- | include/llmr/renderer/fill_bucket.hpp | 2 | ||||
-rw-r--r-- | include/llmr/renderer/line_bucket.hpp | 2 | ||||
-rw-r--r-- | include/llmr/renderer/painter.hpp | 6 | ||||
-rw-r--r-- | include/llmr/renderer/shader-pattern.hpp | 25 | ||||
-rw-r--r-- | include/llmr/shader/shaders.hpp | 1 | ||||
-rw-r--r-- | include/llmr/style/properties.hpp | 3 | ||||
-rw-r--r-- | include/llmr/style/style.hpp | 3 |
9 files changed, 40 insertions, 7 deletions
diff --git a/include/llmr/map/map.hpp b/include/llmr/map/map.hpp index 2d950afe47..0cae687302 100644 --- a/include/llmr/map/map.hpp +++ b/include/llmr/map/map.hpp @@ -69,8 +69,6 @@ private: int32_t min_zoom; int32_t max_zoom; - std::shared_ptr<Sprite> sprite; - std::forward_list<Tile::Ptr> tiles; std::forward_list<Tile::Ptr> historic_tiles; }; diff --git a/include/llmr/renderer/bucket.hpp b/include/llmr/renderer/bucket.hpp index 95db9e017d..7ae0d2d008 100644 --- a/include/llmr/renderer/bucket.hpp +++ b/include/llmr/renderer/bucket.hpp @@ -2,6 +2,7 @@ #define LLMR_RENDERER_BUCKET #include <string> +#include <llmr/map/tile.hpp> namespace llmr { @@ -10,7 +11,7 @@ class Painter; class Bucket { public: Bucket() = default; - virtual void render(Painter& painter, const std::string& layer_name) = 0; + virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id) = 0; private: // Make noncopyable diff --git a/include/llmr/renderer/fill_bucket.hpp b/include/llmr/renderer/fill_bucket.hpp index 32d8bc3218..bf1dd47cb4 100644 --- a/include/llmr/renderer/fill_bucket.hpp +++ b/include/llmr/renderer/fill_bucket.hpp @@ -18,7 +18,7 @@ class FillBucket : public Bucket { public: FillBucket(const std::shared_ptr<FillBuffer>& buffer, const BucketDescription& bucket_desc); - virtual void render(Painter& painter, const std::string& layer_name); + virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); void addGeometry(pbf& data); void addGeometry(const std::vector<Coordinate>& line); diff --git a/include/llmr/renderer/line_bucket.hpp b/include/llmr/renderer/line_bucket.hpp index 8350dc4b22..4c75fd38f6 100644 --- a/include/llmr/renderer/line_bucket.hpp +++ b/include/llmr/renderer/line_bucket.hpp @@ -17,7 +17,7 @@ class LineBucket : public Bucket { public: LineBucket(const std::shared_ptr<LineBuffer>& buffer, const BucketDescription& bucket_desc); - virtual void render(Painter& painter, const std::string& layer_name); + virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); void addGeometry(pbf& data); void addGeometry(const std::vector<Coordinate>& line); diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index 86d53c1637..dafa61c11d 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -5,6 +5,7 @@ #include "shader-plain.hpp" #include "shader-outline.hpp" #include "shader-line.hpp" +#include "shader-pattern.hpp" #include "../map/tile.hpp" #include "../geometry/vertex_buffer.hpp" @@ -42,8 +43,8 @@ public: void renderMatte(); void renderBackground(); - void renderFill(FillBucket& bucket, const std::string& layer_name); - void renderLine(LineBucket& bucket, const std::string& layer_name); + void renderFill(FillBucket& bucket, const std::string& layer_name, const Tile::ID& id); + void renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& id); void drawClippingMask(); @@ -68,6 +69,7 @@ private: std::shared_ptr<PlainShader> plainShader; std::shared_ptr<OutlineShader> outlineShader; std::shared_ptr<LineShader> lineShader; + std::shared_ptr<PatternShader> patternShader; // Set up the stencil quad we're using to generate the stencil mask. VertexBuffer tileStencilBuffer = { diff --git a/include/llmr/renderer/shader-pattern.hpp b/include/llmr/renderer/shader-pattern.hpp new file mode 100644 index 0000000000..5b295cfffb --- /dev/null +++ b/include/llmr/renderer/shader-pattern.hpp @@ -0,0 +1,25 @@ +#ifndef LLMR_RENDERER_SHADER_PATTERN +#define LLMR_RENDERER_SHADER_PATTERN + +#include "shader.hpp" + +namespace llmr { + +class PatternShader : public Shader { +public: + PatternShader(); + + int32_t a_pos; + int32_t u_matrix; + int32_t u_color; + int32_t u_offset; + int32_t u_pattern_size; + int32_t u_pattern_tl; + int32_t u_pattern_br; + int32_t u_mix; + +}; + +} + +#endif diff --git a/include/llmr/shader/shaders.hpp b/include/llmr/shader/shaders.hpp index 885f81813e..065b8d47f1 100644 --- a/include/llmr/shader/shaders.hpp +++ b/include/llmr/shader/shaders.hpp @@ -14,6 +14,7 @@ enum { FILL_SHADER, LINE_SHADER, OUTLINE_SHADER, + PATTERN_SHADER, PLAIN_SHADER, SHADER_COUNT }; diff --git a/include/llmr/style/properties.hpp b/include/llmr/style/properties.hpp index f0e3cf5079..572ca61acd 100644 --- a/include/llmr/style/properties.hpp +++ b/include/llmr/style/properties.hpp @@ -3,6 +3,7 @@ #include <array> #include <vector> +#include <string> namespace llmr { @@ -87,6 +88,7 @@ struct FillClass { Color fill_color = {{ 0, 0, 0, 1 }}; Color stroke_color = {{ 0, 0, 0, std::numeric_limits<float>::infinity() }}; FunctionProperty<float> opacity = 1; + std::string image; }; struct FillProperties { @@ -96,6 +98,7 @@ struct FillProperties { Color fill_color = {{ 0, 0, 0, 1 }}; Color stroke_color = {{ 0, 0, 0, 1 }}; float opacity = 1.0; + std::string image; }; } diff --git a/include/llmr/style/style.hpp b/include/llmr/style/style.hpp index 80834fa44f..f2acbd1eea 100644 --- a/include/llmr/style/style.hpp +++ b/include/llmr/style/style.hpp @@ -11,6 +11,7 @@ #include "bucket_description.hpp" #include "layer_description.hpp" #include "class_description.hpp" +#include "sprite.hpp" namespace llmr { @@ -37,6 +38,8 @@ private: static Color parseColor(pbf& data); public: + std::shared_ptr<Sprite> sprite; + // This is static information parsed from the stylesheet. std::map<std::string, BucketDescription> buckets; std::vector<LayerDescription> layers; |