summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/llmr/map/map.hpp2
-rw-r--r--include/llmr/renderer/bucket.hpp3
-rw-r--r--include/llmr/renderer/fill_bucket.hpp2
-rw-r--r--include/llmr/renderer/line_bucket.hpp2
-rw-r--r--include/llmr/renderer/painter.hpp6
-rw-r--r--include/llmr/renderer/shader-pattern.hpp25
-rw-r--r--include/llmr/shader/shaders.hpp1
-rw-r--r--include/llmr/style/properties.hpp3
-rw-r--r--include/llmr/style/style.hpp3
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;