summaryrefslogtreecommitdiff
path: root/include/llmr
diff options
context:
space:
mode:
Diffstat (limited to 'include/llmr')
-rw-r--r--include/llmr/geometry/anchor.hpp25
-rw-r--r--include/llmr/geometry/binpack.hpp100
-rw-r--r--include/llmr/geometry/buffer.hpp114
-rw-r--r--include/llmr/geometry/debug_font_buffer.hpp17
-rw-r--r--include/llmr/geometry/elements_buffer.hpp54
-rw-r--r--include/llmr/geometry/fill_buffer.hpp21
-rw-r--r--include/llmr/geometry/geometry.hpp77
-rw-r--r--include/llmr/geometry/glyph_atlas.hpp51
-rw-r--r--include/llmr/geometry/icon_buffer.hpp20
-rw-r--r--include/llmr/geometry/interpolate.hpp13
-rw-r--r--include/llmr/geometry/line_buffer.hpp39
-rw-r--r--include/llmr/geometry/sprite_atlas.hpp74
-rw-r--r--include/llmr/geometry/text_buffer.hpp25
-rw-r--r--include/llmr/geometry/vao.hpp101
-rw-r--r--include/llmr/geometry/vertex_buffer.hpp35
-rw-r--r--include/llmr/llmr.hpp7
-rw-r--r--include/llmr/map/map.hpp194
-rw-r--r--include/llmr/map/raster_tile_data.hpp28
-rw-r--r--include/llmr/map/source.hpp72
-rw-r--r--include/llmr/map/sprite.hpp65
-rw-r--r--include/llmr/map/tile.hpp73
-rw-r--r--include/llmr/map/tile_data.hpp77
-rw-r--r--include/llmr/map/tile_parser.hpp68
-rw-r--r--include/llmr/map/transform.hpp106
-rw-r--r--include/llmr/map/transform_state.hpp69
-rw-r--r--include/llmr/map/vector_tile.hpp119
-rw-r--r--include/llmr/map/vector_tile_data.hpp55
-rw-r--r--include/llmr/map/view.hpp54
-rw-r--r--include/llmr/platform/event.hpp79
-rw-r--r--include/llmr/platform/gl.hpp83
-rw-r--r--include/llmr/platform/log.hpp71
-rw-r--r--include/llmr/platform/platform.hpp46
-rw-r--r--include/llmr/platform/request.hpp48
-rw-r--r--include/llmr/renderer/bucket.hpp26
-rw-r--r--include/llmr/renderer/debug_bucket.hpp36
-rw-r--r--include/llmr/renderer/fill_bucket.hpp88
-rw-r--r--include/llmr/renderer/frame_history.hpp32
-rw-r--r--include/llmr/renderer/icon_bucket.hpp53
-rw-r--r--include/llmr/renderer/line_bucket.hpp61
-rw-r--r--include/llmr/renderer/painter.hpp219
-rw-r--r--include/llmr/renderer/prerendered_texture.hpp36
-rw-r--r--include/llmr/renderer/raster_bucket.hpp30
-rw-r--r--include/llmr/renderer/text_bucket.hpp61
-rw-r--r--include/llmr/shader/composite_shader.hpp29
-rw-r--r--include/llmr/shader/dot_shader.hpp33
-rw-r--r--include/llmr/shader/gaussian_shader.hpp29
-rw-r--r--include/llmr/shader/icon_shader.hpp42
-rw-r--r--include/llmr/shader/line_shader.hpp45
-rw-r--r--include/llmr/shader/linejoin_shader.hpp37
-rw-r--r--include/llmr/shader/outline_shader.hpp29
-rw-r--r--include/llmr/shader/pattern_shader.hpp45
-rw-r--r--include/llmr/shader/plain_shader.hpp26
-rw-r--r--include/llmr/shader/raster_shader.hpp33
-rw-r--r--include/llmr/shader/shader.hpp29
-rw-r--r--include/llmr/shader/text_shader.hpp72
-rw-r--r--include/llmr/style/applied_class_properties.hpp39
-rw-r--r--include/llmr/style/class_dictionary.hpp32
-rw-r--r--include/llmr/style/class_properties.hpp43
-rw-r--r--include/llmr/style/filter_comparison.hpp65
-rw-r--r--include/llmr/style/filter_comparison_private.hpp23
-rw-r--r--include/llmr/style/filter_expression.hpp54
-rw-r--r--include/llmr/style/filter_expression_private.hpp75
-rw-r--r--include/llmr/style/function_properties.hpp79
-rw-r--r--include/llmr/style/property_fallback.hpp29
-rw-r--r--include/llmr/style/property_key.hpp57
-rw-r--r--include/llmr/style/property_transition.hpp15
-rw-r--r--include/llmr/style/property_value.hpp21
-rw-r--r--include/llmr/style/rasterize_properties.hpp38
-rw-r--r--include/llmr/style/style.hpp68
-rw-r--r--include/llmr/style/style_bucket.hpp88
-rw-r--r--include/llmr/style/style_layer.hpp94
-rw-r--r--include/llmr/style/style_layer_group.hpp23
-rw-r--r--include/llmr/style/style_parser.hpp119
-rw-r--r--include/llmr/style/style_properties.hpp116
-rw-r--r--include/llmr/style/style_source.hpp29
-rw-r--r--include/llmr/style/types.hpp160
-rw-r--r--include/llmr/style/value.hpp43
-rw-r--r--include/llmr/style/value_comparison.hpp109
-rw-r--r--include/llmr/text/collision.hpp32
-rw-r--r--include/llmr/text/glyph.hpp61
-rw-r--r--include/llmr/text/glyph_store.hpp95
-rw-r--r--include/llmr/text/placement.hpp37
-rw-r--r--include/llmr/text/rotation_range.hpp54
-rw-r--r--include/llmr/text/types.hpp109
-rw-r--r--include/llmr/util/clip_ids.hpp19
-rw-r--r--include/llmr/util/constants.hpp33
-rw-r--r--include/llmr/util/enum.hpp55
-rw-r--r--include/llmr/util/error.hpp20
-rw-r--r--include/llmr/util/image.hpp36
-rw-r--r--include/llmr/util/io.hpp15
-rw-r--r--include/llmr/util/mat4.hpp45
-rw-r--r--include/llmr/util/math.hpp115
-rw-r--r--include/llmr/util/noncopyable.hpp23
-rw-r--r--include/llmr/util/pbf.hpp184
-rw-r--r--include/llmr/util/raster.hpp70
-rw-r--r--include/llmr/util/rect.hpp21
-rw-r--r--include/llmr/util/recursive_wrapper.hpp127
-rw-r--r--include/llmr/util/std.hpp38
-rw-r--r--include/llmr/util/string.hpp24
-rw-r--r--include/llmr/util/texturepool.hpp25
-rw-r--r--include/llmr/util/threadpool.hpp45
-rw-r--r--include/llmr/util/time.hpp42
-rw-r--r--include/llmr/util/timer.hpp40
-rw-r--r--include/llmr/util/token.hpp52
-rw-r--r--include/llmr/util/transition.hpp84
-rw-r--r--include/llmr/util/unitbezier.hpp121
-rw-r--r--include/llmr/util/utf.hpp50
-rw-r--r--include/llmr/util/uv.hpp141
-rw-r--r--include/llmr/util/variant.hpp731
-rw-r--r--include/llmr/util/vec.hpp117
110 files changed, 0 insertions, 7251 deletions
diff --git a/include/llmr/geometry/anchor.hpp b/include/llmr/geometry/anchor.hpp
deleted file mode 100644
index dd97c507f2..0000000000
--- a/include/llmr/geometry/anchor.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef LLMR_GEOMETRY_ANCHOR
-#define LLMR_GEOMETRY_ANCHOR
-
-#include <vector>
-
-namespace llmr {
-
-struct Anchor {
- float x = 0.0f;
- float y = 0.0f;
- float angle = 0.0f;
- float scale = 0.0f;
- int segment = -1;
-
- explicit Anchor(float x, float y, float angle, float scale)
- : x(x), y(y), angle(angle), scale(scale) {}
- explicit Anchor(float x, float y, float angle, float scale, int segment)
- : x(x), y(y), angle(angle), scale(scale), segment(segment) {}
-};
-
-typedef std::vector<Anchor> Anchors;
-
-}
-
-#endif \ No newline at end of file
diff --git a/include/llmr/geometry/binpack.hpp b/include/llmr/geometry/binpack.hpp
deleted file mode 100644
index 11536ee8b3..0000000000
--- a/include/llmr/geometry/binpack.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#ifndef LLMR_GEOMETRY_BINPACK
-#define LLMR_GEOMETRY_BINPACK
-
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/util/rect.hpp>
-#include <cstdint>
-#include <list>
-
-namespace llmr {
-
-template <typename T>
-class BinPack : private util::noncopyable {
-public:
- BinPack(T width, T height)
- : free(1, Rect<uint16_t>{ 0, 0, width, height }) {}
-public:
- Rect<T> allocate(T width, T height) {
- // Find the smallest free rect angle
- auto smallest = free.end();
- for (auto it = free.begin(); it != free.end(); ++it) {
- const Rect<T>& ref = *it;
- const Rect<T>& rect = *smallest;
- if (width <= ref.w && height <= ref.h) {
- if (smallest == free.end() || (ref.y <= rect.y && ref.x <= rect.x)) {
- smallest = it;
- }
- }
- }
-
- if (smallest == free.end()) {
- // There's no space left for this char.
- return Rect<uint16_t>{ 0, 0, 0, 0 };
- } else {
- Rect<T> rect = *smallest;
- free.erase(smallest);
-
- // Shorter/Longer Axis Split Rule (SAS)
- // http://clb.demon.fi/files/RectangleBinPack.pdf p. 15
- // Ignore the dimension of R and just split long the shorter dimension
- // See Also: http://www.cs.princeton.edu/~chazelle/pubs/blbinpacking.pdf
- if (rect.w < rect.h) {
- // split horizontally
- // +--+---+
- // |__|___| <-- b1
- // +------+ <-- b2
- if (rect.w > width) free.emplace_back(rect.x + width, rect.y, rect.w - width, height);
- if (rect.h > height) free.emplace_back(rect.x, rect.y + height, rect.w, rect.h - height);
- } else {
- // split vertically
- // +--+---+
- // |__| | <-- b1
- // +--|---+ <-- b2
- if (rect.w > width) free.emplace_back(rect.x + width, rect.y, rect.w - width, rect.h);
- if (rect.h > height) free.emplace_back(rect.x, rect.y + height, width, rect.h - height);
- }
-
- return Rect<uint16_t>{ rect.x, rect.y, width, height };
- }
- }
-
-
- void release(Rect<T> rect) {
- // Simple algorithm to recursively merge the newly released cell with its
- // neighbor. This doesn't merge more than two cells at a time, and fails
- // for complicated merges.
- for (auto it = free.begin(); it != free.end(); ++it) {
- Rect<T> ref = *it;
- if (ref.y == rect.y && ref.h == rect.h && ref.x + ref.w == rect.x) {
- ref.w += rect.w;
- }
- else if (ref.x == rect.x && ref.w == rect.w && ref.y + ref.h == rect.y) {
- ref.h += rect.h;
- }
- else if (rect.y == ref.y && rect.h == ref.h && rect.x + rect.w == ref.x) {
- ref.x = rect.x;
- ref.w += rect.w;
- }
- else if (rect.x == ref.x && rect.w == ref.w && rect.y + rect.h == ref.y) {
- ref.y = rect.y;
- ref.h += rect.h;
- } else {
- continue;
- }
-
- free.erase(it);
- release(ref);
- return;
-
- }
-
- free.emplace_back(rect);
- };
-
-private:
- std::list<Rect<T>> free;
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/buffer.hpp b/include/llmr/geometry/buffer.hpp
deleted file mode 100644
index 607f902bf1..0000000000
--- a/include/llmr/geometry/buffer.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-#ifndef LLMR_GEOMETRY_BUFFER
-#define LLMR_GEOMETRY_BUFFER
-
-#include <llmr/platform/gl.hpp>
-#include <llmr/util/noncopyable.hpp>
-
-#include <cstdlib>
-#include <cassert>
-#include <stdexcept>
-
-namespace llmr {
-
-template <
- size_t item_size,
- int bufferType = GL_ARRAY_BUFFER,
- size_t defaultLength = 8192,
- bool retainAfterUpload = false
->
-class Buffer : private util::noncopyable {
-public:
- ~Buffer() {
- cleanup();
- if (buffer != 0) {
- glDeleteBuffers(1, &buffer);
- buffer = 0;
- }
- }
-
- // Returns the number of elements in this buffer. This is not the number of
- // bytes, but rather the number of coordinates with associated information.
- inline size_t index() const {
- return pos / itemSize;
- }
-
- inline bool empty() const {
- return pos == 0;
- }
-
- // Transfers this buffer to the GPU and binds the buffer to the GL context.
- void bind(bool force = false) {
- if (buffer == 0) {
- glGenBuffers(1, &buffer);
- force = true;
- }
- glBindBuffer(bufferType, buffer);
- if (force) {
- if (array == nullptr) {
- throw std::runtime_error("Buffer was already deleted or doesn't contain elements");
- }
-
- glBufferData(bufferType, pos, array, GL_STATIC_DRAW);
- if (!retainAfterUpload) {
- cleanup();
- }
- }
- }
-
- void cleanup() {
- if (array) {
- free(array);
- array = nullptr;
- }
- }
-
-protected:
- // increase the buffer size by at least /required/ bytes.
- inline void *addElement() {
- if (buffer != 0) {
- throw std::runtime_error("Can't add elements after buffer was bound to GPU");
- }
- if (length < pos + itemSize) {
- while (length < pos + itemSize) length += defaultLength;
- array = realloc(array, length);
- if (array == nullptr) {
- throw std::runtime_error("Buffer reallocation failed¯");
- }
- }
- pos += itemSize;
- return static_cast<char *>(array) + (pos - itemSize);
- }
-
- // Get a pointer to the item at a given index.
- inline void *getElement(size_t index) {
- if (array == nullptr) {
- throw std::runtime_error("Buffer was already deleted or doesn't contain elements");
- }
-
- if (index * itemSize >= pos) {
- throw new std::runtime_error("Can't get element after array bounds");
- } else {
- return static_cast<char *>(array) + (index * itemSize);
- }
- }
-
-public:
- static const size_t itemSize = item_size;
-
-private:
- // CPU buffer
- void *array = nullptr;
-
- // Byte position where we are writing.
- size_t pos = 0;
-
- // Number of bytes that are valid in this buffer.
- size_t length = 0;
-
- // GL buffer ID
- uint32_t buffer = 0;
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/debug_font_buffer.hpp b/include/llmr/geometry/debug_font_buffer.hpp
deleted file mode 100644
index 15f6daf07f..0000000000
--- a/include/llmr/geometry/debug_font_buffer.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef LLMR_GEOMETRY_DEBUG_FONT_BUFFER
-#define LLMR_GEOMETRY_DEBUG_FONT_BUFFER
-
-#include "buffer.hpp"
-
-namespace llmr {
-
-class DebugFontBuffer : public Buffer<
- 4 // 2 bytes per coordinate, 2 coordinates
-> {
-public:
- void addText(const char *text, double left, double baseline, double scale = 1);
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/elements_buffer.hpp b/include/llmr/geometry/elements_buffer.hpp
deleted file mode 100644
index a058312bda..0000000000
--- a/include/llmr/geometry/elements_buffer.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER
-#define LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER
-
-#include <llmr/geometry/buffer.hpp>
-#include <llmr/geometry/vao.hpp>
-
-namespace llmr {
-
-struct ElementGroup {
- VertexArrayObject array;
- uint32_t vertex_length;
- uint32_t elements_length;
-
- ElementGroup() : vertex_length(0), elements_length(0) {}
- ElementGroup(uint32_t vertex_length, uint32_t elements_length)
- : vertex_length(vertex_length),
- elements_length(elements_length) {
- }
-};
-
-class TriangleElementsBuffer : public Buffer<
- 6, // bytes per triangle (3 * unsigned short == 6 bytes)
- GL_ELEMENT_ARRAY_BUFFER
-> {
-public:
- typedef uint16_t element_type;
-
- void add(element_type a, element_type b, element_type c);
-};
-
-
-class LineElementsBuffer : public Buffer<
- 4, // bytes per triangle (2 * unsigned short == 6 bytes)
- GL_ELEMENT_ARRAY_BUFFER
-> {
-public:
- typedef uint16_t element_type;
-
- void add(element_type a, element_type b);
-};
-
-class PointElementsBuffer : public Buffer<
- 2, // bytes per point (1 unsigned short)
- GL_ELEMENT_ARRAY_BUFFER
-> {
-public:
- typedef uint16_t element_type;
-
- void add(element_type a);
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/fill_buffer.hpp b/include/llmr/geometry/fill_buffer.hpp
deleted file mode 100644
index 9aebe35abf..0000000000
--- a/include/llmr/geometry/fill_buffer.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef LLMR_GEOMETRY_FILL_BUFFER
-#define LLMR_GEOMETRY_FILL_BUFFER
-
-#include "buffer.hpp"
-#include <vector>
-#include <cstdint>
-
-namespace llmr {
-
-class FillVertexBuffer : public Buffer<
- 4 // bytes per coordinates (2 * unsigned short == 4 bytes)
-> {
-public:
- typedef int16_t vertex_type;
-
- void add(vertex_type x, vertex_type y);
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/geometry.hpp b/include/llmr/geometry/geometry.hpp
deleted file mode 100644
index 2f321934a7..0000000000
--- a/include/llmr/geometry/geometry.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef LLMR_GEOMETRY_GEOMETRY
-#define LLMR_GEOMETRY_GEOMETRY
-
-#include <llmr/util/pbf.hpp>
-#include <llmr/util/noncopyable.hpp>
-
-#include <cstdlib>
-
-namespace llmr {
-
-class Geometry : private util::noncopyable {
-
-public:
- inline explicit Geometry(pbf& data);
-
- enum command : uint8_t {
- end = 0,
- move_to = 1,
- line_to = 2,
- close = 7
- };
-
- inline command next(int32_t &rx, int32_t &ry);
-
-private:
- pbf& data;
- uint8_t cmd;
- uint32_t length;
- int32_t x, y;
- int32_t ox, oy;
-};
-
-Geometry::Geometry(pbf& data)
- : data(data),
- cmd(1),
- length(0),
- x(0), y(0),
- ox(0), oy(0) {}
-
-Geometry::command Geometry::next(int32_t &rx, int32_t &ry) {
- if (data.data < data.end) {
- if (length == 0) {
- uint32_t cmd_length = static_cast<uint32_t>(data.varint());
- cmd = cmd_length & 0x7;
- length = cmd_length >> 3;
- }
-
- --length;
-
- if (cmd == move_to || cmd == line_to) {
- rx = (x += data.svarint());
- ry = (y += data.svarint());
-
- if (cmd == move_to) {
- ox = x;
- oy = y;
- return move_to;
- } else {
- return line_to;
- }
- } else if (cmd == close) {
- rx = ox;
- ry = oy;
- return close;
- } else {
- fprintf(stderr, "unknown command: %d\n", cmd);
- // TODO: gracefully handle geometry parse failures
- return end;
- }
- } else {
- return end;
- }
-}
-
-}
-
-#endif
diff --git a/include/llmr/geometry/glyph_atlas.hpp b/include/llmr/geometry/glyph_atlas.hpp
deleted file mode 100644
index 0aada6a733..0000000000
--- a/include/llmr/geometry/glyph_atlas.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef LLMR_GEOMETRY_GLYPH_ATLAS
-#define LLMR_GEOMETRY_GLYPH_ATLAS
-
-#include <llmr/geometry/binpack.hpp>
-#include <llmr/text/glyph_store.hpp>
-
-#include <string>
-#include <set>
-#include <map>
-#include <mutex>
-#include <atomic>
-
-namespace llmr {
-
-class GlyphAtlas {
-public:
-
-private:
- struct GlyphValue {
- GlyphValue(const Rect<uint16_t>& rect, uint64_t id)
- : rect(rect), ids({ id }) {}
- Rect<uint16_t> rect;
- std::set<uint64_t> ids;
- };
-
-public:
- GlyphAtlas(uint16_t width, uint16_t height);
- ~GlyphAtlas();
-
-
- Rect<uint16_t> addGlyph(uint64_t tile_id, const std::string& face_name,
- const SDFGlyph& glyph);
- void removeGlyphs(uint64_t tile_id);
- void bind();
-
-public:
- const uint16_t width = 0;
- const uint16_t height = 0;
-
-private:
- std::mutex mtx;
- BinPack<uint16_t> bin;
- std::map<std::string, std::map<uint32_t, GlyphValue>> index;
- char *const data = nullptr;
- std::atomic<bool> dirty;
- uint32_t texture = 0;
-};
-
-};
-
-#endif
diff --git a/include/llmr/geometry/icon_buffer.hpp b/include/llmr/geometry/icon_buffer.hpp
deleted file mode 100644
index 6bb0ec30c1..0000000000
--- a/include/llmr/geometry/icon_buffer.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef LLMR_GEOMETRY_ICON_BUFFER
-#define LLMR_GEOMETRY_ICON_BUFFER
-
-#include "buffer.hpp"
-
-namespace llmr {
-
- class IconVertexBuffer : public Buffer<
- 4 + // int16 x/y coordinates per vertex (== 4 bytes)
- 4 // uint16 x/y coordinates of icon in sprite (== 4 bytes)
- > {
- public:
- typedef int16_t vertex_type;
-
- void add(vertex_type x, vertex_type y, uint16_t tx, uint16_t ty);
- };
-
-}
-
-#endif
diff --git a/include/llmr/geometry/interpolate.hpp b/include/llmr/geometry/interpolate.hpp
deleted file mode 100644
index 0014d56aad..0000000000
--- a/include/llmr/geometry/interpolate.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef LLMR_GEOMETRY_INTERPOLATE
-#define LLMR_GEOMETRY_INTERPOLATE
-
-#include <llmr/geometry/anchor.hpp>
-#include <llmr/util/math.hpp>
-
-namespace llmr {
-
-Anchors interpolate(const std::vector<Coordinate> &vertices, float spacing,
- float minScale = 0.0f, int start = 0);
-}
-
-#endif
diff --git a/include/llmr/geometry/line_buffer.hpp b/include/llmr/geometry/line_buffer.hpp
deleted file mode 100644
index 289f1bc6eb..0000000000
--- a/include/llmr/geometry/line_buffer.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef LLMR_GEOMETRY_LINE_BUFFER
-#define LLMR_GEOMETRY_LINE_BUFFER
-
-#include "buffer.hpp"
-
-namespace llmr {
-
-class LineVertexBuffer : public Buffer<
- 8 // 2 coordinates per vertex + 1 linesofar + 1 extrude coord pair == 4 (== 8 bytes)
-> {
-public:
- typedef int16_t vertex_type;
-
- /*
- * Scale the extrusion vector so that the normal length is this value.
- * Contains the "texture" normals (-1..1). This is distinct from the extrude
- * normals for line joins, because the x-value remains 0 for the texture
- * normal array, while the extrude normal actually moves the vertex to create
- * the acute/bevelled line join.
- */
- static const int8_t extrudeScale = 63;
-
- /*
- * Add a vertex to this buffer
- *
- * @param {number} x vertex position
- * @param {number} y vertex position
- * @param {number} ex extrude normal
- * @param {number} ey extrude normal
- * @param {number} tx texture normal
- * @param {number} ty texture normal
- */
- size_t add(vertex_type x, vertex_type y, float ex, float ey, int8_t tx, int8_t ty, int32_t linesofar = 0);
-};
-
-
-}
-
-#endif
diff --git a/include/llmr/geometry/sprite_atlas.hpp b/include/llmr/geometry/sprite_atlas.hpp
deleted file mode 100644
index 13b85e5480..0000000000
--- a/include/llmr/geometry/sprite_atlas.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef LLMR_GEOMETRY_SPRITE_ATLAS
-#define LLMR_GEOMETRY_SPRITE_ATLAS
-
-#include <llmr/geometry/binpack.hpp>
-
-#include <string>
-#include <map>
-#include <mutex>
-#include <atomic>
-#include <set>
-
-namespace llmr {
-
-class Sprite;
-class SpritePosition;
-
-class SpriteAtlas {
-public:
- typedef uint16_t dimension;
-
-public:
- // Add way to construct this from another SpriteAtlas (e.g. with another pixelRatio)
- SpriteAtlas(dimension width, dimension height);
- ~SpriteAtlas();
-
- // Changes the pixel ratio.
- bool resize(float newRatio);
-
- // Update uninitialized sprites in this atlas from the given sprite.
- void update(const Sprite &sprite);
-
- // Returns the coordinates of a square icon. The getter also *creates* new square icons in the
- // atlas if they don't exist, but they'll be default-initialized with a a black circle.
- Rect<dimension> getIcon(int size, const std::string &name);
-
- // Returns the coordinates of an image that is sourced from the sprite image.
- // This getter does not create images, as the dimension of the texture us unknown if the
- // sprite is not yet loaded. Instead, it returns a 0/0/0/0 rect.
- Rect<dimension> getImage(const std::string &name, const Sprite &sprite);
-
- // Binds the image buffer of this sprite atlas to the GPU, and uploads data if it is out
- // of date.
- void bind(bool linear = false);
-
- inline float getWidth() const { return width; }
- inline float getHeight() const { return height; }
- inline float getTextureWidth() const { return width * pixelRatio; }
- inline float getTextureHeight() const { return height * pixelRatio; }
-
-private:
- void allocate();
- Rect<SpriteAtlas::dimension> allocateImage(size_t width, size_t height);
- void copy(const Rect<dimension> &dst, const SpritePosition &src, const Sprite &sprite);
-
-public:
- const dimension width = 0;
- const dimension height = 0;
-
-private:
- std::mutex mtx;
- float pixelRatio = 1.0f;
- BinPack<dimension> bin;
- std::map<std::string, Rect<dimension>> images;
- std::set<std::string> uninitialized;
- uint32_t *data = nullptr;
- std::atomic<bool> dirty;
- uint32_t texture = 0;
- uint32_t filter = 0;
- static const int buffer = 1;
-};
-
-};
-
-#endif
diff --git a/include/llmr/geometry/text_buffer.hpp b/include/llmr/geometry/text_buffer.hpp
deleted file mode 100644
index 8d4cba2856..0000000000
--- a/include/llmr/geometry/text_buffer.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef LLMR_GEOMETRY_TEXT_BUFFER
-#define LLMR_GEOMETRY_TEXT_BUFFER
-
-#include "buffer.hpp"
-#include <array>
-
-namespace llmr {
-
-class TextVertexBuffer : public Buffer <
- 16,
- GL_ARRAY_BUFFER,
- 32768
-> {
-public:
- typedef int16_t vertex_type;
-
- static const double angleFactor;
-
- size_t add(int16_t x, int16_t y, float ox, float oy, uint16_t tx, uint16_t ty, float angle, float minzoom, std::array<float, 2> range, float maxzoom, float labelminzoom);
-};
-
-
-}
-
-#endif
diff --git a/include/llmr/geometry/vao.hpp b/include/llmr/geometry/vao.hpp
deleted file mode 100644
index 64b324372c..0000000000
--- a/include/llmr/geometry/vao.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef LLMR_GEOMETRY_VAO
-#define LLMR_GEOMETRY_VAO
-
-#include <llmr/platform/gl.hpp>
-
-#include <stdexcept>
-
-namespace llmr {
-
-class VertexArrayObject {
-public:
- template <typename Shader, typename VertexBuffer>
- void bind(Shader& shader, VertexBuffer& vertex_buffer, char *offset) {
-#ifdef GL_ARB_vertex_array_object
- if (!vao) {
- glGenVertexArrays(1, &vao);
- glBindVertexArray(vao);
- } else {
- // We have been given the correct information.
- glBindVertexArray(vao);
- }
-
- if (shader_ptr != &shader) {
- if (shader_ptr != nullptr) {
- fprintf(stderr, "shader rebind!");
- }
-#endif
- vertex_buffer.bind();
- shader.bind(offset);
-
-#ifdef GL_ARB_vertex_array_object
- shader_ptr = &shader;
- vertex_buffer_ptr = &vertex_buffer;
- elements_buffer_ptr = nullptr;
- offset_ptr = offset;
- } else if (vertex_buffer_ptr != &vertex_buffer) {
- throw std::runtime_error("trying to bind VAO to another vertex buffer");
- } else if (elements_buffer_ptr != nullptr) {
- throw std::runtime_error("trying to bind VAO to another elements buffer");
- } else if (offset_ptr != offset) {
- throw std::runtime_error("trying to bind VAO to another offset");
- }
-#endif
- }
-
- template <typename Shader, typename VertexBuffer, typename ElementsBuffer>
- void bind(Shader& shader, VertexBuffer& vertex_buffer, ElementsBuffer& elements_buffer, char *offset) {
-#ifdef GL_ARB_vertex_array_object
- if (!vao) {
- glGenVertexArrays(1, &vao);
- glBindVertexArray(vao);
- } else {
- // We have been given the correct information.
- glBindVertexArray(vao);
- }
-
- if (shader_ptr != &shader) {
-#endif
- vertex_buffer.bind();
- elements_buffer.bind();
- shader.bind(offset);
-
-#ifdef GL_ARB_vertex_array_object
- shader_ptr = &shader;
- vertex_buffer_ptr = &vertex_buffer;
- elements_buffer_ptr = &elements_buffer;
- offset_ptr = offset;
- } else if (vertex_buffer_ptr != &vertex_buffer) {
- throw std::runtime_error("trying to bind VAO to another vertex buffer");
- } else if (elements_buffer_ptr != &elements_buffer) {
- throw std::runtime_error("trying to bind VAO to another elements buffer");
- } else if (offset_ptr != offset) {
- throw std::runtime_error("trying to bind VAO to another offset");
- }
-#endif
- }
-
- ~VertexArrayObject() {
-#ifdef GL_ARB_vertex_array_object
- if (vao) {
- glDeleteVertexArrays(1, &vao);
- }
-#endif
- }
-
-private:
-#ifdef GL_ARB_vertex_array_object
- GLuint vao = 0;
-
- // For debug reasons, we're storing the bind information so that we can
- // detect errors and report
- void *shader_ptr = nullptr;
- void *vertex_buffer_ptr = nullptr;
- void *elements_buffer_ptr = nullptr;
- char *offset_ptr = 0;
-#endif
-};
-
-}
-
-#endif
diff --git a/include/llmr/geometry/vertex_buffer.hpp b/include/llmr/geometry/vertex_buffer.hpp
deleted file mode 100644
index 9478d7b15f..0000000000
--- a/include/llmr/geometry/vertex_buffer.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef LLMR_GEOMETRY_VERTEX_BUFFER
-#define LLMR_GEOMETRY_VERTEX_BUFFER
-
-#include <vector>
-#include <cstddef>
-#include <cstdint>
-#include <cmath>
-
-namespace llmr {
-
-class VertexBuffer {
-public:
- typedef int16_t vertex_type;
- VertexBuffer(std::initializer_list<vertex_type> init);
- ~VertexBuffer();
-
- /*
- * Returns the number of elements in this buffer. This is not the number of
- * bytes, but rather the number of coordinates with associated information.
- */
- size_t index() const;
-
- /*
- * Transfers this buffer to the GPU and binds the buffer to the GL context.
- */
- void bind();
-
-private:
- const std::vector<vertex_type> array;
- uint32_t buffer = 0;
-};
-
-}
-
-#endif
diff --git a/include/llmr/llmr.hpp b/include/llmr/llmr.hpp
deleted file mode 100644
index 349b15d8c9..0000000000
--- a/include/llmr/llmr.hpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef LLMR_MAIN
-#define LLMR_MAIN
-
-#include "map/map.hpp"
-#include "map/view.hpp"
-
-#endif
diff --git a/include/llmr/map/map.hpp b/include/llmr/map/map.hpp
deleted file mode 100644
index af4250c357..0000000000
--- a/include/llmr/map/map.hpp
+++ /dev/null
@@ -1,194 +0,0 @@
-
-#ifndef LLMR_MAP_MAP
-#define LLMR_MAP_MAP
-
-#include <uv.h>
-
-#include <llmr/map/view.hpp>
-#include <llmr/map/transform.hpp>
-#include <llmr/style/style.hpp>
-#include <llmr/geometry/glyph_atlas.hpp>
-#include <llmr/text/glyph_store.hpp>
-#include <llmr/renderer/painter.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/util/texturepool.hpp>
-
-#include <cstdint>
-#include <string>
-#include <map>
-
-namespace llmr {
-
-class Source;
-class SpriteAtlas;
-
-class Map : private util::noncopyable {
-public:
- explicit Map(View &view);
- ~Map();
-
- // Start/stop the map render thread
- void start();
- void stop();
-
- // Runs the map event loop.
- void run();
-
- // Triggers a lazy rerender: only performs a render when the map is not clean.
- void rerender();
-
- // Forces a map update: always triggers a rerender.
- void update();
-
- // Triggers a cleanup that releases resources.
- void cleanup();
-
- // Controls buffer swapping.
- bool needsSwap();
- void swapped();
-
- // Size
- void resize(uint16_t width, uint16_t height, float ratio = 1);
- void resize(uint16_t width, uint16_t height, float ratio, uint16_t fb_width, uint16_t fb_height);
-
- // Styling
- const std::set<std::shared_ptr<StyleSource>> getActiveSources() const;
- void setAppliedClasses(const std::vector<std::string> &classes);
- void toggleClass(const std::string &name);
- const std::vector<std::string> &getAppliedClasses() const;
- void setDefaultTransitionDuration(uint64_t duration_milliseconds = 0);
- void setStyleJSON(std::string newStyleJSON);
- std::string getStyleJSON() const;
- void setAccessToken(std::string access_token);
- std::string getAccessToken() const;
-
- // Transition
- void cancelTransitions();
-
- // Position
- void moveBy(double dx, double dy, double duration = 0);
- void setLonLat(double lon, double lat, double duration = 0);
- void getLonLat(double &lon, double &lat) const;
- void startPanning();
- void stopPanning();
- void resetPosition();
-
- // Scale
- void scaleBy(double ds, double cx = -1, double cy = -1, double duration = 0);
- void setScale(double scale, double cx = -1, double cy = -1, double duration = 0);
- double getScale() const;
- void setZoom(double zoom, double duration = 0);
- double getZoom() const;
- void setLonLatZoom(double lon, double lat, double zoom, double duration = 0);
- void getLonLatZoom(double &lon, double &lat, double &zoom) const;
- void resetZoom();
- void startScaling();
- void stopScaling();
- double getMinZoom() const;
- double getMaxZoom() const;
-
- // Rotation
- void rotateBy(double sx, double sy, double ex, double ey, double duration = 0);
- void setAngle(double angle, double duration = 0);
- void setAngle(double angle, double cx, double cy);
- double getAngle() const;
- void resetNorth();
- void startRotating();
- void stopRotating();
- bool canRotate();
-
- // Debug
- void setDebug(bool value);
- void toggleDebug();
- bool getDebug() const;
-
-public:
- inline const TransformState &getState() const { return state; }
- inline std::shared_ptr<const Style> getStyle() const { return style; }
- inline std::shared_ptr<GlyphAtlas> getGlyphAtlas() { return glyphAtlas; }
- inline std::shared_ptr<GlyphStore> getGlyphStore() { return glyphStore; }
- inline std::shared_ptr<SpriteAtlas> getSpriteAtlas() { return spriteAtlas; }
- inline std::shared_ptr<Texturepool> getTexturepool() { return texturepool; }
- inline std::shared_ptr<uv::loop> getLoop() { return loop; }
- inline timestamp getAnimationTime() const { return animationTime; }
- inline timestamp getTime() const { return animationTime; }
-
-private:
- // uv async callbacks
- static void render(uv_async_t *async);
- static void terminate(uv_async_t *async);
- static void cleanup(uv_async_t *async);
- static void delete_async(uv_handle_t *handle);
-
- // Setup
- void setup();
-
- void updateSources();
- void updateSources(const std::shared_ptr<StyleLayerGroup> &group);
-
- void updateTiles();
- void updateRenderState();
-
- size_t countLayers(const std::vector<LayerDescription>& layers);
-
- // Prepares a map render by updating the tiles we need for the current view, as well as updating
- // the stylesheet.
- void prepare();
-
- enum RenderPass { Opaque, Translucent };
-
- // Unconditionally performs a render with the current map state.
- void render();
- void renderLayers(std::shared_ptr<StyleLayerGroup> group);
- void renderLayer(std::shared_ptr<StyleLayer> layer_desc, RenderPass pass);
-
-private:
- // If cleared, the next time the render thread attempts to render the map, it will *actually*
- // render the map.
- std::atomic_flag is_clean = ATOMIC_FLAG_INIT;
-
- // If this flag is cleared, the current back buffer is ready for being swapped with the front
- // buffer (i.e. it has rendered data).
- std::atomic_flag is_swapped = ATOMIC_FLAG_INIT;
-
- // This is cleared once the current front buffer has been presented and the back buffer is
- // ready for rendering.
- std::atomic_flag is_rendered = ATOMIC_FLAG_INIT;
-
-public:
- View &view;
-
-private:
- Transform transform;
- TransformState state;
-
- std::shared_ptr<Style> style;
- std::shared_ptr<GlyphAtlas> glyphAtlas;
- std::shared_ptr<GlyphStore> glyphStore;
- std::shared_ptr<SpriteAtlas> spriteAtlas;
- std::shared_ptr<Texturepool> texturepool;
-
- Painter painter;
-
- std::string styleJSON = "";
- std::string accessToken = "";
-
- bool debug = false;
- timestamp animationTime = 0;
-
- int indent = 0;
-
- std::set<std::shared_ptr<StyleSource>> activeSources;
-
-private:
- bool async = false;
- std::shared_ptr<uv::loop> loop;
- uv_thread_t thread;
- uv_async_t *async_terminate = nullptr;
- uv_async_t *async_render = nullptr;
- uv_async_t *async_cleanup = nullptr;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/raster_tile_data.hpp b/include/llmr/map/raster_tile_data.hpp
deleted file mode 100644
index f84b540d48..0000000000
--- a/include/llmr/map/raster_tile_data.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef LLMR_MAP_RASTER_TILE_DATA
-#define LLMR_MAP_RASTER_TILE_DATA
-
-#include <llmr/map/tile_data.hpp>
-
-#include <llmr/renderer/raster_bucket.hpp>
-
-
-namespace llmr {
-
-class RasterTileData : public TileData {
- friend class TileParser;
-
-public:
- RasterTileData(Tile::ID id, Map &map, const std::string url);
- ~RasterTileData();
-
- virtual void parse();
- virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc);
- virtual bool hasData(std::shared_ptr<StyleLayer> layer_desc) const;
-
-protected:
- RasterBucket bucket;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/source.hpp b/include/llmr/map/source.hpp
deleted file mode 100644
index b8ffc27f52..0000000000
--- a/include/llmr/map/source.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef LLMR_MAP_SOURCE
-#define LLMR_MAP_SOURCE
-
-#include <llmr/map/tile.hpp>
-#include <llmr/map/tile_data.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/util/time.hpp>
-#include <llmr/style/style_source.hpp>
-#include <llmr/style/types.hpp>
-
-#include <list>
-#include <forward_list>
-#include <memory>
-#include <vector>
-#include <string>
-#include <map>
-#include <set>
-
-namespace llmr {
-
-class TransformState;
-class Texturepool;
-
-class Source : public std::enable_shared_from_this<Source>, private util::noncopyable {
-public:
- Source(StyleSource style_source, const std::string &access_token = "");
- Source(SourceType type = SourceType::Vector, const std::string &url = "",
- uint32_t tile_size = 512, uint32_t min_zoom = 0, uint32_t max_zoom = 22,
- const std::string &access_token = "");
-
- bool update(Map &map);
- void updateMatrices(const mat4 &projMatrix, const TransformState &transform);
- void drawClippingMasks(Painter &painter);
- size_t getTileCount() const;
- void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc);
- void finishRender(Painter &painter);
-
- std::forward_list<Tile::ID> getIDs() const;
- void updateClipIDs(const std::map<Tile::ID, ClipID> &mapping);
-
- static std::string normalizeSourceURL(const std::string &url, const std::string &access_token);
-
-public:
- const SourceType type;
- const std::string url;
- const uint32_t tile_size;
- const int32_t min_zoom;
- const int32_t max_zoom;
-
-private:
- bool findLoadedChildren(const Tile::ID& id, int32_t maxCoveringZoom, std::forward_list<Tile::ID>& retain);
- bool findLoadedParent(const Tile::ID& id, int32_t minCoveringZoom, std::forward_list<Tile::ID>& retain);
- std::forward_list<Tile::ID> covering_tiles(const TransformState &state, int32_t clamped_zoom, const box& points);
-
- bool updateTiles(Map &map);
-
- TileData::State addTile(Map &map, const Tile::ID& id);
- TileData::State hasTile(const Tile::ID& id);
-
- double getZoom(const TransformState &state) const;
-
-private:
- // Stores the time when this source was most recently updated.
- timestamp updated = 0;
-
- std::map<Tile::ID, std::unique_ptr<Tile>> tiles;
- std::map<Tile::ID, std::weak_ptr<TileData>> tile_data;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/sprite.hpp b/include/llmr/map/sprite.hpp
deleted file mode 100644
index 079f0decc0..0000000000
--- a/include/llmr/map/sprite.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef LLMR_STYLE_SPRITE
-#define LLMR_STYLE_SPRITE
-
-#include <llmr/util/raster.hpp>
-#include <llmr/util/vec.hpp>
-
-#include <string>
-#include <mutex>
-#include <memory>
-#include <atomic>
-#include <unordered_map>
-
-namespace llmr {
-
-class Map;
-
-class SpritePosition {
-public:
- explicit SpritePosition() {}
- explicit SpritePosition(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t pixelRatio = 1);
-
- operator bool() const {
- return !(width == 0 && height == 0 && x == 0 && y == 0);
- }
-
- uint16_t x = 0, y = 0;
- uint16_t width = 0, height = 0;
- uint8_t pixelRatio = 1;
-};
-
-class Sprite : public std::enable_shared_from_this<Sprite> {
-public:
- Sprite(Map &map, float pixelRatio = 1);
-
- void load(const std::string& base_url);
-
- const SpritePosition &getSpritePosition(const std::string& name) const;
-
- bool isLoaded() const;
-
-public:
- const float pixelRatio;
- std::unique_ptr<util::Image> raster;
-
-private:
- void asyncParseJSON();
- void asyncParseImage();
-
- static void parseJSON(std::shared_ptr<Sprite> &sprite);
- static void parseImage(std::shared_ptr<Sprite> &sprite);
- static void complete(std::shared_ptr<Sprite> &sprite);
-
-private:
- Map &map;
- std::string url;
- std::string body;
- std::string image;
- std::atomic<bool> loaded;
- std::unordered_map<std::string, SpritePosition> pos;
- const SpritePosition empty;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/tile.hpp b/include/llmr/map/tile.hpp
deleted file mode 100644
index 9681c36374..0000000000
--- a/include/llmr/map/tile.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef LLMR_MAP_TILE
-#define LLMR_MAP_TILE
-
-#include <llmr/util/vec.hpp>
-#include <llmr/util/mat4.hpp>
-#include <llmr/util/noncopyable.hpp>
-
-#include <cstdint>
-#include <forward_list>
-#include <string>
-#include <bitset>
-#include <memory>
-
-namespace llmr {
-
-class TileData;
-
-struct ClipID {
- explicit ClipID() {}
- explicit ClipID(const std::bitset<8> &mask, uint8_t length) : mask(mask), length(length) {}
- explicit ClipID(const std::string &mask, uint8_t length) : mask(mask), length(length) {}
- std::bitset<8> mask;
- uint8_t length = 0;
-};
-
-class Tile : private util::noncopyable {
-public:
- struct ID {
- const int16_t w = 0;
- const int8_t z = 0;
- const int32_t x = 0, y = 0;
-
- inline explicit ID(int8_t z, int32_t x, int32_t y)
- : w((x < 0 ? x - (1 << z) + 1 : x) / (1 << z)), z(z), x(x), y(y) {}
-
- inline uint64_t to_uint64() const {
- return ((std::pow(2, z) * y + x) * 32) + z;
- }
-
- inline operator std::string() const {
- return std::to_string(z) + "/" + std::to_string(x) + "/" + std::to_string(y);
- }
-
- inline bool operator==(const ID& rhs) const {
- return w == rhs.w && z == rhs.z && x == rhs.x && y == rhs.y;
- }
-
- inline bool operator<(const ID &rhs) const {
- if (w != rhs.w) return w < rhs.w;
- if (z != rhs.z) return z < rhs.z;
- if (x != rhs.x) return x < rhs.x;
- return y < rhs.y;
- }
-
- ID parent(int8_t z) const;
- ID normalized() const;
- std::forward_list<ID> children(int32_t z) const;
- bool isChildOf(const Tile::ID &id) const;
- };
-
-public:
- explicit Tile(const ID& id);
-
-public:
- const Tile::ID id;
- ClipID clip;
- mat4 matrix;
- std::shared_ptr<TileData> data;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/tile_data.hpp b/include/llmr/map/tile_data.hpp
deleted file mode 100644
index 09f36d59b0..0000000000
--- a/include/llmr/map/tile_data.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef LLMR_MAP_TILE_DATA
-#define LLMR_MAP_TILE_DATA
-
-#include <llmr/map/tile.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/platform/platform.hpp>
-#include <llmr/geometry/vao.hpp>
-#include <llmr/renderer/debug_bucket.hpp>
-
-#include <cstdint>
-#include <string>
-#include <memory>
-#include <atomic>
-
-namespace llmr {
-
-class Map;
-class Painter;
-class StyleLayer;
-
-class TileData : public std::enable_shared_from_this<TileData>,
- private util::noncopyable {
-public:
- struct exception : std::exception {};
- struct geometry_too_long_exception : exception {};
-
-public:
- typedef std::shared_ptr<TileData> Ptr;
-
- enum class State {
- invalid,
- initial,
- loading,
- loaded,
- parsed,
- obsolete
- };
-
-public:
- TileData(Tile::ID id, Map &map, const std::string url);
- ~TileData();
-
- void request();
- void cancel();
- void reparse();
- const std::string toString() const;
-
- // Override this in the child class.
- virtual void beforeParse();
- virtual void parse() = 0;
- virtual void afterParse();
- virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc) = 0;
- virtual bool hasData(std::shared_ptr<StyleLayer> layer_desc) const = 0;
-
-
-public:
- const Tile::ID id;
- std::atomic<State> state;
-
-protected:
- Map &map;
-
- // Request-related information.
- const std::string url;
- std::weak_ptr<platform::Request> req;
- std::string data;
-
- // Contains the tile ID string for painting debug information.
- DebugFontBuffer debugFontBuffer;
-
-public:
- DebugBucket debugBucket;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/tile_parser.hpp b/include/llmr/map/tile_parser.hpp
deleted file mode 100644
index e18c2746af..0000000000
--- a/include/llmr/map/tile_parser.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef LLMR_MAP_TILE_PARSER
-#define LLMR_MAP_TILE_PARSER
-
-#include <llmr/map/vector_tile.hpp>
-#include <llmr/text/placement.hpp>
-#include <llmr/text/glyph_store.hpp>
-#include <llmr/text/glyph.hpp>
-#include <llmr/util/utf.hpp>
-#include <llmr/style/filter_expression.hpp>
-
-namespace llmr {
-
-class Style;
-class GlyphAtlas;
-class GlyphStore;
-class SpriteAtlas;
-class VectorTileData;
-class StyleLayer;
-class StyleLayerGroup;
-class StyleBucket;
-class StyleBucketFill;
-class StyleBucketLine;
-class StyleBucketIcon;
-
-class Bucket;
-
-class TileParser {
-public:
- TileParser(const std::string &data, VectorTileData &tile,
- const std::shared_ptr<const Style> &style,
- const std::shared_ptr<GlyphAtlas> &glyphAtlas,
- const std::shared_ptr<GlyphStore> &glyphStore,
- const std::shared_ptr<SpriteAtlas> &spriteAtlas);
-
-public:
- void parse();
-
-private:
- bool obsolete() const;
- void parseGlyphs();
- void parseStyleLayers(std::shared_ptr<StyleLayerGroup> group);
- void addGlyph(uint64_t tileid, const std::string stackname, const std::u32string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face);
- std::unique_ptr<Bucket> createBucket(std::shared_ptr<StyleBucket> bucket_desc);
-
- std::unique_ptr<Bucket> createFillBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketFill &fill);
- std::unique_ptr<Bucket> createLineBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketLine &line);
- std::unique_ptr<Bucket> createIconBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketIcon &icon);
- std::unique_ptr<Bucket> createTextBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketText &text);
-
- template <class Bucket> void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter);
- template <class Bucket, typename ...Args> void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter, Args&& ...args);
-
-private:
- const VectorTile vector_data;
- VectorTileData& tile;
-
- // Cross-thread shared data.
- std::shared_ptr<const Style> style;
- std::shared_ptr<GlyphAtlas> glyphAtlas;
- std::shared_ptr<GlyphStore> glyphStore;
- std::shared_ptr<SpriteAtlas> spriteAtlas;
-
- Placement placement;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/transform.hpp b/include/llmr/map/transform.hpp
deleted file mode 100644
index 16e5b21e87..0000000000
--- a/include/llmr/map/transform.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-#ifndef LLMR_MAP_TRANSFORM
-#define LLMR_MAP_TRANSFORM
-
-#include <llmr/util/transition.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/util/uv.hpp>
-
-#include "view.hpp"
-#include "transform_state.hpp"
-
-#include <forward_list>
-
-namespace llmr {
-
-struct box;
-
- class Transform : private util::noncopyable {
-public:
- Transform(View &view);
-
- // Map view
- // Note: width * ratio does not necessarily equal fb_width
- bool resize(uint16_t width, uint16_t height, float ratio,
- uint16_t fb_width, uint16_t fb_height);
-
- // Position
- void moveBy(double dx, double dy, timestamp duration = 0);
- void setLonLat(double lon, double lat, timestamp duration = 0);
- void setLonLatZoom(double lon, double lat, double zoom, timestamp duration = 0);
- void getLonLat(double& lon, double& lat) const;
- void getLonLatZoom(double& lon, double& lat, double& zoom) const;
- void startPanning();
- void stopPanning();
-
- // Zoom
- void scaleBy(double ds, double cx = -1, double cy = -1, timestamp duration = 0);
- void setScale(double scale, double cx = -1, double cy = -1, timestamp duration = 0);
- void setZoom(double zoom, timestamp duration = 0);
- double getZoom() const;
- double getScale() const;
- void startScaling();
- void stopScaling();
- double getMinZoom() const;
- double getMaxZoom() const;
-
- // Angle
- void rotateBy(double sx, double sy, double ex, double ey, timestamp duration = 0);
- void setAngle(double angle, timestamp duration = 0);
- void setAngle(double angle, double cx, double cy);
- double getAngle() const;
- void startRotating();
- void stopRotating();
- bool canRotate();
-
- // Transitions
- bool needsTransition() const;
- void updateTransitions(timestamp now);
- void cancelTransitions();
-
- // Transform state
- const TransformState currentState() const;
- const TransformState finalState() const;
-
-private:
- // Functions prefixed with underscores will *not* perform any locks. It is the caller's
- // responsibility to lock this object.
- void _moveBy(double dx, double dy, timestamp duration = 0);
- void _setScale(double scale, double cx, double cy, timestamp duration = 0);
- void _setScaleXY(double new_scale, double xn, double yn, timestamp duration = 0);
- void _setAngle(double angle, timestamp duration = 0);
- void _clearPanning();
- void _clearRotating();
- void _clearScaling();
-
- void constrain(double& scale, double& y) const;
-
-private:
- View &view;
-
- mutable uv::rwlock mtx;
-
- // This reflects the current state of the transform, representing the actual position of the
- // map. After calling a transform function with a timer, this will likely remain the same until
- // you render a new frame.
- TransformState current;
-
- // This reflects the final position of the transform, after all possible transition took place.
- TransformState final;
-
- // Limit the amount of zooming possible on the map.
- // TODO: make these modifiable from outside.
- const double min_scale = std::pow(2, 0);
- const double max_scale = std::pow(2, 18);
-
- // cache values for spherical mercator math
- double zc, Bc, Cc;
-
- std::forward_list<std::shared_ptr<util::transition>> transitions;
- std::shared_ptr<util::transition> scale_timeout;
- std::shared_ptr<util::transition> rotate_timeout;
- std::shared_ptr<util::transition> pan_timeout;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/transform_state.hpp b/include/llmr/map/transform_state.hpp
deleted file mode 100644
index 29d0f59c46..0000000000
--- a/include/llmr/map/transform_state.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef LLMR_MAP_TRANSFORM_STATE
-#define LLMR_MAP_TRANSFORM_STATE
-
-#include <llmr/util/mat4.hpp>
-#include <llmr/map/tile.hpp>
-
-#include <cstdint>
-
-namespace llmr {
-
-class Transform;
-
-class TransformState {
- friend class Transform;
-
-public:
- // Matrix
- void matrixFor(mat4& matrix, const Tile::ID& id) const;
- box cornersToBox(uint32_t z) const;
-
- // Dimensions
- bool hasSize() const;
- uint16_t getWidth() const;
- uint16_t getHeight() const;
- uint16_t getFramebufferWidth() const;
- uint16_t getFramebufferHeight() const;
- const std::array<uint16_t, 2> getFramebufferDimensions() const;
- float getPixelRatio() const;
-
- // Zoom
- float getNormalizedZoom() const;
- int32_t getIntegerZoom() const;
- double getZoom() const;
- double getScale() const;
-
- // Rotation
- float getAngle() const;
-
- // Changing
- bool isChanging() const;
-
-private:
- double pixel_x() const;
- double pixel_y() const;
-
-private:
- // logical dimensions
- uint16_t width = 0, height = 0;
-
- // physical (framebuffer) dimensions
- std::array<uint16_t, 2> framebuffer = {{ 0, 0 }};
-
- // map scale factor
- float pixelRatio = 0;
-
- // animation state
- bool rotating = false;
- bool scaling = false;
- bool panning = false;
-
- // map position
- double x = 0, y = 0;
- double angle = 0;
- double scale = std::numeric_limits<double>::infinity();
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/vector_tile.hpp b/include/llmr/map/vector_tile.hpp
deleted file mode 100644
index 4a77f83172..0000000000
--- a/include/llmr/map/vector_tile.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#ifndef LLMR_MAP_VECTOR_TILE
-#define LLMR_MAP_VECTOR_TILE
-
-#include <llmr/util/pbf.hpp>
-#include <llmr/util/vec.hpp>
-#include <llmr/style/value.hpp>
-#include <llmr/text/glyph.hpp>
-#include <llmr/style/filter_expression.hpp>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <set>
-#include <limits>
-
-namespace llmr {
-
-class BucketDescription;
-class VectorTileLayer;
-
-struct pbf;
-
-enum class FeatureType {
- Unknown = 0,
- Point = 1,
- LineString = 2,
- Polygon = 3
-};
-
-std::ostream& operator<<(std::ostream&, const FeatureType& type);
-
-class VectorTileFeature {
-public:
- VectorTileFeature(pbf feature, const VectorTileLayer& layer);
-
- uint64_t id = 0;
- FeatureType type = FeatureType::Unknown;
- std::map<std::string, Value> properties;
- pbf geometry;
-};
-
-std::ostream& operator<<(std::ostream&, const VectorTileFeature& feature);
-
-
-class VectorTileTagExtractor {
-public:
- VectorTileTagExtractor(const VectorTileLayer &layer);
-
- void setTags(const pbf &pbf);
- std::vector<Value> getValues(const std::string &key) const;
- void setType(FilterExpression::GeometryType type);
- FilterExpression::GeometryType getType() const;
-
-private:
- const VectorTileLayer &layer_;
- pbf tags_;
- FilterExpression::GeometryType type_ = FilterExpression::GeometryType::Any;
-};
-
-/*
- * Allows iterating over the features of a VectorTileLayer using a
- * BucketDescription as filter. Only features matching the descriptions will
- * be returned (as pbf).
- */
-class FilteredVectorTileLayer {
-public:
- class iterator {
- public:
- iterator(const FilteredVectorTileLayer& filter, const pbf& data);
- void operator++();
- bool operator!=(const iterator& other) const;
- const pbf& operator*() const;
-
- private:
- const FilteredVectorTileLayer& parent;
- bool valid = false;
- pbf feature;
- pbf data;
- };
-
-public:
- FilteredVectorTileLayer(const VectorTileLayer& layer, const FilterExpression &filterExpression);
-
- iterator begin() const;
- iterator end() const;
-
-private:
- const VectorTileLayer& layer;
- const FilterExpression& filterExpression;
-};
-
-std::ostream& operator<<(std::ostream&, const GlyphPlacement& placement);
-
-class VectorTileLayer {
-public:
- VectorTileLayer(pbf data);
-
- const pbf data;
- std::string name;
- uint32_t extent = 4096;
- std::vector<std::string> keys;
- std::unordered_map<std::string, uint32_t> key_index;
- std::vector<Value> values;
- std::map<std::string, std::map<Value, Shaping>> shaping;
-};
-
-class VectorTile {
-public:
- VectorTile();
- VectorTile(pbf data);
- VectorTile& operator=(VectorTile&& other);
-
- std::map<std::string, const VectorTileLayer> layers;
-};
-
-
-
-}
-
-#endif
diff --git a/include/llmr/map/vector_tile_data.hpp b/include/llmr/map/vector_tile_data.hpp
deleted file mode 100644
index d6f5391c22..0000000000
--- a/include/llmr/map/vector_tile_data.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef LLMR_MAP_VECTOR_TILE_DATA
-#define LLMR_MAP_VECTOR_TILE_DATA
-
-#include <llmr/map/tile_data.hpp>
-
-
-#include <llmr/renderer/bucket.hpp>
-
-#include <llmr/geometry/vertex_buffer.hpp>
-#include <llmr/geometry/elements_buffer.hpp>
-#include <llmr/geometry/fill_buffer.hpp>
-#include <llmr/geometry/line_buffer.hpp>
-#include <llmr/geometry/icon_buffer.hpp>
-#include <llmr/geometry/text_buffer.hpp>
-#include <llmr/map/tile_parser.hpp>
-
-#include <unordered_map>
-
-namespace llmr {
-
-
-class VectorTileData : public TileData {
- friend class TileParser;
-
-public:
- VectorTileData(Tile::ID id, Map &map, const std::string url);
- ~VectorTileData();
-
- virtual void beforeParse();
- virtual void parse();
- virtual void afterParse();
- virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc);
- virtual bool hasData(std::shared_ptr<StyleLayer> layer_desc) const;
-
-protected:
- // Holds the actual geometries in this tile.
- FillVertexBuffer fillVertexBuffer;
- LineVertexBuffer lineVertexBuffer;
- IconVertexBuffer iconVertexBuffer;
- TextVertexBuffer textVertexBuffer;
-
- TriangleElementsBuffer triangleElementsBuffer;
- LineElementsBuffer lineElementsBuffer;
- PointElementsBuffer pointElementsBuffer;
-
- // Holds the buckets of this tile.
- // They contain the location offsets in the buffers stored above
- std::unordered_map<std::string, std::unique_ptr<Bucket>> buckets;
-
- std::unique_ptr<TileParser> parser;
-};
-
-}
-
-#endif
diff --git a/include/llmr/map/view.hpp b/include/llmr/map/view.hpp
deleted file mode 100644
index d1fa58aa71..0000000000
--- a/include/llmr/map/view.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef LLMR_MAP_VIEW
-#define LLMR_MAP_VIEW
-
-#include <llmr/util/time.hpp>
-
-namespace llmr {
-
-class Map;
-
-enum MapChange : uint8_t {
- MapChangeRegionWillChange = 0,
- MapChangeRegionWillChangeAnimated = 1,
- MapChangeRegionDidChange = 2,
- MapChangeRegionDidChangeAnimated = 3,
- MapChangeWillStartLoadingMap = 4,
- MapChangeDidFinishLoadingMap = 5,
- MapChangeDidFailLoadingMap = 6,
- MapChangeWillStartRenderingMap = 7,
- MapChangeDidFinishRenderingMap = 8,
- MapChangeDidFinishRenderingMapFullyRendered = 9
-};
-
-class View {
-public:
- virtual void initialize(Map *map) {
- this->map = map;
- }
-
- // Called from the render (=GL) thread. Signals that the context should
- // swap the front and the back buffer.
- virtual void swap() = 0;
-
- // Called from the render thread. Makes the GL context active in the current
- // thread. This is typically just called once at the beginning of the
- // renderer setup since the render thread doesn't switch the contexts.
- virtual void make_active() = 0;
-
- // Returns the base framebuffer object, if any, and 0 if using the system
- // provided framebuffer.
- virtual unsigned int root_fbo() {
- return 0;
- }
-
- // Notifies a watcher of map x/y/scale/rotation changes.
- // Must only be called from the same thread that caused the change.
- // Must not be called from the render thread.
- virtual void notify_map_change(MapChange change, timestamp delay = 0) = 0;
-
-protected:
- llmr::Map *map = nullptr;
-};
-}
-
-#endif
diff --git a/include/llmr/platform/event.hpp b/include/llmr/platform/event.hpp
deleted file mode 100644
index 81b3e1d029..0000000000
--- a/include/llmr/platform/event.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef LLMR_PLATFORM_EVENT
-#define LLMR_PLATFORM_EVENT
-
-#include <llmr/util/enum.hpp>
-
-#include <cstdint>
-
-namespace llmr {
-
-enum class EventSeverity : uint8_t {
- Debug,
- Info,
- Test,
- Warning,
- Error,
-};
-
-LLMR_DEFINE_ENUM_CLASS(EventSeverityClass, EventSeverity, {
- { EventSeverity::Debug, "DEBUG" },
- { EventSeverity::Info, "INFO" },
- { EventSeverity::Test, "TEST" },
- { EventSeverity::Warning, "WARNING" },
- { EventSeverity::Error, "ERROR" },
- { EventSeverity(-1), "UNKNOWN" },
-});
-
-enum class Event : uint8_t {
- General,
- Setup,
- Shader,
- ParseStyle,
- ParseTile,
- Render,
- HttpRequest,
- Sprite,
-};
-
-LLMR_DEFINE_ENUM_CLASS(EventClass, Event, {
- { Event::General, "General" },
- { Event::Setup, "Setup" },
- { Event::Shader, "Shader" },
- { Event::ParseStyle, "ParseStyle" },
- { Event::ParseTile, "ParseTile" },
- { Event::Render, "Render" },
- { Event::HttpRequest, "HttpRequest" },
- { Event::Sprite, "Sprite" },
- { Event(-1), "Unknown" },
-});
-
-
-struct EventPermutation {
- const EventSeverity severity;
- const Event event;
-
- constexpr bool operator==(const EventPermutation &rhs) const {
- return severity == rhs.severity && event == rhs.event;
- }
-};
-
-constexpr EventSeverity disabledEventSeverities[] = {
-#if !DEBUG
- EventSeverity::Debug,
-#endif
-#if !TESTING
- EventSeverity::Test,
-#endif
-};
-
-
-constexpr Event disabledEvents[] = {
-};
-
-constexpr EventPermutation disabledEventPermutations[] = {
- { EventSeverity::Debug, Event::Shader }
-};
-
-}
-
-#endif
diff --git a/include/llmr/platform/gl.hpp b/include/llmr/platform/gl.hpp
deleted file mode 100644
index b1e2d5d5a4..0000000000
--- a/include/llmr/platform/gl.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef LLMR_RENDERER_GL
-#define LLMR_RENDERER_GL
-
-#include <string>
-
-#ifdef NVIDIA
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
-
- extern PFNGLDISCARDFRAMEBUFFEREXTPROC glDiscardFramebufferEXT;
-
- #define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
-#elif __APPLE__
- #include "TargetConditionals.h"
- #if TARGET_OS_IPHONE
- #include <OpenGLES/ES2/gl.h>
- #include <OpenGLES/ES2/glext.h>
- #define glGenVertexArrays glGenVertexArraysOES
- #define glBindVertexArray glBindVertexArrayOES
- #define glDeleteVertexArrays glDeleteVertexArraysOES
- #define GL_ARB_vertex_array_object 1
- #define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
- #elif TARGET_IPHONE_SIMULATOR
- #include <OpenGLES/ES2/gl.h>
- #include <OpenGLES/ES2/glext.h>
- #elif TARGET_OS_MAC
- #include <OpenGL/OpenGL.h>
- #include <OpenGL/gl.h>
- #define glGenVertexArrays glGenVertexArraysAPPLE
- #define glBindVertexArray glBindVertexArrayAPPLE
- #define glDeleteVertexArrays glDeleteVertexArraysAPPLE
- #else
- #error Unsupported Apple platform
- #endif
-#else
- #define GL_GLEXT_PROTOTYPES
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include <GL/glext.h>
-#endif
-
-namespace llmr {
-namespace gl {
-// Debug group markers, useful for debuggin on iOS
-#if defined(__APPLE__) && defined(DEBUG) && defined(GL_EXT_debug_marker)
-// static int indent = 0;
-inline void start_group(const std::string &str) {
- glPushGroupMarkerEXT(0, str.c_str());
- // fprintf(stderr, "%s%s\n", std::string(indent * 4, ' ').c_str(), str.c_str());
- // indent++;
-}
-
-inline void end_group() {
- glPopGroupMarkerEXT();
- // indent--;
-}
-#else
-inline void start_group(const std::string &) {}
-inline void end_group() {}
-#endif
-
-
-struct group {
- inline group(const std::string &str) { start_group(str); }
- ~group() { end_group(); };
-};
-}
-}
-
-#ifdef GL_ES_VERSION_2_0
- #define glClearDepth glClearDepthf
- #define glDepthRange glDepthRangef
-#endif
-
-void _CHECK_GL_ERROR(const char *cmd, const char *file, int line);
-
-#define _CHECK_ERROR(cmd, file, line) \
- cmd; \
- do { _CHECK_GL_ERROR(#cmd, file, line); } while (false);
-
-#define CHECK_ERROR(cmd) _CHECK_ERROR(cmd, __FILE__, __LINE__)
-
-#endif
diff --git a/include/llmr/platform/log.hpp b/include/llmr/platform/log.hpp
deleted file mode 100644
index 7b39370046..0000000000
--- a/include/llmr/platform/log.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef LLMR_PLATFORM_LOG
-#define LLMR_PLATFORM_LOG
-
-#include "event.hpp"
-
-#include <memory>
-#include <string>
-
-namespace llmr {
-
-class LogBackend {
-public:
- virtual inline ~LogBackend() = default;
- virtual void record(EventSeverity severity, Event event, const std::string &msg) = 0;
- virtual void record(EventSeverity severity, Event event, const char* format, ...) = 0;
- virtual void record(EventSeverity severity, Event event, int64_t code) = 0;
- virtual void record(EventSeverity severity, Event event, int64_t code, const std::string &msg) = 0;
-};
-
-class Log {
-private:
- template <typename T>
- constexpr static bool includes(const T e, T const *l, const size_t i = 0) {
- return i >= sizeof l ? false : *(l + i) == e ? true : includes(e, l, i + 1);
- }
-
-public:
- template <typename ...Args>
- static inline void Debug(Event event, Args&& ...args) {
- Record(EventSeverity::Debug, event, ::std::forward<Args>(args)...);
- }
-
- template <typename ...Args>
- static inline void Info(Event event, Args&& ...args) {
- Record(EventSeverity::Info, event, ::std::forward<Args>(args)...);
- }
-
- template <typename ...Args>
- static inline void Warning(Event event, Args&& ...args) {
- Record(EventSeverity::Warning, event, ::std::forward<Args>(args)...);
- }
-
- template <typename ...Args>
- static inline void Error(Event event, Args&& ...args) {
- Record(EventSeverity::Error, event, ::std::forward<Args>(args)...);
- }
-
- template <typename ...Args>
- static inline void Record(EventSeverity severity, Event event, Args&& ...args) {
- if (!includes(severity, disabledEventSeverities) &&
- !includes(event, disabledEvents) &&
- !includes({ severity, event }, disabledEventPermutations)) {
- if (Backend) {
- Backend->record(severity, event, ::std::forward<Args>(args)...);
- }
- }
- }
-
- template<typename T, typename ...Args>
- static inline const T &Set(Args&& ...args) {
- Backend = ::std::unique_ptr<T>(new T(::std::forward<Args>(args)...));
- return *dynamic_cast<T *>(Backend.get());
- }
-
-private:
- static std::unique_ptr<LogBackend> Backend;
-};
-
-}
-
-#endif
diff --git a/include/llmr/platform/platform.hpp b/include/llmr/platform/platform.hpp
deleted file mode 100644
index 30c6e048bc..0000000000
--- a/include/llmr/platform/platform.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef LLMR_PLATFORM_PLATFORM
-#define LLMR_PLATFORM_PLATFORM
-
-#include <memory>
-#include <functional>
-#include <string>
-
-typedef struct uv_loop_s uv_loop_t;
-
-namespace uv {
-class loop;
-}
-
-namespace llmr {
-namespace platform {
-
-class Request;
-
-struct Response {
- Response(std::function<void(Response *)> callback) : callback(callback) {}
- int16_t code = -1;
- std::string body;
- std::string error_message;
- std::function<void(Response *)> callback;
-};
-
-// Makes an HTTP request of a URL, preferrably on a background thread, and calls a function with the
-// results in the original thread (which runs the libuv loop).
-// If the loop pointer is NULL, the callback function will be called on an arbitrary thread.
-// Returns a cancellable request.
-std::shared_ptr<Request> request_http(const std::string &url,
- std::function<void(Response *)> callback,
- std::shared_ptr<uv::loop> loop = nullptr);
-
-// Cancels an HTTP request.
-void cancel_request_http(const std::shared_ptr<Request> &req);
-
-// Shows an alpha image with the specified dimensions in a named window.
-void show_debug_image(std::string name, const char *data, size_t width, size_t height);
-
-// Shows an alpha image with the specified dimensions in a named window.
-void show_color_debug_image(std::string name, const char *data, size_t logical_width, size_t logical_height, size_t width, size_t height);
-}
-}
-
-#endif
diff --git a/include/llmr/platform/request.hpp b/include/llmr/platform/request.hpp
deleted file mode 100644
index 5ba00830b8..0000000000
--- a/include/llmr/platform/request.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef LLMR_PLATFORM_REQUEST
-#define LLMR_PLATFORM_REQUEST
-
-#include <string>
-#include <functional>
-#include <memory>
-#include <atomic>
-
-#include <llmr/util/noncopyable.hpp>
-
-// Forward definition.
-typedef struct uv_loop_s uv_loop_t;
-typedef struct uv_async_s uv_async_t;
-
-namespace uv {
-class loop;
-}
-
-namespace llmr {
-namespace platform {
-
-struct Response;
-
-class Request : public std::enable_shared_from_this<Request>, private util::noncopyable {
-public:
- Request(const std::string &url,
- std::function<void(Response *)> callback,
- std::shared_ptr<uv::loop> loop);
- ~Request();
-
- void complete();
-
-private:
- static void complete(uv_async_t *async);
-
-public:
- const std::string url;
- std::unique_ptr<Response> res;
- std::atomic<bool> cancelled;
-
-public:
- uv_async_t *async = nullptr;
- std::shared_ptr<uv::loop> loop;
-};
-}
-}
-
-#endif
diff --git a/include/llmr/renderer/bucket.hpp b/include/llmr/renderer/bucket.hpp
deleted file mode 100644
index c135b8ee16..0000000000
--- a/include/llmr/renderer/bucket.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef LLMR_RENDERER_BUCKET
-#define LLMR_RENDERER_BUCKET
-
-#include <string>
-#include <memory>
-#include <llmr/map/tile.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/renderer/prerendered_texture.hpp>
-
-namespace llmr {
-
-class Painter;
-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 bool hasData() const = 0;
- virtual ~Bucket() {}
-
- std::unique_ptr<PrerenderedTexture> prerendered;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/debug_bucket.hpp b/include/llmr/renderer/debug_bucket.hpp
deleted file mode 100644
index d72a645eee..0000000000
--- a/include/llmr/renderer/debug_bucket.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef LLMR_RENDERER_DEBUGBUCKET
-#define LLMR_RENDERER_DEBUGBUCKET
-
-#include <llmr/renderer/bucket.hpp>
-#include <llmr/geometry/debug_font_buffer.hpp>
-#include <llmr/geometry/vao.hpp>
-
-#include <vector>
-#include <memory>
-
-#ifndef BUFFER_OFFSET
-#define BUFFER_OFFSET(i) ((char *)nullptr + (i))
-#endif
-
-namespace llmr {
-
-class PlainShader;
-
-class DebugBucket : public Bucket {
-public:
- DebugBucket(DebugFontBuffer& fontBuffer);
-
- virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- virtual bool hasData() const;
-
- void drawLines(PlainShader& shader);
- void drawPoints(PlainShader& shader);
-
-private:
- DebugFontBuffer& fontBuffer;
- VertexArrayObject array;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/fill_bucket.hpp b/include/llmr/renderer/fill_bucket.hpp
deleted file mode 100644
index db0e9c1042..0000000000
--- a/include/llmr/renderer/fill_bucket.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef LLMR_RENDERER_FILLBUCKET
-#define LLMR_RENDERER_FILLBUCKET
-
-#include <llmr/renderer/bucket.hpp>
-#include <llmr/geometry/elements_buffer.hpp>
-#include <llmr/geometry/fill_buffer.hpp>
-#include <llmr/style/style_bucket.hpp>
-
-#include <clipper/clipper.hpp>
-#include <libtess2/tesselator.h>
-
-#include <vector>
-#include <memory>
-
-#ifndef BUFFER_OFFSET
-#define BUFFER_OFFSET(i) ((char *)nullptr + (i))
-#endif
-
-namespace llmr {
-
-class Style;
-class FillVertexBuffer;
-class TriangleElementsBuffer;
-class LineElementsBuffer;
-class BucketDescription;
-class OutlineShader;
-class PlainShader;
-class PatternShader;
-struct pbf;
-
-class FillBucket : public Bucket {
-
- static void *alloc(void *data, unsigned int size);
- static void *realloc(void *data, void *ptr, unsigned int size);
- static void free(void *userData, void *ptr);
-
-
- typedef ElementGroup triangle_group_type;
- typedef ElementGroup line_group_type;
-public:
- FillBucket(FillVertexBuffer& vertexBuffer,
- TriangleElementsBuffer& triangleElementsBuffer,
- LineElementsBuffer& lineElementsBuffer,
- const StyleBucketFill& properties);
- ~FillBucket();
-
- virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- virtual bool hasData() const;
-
- void addGeometry(pbf& data);
- void tessellate();
-
- void drawElements(PlainShader& shader);
- void drawElements(PatternShader& shader);
- void drawVertices(OutlineShader& shader);
-
-public:
- const StyleBucketFill &properties;
-
-private:
- TESSalloc *allocator;
- TESStesselator *tesselator;
- ClipperLib::Clipper clipper;
-
- FillVertexBuffer& vertexBuffer;
- TriangleElementsBuffer& triangleElementsBuffer;
- LineElementsBuffer& lineElementsBuffer;
-
- // hold information on where the vertices are located in the FillBuffer
- const size_t vertex_start;
- const size_t triangle_elements_start;
- const size_t line_elements_start;
- VertexArrayObject array;
-
- std::vector<triangle_group_type> triangleGroups;
- std::vector<line_group_type> lineGroups;
-
- std::vector<ClipperLib::IntPoint> line;
- bool hasVertices = false;
-
- static const int vertexSize = 2;
- static const int stride = sizeof(TESSreal) * vertexSize;
- static const int vertices_per_group = 3;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/frame_history.hpp b/include/llmr/renderer/frame_history.hpp
deleted file mode 100644
index 35ef3cdf47..0000000000
--- a/include/llmr/renderer/frame_history.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef LLMR_RENDERER_FRAME_HISTORY
-#define LLMR_RENDERER_FRAME_HISTORY
-
-#include <deque>
-#include <cassert>
-#include <cmath>
-
-#include <llmr/platform/platform.hpp>
-#include <llmr/util/time.hpp>
-
-namespace llmr {
-
-struct FrameSnapshot {
- explicit inline FrameSnapshot(timestamp t, float z) : t(t), z(z) {}
- float t;
- float z;
-};
-
-class FrameHistory {
-public:
- // Record frame history that will be used to calculate fading params
- void record(timestamp now, float zoom);
-
- bool needsAnimation(timestamp duration) const;
-
-public:
- std::deque<FrameSnapshot> history;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/icon_bucket.hpp b/include/llmr/renderer/icon_bucket.hpp
deleted file mode 100644
index d13f53586b..0000000000
--- a/include/llmr/renderer/icon_bucket.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef LLMR_RENDERER_ICONBUCKET
-#define LLMR_RENDERER_ICONBUCKET
-
-#include <llmr/renderer/bucket.hpp>
-#include <llmr/geometry/elements_buffer.hpp>
-#include <llmr/geometry/icon_buffer.hpp>
-#include <llmr/style/style_bucket.hpp>
-
-#include <vector>
-#include <memory>
-
-#ifndef BUFFER_OFFSET
-#define BUFFER_OFFSET(i) ((char *)nullptr + (i))
-#endif
-
-namespace llmr {
-
-class Style;
-class IconVertexBuffer;
-class BucketDescription;
-class IconShader;
-class DotShader;
-class SpriteAtlas;
-class VectorTileFeature;
-
-class IconBucket : public Bucket {
-public:
- IconBucket(IconVertexBuffer& vertexBuffer,
- const StyleBucketIcon& properties);
-
- virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- virtual bool hasData() const;
-
- void addFeature(const VectorTileFeature &feature, SpriteAtlas &sprite_atlas);
-
- void drawIcons(IconShader& shader);
- void drawIcons(DotShader& shader);
-
-public:
- const StyleBucketIcon &properties;
-
-private:
-
- IconVertexBuffer& vertexBuffer;
- VertexArrayObject array;
-
- const size_t vertex_start;
- size_t vertex_end = 0;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/line_bucket.hpp b/include/llmr/renderer/line_bucket.hpp
deleted file mode 100644
index 881bd23ebb..0000000000
--- a/include/llmr/renderer/line_bucket.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef LLMR_RENDERER_LINEBUCKET
-#define LLMR_RENDERER_LINEBUCKET
-
-#include "bucket.hpp"
-#include <llmr/geometry/vao.hpp>
-#include <llmr/geometry/elements_buffer.hpp>
-#include <llmr/geometry/line_buffer.hpp>
-#include <llmr/style/style_bucket.hpp>
-
-#include <memory>
-#include <vector>
-
-namespace llmr {
-
-class Style;
-class LineVertexBuffer;
-class TriangleElementsBuffer;
-class LineShader;
-class LinejoinShader;
-struct pbf;
-
-class LineBucket : public Bucket {
- typedef ElementGroup triangle_group_type;
- typedef ElementGroup point_group_type;
-public:
- LineBucket(LineVertexBuffer& vertexBuffer,
- TriangleElementsBuffer& triangleElementsBuffer,
- PointElementsBuffer& pointElementsBuffer,
- const StyleBucketLine& properties);
-
- virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- virtual bool hasData() const;
-
- void addGeometry(pbf& data);
- void addGeometry(const std::vector<Coordinate>& line);
-
- bool hasPoints() const;
-
- void drawLines(LineShader& shader);
- void drawPoints(LinejoinShader& shader);
-
-public:
- const StyleBucketLine &properties;
-
-private:
-
- LineVertexBuffer& vertexBuffer;
- TriangleElementsBuffer& triangleElementsBuffer;
- PointElementsBuffer& pointElementsBuffer;
-
- const size_t vertex_start;
- const size_t triangle_elements_start;
- const size_t point_elements_start;
-
- std::vector<triangle_group_type> triangleGroups;
- std::vector<point_group_type> pointGroups;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp
deleted file mode 100644
index ef160eddd2..0000000000
--- a/include/llmr/renderer/painter.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-#ifndef LLMR_RENDERER_PAINTER
-#define LLMR_RENDERER_PAINTER
-
-#include <llmr/map/tile_data.hpp>
-#include <llmr/geometry/vao.hpp>
-#include <llmr/geometry/vertex_buffer.hpp>
-#include <llmr/util/mat4.hpp>
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/renderer/frame_history.hpp>
-#include <llmr/style/types.hpp>
-
-#include <llmr/shader/plain_shader.hpp>
-#include <llmr/shader/outline_shader.hpp>
-#include <llmr/shader/pattern_shader.hpp>
-#include <llmr/shader/line_shader.hpp>
-#include <llmr/shader/linejoin_shader.hpp>
-#include <llmr/shader/icon_shader.hpp>
-#include <llmr/shader/raster_shader.hpp>
-#include <llmr/shader/text_shader.hpp>
-#include <llmr/shader/dot_shader.hpp>
-#include <llmr/shader/composite_shader.hpp>
-#include <llmr/shader/gaussian_shader.hpp>
-
-#include <llmr/map/transform_state.hpp>
-
-#include <map>
-#include <unordered_map>
-#include <set>
-
-namespace llmr {
-
-class Transform;
-class Style;
-class Tile;
-class GlyphAtlas;
-class Source;
-class StyleSource;
-
-class FillBucket;
-class LineBucket;
-class IconBucket;
-class TextBucket;
-class RasterBucket;
-
-struct FillProperties;
-struct CompositeProperties;
-
-class LayerDescription;
-class RasterTileData;
-
-class Painter : private util::noncopyable {
-public:
- Painter(Map &map);
- ~Painter();
-
-
- void setup();
-
- // Perform cleanup tasks that prepare shutting down the app. This doesn't mean that the
- // app will be shut down. That means all operations must be automatically be reversed (e.g. through
- // lazy initialization) in case rendering continues.
- void cleanup();
-
-
- void clear();
-
- // Updates the default matrices to the current viewport dimensions.
- void changeMatrix();
-
- // Renders a particular layer from a tile.
- void renderTileLayer(const Tile& tile, std::shared_ptr<StyleLayer> layer_desc);
-
- // Renders debug information for a tile.
- void renderTileDebug(const Tile& tile);
-
- // Renders the backdrop of the OpenGL view. This also paints in areas where we don't have any
- // tiles whatsoever.
- void renderMatte();
-
- // Renders the red debug frame around a tile, visualizing its perimeter.
- void renderDebugFrame();
-
- void renderDebugText(DebugBucket& bucket);
- 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 renderIcon(IconBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- void renderText(TextBucket& 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 preparePrerender(PrerenderedTexture &texture);
- void finishPrerender(PrerenderedTexture &texture);
-
- template <typename Properties>
- void renderPrerenderedTexture(PrerenderedTexture &texture, const Properties &properties);
-
- void resize();
-
- // Changes whether debug information is drawn onto the map
- void setDebug(bool enabled);
-
- // Opaque/Translucent pass setting
- void setOpaque();
- void setTranslucent();
-
- // Configures the painter strata that is used for early z-culling of fragments.
- void setStrata(float strata);
-
- void drawClippingMasks(const std::set<std::shared_ptr<StyleSource>> &sources);
- void drawClippingMask(const mat4& matrix, const ClipID& clip);
-
- void clearFramebuffers();
- void resetFramebuffer();
- void bindFramebuffer();
- void pushFramebuffer();
- GLuint popFramebuffer();
- void discardFramebuffers();
- void drawComposite(GLuint texture, const CompositeProperties &properties);
-
- bool needsAnimation() const;
-private:
- void setupShaders();
- const mat4 &translatedMatrix(const std::array<float, 2> &translation, const Tile::ID &id, TranslateAnchorType anchor = TranslateAnchorType::Default);
-
- void prepareTile(const Tile& tile);
-
-public:
- void useProgram(uint32_t program);
- void lineWidth(float lineWidth);
- void depthMask(bool value);
-
-public:
- mat4 matrix;
- mat4 vtxMatrix;
- mat4 projMatrix;
- mat4 nativeMatrix;
- mat4 extrudeMatrix;
-
- // used to composite images and flips the geometry upside down
- const mat4 flipMatrix = []{
- mat4 flipMatrix;
- matrix::ortho(flipMatrix, 0, 4096, -4096, 0, 0, 1);
- matrix::translate(flipMatrix, flipMatrix, 0, -4096, 0);
- return flipMatrix;
- }();
-
-private:
- Map& map;
-
- FrameHistory frameHistory;
-
- bool debug = false;
-
- uint32_t gl_program = 0;
- float gl_lineWidth = 0;
- bool gl_depthMask = true;
- std::array<uint16_t, 2> gl_viewport = {{ 0, 0 }};
- float strata = 0;
- enum { Opaque, Translucent } pass = Opaque;
- const float strata_epsilon = 1.0f / (1 << 16);
-
-public:
- std::unique_ptr<PlainShader> plainShader;
- std::unique_ptr<OutlineShader> outlineShader;
- std::unique_ptr<LineShader> lineShader;
- std::unique_ptr<LinejoinShader> linejoinShader;
- std::unique_ptr<PatternShader> patternShader;
- std::unique_ptr<IconShader> iconShader;
- std::unique_ptr<RasterShader> rasterShader;
- std::unique_ptr<TextShader> textShader;
- std::unique_ptr<DotShader> dotShader;
- std::unique_ptr<CompositeShader> compositeShader;
- std::unique_ptr<GaussianShader> gaussianShader;
-
- // Set up the stencil quad we're using to generate the stencil mask.
- VertexBuffer tileStencilBuffer = {
- // top left triangle
- 0, 0,
- 4096, 0,
- 0, 4096,
-
- // bottom right triangle
- 4096, 0,
- 0, 4096,
- 4096, 4096
- };
-
- VertexArrayObject coveringPlainArray;
- VertexArrayObject coveringPatternArray;
- VertexArrayObject coveringRasterArray;
- VertexArrayObject coveringGaussianArray;
-
- VertexArrayObject compositeArray;
- VertexArrayObject matteArray;
-
- // Set up the tile boundary lines we're using to draw the tile outlines.
- VertexBuffer tileBorderBuffer = {
- 0, 0,
- 4096, 0,
- 4096, 4096,
- 0, 4096,
- 0, 0
- };
-
- VertexArrayObject tileBorderArray;
-
- // Framebuffer management
- std::vector<GLuint> fbos;
- std::vector<GLuint> fbos_color;
- GLuint fbo_depth_stencil;
- int fbo_level = -1;
- bool fbo_depth_stencil_valid = false;
-
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/prerendered_texture.hpp b/include/llmr/renderer/prerendered_texture.hpp
deleted file mode 100644
index 168284e1de..0000000000
--- a/include/llmr/renderer/prerendered_texture.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef LLMR_RENDERER_PRERENDERED_TEXTURE
-#define LLMR_RENDERER_PRERENDERED_TEXTURE
-
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/platform/gl.hpp>
-#include <llmr/style/rasterize_properties.hpp>
-
-namespace llmr {
-
-class Painter;
-
-class PrerenderedTexture : private util::noncopyable {
-public:
- PrerenderedTexture(const RasterizedProperties &properties);
- ~PrerenderedTexture();
-
- void bindTexture();
- void bindFramebuffer();
- void unbindFramebuffer();
-
- inline GLuint getTexture() const { return texture; }
-
- void blur(Painter& painter, uint16_t passes);
-
-public:
- const RasterizedProperties properties;
-
-private:
- GLint previous_fbo = 0;
- GLuint fbo = 0;
- GLuint texture = 0;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/raster_bucket.hpp b/include/llmr/renderer/raster_bucket.hpp
deleted file mode 100644
index 86bb1d925d..0000000000
--- a/include/llmr/renderer/raster_bucket.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef LLMR_RENDERER_RASTERBUCKET
-#define LLMR_RENDERER_RASTERBUCKET
-
-#include <llmr/renderer/bucket.hpp>
-#include <llmr/util/raster.hpp>
-
-namespace llmr {
-
-class RasterShader;
-class VertexBuffer;
-class VertexArrayObject;
-
-class RasterBucket : public Bucket {
-public:
- RasterBucket(const std::shared_ptr<Texturepool> &texturepool);
-
- virtual void render(Painter& painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
- virtual bool hasData() const;
-
- bool setImage(const std::string &data);
-
- void drawRaster(RasterShader& shader, VertexBuffer &vertices, VertexArrayObject &array);
-
-private:
- Raster raster;
-};
-
-}
-
-#endif
diff --git a/include/llmr/renderer/text_bucket.hpp b/include/llmr/renderer/text_bucket.hpp
deleted file mode 100644
index 4d9bf382d6..0000000000
--- a/include/llmr/renderer/text_bucket.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef LLMR_RENDERER_TEXTBUCKET
-#define LLMR_RENDERER_TEXTBUCKET
-
-#include "bucket.hpp"
-#include <llmr/geometry/vao.hpp>
-#include <llmr/geometry/elements_buffer.hpp>
-#include <llmr/map/vector_tile.hpp>
-#include <llmr/text/types.hpp>
-#include <llmr/text/glyph.hpp>
-#include <llmr/style/style_bucket.hpp>
-
-#include <memory>
-#include <map>
-#include <vector>
-
-namespace llmr {
-
-class Style;
-class TextVertexBuffer;
-class TriangleElementsBuffer;
-class TextShader;
-class Placement;
-struct pbf;
-
-class TextBucket : public Bucket {
- typedef ElementGroup triangle_group_type;
-
-public:
- TextBucket(
- TextVertexBuffer &vertexBuffer,
- TriangleElementsBuffer &triangleElementsBuffer,
- const StyleBucketText &properties, Placement &placement);
-
- virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID &id);
- virtual bool hasData() const;
-
- void addGlyphs(const PlacedGlyphs &glyphs, float placementZoom,
- PlacementRange placementRange, float zoom);
-
- void addFeature(const pbf &geometry,
- const GlyphPositions &face,
- const Shaping &shaping);
-
- void drawGlyphs(TextShader &shader);
-
-public:
- const StyleBucketText &properties;
-
-private:
- TextVertexBuffer& vertexBuffer;
- TriangleElementsBuffer& triangleElementsBuffer;
- Placement &placement;
-
- const size_t vertex_start;
- const size_t triangle_elements_start;
-
- std::vector<triangle_group_type> triangleGroups;
-};
-}
-
-#endif
diff --git a/include/llmr/shader/composite_shader.hpp b/include/llmr/shader/composite_shader.hpp
deleted file mode 100644
index 31156485c4..0000000000
--- a/include/llmr/shader/composite_shader.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_SHADER_COMPOSITE_SHADER
-#define LLMR_SHADER_COMPOSITE_SHADER
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class CompositeShader : public Shader {
-public:
- CompositeShader();
-
- void bind(char *offset);
-
- void setImage(int32_t image);
- void setOpacity(float opacity);
-
-private:
- int32_t a_pos = -1;
-
- int32_t image = 0;
- int32_t u_image = -1;
-
- float opacity = 0;
- int32_t u_opacity = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/dot_shader.hpp b/include/llmr/shader/dot_shader.hpp
deleted file mode 100644
index 5e817c09c1..0000000000
--- a/include/llmr/shader/dot_shader.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_DOT
-#define LLMR_SHADER_SHADER_DOT
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
- class DotShader : public Shader {
- public:
- DotShader();
-
- void bind(char *offset);
-
- void setColor(const std::array<float, 4>& color);
- void setSize(float size);
- void setBlur(float blur);
-
- private:
- int32_t a_pos = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- float size = 0;
- int32_t u_size = -1;
-
- float blur = 0;
- int32_t u_blur = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/gaussian_shader.hpp b/include/llmr/shader/gaussian_shader.hpp
deleted file mode 100644
index c3589c1534..0000000000
--- a/include/llmr/shader/gaussian_shader.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_RENDERER_SHADER_GAUSSIAN
-#define LLMR_RENDERER_SHADER_GAUSSIAN
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class GaussianShader : public Shader {
-public:
- GaussianShader();
-
- void bind(char *offset);
-
- void setImage(int32_t image);
- void setOffset(const std::array<float, 2>& offset);
-
-private:
- int32_t a_pos = -1;
-
- int32_t image = 0;
- int32_t u_image = -1;
-
- std::array<float, 2> offset = {{}};
- int32_t u_offset = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/icon_shader.hpp b/include/llmr/shader/icon_shader.hpp
deleted file mode 100644
index daf37b374a..0000000000
--- a/include/llmr/shader/icon_shader.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_ICON
-#define LLMR_SHADER_SHADER_ICON
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class IconShader : public Shader {
-public:
- IconShader();
-
- void bind(char *offset);
-
- void setImage(int32_t image);
- void setColor(const std::array<float, 4>& color);
- void setDimension(const std::array<float, 2>& dimension);
- void setSize(float size);
- void setRatio(float ratio);
-
-private:
- int32_t a_pos = -1;
- int32_t a_tex = -1;
-
- int32_t image = -1;
- int32_t u_image = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- std::array<float, 2> dimension = {{}};
- int32_t u_dimension = -1;
-
- float size = 0;
- int32_t u_size = -1;
-
- float ratio = 0;
- int32_t u_ratio = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/line_shader.hpp b/include/llmr/shader/line_shader.hpp
deleted file mode 100644
index 234c70a649..0000000000
--- a/include/llmr/shader/line_shader.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_LINE
-#define LLMR_SHADER_SHADER_LINE
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class LineShader : public Shader {
-public:
- LineShader();
-
- void bind(char *offset);
-
- void setExtrudeMatrix(const std::array<float, 16>& exmatrix);
- void setColor(const std::array<float, 4>& color);
- void setLineWidth(const std::array<float, 2>& linewidth);
- void setRatio(float ratio);
- void setDashArray(const std::array<float, 2>& dasharray);
- void setDebug(float debug);
-
-private:
- int32_t a_pos = -1;
- int32_t a_extrude = -1;
- int32_t a_linesofar = -1;
-
- std::array<float, 16> exmatrix = {{}};
- int32_t u_exmatrix = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- std::array<float, 2> linewidth = {{}};
- int32_t u_linewidth = -1;
-
- float ratio = 0;
- int32_t u_ratio = -1;
-
- std::array<float, 2> dasharray = {{}};
- int32_t u_dasharray = -1;
-};
-
-
-}
-
-#endif
diff --git a/include/llmr/shader/linejoin_shader.hpp b/include/llmr/shader/linejoin_shader.hpp
deleted file mode 100644
index 82ec3b59aa..0000000000
--- a/include/llmr/shader/linejoin_shader.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_LINEJOIN
-#define LLMR_SHADER_SHADER_LINEJOIN
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class LinejoinShader : public Shader {
-public:
- LinejoinShader();
-
- void bind(char *offset);
-
- void setColor(const std::array<float, 4>& color);
- void setWorld(const std::array<float, 2>& world);
- void setLineWidth(const std::array<float, 2>& linewidth);
- void setSize(float size);
-
-private:
- int32_t a_pos = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- std::array<float, 2> world = {{}};
- int32_t u_world = -1;
-
- std::array<float, 2> linewidth = {{}};
- int32_t u_linewidth = -1;
-
- float size = 0;
- int32_t u_size = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/outline_shader.hpp b/include/llmr/shader/outline_shader.hpp
deleted file mode 100644
index 5b52b30054..0000000000
--- a/include/llmr/shader/outline_shader.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_OUTLINE
-#define LLMR_SHADER_SHADER_OUTLINE
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class OutlineShader : public Shader {
-public:
- OutlineShader();
-
- void bind(char *offset);
-
- void setColor(const std::array<float, 4>& color);
- void setWorld(const std::array<float, 2>& world);
-
-private:
- int32_t a_pos = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- std::array<float, 2> world = {{}};
- int32_t u_world = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/pattern_shader.hpp b/include/llmr/shader/pattern_shader.hpp
deleted file mode 100644
index d0142ebca4..0000000000
--- a/include/llmr/shader/pattern_shader.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_PATTERN
-#define LLMR_SHADER_SHADER_PATTERN
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class PatternShader : public Shader {
-public:
- PatternShader();
-
- void bind(char *offset);
-
- void setColor(const std::array<float, 4>& color);
- void setOffset(const std::array<float, 2>& offset);
- void setPatternSize(const std::array<float, 2>& pattern_size);
- void setPatternTopLeft(const std::array<float, 2>& pattern_tl);
- void setPatternBottomRight(const std::array<float, 2>& pattern_br);
- void setMix(float mix);
-
-private:
- int32_t a_pos = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- std::array<float, 2> offset = {{}};
- int32_t u_offset = -1;
-
- std::array<float, 2> pattern_size = {{}};
- int32_t u_pattern_size = -1;
-
- std::array<float, 2> pattern_tl = {{}};
- int32_t u_pattern_tl = -1;
-
- std::array<float, 2> pattern_br = {{}};
- int32_t u_pattern_br = -1;
-
- float mix = 0;
- int32_t u_mix = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/plain_shader.hpp b/include/llmr/shader/plain_shader.hpp
deleted file mode 100644
index bf768f8845..0000000000
--- a/include/llmr/shader/plain_shader.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef LLMR_SHADER_SHADER_PLAIN
-#define LLMR_SHADER_SHADER_PLAIN
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class PlainShader : public Shader {
-public:
- PlainShader();
-
- void bind(char *offset);
-
- void setColor(float r, float g, float b, float a);
- void setColor(const std::array<float, 4>& color);
-
-private:
- int32_t a_pos = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/raster_shader.hpp b/include/llmr/shader/raster_shader.hpp
deleted file mode 100644
index adc945e460..0000000000
--- a/include/llmr/shader/raster_shader.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef LLMR_RENDERER_SHADER_RASTER
-#define LLMR_RENDERER_SHADER_RASTER
-
-#include <llmr/shader/shader.hpp>
-
-namespace llmr {
-
-class RasterShader : public Shader {
-public:
- RasterShader();
-
- void bind(char *offset);
-
- void setImage(int32_t image);
- void setOpacity(float opacity);
- void setBuffer(float buffer);
-
-private:
- int32_t a_pos = -1;
-
- int32_t image = 0;
- int32_t u_image = -1;
-
- float opacity = 0;
- int32_t u_opacity = -1;
-
- float buffer = 0;
- int32_t u_buffer = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/shader.hpp b/include/llmr/shader/shader.hpp
deleted file mode 100644
index f4713c59f6..0000000000
--- a/include/llmr/shader/shader.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_RENDERER_SHADER
-#define LLMR_RENDERER_SHADER
-
-#include <cstdint>
-#include <array>
-#include <llmr/util/noncopyable.hpp>
-
-namespace llmr {
-
-class Shader : private util::noncopyable {
-public:
- Shader(const char *vertex, const char *fragment);
- ~Shader();
- bool valid;
- uint32_t program;
-
- void setMatrix(const std::array<float, 16>& matrix);
-
-private:
- bool compileShader(uint32_t *shader, uint32_t type, const char *source);
-
-protected:
- std::array<float, 16> matrix = {{}};
- int32_t u_matrix = -1;
-};
-
-}
-
-#endif
diff --git a/include/llmr/shader/text_shader.hpp b/include/llmr/shader/text_shader.hpp
deleted file mode 100644
index d232ef9a0c..0000000000
--- a/include/llmr/shader/text_shader.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef LLMR_SHADER_TEXT_SHADER
-#define LLMR_SHADER_TEXT_SHADER
-
-#include "shader.hpp"
-
-namespace llmr {
-
-class TextShader : public Shader {
-public:
- TextShader();
-
- void bind(char *offset);
-
- void setColor(float r, float g, float b, float a);
- void setColor(const std::array<float, 4> &color);
- void setBuffer(float buffer);
- void setGamma(float gamma);
- void setExtrudeMatrix(const std::array<float, 16> &exmatrix);
- void setAngle(float angle);
- void setZoom(float zoom);
- void setFlip(float flip);
- void setFadeDist(float fadedist);
- void setMinFadeZoom(float minfadezoom);
- void setMaxFadeZoom(float maxfadezoom);
- void setFadeZoom(float fadezoom);
- void setTextureSize(const std::array<float, 2> &texsize);
-
-private:
- int32_t a_pos = -1;
- int32_t a_offset = -1;
- int32_t a_data1 = -1;
- int32_t a_data2 = -1;
-
- std::array<float, 4> color = {{}};
- int32_t u_color = -1;
-
- float buffer = 0.0f;
- int32_t u_buffer = -1;
-
- float gamma = 0.0f;
- int32_t u_gamma = -1;
-
- std::array<float, 16> exmatrix = {{}};
- int32_t u_exmatrix = -1;
-
- float angle = 0.0f;
- int32_t u_angle = -1;
-
- float zoom = 0.0f;
- int32_t u_zoom = -1;
-
- float flip = 0.0f;
- int32_t u_flip = -1;
-
- float fadedist = 0.0f;
- int32_t u_fadedist = -1;
-
- float minfadezoom = 0.0f;
- int32_t u_minfadezoom = -1;
-
- float maxfadezoom = 0.0f;
- int32_t u_maxfadezoom = -1;
-
- float fadezoom = 0.0f;
- int32_t u_fadezoom = -1;
-
- std::array<float, 2> texsize = {{}};
- int32_t u_texsize = -1;
-};
-}
-
-#endif
diff --git a/include/llmr/style/applied_class_properties.hpp b/include/llmr/style/applied_class_properties.hpp
deleted file mode 100644
index 20edadc0a7..0000000000
--- a/include/llmr/style/applied_class_properties.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef LLMR_STYLE_APPLIED_CLASS_PROPERTIES
-#define LLMR_STYLE_APPLIED_CLASS_PROPERTIES
-
-#include <llmr/style/property_value.hpp>
-#include <llmr/style/class_dictionary.hpp>
-#include <llmr/util/time.hpp>
-
-#include <list>
-
-namespace llmr {
-
-class AppliedClassProperty {
-public:
- AppliedClassProperty(ClassID class_id, timestamp begin, timestamp end, const PropertyValue &value);
-
-public:
- const ClassID name;
- const timestamp begin;
- const timestamp end;
- const PropertyValue value;
-};
-
-
-class AppliedClassProperties {
-public:
- std::list<AppliedClassProperty> properties;
-
-public:
- // Returns thie ID of the most recent
- ClassID mostRecent() const;
- void add(ClassID class_id, timestamp begin, timestamp end, const PropertyValue &value);
- bool hasTransitions() const;
- void cleanup(timestamp now);
- bool empty() const;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/class_dictionary.hpp b/include/llmr/style/class_dictionary.hpp
deleted file mode 100644
index 772eb9c70e..0000000000
--- a/include/llmr/style/class_dictionary.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef LLMR_STYLE_CLASS_DICTIONARY
-#define LLMR_STYLE_CLASS_DICTIONARY
-
-#include <cstdint>
-#include <string>
-#include <unordered_map>
-
-namespace llmr {
-
-enum class ClassID : uint32_t {
- Fallback = 0, // These values are from the fallback properties
- Default = 1, // These values are from the default style for a layer
- Named = 2 // These values (and all subsequent IDs) are from a named style from the layer
-};
-
-class ClassDictionary {
-public:
- // Returns an ID for a class name. If the class name does not yet have an ID, one is
- // auto-generated and stored for future reference.
- static ClassID Lookup(const std::string &class_name);
-
- // Returns either Fallback, Default or Named, depending on the type of the class id.
- static ClassID Normalize(ClassID id);
-
-private:
- static std::unordered_map<std::string, ClassID> store;
- static uint32_t offset;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/class_properties.hpp b/include/llmr/style/class_properties.hpp
deleted file mode 100644
index 55d6aa2cc6..0000000000
--- a/include/llmr/style/class_properties.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef LLMR_STYLE_CLASS_PROPERTIES
-#define LLMR_STYLE_CLASS_PROPERTIES
-
-#include <llmr/style/property_key.hpp>
-#include <llmr/style/property_value.hpp>
-#include <llmr/style/property_transition.hpp>
-
-#include <map>
-
-namespace llmr {
-
-class ClassProperties {
-public:
- inline ClassProperties() {}
- inline ClassProperties(ClassProperties &&properties)
- : properties(std::move(properties.properties)) {}
-
- inline void set(PropertyKey key, const PropertyValue &value) {
- properties.emplace(key, value);
- }
-
- inline void set(PropertyKey key, const PropertyTransition &transition) {
- transitions.emplace(key, transition);
- }
-
- const PropertyTransition &getTransition(PropertyKey key, const PropertyTransition &defaultTransition) const;
-
- // Route-through iterable interface so that you can iterate on the object as is.
- inline std::map<PropertyKey, PropertyValue>::const_iterator begin() const {
- return properties.begin();
- }
- inline std::map<PropertyKey, PropertyValue>::const_iterator end() const {
- return properties.end();
- }
-
-public:
- std::map<PropertyKey, PropertyValue> properties;
- std::map<PropertyKey, PropertyTransition> transitions;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/filter_comparison.hpp b/include/llmr/style/filter_comparison.hpp
deleted file mode 100644
index 0e7a929e1c..0000000000
--- a/include/llmr/style/filter_comparison.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef LLMR_STYLE_FILTER_COMPARISON
-#define LLMR_STYLE_FILTER_COMPARISON
-
-#include <llmr/style/value.hpp>
-
-#include <vector>
-#include <string>
-#include <iosfwd>
-
-namespace llmr {
-
-class FilterComparison {
-public:
- enum class Operator : uint8_t {
- Equal,
- NotEqual,
- Greater,
- GreaterEqual,
- Less,
- LessEqual,
- In,
- NotIn
- };
-
- class Instance {
- public:
- Instance(Operator op, std::vector<Value> &&values)
- : op(op), values(values) {}
-
- bool compare(const std::vector<Value> &property_values) const;
-
- private:
- Operator op = Operator::Equal;
- std::vector<Value> values;
-
- friend std::ostream& operator <<(std::ostream &, const Instance &);
- };
-
-public:
- FilterComparison(const std::string &field) : field(field) {};
-
- const std::string &getField() const;
- template <typename Extractor> inline bool compare(const Extractor &extractor) const;
-
- template <typename ...Args>
- inline void add(Args&& ...args) {
- instances.emplace_back(::std::forward<Args>(args)...);
- }
-
-private:
- std::string field;
- std::vector<Instance> instances;
-
- friend std::ostream& operator <<(std::ostream &, const FilterComparison &);
-};
-
-std::ostream& operator <<(std::ostream &s, const FilterComparison &comparison);
-std::ostream& operator <<(std::ostream &s, const FilterComparison::Instance &instance);
-
-
-FilterComparison::Operator parseFilterComparisonOperator(const std::string &op);
-
-}
-
-#endif
diff --git a/include/llmr/style/filter_comparison_private.hpp b/include/llmr/style/filter_comparison_private.hpp
deleted file mode 100644
index d778097730..0000000000
--- a/include/llmr/style/filter_comparison_private.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef LLMR_STYLE_FILTER_COMPARISON_PRIVATE
-#define LLMR_STYLE_FILTER_COMPARISON_PRIVATE
-
-#include "filter_comparison.hpp"
-
-namespace llmr {
-
-template <typename Extractor>
-inline bool FilterComparison::compare(const Extractor &extractor) const {
- const std::vector<Value> values = extractor.getValues(field);
-
- // All instances are ANDed together.
- for (const Instance &instance : instances) {
- if (!instance.compare(values)) {
- return false;
- }
- }
- return true;
-}
-
-}
-
-#endif
diff --git a/include/llmr/style/filter_expression.hpp b/include/llmr/style/filter_expression.hpp
deleted file mode 100644
index db67aa43a1..0000000000
--- a/include/llmr/style/filter_expression.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef LLMR_STYLE_FILTER_EXPRESSION
-#define LLMR_STYLE_FILTER_EXPRESSION
-
-#include <llmr/style/filter_comparison.hpp>
-#include <llmr/util/recursive_wrapper.hpp>
-
-#include <iosfwd>
-
-namespace llmr {
-
-class FilterExpression {
-public:
- typedef util::recursive_wrapper<FilterExpression> Wrapper;
-
- enum class Operator : uint8_t {
- And,
- Or,
- Xor,
- Nor
- };
-
- enum class GeometryType : uint8_t {
- Any,
- Point,
- LineString,
- Polygon
- };
-
-public:
- FilterExpression() = default;
- FilterExpression(Operator op) : op(op) {};
-
- bool empty() const;
-
- template <typename Extractor> bool compare(const Extractor &extractor) const;
- void add(const FilterComparison &comparison);
- void add(const FilterExpression &expression);
- void setGeometryType(GeometryType g);
-
-private:
- Operator op = Operator::And;
- GeometryType type = GeometryType::Any;
- std::vector<FilterComparison> comparisons;
- std::vector<FilterExpression::Wrapper> expressions;
-
- friend std::ostream& operator <<(std::ostream &, const FilterExpression &);
-};
-
-std::ostream& operator <<(std::ostream &s, const FilterExpression &expression);
-
-FilterExpression::GeometryType parseGeometryType(const std::string &geometry);
-}
-
-#endif
diff --git a/include/llmr/style/filter_expression_private.hpp b/include/llmr/style/filter_expression_private.hpp
deleted file mode 100644
index 91c434e6ff..0000000000
--- a/include/llmr/style/filter_expression_private.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef LLMR_STYLE_FILTER_EXPRESSION_PRIVATE
-#define LLMR_STYLE_FILTER_EXPRESSION_PRIVATE
-
-#include "filter_expression.hpp"
-#include "filter_comparison_private.hpp"
-
-namespace llmr {
-
-template <typename Extractor>
-bool FilterExpression::compare(const Extractor &extractor) const {
- if (type != GeometryType::Any && extractor.getType() != type && extractor.getType() != GeometryType::Any) {
- return false;
- }
-
- switch (op) {
- case Operator::And:
- for (const FilterComparison &comparison : comparisons) {
- if (!comparison.compare(extractor)) {
- return false;
- }
- }
- for (const FilterExpression &expression: expressions) {
- if (!expression.compare(extractor)) {
- return false;
- }
- }
- return true;
- case Operator::Or:
- for (const FilterComparison &comparison : comparisons) {
- if (comparison.compare(extractor)) {
- return true;
- }
- }
- for (const FilterExpression &expression: expressions) {
- if (expression.compare(extractor)) {
- return true;
- }
- }
- return false;
- case Operator::Xor: {
- int count = 0;
- for (const FilterComparison &comparison : comparisons) {
- count += comparison.compare(extractor);
- if (count > 1) {
- return false;
- }
- }
- for (const FilterExpression &expression: expressions) {
- count += expression.compare(extractor);
- if (count > 1) {
- return false;
- }
- }
- return count == 1;
- }
- case Operator::Nor:
- for (const FilterComparison &comparison : comparisons) {
- if (comparison.compare(extractor)) {
- return false;
- }
- }
- for (const FilterExpression &expression: expressions) {
- if (expression.compare(extractor)) {
- return false;
- }
- }
- return true;
- default:
- return true;
- }
-}
-
-}
-
-#endif
diff --git a/include/llmr/style/function_properties.hpp b/include/llmr/style/function_properties.hpp
deleted file mode 100644
index e72ced0b02..0000000000
--- a/include/llmr/style/function_properties.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef LLMR_STYLE_FUNCTION_PROPERTIES
-#define LLMR_STYLE_FUNCTION_PROPERTIES
-
-#include <llmr/util/variant.hpp>
-
-#include <vector>
-
-namespace llmr {
-
-template <typename T>
-struct ConstantFunction {
- inline ConstantFunction(const T &value) : value(value) {}
- inline T evaluate(float) const { return value; }
-
-private:
- const T value;
-};
-
-template <typename T>
-struct LinearFunction {
- inline LinearFunction(const T &value, float z_base, float slope, const T &min, const T &max)
- : value(value), min(min), max(max), z_base(z_base), slope(slope) {}
- T evaluate(float z) const;
-
-private:
- const T value, min, max;
- const float z_base, slope;
-};
-
-template <typename T>
-struct ExponentialFunction {
- inline ExponentialFunction(const T &value, float z_base, float exp_base, float slope, const T &min,
- const T &max)
- : value(value), min(min), max(max), z_base(z_base), exp_base(exp_base), slope(slope) {}
- T evaluate(float z) const;
-
-private:
- const T value, min, max;
- const float z_base, exp_base, slope;
-};
-
-template <typename T>
-struct StopsFunction {
- inline StopsFunction(const std::vector<std::pair<float, T>> &values) : values(values) {}
- T evaluate(float z) const;
-
-private:
- const std::vector<std::pair<float, T>> values;
-};
-
-template <typename T>
-using Function = util::variant<
- std::false_type,
- ConstantFunction<T>,
- LinearFunction<T>,
- ExponentialFunction<T>,
- StopsFunction<T>
->;
-
-template <typename T>
-struct FunctionEvaluator {
- typedef T result_type;
- inline FunctionEvaluator(float z) : z(z) {}
-
- inline result_type operator()(const std::false_type &) {
- return result_type();
- }
-
- template <template <typename> class Fn>
- inline result_type operator()(const Fn<T>& fn) {
- return fn.evaluate(z);
- }
-private:
- float z;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/property_fallback.hpp b/include/llmr/style/property_fallback.hpp
deleted file mode 100644
index eb6bb15c9c..0000000000
--- a/include/llmr/style/property_fallback.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_STYLE_PROPERTY_FALLBACK
-#define LLMR_STYLE_PROPERTY_FALLBACK
-
-#include <llmr/style/property_key.hpp>
-#include <llmr/style/property_value.hpp>
-
-#include <map>
-
-namespace llmr {
-
-class PropertyFallbackValue {
-public:
- static const PropertyValue &Get(PropertyKey key) {
- auto it = properties.find(key);
- if (it != properties.end()) {
- return it->second;
- } else {
- return defaultProperty;
- }
- }
-
-private:
- static const std::map<PropertyKey, PropertyValue> properties;
- static const PropertyValue defaultProperty;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/property_key.hpp b/include/llmr/style/property_key.hpp
deleted file mode 100644
index e52c33ad17..0000000000
--- a/include/llmr/style/property_key.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef LLMR_STYLE_PROPERTY_KEY
-#define LLMR_STYLE_PROPERTY_KEY
-
-namespace llmr {
-
-enum class PropertyKey {
- FillAntialias,
- FillOpacity,
- FillColor,
- FillOutlineColor,
- FillTranslate, // for transitions only
- FillTranslateX,
- FillTranslateY,
- FillTranslateAnchor,
- FillImage,
-
- LineOpacity,
- LineColor,
- LineTranslate, // for transitions only
- LineTranslateX,
- LineTranslateY,
- LineTranslateAnchor,
- LineWidth,
- LineOffset,
- LineBlur,
- LineDashArray, // for transitions only
- LineDashLand,
- LineDashGap,
- LineImage,
-
- IconOpacity,
- IconRotate,
- IconRotateAnchor,
-
- TextOpacity,
- TextSize,
- TextColor,
- TextHaloColor,
- TextHaloWidth,
- TextHaloBlur,
-
- CompositeOpacity,
-
- RasterOpacity,
- RasterSpin,
- RasterBrightnessLow,
- RasterBrightnessHigh,
- RasterSaturation,
- RasterContrast,
- RasterFade,
-
- BackgroundColor
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/property_transition.hpp b/include/llmr/style/property_transition.hpp
deleted file mode 100644
index 0175274436..0000000000
--- a/include/llmr/style/property_transition.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef LLMR_STYLE_PROPERTY_TRANSITION
-#define LLMR_STYLE_PROPERTY_TRANSITION
-
-#include <cstdint>
-
-namespace llmr {
-
-struct PropertyTransition {
- uint16_t duration = 0;
- uint16_t delay = 0;
-};
-
-}
-
-#endif \ No newline at end of file
diff --git a/include/llmr/style/property_value.hpp b/include/llmr/style/property_value.hpp
deleted file mode 100644
index 3e2a675b53..0000000000
--- a/include/llmr/style/property_value.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef LLMR_STYLE_PROPERTY_VALUE
-#define LLMR_STYLE_PROPERTY_VALUE
-
-#include <llmr/util/variant.hpp>
-#include <llmr/style/function_properties.hpp>
-#include <llmr/style/types.hpp>
-
-namespace llmr {
-
-typedef util::variant<
- std::string,
- TranslateAnchorType,
- RotateAnchorType,
- Function<bool>,
- Function<float>,
- Function<Color>
-> PropertyValue;
-
-}
-
-#endif
diff --git a/include/llmr/style/rasterize_properties.hpp b/include/llmr/style/rasterize_properties.hpp
deleted file mode 100644
index 440f3e530f..0000000000
--- a/include/llmr/style/rasterize_properties.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef LLMR_STYLE_RASTERIZE_PROPERTIES
-#define LLMR_STYLE_RASTERIZE_PROPERTIES
-
-#include <llmr/style/function_properties.hpp>
-
-namespace llmr {
-
-// The calculated properties for a layer in a tile.
-class RasterizedProperties {
-public:
- float buffer = 1.0f / 32.0f;
- uint16_t size = 256;
- uint8_t blur = 0;
-};
-
-class RasterizeProperties {
-public:
- Function<bool> enabled = ConstantFunction<bool>(false);
- Function<float> buffer = ConstantFunction<float>(1.0f / 32.0f);
- Function<float> size = ConstantFunction<float>(256);
- Function<float> blur = ConstantFunction<float>(0);
-
- inline bool isEnabled(const int8_t z) const {
- return util::apply_visitor(FunctionEvaluator<bool>(z), enabled);
- }
-
- inline RasterizedProperties get(const int8_t z) const {
- RasterizedProperties properties;
- properties.buffer = util::apply_visitor(FunctionEvaluator<float>(z), buffer);
- properties.size = util::apply_visitor(FunctionEvaluator<float>(z), size);
- properties.blur = util::apply_visitor(FunctionEvaluator<float>(z), blur);
- return properties;
- }
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/style.hpp b/include/llmr/style/style.hpp
deleted file mode 100644
index cf091ad814..0000000000
--- a/include/llmr/style/style.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef LLMR_STYLE_STYLE
-#define LLMR_STYLE_STYLE
-
-#include <llmr/style/property_transition.hpp>
-#include <llmr/style/style_source.hpp>
-
-#include <llmr/util/time.hpp>
-#include <llmr/util/uv.hpp>
-
-#include <cstdint>
-#include <map>
-#include <string>
-#include <unordered_map>
-#include <vector>
-#include <set>
-#include <memory>
-
-namespace llmr {
-
-class Sprite;
-class StyleLayer;
-class StyleLayerGroup;
-struct BackgroundProperties;
-
-class Style {
-public:
- struct exception : std::runtime_error { exception(const char *msg) : std::runtime_error(msg) {} };
-
-public:
- Style();
-
- void loadJSON(const uint8_t *const data);
-
- size_t layerCount() const;
- void updateProperties(float z, timestamp t);
-
- void setDefaultTransitionDuration(uint16_t duration_milliseconds = 0);
-
- void setAppliedClasses(const std::vector<std::string> &classes);
- const std::vector<std::string> &getAppliedClasses() const;
- void toggleClass(const std::string &name);
-
- // Updates the styling information to reflect the current array
- // of applied classes.
- void updateClasses();
-
- bool hasTransitions() const;
-
- const BackgroundProperties &getBackgroundProperties() const;
-
-public:
- std::shared_ptr<Sprite> sprite;
- std::shared_ptr<StyleLayerGroup> layers;
- std::vector<std::string> appliedClasses;
- std::string sprite_url;
- std::string glyph_url;
-
-
-private:
- PropertyTransition defaultTransition;
- bool initial_render_complete = false;
-
- mutable uv::rwlock mtx;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/style_bucket.hpp b/include/llmr/style/style_bucket.hpp
deleted file mode 100644
index 5d8c9d6bb9..0000000000
--- a/include/llmr/style/style_bucket.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_BUCKET
-#define LLMR_STYLE_STYLE_BUCKET
-
-#include <llmr/style/types.hpp>
-#include <llmr/style/filter_expression.hpp>
-#include <llmr/style/style_source.hpp>
-#include <llmr/util/vec.hpp>
-#include <llmr/util/variant.hpp>
-
-#include <memory>
-#include <forward_list>
-
-namespace llmr {
-
-class Source;
-
-class StyleBucketFill {
-public:
- WindingType winding = WindingType::Default;
-};
-
-class StyleBucketLine {
-public:
- CapType cap = CapType::Default;
- JoinType join = JoinType::Default;
- float miter_limit = 2.0f;
- float round_limit = 1.0f;
-};
-
-class StyleBucketIcon {
-public:
- uint16_t size = 16;
- vec2<float> translate {0, 0};
- TranslateAnchorType translate_anchor = TranslateAnchorType::Default;
- std::string icon;
- float spacing = 0.0f;
- float padding = 2.0f;
-};
-
-class StyleBucketText {
-public:
- std::string field;
- TextPathType path = TextPathType::Default;
- TextTransformType transform = TextTransformType::Default;
- std::string font;
- float max_size = 16.0f;
- float max_width = 15.0f * 24;
- float line_height = 1.2f * 24;
- float letter_spacing = 0.0f;
- float alignment = 0.5f;
- float vertical_alignment = 0.5;
- vec2<float> translate {0, 0};
- TranslateAnchorType translate_anchor = TranslateAnchorType::Default;
- float max_angle_delta = M_PI;
- float min_distance = 250.0f;
- float rotate = 0.0f; // what is this?
- float padding = 2.0f;
- float slant = 0.0f;
- bool always_visible = false;
-};
-
-class StyleBucketRaster {
-public:
-};
-
-typedef util::variant<StyleBucketFill, StyleBucketLine, StyleBucketIcon,
- StyleBucketText, StyleBucketRaster,
- std::false_type> StyleBucketRender;
-
-
-class StyleBucket {
-public:
- typedef std::shared_ptr<StyleBucket> Ptr;
-
- StyleBucket(StyleLayerType type);
-
- std::string name;
- std::shared_ptr<StyleSource> style_source;
- std::string source_layer;
- FilterExpression filter;
- StyleBucketRender render = std::false_type();
-};
-
-
-
-};
-
-#endif
diff --git a/include/llmr/style/style_layer.hpp b/include/llmr/style/style_layer.hpp
deleted file mode 100644
index 4d6b8d1fa8..0000000000
--- a/include/llmr/style/style_layer.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_LAYER
-#define LLMR_STYLE_STYLE_LAYER
-
-#include <llmr/style/class_dictionary.hpp>
-#include <llmr/style/class_properties.hpp>
-#include <llmr/style/style_properties.hpp>
-#include <llmr/style/rasterize_properties.hpp>
-#include <llmr/style/applied_class_properties.hpp>
-
-#include <vector>
-#include <memory>
-#include <string>
-#include <map>
-#include <set>
-
-namespace llmr {
-
-class StyleBucket;
-class StyleLayerGroup;
-
-class StyleLayer {
-public:
- StyleLayer(const std::string &id, std::map<ClassID, ClassProperties> &&styles,
- std::unique_ptr<const RasterizeProperties> &&rasterize);
-
- template <typename T> const T &getProperties() {
- if (properties.is<T>()) {
- return properties.get<T>();
- } else {
- return defaultStyleProperties<T>();
- }
- }
-
- // Determines whether this layer is the background layer.
- bool isBackground() const;
-
- // Updates the StyleProperties information in this layer by evaluating all
- // pending transitions and applied classes in order.
- void updateProperties(float z, timestamp now);
-
- // Sets the list of classes and creates transitions to the currently applied values.
- void setClasses(const std::vector<std::string> &class_names, timestamp now,
- const PropertyTransition &defaultTransition);
-
- bool hasTransitions() const;
-
-private:
- // Applies all properties from a class, if they haven't been applied already.
- void applyClassProperties(ClassID class_id, std::set<PropertyKey> &already_applied,
- timestamp now, const PropertyTransition &defaultTransition);
-
- // Sets the properties of this object by evaluating all pending transitions and
- // aplied classes in order.
- template <typename T> void applyStyleProperties(float z, timestamp now);
- template <typename T> void applyStyleProperty(PropertyKey key, T &, float z, timestamp now);
-
- // Removes all expired style transitions.
- void cleanupAppliedStyleProperties(timestamp now);
-
-public:
- // The name of this layer.
- const std::string id;
-
- StyleLayerType type = StyleLayerType::Unknown;
-
- // Bucket information, telling the renderer how to generate the geometries
- // for this layer (feature property filters, tessellation instructions, ...).
- std::shared_ptr<StyleBucket> bucket;
-
- // Contains all style classes that can be applied to this layer.
- const std::map<ClassID, ClassProperties> styles;
-
-private:
- // For every property, stores a list of applied property values, with
- // optional transition times.
- std::map<PropertyKey, AppliedClassProperties> appliedStyle;
-
-public:
- // Stores the evaluated, and cascaded styling information, specific to this
- // layer's type.
- StyleProperties properties;
-
- // Rasterization properties are used for prerendering the tile to a bitmap,
- // which is then used as a raster image instead of rendering this layer
- // directly in every frame.
- const std::unique_ptr<const RasterizeProperties> rasterize;
-
- // Child layer array (if this layer has child layers).
- std::shared_ptr<StyleLayerGroup> layers;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/style_layer_group.hpp b/include/llmr/style/style_layer_group.hpp
deleted file mode 100644
index 90c02bc1f2..0000000000
--- a/include/llmr/style/style_layer_group.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_LAYER_GROUP
-#define LLMR_STYLE_STYLE_LAYER_GROUP
-
-#include <llmr/style/style_layer.hpp>
-
-#include <vector>
-
-namespace llmr {
-
-class StyleLayerGroup {
-public:
- void setClasses(const std::vector<std::string> &class_names, timestamp now,
- const PropertyTransition &defaultTransition);
- void updateProperties(float z, timestamp t);
-
- bool hasTransitions() const;
-public:
- std::vector<std::shared_ptr<StyleLayer>> layers;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/style_parser.hpp b/include/llmr/style/style_parser.hpp
deleted file mode 100644
index eb3b39eb04..0000000000
--- a/include/llmr/style/style_parser.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_PARSER
-#define LLMR_STYLE_STYLE_PARSER
-
-#include <rapidjson/document.h>
-#include <llmr/style/style.hpp>
-#include <llmr/style/style_source.hpp>
-#include <llmr/style/filter_expression.hpp>
-#include <llmr/style/class_properties.hpp>
-#include <llmr/style/rasterize_properties.hpp>
-#include <llmr/style/style_bucket.hpp>
-
-#include <unordered_map>
-#include <forward_list>
-#include <tuple>
-
-namespace llmr {
-
-enum class ClassID : uint32_t;
-
-class StyleLayer;
-class StyleLayerGroup;
-
-class StyleParser {
-public:
- using JSVal = const rapidjson::Value&;
-
- StyleParser();
-
- void parse(JSVal document);
-
- std::shared_ptr<StyleLayerGroup> getLayers() {
- return root;
- }
-
- std::string getSprite() const {
- return sprite;
- }
-
- std::string getGlyphURL() const {
- return glyph_url;
- }
-
-private:
- void parseConstants(JSVal value);
- JSVal replaceConstant(JSVal value);
-
- void parseSources(JSVal value);
-
- std::unique_ptr<StyleLayerGroup> createLayers(JSVal value);
- std::shared_ptr<StyleLayer> createLayer(JSVal value);
- void parseLayers();
- void parseLayer(std::pair<JSVal, std::shared_ptr<StyleLayer>> &pair);
- void parseStyles(JSVal value, std::map<ClassID, ClassProperties> &styles);
- void parseStyle(JSVal, ClassProperties &properties);
- std::unique_ptr<RasterizeProperties> parseRasterize(JSVal value);
- void parseReference(JSVal value, std::shared_ptr<StyleLayer> &layer);
- void parseBucket(JSVal value, std::shared_ptr<StyleLayer> &layer);
- void parseRender(JSVal value, std::shared_ptr<StyleLayer> &layer);
- void parseSprite(JSVal value);
- void parseGlyphURL(JSVal value);
-
- // Parses optional properties into a render bucket.
- template<typename T>
- bool parseRenderProperty(JSVal value, T &target, const char *name);
- template <typename T, typename Parser>
- bool parseRenderProperty(JSVal value, T &target, const char *name, Parser &parser);
-
- // Parses optional properties into style class properties.
- template <typename T>
- bool parseOptionalProperty(const char *property_name, PropertyKey key, ClassProperties &klass, JSVal value);
- template <typename T>
- bool parseOptionalProperty(const char *property_name, const std::vector<PropertyKey> &keys, ClassProperties &klass, JSVal value);
- template <typename T>
- bool parseOptionalProperty(const char *property_name, T &target, JSVal value);
- template <typename T>
- bool setProperty(JSVal value, const char *property_name, PropertyKey key, ClassProperties &klass);
- template <typename T>
- bool setProperty(JSVal value, const char *property_name, T &target);
-
- template <typename T>
- std::tuple<bool, T> parseProperty(JSVal value, const char *property_name);
-
- template <typename T>
- bool parseFunction(PropertyKey key, ClassProperties &klass, JSVal value);
- template <typename T>
- std::tuple<bool, Function<T>> parseFunction(JSVal value);
- template <typename T>
- T parseFunctionArgument(JSVal value);
-
-
- FilterExpression parseFilter(JSVal, FilterExpression::Operator op);
- FilterExpression parseFilter(JSVal);
- Value parseValue(JSVal value);
- std::vector<Value> parseValues(JSVal values);
-
-private:
- std::unordered_map<std::string, const rapidjson::Value *> constants;
-
- std::unordered_map<std::string, const std::shared_ptr<StyleSource>> sources;
-
- // This stores the root layer.
- std::shared_ptr<StyleLayerGroup> root;
-
- // This maps ids to Layer objects, with all items being at the root level.
- std::unordered_map<std::string, std::pair<JSVal, std::shared_ptr<StyleLayer>>> layers;
-
- // Store a stack of layers we're parsing right now. This is to prevent reference cycles.
- std::forward_list<StyleLayer *> stack;
-
- // Base URL of the sprite image.
- std::string sprite;
-
- // URL template for glyph PBFs.
- std::string glyph_url;
-};
-
-}
-
-#endif
diff --git a/include/llmr/style/style_properties.hpp b/include/llmr/style/style_properties.hpp
deleted file mode 100644
index bc46e2d854..0000000000
--- a/include/llmr/style/style_properties.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_PROPERTIES
-#define LLMR_STYLE_STYLE_PROPERTIES
-
-#include <llmr/util/variant.hpp>
-#include <llmr/style/types.hpp>
-#include <llmr/style/function_properties.hpp>
-
-#include <array>
-#include <string>
-#include <type_traits>
-#include <memory>
-
-namespace llmr {
-
-struct FillProperties {
- FillProperties() {}
- bool antialias = true;
- float opacity = 1.0f;
- Color fill_color = {{ 0, 0, 0, 1 }};
- Color stroke_color = {{ 0, 0, 0, -1 }};
- std::array<float, 2> translate = {{ 0, 0 }};
- TranslateAnchorType translateAnchor = TranslateAnchorType::Default;
- std::string image;
-
- inline bool isVisible() const {
- return opacity > 0 && (fill_color[3] > 0 || stroke_color[3] > 0);
- }
-};
-
-struct LineProperties {
- inline LineProperties() {}
- float opacity = 1.0f;
- Color color = {{ 0, 0, 0, 1 }};
- std::array<float, 2> translate = {{ 0, 0 }};
- TranslateAnchorType translateAnchor = TranslateAnchorType::Default;
- float width = 0;
- float offset = 0;
- float blur = 0;
- std::array<float, 2> dash_array = {{ 1, -1 }};
- std::string image;
-
- inline bool isVisible() const {
- return opacity > 0 && color[3] > 0 && width > 0;
- }
-};
-
-struct IconProperties {
- inline IconProperties() {}
- float opacity = 1.0f;
- float rotate = 0.0f;
- RotateAnchorType rotate_anchor = RotateAnchorType::Default;
-
- inline bool isVisible() const {
- return opacity > 0;
- }
-};
-
-struct TextProperties {
- inline TextProperties() {}
- float opacity = 1.0f;
- float size = 12.0f;
- Color color = {{ 0, 0, 0, 1 }};
- Color halo_color = {{ 1, 1, 1, 0.75 }};
- float halo_width = 0.25f;
- float halo_blur = 1.0f;
-
- inline bool isVisible() const {
- return opacity > 0 && (color[3] > 0 || halo_color[3] > 0) && size > 0;
- }
-};
-
-struct CompositeProperties {
- inline CompositeProperties() {}
- float opacity = 1.0f;
-
- inline bool isVisible() const {
- return opacity > 0;
- }
-};
-
-struct RasterProperties {
- inline RasterProperties() {}
- float opacity = 1.0f;
- float spin = 0.0f;
- std::array<float, 2> brightness = {{ 0, 1 }};
- float saturation = 0.0f;
- float contrast = 0.0f;
- float fade = 0.0f;
-
- inline bool isVisible() const {
- return opacity > 0;
- }
-};
-
-struct BackgroundProperties {
- inline BackgroundProperties() {}
- Color color = {{ 1, 1, 1, 1 }};
-};
-
-typedef util::variant<
- FillProperties,
- LineProperties,
- IconProperties,
- TextProperties,
- CompositeProperties,
- RasterProperties,
- BackgroundProperties,
- std::false_type
-> StyleProperties;
-
-template <typename T>
-const T &defaultStyleProperties();
-
-}
-
-#endif
diff --git a/include/llmr/style/style_source.hpp b/include/llmr/style/style_source.hpp
deleted file mode 100644
index 25a8218df9..0000000000
--- a/include/llmr/style/style_source.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LLMR_STYLE_STYLE_SOURCE
-#define LLMR_STYLE_STYLE_SOURCE
-
-#include <llmr/style/types.hpp>
-
-#include <memory>
-
-namespace llmr {
-
-class Source;
-
-class StyleSource {
-public:
- const SourceType type;
- const std::string url;
- const uint32_t tile_size;
- const int32_t min_zoom;
- const int32_t max_zoom;
-
- bool enabled = false;
- std::shared_ptr<Source> source;
-
- StyleSource(SourceType type = SourceType::Vector, const std::string &url = "",
- uint32_t tile_size = 512, uint32_t min_zoom = 0, uint32_t max_zoom = 22)
- : type(type), url(url), tile_size(tile_size), min_zoom(min_zoom), max_zoom(max_zoom) {}
-};
-};
-
-#endif
diff --git a/include/llmr/style/types.hpp b/include/llmr/style/types.hpp
deleted file mode 100644
index 82632849ac..0000000000
--- a/include/llmr/style/types.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifndef LLMR_STYLE_TYPES
-#define LLMR_STYLE_TYPES
-
-#include <llmr/util/enum.hpp>
-
-#include <string>
-#include <array>
-
-namespace llmr {
-
-// Stores a premultiplied color, with all four channels ranging from 0..1
-typedef std::array<float, 4> Color;
-
-enum class StyleLayerType : uint8_t {
- Unknown,
- Fill,
- Line,
- Icon,
- Text,
- Raster,
- Composite,
- Background
-};
-
-LLMR_DEFINE_ENUM_CLASS(StyleLayerTypeClass, StyleLayerType, {
- { StyleLayerType::Unknown, "unknown" },
- { StyleLayerType::Fill, "fill" },
- { StyleLayerType::Line, "line" },
- { StyleLayerType::Icon, "icon" },
- { StyleLayerType::Text, "text" },
- { StyleLayerType::Raster, "raster" },
- { StyleLayerType::Composite, "composite" },
- { StyleLayerType::Background, "background" },
- { StyleLayerType(-1), "unknown" },
-});
-
-
-enum class WindingType : uint8_t {
- EvenOdd,
- NonZero,
- Default = NonZero
-};
-
-enum class CapType : uint8_t {
- None,
- Round,
- Butt,
- Square,
- Default = None
-};
-
-enum class JoinType : uint8_t {
- None,
- Miter,
- Bevel,
- Round,
- Default = None
-};
-
-enum class TextPathType : uint8_t {
- Horizontal,
- Curve,
- Default = Horizontal
-};
-
-enum class TextTransformType : uint8_t {
- None,
- Uppercase,
- Lowercase,
- Default = None
-};
-
-enum class TranslateAnchorType : uint8_t {
- Map,
- Viewport,
- Default = Map
-};
-
-enum class RotateAnchorType : uint8_t {
- Map,
- Viewport,
- Default = Viewport
-};
-
-enum class SourceType : uint8_t {
- Vector,
- Raster,
- GeoJSON,
- Video,
- Default = Vector
-};
-
-inline WindingType parseWindingType(const std::string &type) {
- if (type == "even-odd") return WindingType::EvenOdd;
- if (type == "non-zero") return WindingType::NonZero;
- return WindingType::Default;
-}
-
-inline CapType parseCapType(const std::string &cap) {
- if (cap == "round") return CapType::Round;
- if (cap == "butt") return CapType::Butt;
- if (cap == "square") return CapType::Square;
- return CapType::None;
-}
-
-inline JoinType parseJoinType(const std::string &join) {
- if (join == "miter") return JoinType::Miter;
- if (join == "bevel") return JoinType::Bevel;
- if (join == "round") return JoinType::Round;
- return JoinType::None;
-}
-
-inline TextPathType parseTextPathType(const std::string &path) {
- if (path == "horizontal") return TextPathType::Horizontal;
- if (path == "curve") return TextPathType::Curve;
- return TextPathType::Default;
-}
-
-inline TextTransformType parseTextTransformType(const std::string& transform) {
- if (transform == "uppercase") return TextTransformType::Uppercase;
- if (transform == "lowercase") return TextTransformType::Lowercase;
- return TextTransformType::Default;
-};
-
-inline TranslateAnchorType parseTranslateAnchorType(const std::string &anchor) {
- if (anchor == "map") return TranslateAnchorType::Map;
- if (anchor == "viewport") return TranslateAnchorType::Viewport;
- return TranslateAnchorType::Default;
-}
-
-inline RotateAnchorType parseRotateAnchorType(const std::string &anchor) {
- if (anchor == "map") return RotateAnchorType::Map;
- if (anchor == "viewport") return RotateAnchorType::Viewport;
- return RotateAnchorType::Default;
-}
-
-inline float parseAlignmentType(const std::string &alignment) {
- if (alignment == "right") return 1.0f;
- if (alignment == "left") return 0.0f;
- return 0.5f;
-}
-
-inline float parseVerticalAlignmentType(const std::string &alignment) {
- if (alignment == "bottom") return 1.0f;
- if (alignment == "top") return 0.0f;
- return 0.5f;
-}
-
-inline SourceType parseSourceType(const std::string &source) {
- if (source == "vector") return SourceType::Vector;
- if (source == "raster") return SourceType::Raster;
- if (source == "geojson") return SourceType::GeoJSON;
- if (source == "video") return SourceType::Video;
- return SourceType::Default;
-}
-
-}
-
-#endif
-
diff --git a/include/llmr/style/value.hpp b/include/llmr/style/value.hpp
deleted file mode 100644
index ed14c233e1..0000000000
--- a/include/llmr/style/value.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef LLMR_STYLE_VALUE
-#define LLMR_STYLE_VALUE
-
-#include <llmr/util/variant.hpp>
-#include <llmr/util/pbf.hpp>
-
-#include <cstdlib>
-#include <cerrno>
-
-namespace llmr {
-
-typedef util::variant<bool, int64_t, uint64_t, double, std::string> Value;
-
-std::string toString(const Value &value);
-
-Value parseValue(pbf data);
-
-namespace util {
-inline bool parseNumericString(const std::string &str, double &result) {
- char *end = nullptr;
- const char *begin = str.c_str();
- result = std::strtod(begin, &end);
- while (*end != '\0' && isspace(*end)) end++; // eat whitespace after the end
- return errno == 0 && end - begin == long(str.size());
-}
-}
-
-template <typename T>
-T toNumber(const Value &value) {
- if (value.is<std::string>()) {
- double val;
- return util::parseNumericString(value.get<std::string>(), val) ? val : 0;
- }
- else if (value.is<bool>()) return value.get<bool>();
- else if (value.is<int64_t>()) return value.get<int64_t>();
- else if (value.is<uint64_t>()) return value.get<uint64_t>();
- else if (value.is<double>()) return value.get<double>();
- else return 0;
-}
-
-}
-
-#endif
diff --git a/include/llmr/style/value_comparison.hpp b/include/llmr/style/value_comparison.hpp
deleted file mode 100644
index 4386fae595..0000000000
--- a/include/llmr/style/value_comparison.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef LLMR_STYLE_VALUE_COMPARISON
-#define LLMR_STYLE_VALUE_COMPARISON
-
-#include "value.hpp"
-#include <cstdlib>
-#include <cerrno>
-
-namespace llmr {
-
-namespace util {
-
-namespace detail {
-
-template <typename Operator>
-struct relaxed_operator_visitor {
- typedef bool result_type;
-
- inline bool operator()(bool lhs, bool rhs) const { return Operator()(lhs, rhs); }
-
- template <typename T, class = typename std::enable_if<std::is_arithmetic<T>::value>::type>
- inline bool operator()(bool lhs, T rhs) const { return Operator()(T(lhs), rhs); }
-
- template <typename T, class = typename std::enable_if<std::is_arithmetic<T>::value>::type>
- inline bool operator()(T lhs, bool rhs) const { return Operator()(lhs, T(rhs)); }
-
- inline bool operator()(int64_t lhs, uint64_t rhs) const {
- return lhs < 0 ? false : Operator()(uint64_t(lhs), rhs);
- }
- inline bool operator()(uint64_t lhs, int64_t rhs) const {
- return rhs < 0 ? false : Operator()(lhs, uint64_t(rhs));
- }
-
- template <typename T, class = typename std::enable_if<std::is_arithmetic<T>::value>::type>
- inline bool operator()(const std::string &lhs, T rhs) const {
- double value;
- return parseNumericString(lhs, value) ? Operator()(value, double(rhs)) : false;
- }
-
- template <typename T, class = typename std::enable_if<std::is_arithmetic<T>::value>::type>
- inline bool operator()(T lhs, const std::string &rhs) const {
- double value;
- return parseNumericString(rhs, value) ? Operator()(double(lhs), value) : false;
- }
-
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return Operator()(lhs, rhs); }
-};
-
-struct relaxed_equal_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs == rhs; }
-};
-
-struct relaxed_not_equal_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs != rhs; }
-};
-
-struct relaxed_greater_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs > rhs; }
-};
-
-struct relaxed_greater_equal_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs >= rhs; }
-};
-
-struct relaxed_less_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs < rhs; }
-};
-
-struct relaxed_less_equal_operator {
- template <typename T0, typename T1>
- inline bool operator()(T0 lhs, T1 rhs) const { return lhs <= rhs; }
-};
-
-} // end namespace detail
-
-inline bool relaxed_equal(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_equal_operator>(), lhs, rhs);
-}
-
-inline bool relaxed_not_equal(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_not_equal_operator>(), lhs, rhs);
-}
-
-inline bool relaxed_greater(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_greater_operator>(), lhs, rhs);
-}
-
-inline bool relaxed_greater_equal(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_greater_equal_operator>(), lhs, rhs);
-}
-
-inline bool relaxed_less(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_less_operator>(), lhs, rhs);
-}
-
-inline bool relaxed_less_equal(Value const &lhs, Value const &rhs) {
- return apply_visitor(detail::relaxed_operator_visitor<detail::relaxed_less_equal_operator>(), lhs, rhs);
-}
-
-}
-
-}
-
-#endif
diff --git a/include/llmr/text/collision.hpp b/include/llmr/text/collision.hpp
deleted file mode 100644
index c9dafdd386..0000000000
--- a/include/llmr/text/collision.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef LLMR_TEXT_COLLISION
-#define LLMR_TEXT_COLLISION
-
-#include <llmr/text/types.hpp>
-
-namespace llmr {
-
-class Collision {
-
-public:
- Collision();
- ~Collision();
-
- PlacementProperty place(const GlyphBoxes &boxes,
- const CollisionAnchor &anchor,
- float minPlacementScale, float maxPlacementScale,
- float padding, bool horizontal, bool alwaysVisible);
- float getPlacementScale(const GlyphBoxes &glyphs, float minPlacementScale,
- float maxPlacementScale, float pad);
- PlacementRange getPlacementRange(const GlyphBoxes &glyphs,
- float placementScale, bool horizontal);
- void insert(const GlyphBoxes &glyphs, const CollisionAnchor &anchor,
- float placementScale, const PlacementRange &placementRange,
- bool horizontal, float padding);
-
-private:
- void *cTree;
- void *hTree;
-};
-}
-
-#endif
diff --git a/include/llmr/text/glyph.hpp b/include/llmr/text/glyph.hpp
deleted file mode 100644
index 99c8964701..0000000000
--- a/include/llmr/text/glyph.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef LLMR_TEXT_GLYPH
-#define LLMR_TEXT_GLYPH
-
-#include <llmr/util/rect.hpp>
-
-#include <cstdint>
-#include <vector>
-#include <map>
-
-namespace llmr {
-
-typedef std::pair<uint16_t, uint16_t> GlyphRange;
-
-// Note: this only works for the BMP
-GlyphRange getGlyphRange(char32_t glyph);
-
-struct GlyphMetrics {
- operator bool() const {
- return width == 0 && height == 0 && advance == 0;
- }
-
- // Glyph metrics.
- uint32_t width = 0;
- uint32_t height = 0;
- int32_t left = 0;
- int32_t top = 0;
- uint32_t advance = 0;
-
-};
-
-struct Glyph {
- inline explicit Glyph() : rect(0, 0, 0, 0), metrics() {}
- inline explicit Glyph(const Rect<uint16_t> &rect,
- const GlyphMetrics &metrics)
- : rect(rect), metrics(metrics) {}
-
- operator bool() const {
- return !metrics && !rect;
- }
-
- const Rect<uint16_t> rect;
- const GlyphMetrics metrics;
-};
-
-typedef std::map<uint32_t, Glyph> GlyphPositions;
-
-class GlyphPlacement {
-public:
- inline explicit GlyphPlacement(uint32_t face, uint32_t glyph, uint32_t x, uint32_t y)
- : face(face), glyph(glyph), x(x), y(y) {}
-
- uint32_t face = 0;
- uint32_t glyph = 0;
- int32_t x = 0;
- int32_t y = 0;
-};
-
-typedef std::vector<GlyphPlacement> Shaping;
-}
-
-#endif
diff --git a/include/llmr/text/glyph_store.hpp b/include/llmr/text/glyph_store.hpp
deleted file mode 100644
index a1d1046b7f..0000000000
--- a/include/llmr/text/glyph_store.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef LLMR_TEXT_GLYPH_STORE
-#define LLMR_TEXT_GLYPH_STORE
-
-#include <llmr/text/glyph.hpp>
-#include <llmr/util/pbf.hpp>
-
-#include <cstdint>
-#include <vector>
-#include <future>
-#include <map>
-#include <set>
-#include <unordered_map>
-
-namespace llmr {
-
-
-class SDFGlyph {
-public:
- uint32_t id = 0;
-
- // A signed distance field of the glyph with a border of 3 pixels.
- std::string bitmap;
-
- // Glyph metrics
- GlyphMetrics metrics;
-};
-
-class FontStack {
-public:
- void insert(uint32_t id, const SDFGlyph &glyph);
- const std::map<uint32_t, GlyphMetrics> &getMetrics() const;
- const std::map<uint32_t, SDFGlyph> &getSDFs() const;
- const Shaping getShaping(const std::u32string &string,
- const float &maxWidth,
- const float &lineHeight,
- const float &alignment,
- const float &verticalAlignment,
- const float &letterSpacing) const;
- void lineWrap(Shaping &shaping,
- const float &lineHeight,
- const float &maxWidth,
- const float &alignment,
- const float &verticalAlignment) const;
-
-private:
- std::map<uint32_t, std::string> bitmaps;
- std::map<uint32_t, GlyphMetrics> metrics;
- std::map<uint32_t, SDFGlyph> sdfs;
- mutable std::mutex mtx;
-};
-
-class GlyphPBF {
-public:
- GlyphPBF(const std::string &glyphURL, const std::string &fontStack, GlyphRange glyphRange);
-
- void parse(FontStack &stack);
-
- std::shared_future<GlyphPBF &> getFuture();
-
-private:
- std::string data;
- std::promise<GlyphPBF &> promise;
- std::shared_future<GlyphPBF &> future;
- std::mutex mtx;
-};
-
-// Manages Glyphrange PBF loading.
-class GlyphStore {
-public:
- GlyphStore(const std::string &glyphURL);
-
- // Block until all specified GlyphRanges of the specified font stack are loaded.
- void waitForGlyphRanges(const std::string &fontStack, const std::set<GlyphRange> &glyphRanges);
-
- FontStack &getFontStack(const std::string &fontStack);
-
-private:
- // Loads an individual glyph range from the font stack and adds it to rangeSets
- std::shared_future<GlyphPBF &> loadGlyphRange(const std::string &fontStack, std::map<GlyphRange, std::unique_ptr<GlyphPBF>> &rangeSets, GlyphRange range);
-
- FontStack &createFontStack(const std::string &fontStack);
-
-public:
- const std::string glyphURL;
-
-private:
- std::unordered_map<std::string, std::map<GlyphRange, std::unique_ptr<GlyphPBF>>> ranges;
- std::unordered_map<std::string, std::unique_ptr<FontStack>> stacks;
- std::mutex mtx;
-};
-
-
-}
-
-#endif
diff --git a/include/llmr/text/placement.hpp b/include/llmr/text/placement.hpp
deleted file mode 100644
index c245e260f0..0000000000
--- a/include/llmr/text/placement.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef LLMR_TEXT_PLACEMENT
-#define LLMR_TEXT_PLACEMENT
-
-#include <llmr/text/collision.hpp>
-#include <llmr/geometry/geometry.hpp>
-#include <llmr/util/vec.hpp>
-#include <llmr/text/glyph.hpp>
-#include <vector>
-
-namespace llmr {
-
-class TextBucket;
-class StyleBucketText;
-
-class Placement {
-public:
- Placement(int8_t zoom);
-
- void addFeature(TextBucket &bucket, const std::vector<Coordinate> &line,
- const StyleBucketText &info,
- const GlyphPositions &face,
- const Shaping &shaping);
-
-private:
- const int8_t zoom;
- Collision collision;
- const float zOffset;
- const float maxPlacementScale;
-
-public:
- static const int tileExtent;
- static const int glyphSize;
- static const float minScale;
-};
-}
-
-#endif
diff --git a/include/llmr/text/rotation_range.hpp b/include/llmr/text/rotation_range.hpp
deleted file mode 100644
index dcdcc0143c..0000000000
--- a/include/llmr/text/rotation_range.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef LLMR_TEXT_ROTATION_RANGE
-#define LLMR_TEXT_ROTATION_RANGE
-
-#include <llmr/util/math.hpp>
-#include <llmr/text/types.hpp>
-
-#include <vector>
-#include <cassert>
-
-namespace llmr {
-
-/*
- * Combine an array of collision ranges to form a continuous
- * range that includes 0. Collisions within the ignoreRange are ignored
- */
-CollisionRange mergeCollisions(const CollisionList &collisions,
- PlacementRange ignoreRange);
-
-/*
- * Calculate collision ranges for two rotating boxes.e
- */
-CollisionList rotatingRotatingCollisions(const CollisionRect &a,
- const CollisionRect &b,
- const CollisionAnchor &anchorToAnchor);
-
-/*
- * Return the intersection points of a circle and a line segment;
- */
-void circleEdgeCollisions(std::back_insert_iterator<CollisionAngles> angles,
- const CollisionPoint &corner, float radius,
- const CollisionPoint &p1, const CollisionPoint &p2);
-
-/*
- * Calculate the ranges for which the corner,
- * rotatated around the anchor, is within the box;
- */
-void cornerBoxCollisions(std::back_insert_iterator<CollisionList> collisions,
- const CollisionPoint &corner,
- const CollisionCorners &boxCorners, bool flip = false);
-
-/*
- * Calculate collision ranges for a rotating box and a fixed box;
- */
-CollisionList rotatingFixedCollisions(const CollisionRect &rotating,
- const CollisionRect &fixed);
-
-/*
- * Calculate the range a box conflicts with a second box
- */
-CollisionRange rotationRange(const GlyphBox &inserting,
- const PlacementBox &blocker, float scale);
-}
-
-#endif
diff --git a/include/llmr/text/types.hpp b/include/llmr/text/types.hpp
deleted file mode 100644
index 46a130d0e3..0000000000
--- a/include/llmr/text/types.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef LLMR_TEXT_TYPES
-#define LLMR_TEXT_TYPES
-
-#include <llmr/util/vec.hpp>
-#include <llmr/util/rect.hpp>
-#include <array>
-#include <vector>
-
-namespace llmr {
-
-typedef vec2<float> CollisionPoint;
-typedef vec2<float> CollisionAnchor;
-
-typedef std::array<float, 2> PlacementRange;
-typedef float CollisionAngle;
-typedef std::vector<CollisionAngle> CollisionAngles;
-typedef std::array<CollisionAngle, 2> CollisionRange;
-typedef std::vector<CollisionRange> CollisionList;
-typedef std::array<CollisionPoint, 4> CollisionCorners;
-
-struct CollisionRect {
- CollisionPoint tl;
- CollisionPoint br;
- inline explicit CollisionRect() {}
- inline explicit CollisionRect(CollisionPoint::Type ax,
- CollisionPoint::Type ay,
- CollisionPoint::Type bx,
- CollisionPoint::Type by)
- : tl(ax, ay), br(bx, by) {}
- inline explicit CollisionRect(const CollisionPoint &tl,
- const CollisionPoint &br)
- : tl(tl), br(br) {}
-};
-
-// These are the glyph boxes that we want to have placed.
-struct GlyphBox {
- explicit GlyphBox() {}
- explicit GlyphBox(const CollisionRect &bbox, const CollisionRect &box,
- float minScale)
- : bbox(bbox), box(box), minScale(minScale) {}
- explicit GlyphBox(const CollisionRect &box, float minScale, float maxScale,
- const CollisionAnchor &anchor, bool rotate)
- : anchor(anchor),
- box(box),
- rotate(rotate),
- minScale(minScale),
- maxScale(maxScale) {}
-
- CollisionAnchor anchor;
- CollisionRect bbox;
- CollisionRect box;
- bool rotate = false;
- float minScale = 0.0f;
- float maxScale = std::numeric_limits<float>::infinity();
-};
-
-typedef std::vector<GlyphBox> GlyphBoxes;
-
-
-// TODO: Transform the vec2<float>s to vec2<int16_t> to save bytes
-struct PlacedGlyph {
- explicit PlacedGlyph(const vec2<float> &tl, const vec2<float> &tr,
- const vec2<float> &bl, const vec2<float> &br,
- const Rect<uint16_t> &tex, float angle, const GlyphBox &glyphBox)
- : tl(tl),
- tr(tr),
- bl(bl),
- br(br),
- tex(tex),
- angle(angle),
- glyphBox(glyphBox) {}
-
- vec2<float> tl, tr, bl, br;
- Rect<uint16_t> tex;
- float angle;
- GlyphBox glyphBox;
-};
-
-typedef std::vector<PlacedGlyph> PlacedGlyphs;
-
-// These are the placed boxes contained in the rtree.
-struct PlacementBox {
- CollisionAnchor anchor;
- CollisionRect bbox;
- CollisionRect box;
- bool rotate = false;
- PlacementRange placementRange = {{0.0f, 0.0f}};
- float placementScale = 0.0f;
- float maxScale = std::numeric_limits<float>::infinity();
- float padding = 0.0f;
-};
-
-struct PlacementProperty {
- explicit PlacementProperty() {}
- explicit PlacementProperty(float zoom, const PlacementRange &rotationRange)
- : zoom(zoom), rotationRange(rotationRange) {}
-
- inline operator bool() const {
- return !isnan(zoom) && zoom != std::numeric_limits<float>::infinity() &&
- rotationRange[0] != rotationRange[1];
- }
-
- float zoom = std::numeric_limits<float>::infinity();
- PlacementRange rotationRange = {{0.0f, 0.0f}};
-};
-
-}
-
-#endif
diff --git a/include/llmr/util/clip_ids.hpp b/include/llmr/util/clip_ids.hpp
deleted file mode 100644
index 4e4d0abe34..0000000000
--- a/include/llmr/util/clip_ids.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef LLMR_UTIL_CLIP_IDS
-#define LLMR_UTIL_CLIP_IDS
-
-#include <llmr/map/tile.hpp>
-#include <list>
-#include <set>
-#include <map>
-
-namespace llmr {
-
-static constexpr uint8_t clipMask[9] { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF };
-
-void updateClipIDs(const std::list<Tile *> &array);
-
-std::map<Tile::ID, ClipID> computeClipIDs(std::forward_list<Tile::ID> array);
-
-}
-
-#endif
diff --git a/include/llmr/util/constants.hpp b/include/llmr/util/constants.hpp
deleted file mode 100644
index 999ef05fcc..0000000000
--- a/include/llmr/util/constants.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef LLMR_UTIL_CONSTANTS
-#define LLMR_UTIL_CONSTANTS
-
-#include <cmath>
-
-#include "vec.hpp"
-
-namespace llmr {
-
-namespace util {
-
-extern const float tileSize;
-
-}
-
-namespace debug {
-
-extern const bool tileParseWarnings;
-extern const bool styleParseWarnings;
-extern const bool spriteWarnings;
-extern const bool renderWarnings;
-extern const bool renderTree;
-extern const bool labelTextMissingWarning;
-extern const bool missingFontStackWarning;
-extern const bool missingFontFaceWarning;
-extern const bool glyphWarning;
-extern const bool shapingWarning;
-
-}
-
-}
-
-#endif
diff --git a/include/llmr/util/enum.hpp b/include/llmr/util/enum.hpp
deleted file mode 100644
index 85a2d7c896..0000000000
--- a/include/llmr/util/enum.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef LLMR_UTIL_ENUM
-#define LLMR_UTIL_ENUM
-
-#include <iosfwd>
-#include <string>
-
-namespace llmr {
-
-template <typename Type>
-struct EnumValue {
- const Type value;
- const char *name;
-};
-
-template <typename EnumName, const EnumValue<EnumName> *names, const size_t length>
-struct Enum {
- using Type = EnumName;
- Type value;
- static const constexpr size_t l = length;
-private:
- static constexpr inline bool compare(const char *a, const char *b) {
- return *a == *b && (*a == '\0' || compare(a + 1, b + 1));
- }
- static constexpr inline const char *lookup_type(Type e, EnumValue<Type> const * const l, size_t r) {
- return r == 0 ? "" : l->value == e ? l->name : lookup_type(e, l + 1, r - 1);
- }
- static constexpr inline Type lookup_name(const char *n, EnumValue<Type> const * const l, size_t r) {
- return r == 0 ? Type(-1) : compare(l->name, n) ? l->value : lookup_name(n, l + 1, r - 1);
- }
-public:
- inline constexpr Enum(const char *n) : value(lookup_name(n, names, length)) {}
- inline constexpr Enum(const std::string &n) : value(lookup_name(n.c_str(), names, length)) {}
- inline constexpr Enum(Type t) : value(t) {}
-
- inline void operator=(const char *n) { value = lookup_name(n, names, length); }
- inline void operator=(const std::string &n) { *this = n.c_str(); }
- inline void operator=(Type t) { value = t; }
-
- inline constexpr bool valid() const { return value != Type(-1); }
-
- inline constexpr const char *c_str() const { return lookup_type(value, names, length); }
- inline std::string str() const { return c_str(); }
-
- inline constexpr operator Type() const { return value; }
-};
-
-#define LLMR_DEFINE_ENUM_CLASS(name, type, strings...) \
- const constexpr ::llmr::EnumValue<type> type##_names[] = strings; \
- using name = ::llmr::Enum<type, type##_names, sizeof(type##_names) / sizeof(::llmr::EnumValue<type>)>; \
- inline std::ostream& operator<<(std::ostream& os, type t) { return os << name(t).str(); }
-
-}
-
-#endif
-
diff --git a/include/llmr/util/error.hpp b/include/llmr/util/error.hpp
deleted file mode 100644
index 95106ff2cd..0000000000
--- a/include/llmr/util/error.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef LLMR_UTIL_ERROR
-#define LLMR_UTIL_ERROR
-
-#include <stdexcept>
-#include <string>
-
-namespace llmr {
-namespace error {
-
-struct style_parse : std::exception {
- inline style_parse(size_t offset, const char *msg) : offset(offset), msg(msg) {}
- inline const char* what() const noexcept { return msg.c_str(); }
- const size_t offset;
- const std::string msg;
-};
-}
-
-}
-
-#endif \ No newline at end of file
diff --git a/include/llmr/util/image.hpp b/include/llmr/util/image.hpp
deleted file mode 100644
index ac20473e82..0000000000
--- a/include/llmr/util/image.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef LLMR_UTIL_IMAGE
-#define LLMR_UTIL_IMAGE
-
-#include <string>
-#include <cstring>
-#include <stdexcept>
-
-namespace llmr {
-namespace util {
-
-std::string compress_png(int width, int height, void *rgba, bool flip = false);
-
-
-class Image {
-public:
- Image(const std::string &img, bool flip = false);
- ~Image();
-
- inline const char *getData() const { return img; }
- inline uint32_t getWidth() const { return width; }
- inline uint32_t getHeight() const { return height; }
-
-private:
- // loaded image dimensions
- uint32_t width = 0, height = 0;
-
- // the raw image data
- char *img = nullptr;
-
-};
-
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/io.hpp b/include/llmr/util/io.hpp
deleted file mode 100644
index cdad979134..0000000000
--- a/include/llmr/util/io.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef LLMR_UTIL_IO
-#define LLMR_UTIL_IO
-
-#include <string>
-
-namespace llmr {
-namespace util {
-
-void write_file(const std::string &filename, const std::string &data);
-std::string read_file(const std::string &filename);
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/mat4.hpp b/include/llmr/util/mat4.hpp
deleted file mode 100644
index a5dc83f7d1..0000000000
--- a/include/llmr/util/mat4.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// This is an incomplete port of http://glmatrix.net/
-//
-// Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV
-//
-// This software is provided 'as-is', without any express or implied warranty.
-// In no event will the authors be held liable for any damages arising from the
-// use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not claim
-// that you wrote the original software. If you use this software in a
-// product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-//
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-//
-// 3. This notice may not be removed or altered from any source distribution.
-
-#ifndef LLMR_UTIL_MAT4
-#define LLMR_UTIL_MAT4
-
-#include <array>
-
-namespace llmr {
-
-typedef std::array<float, 16> mat4;
-
-namespace matrix {
-
-void identity(mat4& out);
-void ortho(mat4& out, float left, float right, float bottom, float top, float near, float far);
-void copy(mat4& out, const mat4& a);
-void translate(mat4& out, const mat4& a, float x, float y, float z);
-void rotate_z(mat4& out, const mat4& a, float rad);
-void scale(mat4& out, const mat4& a, float x, float y, float z);
-void multiply(mat4& out, const mat4& a, const mat4& b);
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/math.hpp b/include/llmr/util/math.hpp
deleted file mode 100644
index ab8e392c48..0000000000
--- a/include/llmr/util/math.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef LLMR_UTIL_MATH
-#define LLMR_UTIL_MATH
-
-#include <cmath>
-#include <array>
-
-#include "vec.hpp"
-
-namespace llmr {
-namespace util {
-
-
-template <typename T>
-inline T max(T a, T b) {
- return b > a ? b : a;
-}
-
-template <typename T>
-inline T max(T a, T b, T c) {
- return max(max(a, b), c);
-}
-
-template <typename T>
-inline T max(T a, T b, T c, T d) {
- return max(max(a, b), max(c, d));
-}
-
-template <typename T>
-inline T min(T a, T b) {
- return b < a ? b : a;
-}
-
-template <typename T>
-inline T min(T a, T b, T c) {
- return min(min(a, b), c);
-}
-
-template <typename T>
-inline T min(T a, T b, T c, T d) {
- return min(min(a, b), min(c, d));
-}
-
-// Find the angle of the two vectors, solving the formula for the cross product
-// a x b = |a||b|sin(θ) for θ.
-template <typename T = double, typename S>
-inline T angle_between(S ax, S ay, S bx, S by) {
- return std::atan2((ax * by - ay * bx), ax * bx + ay * by);
-}
-
-template <typename T = double, typename S>
-inline T angle_between(const vec2<S>& a, const vec2<S>& b) {
- return angle_between(a.x, a.y, b.x, b.y);
-}
-
-template <typename T = double, typename S>
-inline T angle_to(const vec2<S>& a, const vec2<S>& b) {
- return std::atan2(a.y - b.y, a.x - b.x);
-}
-
-template <typename T, typename S1, typename S2>
-inline T interp(S1 a, S2 b, T t) {
- return (a * ((T)1 - t)) + (b * t);
-}
-
-// Reflect an angle around 0 degrees
-template <typename T>
-inline std::array<T, 2> flip(const std::array<T, 2>& c) {
- return {{
- static_cast<T>(2 * M_PI - c[0]),
- static_cast<T>(2 * M_PI - c[1])
- }};
-}
-
-template <typename T, typename S1, typename S2>
-inline vec2<T> normal(const S1& a, const S2& b) {
- T dx = b.x - a.x;
- T dy = b.y - a.y;
- T c = std::sqrt(dx * dx + dy * dy);
- return { dx / c, dy / c };
-}
-
-template <typename T, typename S1, typename S2>
-inline T dist(const S1& a, const S2& b) {
- T dx = b.x - a.x;
- T dy = b.y - a.y;
- T c = std::sqrt(dx * dx + dy * dy);
- return c;
-}
-
-template <typename T>
-inline T length(T a, T b) {
- return std::sqrt(a * a + b * b);
-}
-
-// Take the magnitude of vector a.
-template <typename T = double, typename S>
-inline T mag(const S& a) {
- return std::sqrt(a.x * a.x + a.y * a.y);
-}
-
-template <typename T>
-T clamp(T value, T min, T max) {
- return value < min ? min : (value > max ? max : value);
-}
-
-template <typename T>
-T smoothstep(T edge0, T edge1, T x) {
- T t = clamp((x - edge0) / (edge1 - edge0), T(0), T(1));
- return t * t * (T(3) - T(2) * t);
-}
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/noncopyable.hpp b/include/llmr/util/noncopyable.hpp
deleted file mode 100644
index 7891e529e3..0000000000
--- a/include/llmr/util/noncopyable.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef LLMR_UTIL_NONCOPYABLE
-#define LLMR_UTIL_NONCOPYABLE
-
-namespace llmr { namespace util {
-
-namespace non_copyable_
-{
-
-class noncopyable
-{
-protected:
- constexpr noncopyable() = default;
- ~noncopyable() = default;
- noncopyable( noncopyable const& ) = delete;
- noncopyable& operator=(noncopyable const& ) = delete;
-};
-}
-
-typedef non_copyable_::noncopyable noncopyable;
-
-}}
-
-#endif //LLMR_UTIL_NONCOPYABLE
diff --git a/include/llmr/util/pbf.hpp b/include/llmr/util/pbf.hpp
deleted file mode 100644
index 13fe8d6ee1..0000000000
--- a/include/llmr/util/pbf.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-#ifndef LLMR_UTIL_PBF
-#define LLMR_UTIL_PBF
-
-/*
- * Some parts are from upb - a minimalist implementation of protocol buffers.
- *
- * Copyright (c) 2008-2011 Google Inc. See LICENSE for details.
- * Author: Josh Haberman <jhaberman@gmail.com>
- */
-
-#include <string>
-#include <cstring>
-
-namespace llmr {
-
-struct pbf {
- struct exception : std::exception { const char *what() const noexcept { return "pbf exception"; } };
- struct unterminated_varint_exception : exception { const char *what() const noexcept { return "pbf unterminated varint exception"; } };
- struct varint_too_long_exception : exception { const char *what() const noexcept { return "pbf varint too long exception"; } };
- struct unknown_field_type_exception : exception { const char *what() const noexcept { return "pbf unknown field type exception"; } };
- struct end_of_buffer_exception : exception { const char *what() const noexcept { return "pbf end of buffer exception"; } };
-
- inline pbf(const unsigned char *data, size_t length);
- inline pbf();
-
- inline operator bool() const;
-
- inline bool next();
- inline bool next(uint32_t tag);
- template <typename T = uint32_t> inline T varint();
- template <typename T = uint32_t> inline T svarint();
-
- template <typename T = uint32_t, int bytes = 4> inline T fixed();
- inline float float32();
- inline double float64();
-
- inline std::string string();
- inline bool boolean();
-
- inline pbf message();
-
- inline void skip();
- inline void skipValue(uint32_t val);
- inline void skipBytes(uint32_t bytes);
-
- const uint8_t *data = nullptr;
- const uint8_t *end = nullptr;
- uint32_t value = 0;
- uint32_t tag = 0;
-};
-
-pbf::pbf(const unsigned char *data, size_t length)
- : data(data),
- end(data + length),
- value(0),
- tag(0) {
-}
-
-pbf::pbf()
- : data(nullptr),
- end(nullptr),
- value(0),
- tag(0) {
-}
-
-
-pbf::operator bool() const {
- return data < end;
-}
-
-bool pbf::next() {
- if (data < end) {
- value = static_cast<uint32_t>(varint());
- tag = value >> 3;
- return true;
- }
- return false;
-}
-
-bool pbf::next(uint32_t requested_tag) {
- while (next()) {
- if (tag == requested_tag) {
- return true;
- } else {
- skip();
- }
- }
- return false;
-}
-
-template <typename T>
-T pbf::varint() {
- uint8_t byte = 0x80;
- T result = 0;
- int bitpos;
- for (bitpos = 0; bitpos < 70 && (byte & 0x80); bitpos += 7) {
- if (data >= end) {
- throw unterminated_varint_exception();
- }
- result |= ((T)(byte = *data) & 0x7F) << bitpos;
-
- data++;
- }
- if (bitpos == 70 && (byte & 0x80)) {
- throw varint_too_long_exception();
- }
-
- return result;
-}
-
-template <typename T>
-T pbf::svarint() {
- T n = varint<T>();
- return (n >> 1) ^ -(T)(n & 1);
-}
-
-template <typename T, int bytes>
-T pbf::fixed() {
- skipBytes(bytes);
- T result;
- memcpy(&result, data - bytes, bytes);
- return result;
-}
-
-float pbf::float32() {
- return fixed<float, 4>();
-}
-
-double pbf::float64() {
- return fixed<double, 8>();
-}
-
-std::string pbf::string() {
- uint32_t bytes = static_cast<uint32_t>(varint());
- const char *string = reinterpret_cast<const char*>(data);
- skipBytes(bytes);
- return std::string(string, bytes);
-}
-
-bool pbf::boolean() {
- skipBytes(1);
- return *(bool *)(data - 1);
-}
-
-pbf pbf::message() {
- uint32_t bytes = static_cast<uint32_t>(varint());
- const uint8_t *pos = data;
- skipBytes(bytes);
- return pbf(pos, bytes);
-}
-
-void pbf::skip() {
- skipValue(value);
-}
-
-void pbf::skipValue(uint32_t val) {
- switch (val & 0x7) {
- case 0: // varint
- varint();
- break;
- case 1: // 64 bit
- skipBytes(8);
- break;
- case 2: // string/message
- skipBytes(static_cast<uint32_t>(varint()));
- break;
- case 5: // 32 bit
- skipBytes(4);
- break;
- default:
- throw unknown_field_type_exception();
- }
-}
-
-void pbf::skipBytes(uint32_t bytes) {
- if (data + bytes > end) {
- throw end_of_buffer_exception();
- }
- data += bytes;
-}
-
-} // end namespace llmr
-
-#endif
diff --git a/include/llmr/util/raster.hpp b/include/llmr/util/raster.hpp
deleted file mode 100644
index cbc342d562..0000000000
--- a/include/llmr/util/raster.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef LLMR_UTIL_RASTER
-#define LLMR_UTIL_RASTER
-
-#include <llmr/util/transition.hpp>
-#include <llmr/util/texturepool.hpp>
-#include <llmr/util/image.hpp>
-
-#include <string>
-#include <mutex>
-#include <memory>
-
-typedef struct uv_loop_s uv_loop_t;
-
-namespace llmr {
-
-class Raster : public std::enable_shared_from_this<Raster> {
-
-public:
- Raster(const std::shared_ptr<Texturepool> &texturepool);
- ~Raster();
-
- // load image data
- bool load(const std::string &img);
-
- // bind current texture
- void bind(bool linear = false);
-
- // loaded status
- bool isLoaded() const;
-
- // transitions
- void beginFadeInTransition();
- bool needsTransition() const;
- void updateTransitions(timestamp now);
-
-public:
- // loaded image dimensions
- uint32_t width = 0, height = 0;
-
- // has been uploaded to texture
- bool textured = false;
-
- // the uploaded texture
- uint32_t texture = 0;
-
- // texture opacity
- double opacity = 0;
-
-private:
- mutable std::mutex mtx;
-
- // raw pixels have been loaded
- bool loaded = false;
-
- // shared texture pool
- std::shared_ptr<Texturepool> texturepool;
-
- // min/mag filter
- uint32_t filter = 0;
-
- // the raw pixels
- std::unique_ptr<util::Image> img;
-
- // fade in transition
- std::shared_ptr<util::transition> fade_transition = nullptr;
-};
-
-}
-
-#endif
diff --git a/include/llmr/util/rect.hpp b/include/llmr/util/rect.hpp
deleted file mode 100644
index 2e142c3018..0000000000
--- a/include/llmr/util/rect.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef LLMR_UTIL_RECT
-#define LLMR_UTIL_RECT
-
-namespace llmr {
-
-template <typename T>
-struct Rect {
- explicit Rect(T x, T y, T w, T h) : x(x), y(y), w(w), h(h) {}
- T x = 0, y = 0;
- T w = 0, h = 0;
-
- template <typename Number>
- Rect operator *(Number value) const {
- return Rect(x * value, y * value, w * value, h * value);
- }
-
- operator bool() const { return w == 0 || h == 0; }
-};
-}
-
-#endif
diff --git a/include/llmr/util/recursive_wrapper.hpp b/include/llmr/util/recursive_wrapper.hpp
deleted file mode 100644
index b87dc5699a..0000000000
--- a/include/llmr/util/recursive_wrapper.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef MAPBOX_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
-#define MAPBOX_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
-
-#include <utility>
-
-namespace llmr { namespace util {
-
-template <typename T>
-class recursive_wrapper
-{
-public:
- using type = T;
-private:
-
- T* p_;
-
-public:
-
- ~recursive_wrapper();
- recursive_wrapper();
-
- recursive_wrapper(recursive_wrapper const& operand);
- recursive_wrapper(T const& operand);
- recursive_wrapper(recursive_wrapper&& operand);
- recursive_wrapper(T&& operand);
-
-private:
-
- void assign(const T& rhs);
-
-public:
-
- inline recursive_wrapper& operator=(recursive_wrapper const& rhs)
- {
- assign( rhs.get() );
- return *this;
- }
-
- inline recursive_wrapper& operator=(T const& rhs)
- {
- assign( rhs );
- return *this;
- }
-
- inline void swap(recursive_wrapper& operand) noexcept
- {
- T* temp = operand.p_;
- operand.p_ = p_;
- p_ = temp;
- }
-
-
- recursive_wrapper& operator=(recursive_wrapper&& rhs) noexcept
- {
- swap(rhs);
- return *this;
- }
-
- recursive_wrapper& operator=(T&& rhs)
- {
- get() = std::move(rhs);
- return *this;
- }
-
-
-public:
-
- T& get() { return *get_pointer(); }
- const T& get() const { return *get_pointer(); }
- T* get_pointer() { return p_; }
- const T* get_pointer() const { return p_; }
- operator T const&() const { return this->get(); }
- operator T&() { return this->get(); }
-};
-
-template <typename T>
-recursive_wrapper<T>::~recursive_wrapper()
-{
- delete p_;
-}
-
-template <typename T>
-recursive_wrapper<T>::recursive_wrapper()
- : p_(new T)
-{
-}
-
-template <typename T>
-recursive_wrapper<T>::recursive_wrapper(recursive_wrapper const& operand)
- : p_(new T( operand.get() ))
-{
-}
-
-template <typename T>
-recursive_wrapper<T>::recursive_wrapper(T const& operand)
- : p_(new T(operand))
-{
-}
-
-template <typename T>
-recursive_wrapper<T>::recursive_wrapper(recursive_wrapper&& operand)
- : p_(operand.p_)
-{
- operand.p_ = nullptr;
-}
-
-template <typename T>
-recursive_wrapper<T>::recursive_wrapper(T&& operand)
- : p_(new T( std::move(operand) ))
-{
-}
-
-template <typename T>
-void recursive_wrapper<T>::assign(const T& rhs)
-{
- this->get() = rhs;
-}
-
-template <typename T>
-inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs) noexcept
-{
- lhs.swap(rhs);
-}
-
-}}
-
-#endif // MAPBOX_UTIL_VARIANT_RECURSIVE_WRAPPER_HPP
diff --git a/include/llmr/util/std.hpp b/include/llmr/util/std.hpp
deleted file mode 100644
index fad3380bc4..0000000000
--- a/include/llmr/util/std.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef LLMR_UTIL_STD
-#define LLMR_UTIL_STD
-
-#include <memory>
-
-namespace std {
-
-// C++14 backfill from http://herbsutter.com/gotw/_102/
-template<typename T, typename ...Args>
-::std::unique_ptr<T> make_unique(Args&& ...args) {
- return ::std::unique_ptr<T>(new T(::std::forward<Args>(args)...));
-}
-
-}
-
-namespace llmr {
-namespace util {
-
-template <typename Container, typename ForwardIterator, typename Predicate>
-void erase_if(Container &container, ForwardIterator it, const ForwardIterator end, Predicate pred) {
- while (it != end) {
- if (pred(*it)) {
- container.erase(it++);
- } else {
- ++it;
- }
- }
-}
-
-template <typename Container, typename Predicate>
-void erase_if(Container &container, Predicate pred) {
- erase_if(container, container.begin(), container.end(), pred);
-}
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/string.hpp b/include/llmr/util/string.hpp
deleted file mode 100644
index 50293b9f40..0000000000
--- a/include/llmr/util/string.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef LLMR_UTIL_STRING
-#define LLMR_UTIL_STRING
-
-#include <string>
-
-namespace llmr {
-namespace util {
-
-template<size_t max, typename... Args>
-inline std::string sprintf(const char *msg, Args... args) {
- char res[max];
- int len = snprintf(res, sizeof(res), msg, args...);
- return std::string(res, len);
-}
-
-template<size_t max, typename... Args>
-inline std::string sprintf(const std::string &msg, Args... args) {
- return sprintf<max>(msg.c_str(), args...);
-}
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/texturepool.hpp b/include/llmr/util/texturepool.hpp
deleted file mode 100644
index 348d25d29a..0000000000
--- a/include/llmr/util/texturepool.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef LLMR_UTIL_TEXTUREPOOL
-#define LLMR_UTIL_TEXTUREPOOL
-
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/platform/gl.hpp>
-
-#include <set>
-#include <mutex>
-
-namespace llmr {
-
-class Texturepool : private util::noncopyable {
-
-public:
- GLuint getTextureID();
- void removeTextureID(GLuint texture_id);
- void clearTextureIDs();
-
-private:
- std::set<GLuint> texture_ids;
-};
-
-}
-
-#endif
diff --git a/include/llmr/util/threadpool.hpp b/include/llmr/util/threadpool.hpp
deleted file mode 100644
index c3649c60e5..0000000000
--- a/include/llmr/util/threadpool.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef LLMR_UTIL_THREADPOOL
-#define LLMR_UTIL_THREADPOOL
-
-#include <pthread.h>
-#include <forward_list>
-#include <queue>
-
-namespace llmr {
-namespace util {
-
-class Threadpool {
-private:
- class Worker {
- public:
- Worker(Threadpool& pool);
- ~Worker();
- static void *loop(void *ptr);
-
- private:
- Threadpool& pool;
- pthread_t thread;
- };
-
-public:
- Threadpool(int max_workers = 4);
- typedef void (*Callback)(void *);
- void add(Callback callback, void *data);
-
-private:
- typedef std::pair<Callback, void *> Task;
- const int max_workers;
- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- pthread_cond_t condition = PTHREAD_COND_INITIALIZER;
- std::forward_list<Worker> workers;
- int worker_count = 0;
- std::queue<Task> tasks;
-};
-
-extern std::unique_ptr<Threadpool> threadpool;
-
-}
-}
-
-#endif
-
diff --git a/include/llmr/util/time.hpp b/include/llmr/util/time.hpp
deleted file mode 100644
index 9a27cdbe31..0000000000
--- a/include/llmr/util/time.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef LLMR_UTIL_TIME
-#define LLMR_UTIL_TIME
-
-#include <uv.h>
-
-namespace llmr {
-
-typedef uint64_t timestamp;
-
-namespace util {
-
-
-// Returns time in nanoseconds since an arbitrary point in the past. This has
-// no relation to the current time, but is continuously increasing, so
-// comparisons between different timestamps produce meaningful values.
-inline timestamp now() {
- return uv_hrtime();
-}
-}
-
-// used for time conversions
-constexpr timestamp operator"" _nanoseconds (long double ns) { return ns; }
-constexpr timestamp operator"" _nanosecond (long double ns) { return ns; }
-constexpr timestamp operator"" _microseconds (long double us) { return us * 1e3; }
-constexpr timestamp operator"" _microsecond (long double us) { return us * 1e3; }
-constexpr timestamp operator"" _milliseconds (long double ms) { return ms * 1e6; }
-constexpr timestamp operator"" _millisecond (long double ms) { return ms * 1e6; }
-constexpr timestamp operator"" _seconds (long double s) { return s * 1e9; }
-constexpr timestamp operator"" _second (long double s) { return s * 1e9; }
-
-constexpr timestamp operator"" _nanoseconds (unsigned long long ns) { return ns; }
-constexpr timestamp operator"" _nanosecond (unsigned long long ns) { return ns; }
-constexpr timestamp operator"" _microseconds (unsigned long long us) { return us * 1e3; }
-constexpr timestamp operator"" _microsecond (unsigned long long us) { return us * 1e3; }
-constexpr timestamp operator"" _milliseconds (unsigned long long ms) { return ms * 1e6; }
-constexpr timestamp operator"" _millisecond (unsigned long long ms) { return ms * 1e6; }
-constexpr timestamp operator"" _seconds (unsigned long long s) { return s * 1e9; }
-constexpr timestamp operator"" _second (unsigned long long s) { return s * 1e9; }
-
-}
-
-#endif
diff --git a/include/llmr/util/timer.hpp b/include/llmr/util/timer.hpp
deleted file mode 100644
index 5dc0cfaf3f..0000000000
--- a/include/llmr/util/timer.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef LLMR_UTIL_TIMER
-#define LLMR_UTIL_TIMER
-
-#include <llmr/platform/event.hpp>
-
-#include <string>
-
-namespace llmr {
-namespace util {
-
-#ifndef DISABLE_TIMER
-class timer {
-public:
- timer(Event event = Event::General);
- timer(EventSeverity severity, Event event = Event::General);
- timer(const std::string &name, Event event = Event::General);
- timer(const std::string &name, EventSeverity severity, Event event = Event::General);
- void report(const std::string &name);
- ~timer();
-
-private:
- const std::string name;
- EventSeverity severity = EventSeverity::Debug;
- Event event = Event::General;
- uint64_t start;
-};
-#else
-class timer {
- inline timer(Event event = Event::General);
- inline timer(EventSeverity severity, Event event = Event::General);
- inline timer(const std::string &name, Event event = Event::General);
- inline timer(const std::string &name, EventSeverity severity, Event event = Event::General);
- inline void report(const std::string &name) {}
- inline ~timer() {}
-};
-#endif
-}
-}
-
-#endif
diff --git a/include/llmr/util/token.hpp b/include/llmr/util/token.hpp
deleted file mode 100644
index 6795b97d12..0000000000
--- a/include/llmr/util/token.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef LLMR_UTIL_TOKEN
-#define LLMR_UTIL_TOKEN
-
-#ifdef __linux__
-#include <boost/regex.hpp>
-namespace regex_impl = boost;
-#else
-#include <regex>
-namespace regex_impl = std;
-#endif
-
-#include <map>
-
-namespace llmr {
-namespace util {
-
-namespace detail {
-const regex_impl::regex tokenRegex("\\{(\\w+)\\}");
-const regex_impl::sregex_token_iterator tokensEnd = regex_impl::sregex_token_iterator();
-}
-
-template <typename Lookup>
-std::string replaceTokens(const std::string &source, const Lookup &lookup) {
- std::string result;
- result.reserve(source.size());
-
- bool token = false;
- for (auto token_it = regex_impl::sregex_token_iterator(source.begin(), source.end(),
- detail::tokenRegex, {-1, 1});
- token_it != detail::tokensEnd; ++token_it, token = !token) {
- if (!token_it->matched) {
- continue;
- }
-
- result += token ? lookup(token_it->str()) : token_it->str();
- }
-
- return result;
-}
-
-template <typename T>
-inline std::string replaceTokens(const std::string &source, const std::map<std::string, T> &properties) {
- return replaceTokens(source, [&properties](const std::string &token) -> std::string {
- const auto it_prop = properties.find(token);
- return it_prop != properties.end() ? toString(it_prop->second) : "";
- });
-}
-
-} // end namespace util
-} // end namespace llmr
-
-#endif
diff --git a/include/llmr/util/transition.hpp b/include/llmr/util/transition.hpp
deleted file mode 100644
index fbf33d10f9..0000000000
--- a/include/llmr/util/transition.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef LLMR_UTIL_TRANSITION
-#define LLMR_UTIL_TRANSITION
-
-#include <llmr/util/noncopyable.hpp>
-#include <llmr/util/time.hpp>
-#include <llmr/style/types.hpp>
-
-namespace llmr {
-namespace util {
-
-class transition : private noncopyable {
-public:
- enum state {
- running,
- complete
- };
-
- inline transition(timestamp start, timestamp duration)
- : start(start),
- duration(duration) {}
-
- inline float progress(timestamp now) const {
- if (duration == 0) return 1;
- if (start > now) return 0;
-
- return (float)(now - start) / duration;
- }
-
- virtual state update(timestamp now) const = 0;
- virtual ~transition();
-
-protected:
- double interpolateDouble(double from, double to, double t) const;
- float interpolateFloat(float from, float to, double t) const;
- Color interpolateColor(Color from, Color to, double t) const;
- std::array<float, 2> interpolateFloatArray(std::array<float, 2> from, std::array<float, 2> to, double t) const;
-
-protected:
- const timestamp start, duration;
-};
-
-template <typename T>
-class ease_transition : public transition {
-public:
- ease_transition(T from, T to, T& value, timestamp start, timestamp duration)
- : transition(start, duration),
- from(from),
- to(to),
- value(value) {}
-
- state update(timestamp now) const;
-
-private:
- const T from, to;
- T& value;
-
-};
-
-template <typename T>
-class timeout : public transition {
-public:
- timeout(T final_value, T& value, timestamp start, timestamp duration)
- : transition(start, duration),
- final_value(final_value),
- value(value) {}
-
- state update(timestamp now) const {
- if (progress(now) >= 1) {
- value = final_value;
- return complete;
- } else {
- return running;
- }
- }
-
-private:
- const T final_value;
- T& value;
-};
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/unitbezier.hpp b/include/llmr/util/unitbezier.hpp
deleted file mode 100644
index 6acae7a3de..0000000000
--- a/include/llmr/util/unitbezier.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LLMR_UTIL_UNITBEZIER
-#define LLMR_UTIL_UNITBEZIER
-
-#include <cmath>
-
-namespace llmr {
-namespace util {
-
-struct UnitBezier {
- UnitBezier(double p1x, double p1y, double p2x, double p2y) {
- // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).
- cx = 3.0 * p1x;
- bx = 3.0 * (p2x - p1x) - cx;
- ax = 1.0 - cx - bx;
-
- cy = 3.0 * p1y;
- by = 3.0 * (p2y - p1y) - cy;
- ay = 1.0 - cy - by;
- }
-
- double sampleCurveX(double t) {
- // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.
- return ((ax * t + bx) * t + cx) * t;
- }
-
- double sampleCurveY(double t) {
- return ((ay * t + by) * t + cy) * t;
- }
-
- double sampleCurveDerivativeX(double t) {
- return (3.0 * ax * t + 2.0 * bx) * t + cx;
- }
-
- // Given an x value, find a parametric value it came from.
- double solveCurveX(double x, double epsilon) {
- double t0;
- double t1;
- double t2;
- double x2;
- double d2;
- int i;
-
- // First try a few iterations of Newton's method -- normally very fast.
- for (t2 = x, i = 0; i < 8; ++i) {
- x2 = sampleCurveX(t2) - x;
- if (fabs (x2) < epsilon)
- return t2;
- d2 = sampleCurveDerivativeX(t2);
- if (fabs(d2) < 1e-6)
- break;
- t2 = t2 - x2 / d2;
- }
-
- // Fall back to the bisection method for reliability.
- t0 = 0.0;
- t1 = 1.0;
- t2 = x;
-
- if (t2 < t0)
- return t0;
- if (t2 > t1)
- return t1;
-
- while (t0 < t1) {
- x2 = sampleCurveX(t2);
- if (fabs(x2 - x) < epsilon)
- return t2;
- if (x > x2)
- t0 = t2;
- else
- t1 = t2;
- t2 = (t1 - t0) * .5 + t0;
- }
-
- // Failure.
- return t2;
- }
-
- double solve(double x, double epsilon) {
- return sampleCurveY(solveCurveX(x, epsilon));
- }
-
-private:
- double ax;
- double bx;
- double cx;
-
- double ay;
- double by;
- double cy;
-};
-
-}
-}
-
-#endif
diff --git a/include/llmr/util/utf.hpp b/include/llmr/util/utf.hpp
deleted file mode 100644
index fc9fb57d58..0000000000
--- a/include/llmr/util/utf.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef LLMR_UTIL_UTF
-#define LLMR_UTIL_UTF
-
-#include <memory>
-
-// g++/libstdc++ is missing c++11 codecvt support
-#ifdef __linux__
-#pragma GCC diagnostic push
-#ifndef __clang__
-#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
-#endif
-#include <boost/locale.hpp>
-#pragma GCC diagnostic pop
-#else
-#include <codecvt>
-#include <locale>
-#endif
-
-namespace llmr {
-
-namespace util {
-
-#ifdef __linux__
-
-class utf8_to_utf32 {
- public:
- explicit utf8_to_utf32() {}
- std::u32string convert(std::string const& utf8) {
- return boost::locale::conv::utf_to_utf<char32_t>(utf8);
- }
-};
-
-#else
-
-class utf8_to_utf32 {
- public:
- explicit utf8_to_utf32()
- : utf32conv_() {}
- std::u32string convert(std::string const& utf8) {
- return utf32conv_.from_bytes(utf8);
- }
- private:
- std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv_;
-};
-
-#endif
-
-}}
-
-#endif
diff --git a/include/llmr/util/uv.hpp b/include/llmr/util/uv.hpp
deleted file mode 100644
index 69d1e8ef98..0000000000
--- a/include/llmr/util/uv.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef LLMR_UTIL_UV
-#define LLMR_UTIL_UV
-
-#include <uv.h>
-#include <functional>
-#include <cassert>
-
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-parameter"
-#endif
-
-#include <boost/lockfree/queue.hpp>
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
-
-namespace uv {
-
-class loop {
-public:
- inline loop() : l(uv_loop_new()) {}
- inline ~loop() { uv_loop_delete(l); }
-
- inline uv_loop_t *operator*() { return l; }
-
-private:
- uv_loop_t *l;
-};
-
-class mutex {
-public:
- inline mutex() {
- if (uv_mutex_init(&mtx) != 0) {
- throw std::runtime_error("failed to initialize mutex");
- }
- }
- inline ~mutex() { uv_mutex_destroy(&mtx); }
- inline void lock() { uv_mutex_lock(&mtx); }
- inline void unlock() { uv_mutex_unlock(&mtx); }
-
-private:
- uv_mutex_t mtx;
-};
-
-class lock {
-public:
- lock(mutex &mtx) : mtx(mtx) { mtx.lock(); }
- ~lock() { mtx.unlock(); }
-
-private:
- mutex &mtx;
-};
-
-class rwlock {
-public:
- inline rwlock() {
- if (uv_rwlock_init(&mtx) != 0) {
- throw std::runtime_error("failed to initialize read-write lock");
- }
- }
- inline ~rwlock() { uv_rwlock_destroy(&mtx); }
- inline void rdlock() { uv_rwlock_rdlock(&mtx); }
- inline void wrlock() { uv_rwlock_wrlock(&mtx); }
- inline void rdunlock() { uv_rwlock_rdunlock(&mtx); }
- inline void wrunlock() { uv_rwlock_wrunlock(&mtx); }
-
-private:
- uv_rwlock_t mtx;
-};
-
-class readlock {
-public:
- inline readlock(rwlock &mtx) : mtx(mtx) { mtx.rdlock(); }
- inline ~readlock() { mtx.rdunlock(); }
-
-private:
- rwlock &mtx;
-};
-
-class writelock {
-public:
- inline writelock(rwlock &mtx) : mtx(mtx) { mtx.wrlock(); }
- inline ~writelock() { mtx.wrunlock(); }
-
-private:
- rwlock &mtx;
-};
-
-class once {
-public:
- typedef void (*callback)();
- void operator()(void (*callback)(void)) {
- uv_once(&o, callback);
- }
-
-private:
- uv_once_t o = UV_ONCE_INIT;
-};
-
-template <typename T>
-class work {
-public:
- typedef void (*work_callback)(T &object);
- typedef void (*after_work_callback)(T &object);
-
- template<typename... Args>
- work(const std::shared_ptr<loop> &loop, work_callback work_cb, after_work_callback after_work_cb, Args&&... args)
- : loop(loop),
- data(std::forward<Args>(args)...),
- work_cb(work_cb),
- after_work_cb(after_work_cb) {
- req.data = this;
- uv_queue_work(**loop, &req, do_work, after_work);
- }
-
-private:
- static void do_work(uv_work_t *req) {
- work<T> *w = static_cast<work<T> *>(req->data);
- w->work_cb(w->data);
- }
-
- static void after_work(uv_work_t *req, int) {
- work<T> *w = static_cast<work<T> *>(req->data);
- w->after_work_cb(w->data);
- delete w;
- }
-
-private:
- std::shared_ptr<uv::loop> loop;
- uv_work_t req;
- T data;
- work_callback work_cb;
- after_work_callback after_work_cb;
-};
-
-}
-
-#endif
diff --git a/include/llmr/util/variant.hpp b/include/llmr/util/variant.hpp
deleted file mode 100644
index 57f8593439..0000000000
--- a/include/llmr/util/variant.hpp
+++ /dev/null
@@ -1,731 +0,0 @@
-#ifndef MAPBOX_UTIL_VARIANT_HPP
-#define MAPBOX_UTIL_VARIANT_HPP
-
-#include <utility>
-#include <typeinfo>
-#include <type_traits>
-#include <algorithm> // std::move/swap
-#include <stdexcept> // runtime_error
-#include <new> // operator new
-#include <cstddef> // size_t
-#include <iosfwd>
-#include <string>
-
-#include "recursive_wrapper.hpp"
-
-#ifdef _MSC_VER
- // http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
- #ifdef NDEBUG
- #define VARIANT_INLINE __forceinline
- #else
- #define VARIANT_INLINE __declspec(noinline)
- #endif
-#else
- #ifdef NDEBUG
- #define VARIANT_INLINE inline __attribute__((always_inline))
- #else
- #define VARIANT_INLINE __attribute__((noinline))
- #endif
-#endif
-
-#define VARIANT_MAJOR_VERSION 0
-#define VARIANT_MINOR_VERSION 1
-#define VARIANT_PATCH_VERSION 0
-
-// translates to 100
-#define VARIANT_VERSION (VARIANT_MAJOR_VERSION*100000) + (VARIANT_MINOR_VERSION*100) + (VARIANT_PATCH_VERSION)
-
-namespace llmr { namespace util { namespace detail {
-
-static constexpr std::size_t invalid_value = std::size_t(-1);
-
-template <typename T, typename...Types>
-struct direct_type;
-
-template <typename T, typename First, typename...Types>
-struct direct_type<T, First, Types...>
-{
- static constexpr std::size_t index = std::is_same<T, First>::value
- ? sizeof...(Types) : direct_type<T, Types...>::index;
-};
-
-template <typename T>
-struct direct_type<T>
-{
- static constexpr std::size_t index = invalid_value;
-};
-
-template <typename T, typename...Types>
-struct convertible_type;
-
-template <typename T, typename First, typename...Types>
-struct convertible_type<T, First, Types...>
-{
- static constexpr std::size_t index = std::is_convertible<T, First>::value
- ? sizeof...(Types) : convertible_type<T, Types...>::index;
-};
-
-template <typename T>
-struct convertible_type<T>
-{
- static constexpr std::size_t index = invalid_value;
-};
-
-template <typename T, typename...Types>
-struct value_traits
-{
- static constexpr std::size_t direct_index = direct_type<T, Types...>::index;
- static constexpr std::size_t index =
- (direct_index == invalid_value) ? convertible_type<T, Types...>::index : direct_index;
-};
-
-template <typename T, typename...Types>
-struct is_valid_type;
-
-template <typename T, typename First, typename... Types>
-struct is_valid_type<T, First, Types...>
-{
- static constexpr bool value = std::is_convertible<T, First>::value
- || is_valid_type<T, Types...>::value;
-};
-
-template <typename T>
-struct is_valid_type<T> : std::false_type {};
-
-template <std::size_t N, typename ... Types>
-struct select_type
-{
- static_assert(N < sizeof...(Types), "index out of bounds");
-};
-
-template <std::size_t N, typename T, typename ... Types>
-struct select_type<N, T, Types...>
-{
- using type = typename select_type<N - 1, Types...>::type;
-};
-
-template <typename T, typename ... Types>
-struct select_type<0, T, Types...>
-{
- using type = T;
-};
-
-} // namespace detail
-
-// static visitor
-template <typename R = void>
-struct static_visitor
-{
- using result_type = R;
-protected:
- static_visitor() {}
- ~static_visitor() {}
-};
-
-
-template <std::size_t arg1, std::size_t ... others>
-struct static_max;
-
-template <std::size_t arg>
-struct static_max<arg>
-{
- static const std::size_t value = arg;
-};
-
-template <std::size_t arg1, std::size_t arg2, std::size_t ... others>
-struct static_max<arg1, arg2, others...>
-{
- static const std::size_t value = arg1 >= arg2 ? static_max<arg1, others...>::value :
- static_max<arg2, others...>::value;
-};
-
-template<typename... Types>
-struct variant_helper;
-
-template<typename T, typename... Types>
-struct variant_helper<T, Types...>
-{
- VARIANT_INLINE static void destroy(const std::size_t id, void * data)
- {
- if (id == sizeof...(Types))
- {
- reinterpret_cast<T*>(data)->~T();
- }
- else
- {
- variant_helper<Types...>::destroy(id, data);
- }
- }
-
- VARIANT_INLINE static void move(const std::size_t old_id, void * old_value, void * new_value)
- {
- if (old_id == sizeof...(Types))
- {
- new (new_value) T(std::move(*reinterpret_cast<T*>(old_value)));
- //std::memcpy(new_value, old_value, sizeof(T));
- // ^^ DANGER: this should only be considered for relocatable types e.g built-in types
- // Also, I don't see any measurable performance benefit just yet
- }
- else
- {
- variant_helper<Types...>::move(old_id, old_value, new_value);
- }
- }
-
- VARIANT_INLINE static void copy(const std::size_t old_id, const void * old_value, void * new_value)
- {
- if (old_id == sizeof...(Types))
- {
- new (new_value) T(*reinterpret_cast<const T*>(old_value));
- }
- else
- {
- variant_helper<Types...>::copy(old_id, old_value, new_value);
- }
- }
-};
-
-template<> struct variant_helper<>
-{
- VARIANT_INLINE static void destroy(const std::size_t, void *) {}
- VARIANT_INLINE static void move(const std::size_t, void *, void *) {}
- VARIANT_INLINE static void copy(const std::size_t, const void *, void *) {}
-};
-
-namespace detail {
-
-template <typename T>
-struct unwrapper
-{
- T const& operator() (T const& obj) const
- {
- return obj;
- }
-
- T& operator() (T & obj) const
- {
- return obj;
- }
-};
-
-
-template <typename T>
-struct unwrapper<recursive_wrapper<T>>
-{
- auto operator() (recursive_wrapper<T> const& obj) const
- -> typename recursive_wrapper<T>::type const&
- {
- return obj.get();
- }
-};
-
-
-template <typename F, typename V, typename...Types>
-struct dispatcher;
-
-template <typename F, typename V, typename T, typename...Types>
-struct dispatcher<F, V, T, Types...>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const& v, F f)
- {
- if (v.get_type_index() == sizeof...(Types))
- {
- return f(unwrapper<T>()(v. template get<T>()));
- }
- else
- {
- return dispatcher<F, V, Types...>::apply_const(v, f);
- }
- }
-
- VARIANT_INLINE static result_type apply(V & v, F f)
- {
- if (v.get_type_index() == sizeof...(Types))
- {
- return f(unwrapper<T>()(v. template get<T>()));
- }
- else
- {
- return dispatcher<F, V, Types...>::apply(v, f);
- }
- }
-};
-
-template<typename F, typename V>
-struct dispatcher<F, V>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const&, F)
- {
- throw std::runtime_error(std::string("unary dispatch: FAIL ") + typeid(V).name());
- }
-
- VARIANT_INLINE static result_type apply(V &, F)
- {
- throw std::runtime_error(std::string("unary dispatch: FAIL ") + typeid(V).name());
- }
-};
-
-
-template <typename F, typename V, typename T, typename...Types>
-struct binary_dispatcher_rhs;
-
-template <typename F, typename V, typename T0, typename T1, typename...Types>
-struct binary_dispatcher_rhs<F, V, T0, T1, Types...>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const& lhs, V const& rhs, F f)
- {
- if (rhs.get_type_index() == sizeof...(Types)) // call binary functor
- {
- return f(unwrapper<T0>()(lhs. template get<T0>()),
- unwrapper<T1>()(rhs. template get<T1>()));
- }
- else
- {
- return binary_dispatcher_rhs<F, V, T0, Types...>::apply_const(lhs, rhs, f);
- }
- }
-
- VARIANT_INLINE static result_type apply(V & lhs, V & rhs, F f)
- {
- if (rhs.get_type_index() == sizeof...(Types)) // call binary functor
- {
- return f(unwrapper<T0>()(lhs. template get<T0>()),
- unwrapper<T1>()(rhs. template get<T1>()));
- }
- else
- {
- return binary_dispatcher_rhs<F, V, T0, Types...>::apply(lhs, rhs, f);
- }
- }
-
-};
-
-template<typename F, typename V, typename T>
-struct binary_dispatcher_rhs<F, V, T>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
- VARIANT_INLINE static result_type apply(V &, V &, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
-};
-
-
-template <typename F, typename V, typename T, typename...Types>
-struct binary_dispatcher_lhs;
-
-template <typename F, typename V, typename T0, typename T1, typename...Types>
-struct binary_dispatcher_lhs<F, V, T0, T1, Types...>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const& lhs, V const& rhs, F f)
- {
- if (lhs.get_type_index() == sizeof...(Types)) // call binary functor
- {
- return f(lhs. template get<T1>(), rhs. template get<T0>());
- }
- else
- {
- return binary_dispatcher_lhs<F, V, T0, Types...>::apply_const(lhs, rhs, f);
- }
- }
-
- VARIANT_INLINE static result_type apply(V & lhs, V & rhs, F f)
- {
- if (lhs.get_type_index() == sizeof...(Types)) // call binary functor
- {
- return f(lhs. template get<T1>(), rhs. template get<T0>());
- }
- else
- {
- return binary_dispatcher_lhs<F, V, T0, Types...>::apply(lhs, rhs, f);
- }
- }
-
-};
-
-template<typename F, typename V, typename T>
-struct binary_dispatcher_lhs<F, V, T>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
-
- VARIANT_INLINE static result_type apply(V &, V &, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
-};
-
-template <typename F, typename V, typename...Types>
-struct binary_dispatcher;
-
-template <typename F, typename V, typename T, typename...Types>
-struct binary_dispatcher<F, V, T, Types...>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const& v0, V const& v1, F f)
- {
- if (v0.get_type_index() == sizeof...(Types))
- {
- if (v0.get_type_index() == v1.get_type_index())
- {
- return f(v0. template get<T>(), v1. template get<T>()); // call binary functor
- }
- else
- {
- return binary_dispatcher_rhs<F, V, T, Types...>::apply_const(v0, v1, f);
- }
- }
- else if (v1.get_type_index() == sizeof...(Types))
- {
- return binary_dispatcher_lhs<F, V, T, Types...>::apply_const(v0, v1, f);
- }
- return binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f);
- }
-
- VARIANT_INLINE static result_type apply(V & v0, V & v1, F f)
- {
- if (v0.get_type_index() == sizeof...(Types))
- {
- if (v0.get_type_index() == v1.get_type_index())
- {
- return f(v0. template get<T>(), v1. template get<T>()); // call binary functor
- }
- else
- {
- return binary_dispatcher_rhs<F, V, T, Types...>::apply(v0, v1, f);
- }
- }
- else if (v1.get_type_index() == sizeof...(Types))
- {
- return binary_dispatcher_lhs<F, V, T, Types...>::apply(v0, v1, f);
- }
- return binary_dispatcher<F, V, Types...>::apply(v0, v1, f);
- }
-};
-
-template<typename F, typename V>
-struct binary_dispatcher<F, V>
-{
- using result_type = typename F::result_type;
- VARIANT_INLINE static result_type apply_const(V const&, V const&, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
-
- VARIANT_INLINE static result_type apply(V &, V &, F)
- {
- throw std::runtime_error("binary dispatch: FAIL");
- }
-};
-
-// comparator functors
-struct equal_comp
-{
- template <typename T>
- bool operator()(T const& lhs, T const& rhs) const
- {
- return lhs == rhs;
- }
-};
-
-struct less_comp
-{
- template <typename T>
- bool operator()(T const& lhs, T const& rhs) const
- {
- return lhs < rhs;
- }
-};
-
-template <typename Variant, typename Comp>
-class comparer : public static_visitor<bool>
-{
-public:
- explicit comparer(Variant const& lhs) noexcept
- : lhs_(lhs) {}
- comparer& operator=(comparer const&) = delete;
- // visitor
- template<typename T>
- bool operator()(T const& rhs_content) const
- {
- T const& lhs_content = lhs_.template get<T>();
- return Comp()(lhs_content, rhs_content);
- }
-private:
- Variant const& lhs_;
-};
-
-// operator<< helper
-template <typename Out>
-class printer : public static_visitor<>
-{
-public:
- explicit printer(Out & out)
- : out_(out) {}
- printer& operator=(printer const&) = delete;
-
-// visitor
- template <typename T>
- void operator()(T const& operand) const
- {
- out_ << operand;
- }
-private:
- Out & out_;
-};
-
-} // namespace detail
-
-template<typename... Types>
-class variant
-{
-private:
-
- static const std::size_t data_size = static_max<sizeof(Types)...>::value;
- static const std::size_t data_align = static_max<alignof(Types)...>::value;
-
- using data_type = typename std::aligned_storage<data_size, data_align>::type;
- using helper_type = variant_helper<Types...>;
-
- std::size_t type_index;
- data_type data;
-
-public:
-
- VARIANT_INLINE variant()
- : type_index(sizeof...(Types) - 1)
- {
- new (&data) typename detail::select_type<0, Types...>::type();
- }
-
- template <typename T, class = typename std::enable_if<
- detail::is_valid_type<T, Types...>::value>::type>
- VARIANT_INLINE explicit variant(T const& val) noexcept
- : type_index(detail::value_traits<T, Types...>::index)
- {
- constexpr std::size_t index = sizeof...(Types) - detail::value_traits<T, Types...>::index - 1;
- using target_type = typename detail::select_type<index, Types...>::type;
- new (&data) target_type(val);
- }
-
- template <typename T, class = typename std::enable_if<
- detail::is_valid_type<T, Types...>::value>::type>
- VARIANT_INLINE variant(T && val) noexcept
- : type_index(detail::value_traits<T, Types...>::index)
- {
- constexpr std::size_t index = sizeof...(Types) - detail::value_traits<T, Types...>::index - 1;
- using target_type = typename detail::select_type<index, Types...>::type;
- new (&data) target_type(std::forward<T>(val)); // nothrow
- }
-
- VARIANT_INLINE variant(variant<Types...> const& old)
- : type_index(old.type_index)
- {
- helper_type::copy(old.type_index, &old.data, &data);
- }
-
- VARIANT_INLINE variant(variant<Types...>&& old) noexcept
- : type_index(old.type_index)
- {
- helper_type::move(old.type_index, &old.data, &data);
- }
-
- friend void swap(variant<Types...> & first, variant<Types...> & second)
- {
- using std::swap; //enable ADL
- swap(first.type_index, second.type_index);
- swap(first.data, second.data);
- }
-
- VARIANT_INLINE variant<Types...>& operator=(variant<Types...> other)
- {
- swap(*this, other);
- return *this;
- }
-
- // conversions
- // move-assign
- template <typename T>
- VARIANT_INLINE variant<Types...>& operator=(T && rhs) noexcept
- {
- variant<Types...> temp(std::move(rhs));
- swap(*this, temp);
- return *this;
- }
-
- // copy-assign
- template <typename T>
- VARIANT_INLINE variant<Types...>& operator=(T const& rhs)
- {
- variant<Types...> temp(rhs);
- swap(*this, temp);
- return *this;
- }
-
- template<typename T>
- VARIANT_INLINE bool is() const
- {
- return (type_index == detail::direct_type<T, Types...>::index);
- }
-
- VARIANT_INLINE bool valid() const
- {
- return (type_index != detail::invalid_value);
- }
-
- template<typename T, typename... Args>
- VARIANT_INLINE void set(Args&&... args)
- {
- helper_type::destroy(type_index, &data);
- new (&data) T(std::forward<Args>(args)...);
- type_index = detail::direct_type<T, Types...>::index;
- }
-
- template<typename T>
- VARIANT_INLINE T& get()
- {
- if (type_index == detail::direct_type<T, Types...>::index)
- {
- return *reinterpret_cast<T*>(&data);
- }
- else
- {
- throw std::runtime_error("in get()");
- }
- }
-
- template<typename T>
- VARIANT_INLINE T const& get() const
- {
- if (type_index == detail::direct_type<T, Types...>::index)
- {
- return *reinterpret_cast<T const*>(&data);
- }
- else
- {
- throw std::runtime_error("in get()");
- }
- }
-
- VARIANT_INLINE std::size_t get_type_index() const
- {
- return type_index;
- }
-
- // visitor
- // unary
- template <typename F, typename V>
- auto VARIANT_INLINE
- static visit(V const& v, F f)
- -> decltype(detail::dispatcher<F, V, Types...>::apply_const(v, f))
- {
- return detail::dispatcher<F, V, Types...>::apply_const(v, f);
- }
- // non-const
- template <typename F, typename V>
- auto VARIANT_INLINE
- static visit(V & v, F f)
- -> decltype(detail::dispatcher<F, V, Types...>::apply(v, f))
- {
- return detail::dispatcher<F, V, Types...>::apply(v, f);
- }
-
- // binary
- // const
- template <typename F, typename V>
- auto VARIANT_INLINE
- static binary_visit(V const& v0, V const& v1, F f)
- -> decltype(detail::binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f))
- {
- return detail::binary_dispatcher<F, V, Types...>::apply_const(v0, v1, f);
- }
- // non-const
- template <typename F, typename V>
- auto VARIANT_INLINE
- static binary_visit(V& v0, V& v1, F f)
- -> decltype(detail::binary_dispatcher<F, V, Types...>::apply(v0, v1, f))
- {
- return detail::binary_dispatcher<F, V, Types...>::apply(v0, v1, f);
- }
-
- ~variant() noexcept
- {
- helper_type::destroy(type_index, &data);
- }
-
- // comparison operators
- // equality
- VARIANT_INLINE bool operator==(variant const& rhs) const
- {
- if (this->get_type_index() != rhs.get_type_index())
- return false;
- detail::comparer<variant, detail::equal_comp> visitor(*this);
- return visit(rhs, visitor);
- }
- // less than
- VARIANT_INLINE bool operator<(variant const& rhs) const
- {
- if (this->get_type_index() != rhs.get_type_index())
- {
- return this->get_type_index() < rhs.get_type_index();
- // ^^ borrowed from boost::variant
- }
- detail::comparer<variant, detail::less_comp> visitor(*this);
- return visit(rhs, visitor);
- }
-};
-
-// unary visitor interface
-
-// const
-template <typename V, typename F>
-auto VARIANT_INLINE static apply_visitor(F f, V const& v) -> decltype(V::visit(v, f))
-{
- return V::visit(v, f);
-}
-// non-const
-template <typename V, typename F>
-auto VARIANT_INLINE static apply_visitor(F f, V & v) -> decltype(V::visit(v, f))
-{
- return V::visit(v, f);
-}
-
-// binary visitor interface
-// const
-template <typename V, typename F>
-auto VARIANT_INLINE static apply_visitor(F f, V const& v0, V const& v1) -> decltype(V::binary_visit(v0, v1, f))
-{
- return V::binary_visit(v0, v1, f);
-}
-// non-const
-template <typename V, typename F>
-auto VARIANT_INLINE static apply_visitor(F f, V & v0, V & v1) -> decltype(V::binary_visit(v0, v1, f))
-{
- return V::binary_visit(v0, v1, f);
-}
-
-
-// operator<<
-template <typename charT, typename traits, typename Variant>
-VARIANT_INLINE std::basic_ostream<charT, traits>&
-operator<< (std::basic_ostream<charT, traits>& out, Variant const& rhs)
-{
- detail::printer<std::basic_ostream<charT, traits>> visitor(out);
- apply_visitor(visitor, rhs);
- return out;
-}
-
-}}
-
-#endif // MAPBOX_UTIL_VARIANT_HPP
diff --git a/include/llmr/util/vec.hpp b/include/llmr/util/vec.hpp
deleted file mode 100644
index 828a6a5fb2..0000000000
--- a/include/llmr/util/vec.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef LLMR_UTIL_VEC
-#define LLMR_UTIL_VEC
-
-#include <limits>
-#include <type_traits>
-#include <cmath>
-#include <cstdint>
-#include <array>
-
-namespace llmr {
-
-template <typename T = double>
-struct vec2 {
- struct null {};
- typedef T Type;
-
- T x, y;
-
- inline vec2() {}
-
- template<typename U = T, typename std::enable_if<std::numeric_limits<U>::has_quiet_NaN, int>::type = 0>
- inline vec2(null) : x(std::numeric_limits<T>::quiet_NaN()), y(std::numeric_limits<T>::quiet_NaN()) {}
-
- template<typename U = T, typename std::enable_if<!std::numeric_limits<U>::has_quiet_NaN, int>::type = 0>
- inline vec2(null) : x(std::numeric_limits<T>::min()), y(std::numeric_limits<T>::min()) {}
-
- inline vec2(const vec2& o) : x(o.x), y(o.y) {}
-
- template<typename U>
- inline vec2(const U& u) : x(u.x), y(u.y) {}
-
- inline vec2(T x, T y) : x(x), y(y) {}
-
- inline bool operator==(const vec2& rhs) const {
- return x == rhs.x && y == rhs.y;
- }
-
- template <typename O>
- inline typename std::enable_if<std::is_arithmetic<O>::value, vec2>::type
- operator*(O o) const {
- return {x * o, y * o};
- }
-
- template <typename O>
- inline typename std::enable_if<std::is_arithmetic<O>::value, vec2>::type &
- operator*=(O o) {
- x *= o;
- y *= o;
- }
-
- inline vec2<T> operator *(const std::array<float, 16>& matrix) {
- return { x * matrix[0] + y * matrix[4] + matrix[12], x * matrix[1] + y * matrix[5] + matrix[13] };
- }
-
- template <typename O>
- inline typename std::enable_if<std::is_arithmetic<O>::value, vec2>::type
- operator-(O o) const {
- return {x - o, y - o};
- }
-
- template <typename O>
- inline typename std::enable_if<!std::is_arithmetic<O>::value, vec2>::type
- operator-(const O &o) const {
- return {x - o.x, y - o.y};
- }
-
- template <typename M>
- inline vec2 matMul(const M &m) const {
- return {m[0] * x + m[1] * y, m[2] * x + m[3] * y};
- }
-
- template<typename U = T, typename std::enable_if<std::numeric_limits<U>::has_quiet_NaN, int>::type = 0>
- inline operator bool() const {
- return !isnan(x) && !isnan(y);
- }
-
- template<typename U = T, typename std::enable_if<!std::numeric_limits<U>::has_quiet_NaN, int>::type = 0>
- inline operator bool() const {
- return x != std::numeric_limits<T>::min() && y != std::numeric_limits<T>::min();
- }
-};
-
-template <typename T = double>
-struct vec3 {
- T x, y, z;
-
- inline vec3() {}
- inline vec3(const vec3& o) : x(o.x), y(o.y), z(o.z) {}
- inline vec3(T x, T y, T z) : x(x), y(y), z(z) {}
- inline bool operator==(const vec3& rhs) const {
- return x == rhs.x && y == rhs.y && z == rhs.z;
- }
-};
-
-template <typename T = double>
-struct vec4 {
- T x, y, z, w;
-
- inline vec4() {}
- inline vec4(const vec4& o) : x(o.x), y(o.y), z(o.z), w(o.w) {}
- inline vec4(T x, T y, T z, T w) : x(x), y(y), z(z), w(w) {}
- inline bool operator==(const vec4& rhs) const {
- return x == rhs.x && y == rhs.y && z == rhs.z && w == rhs.w;
- }
-};
-
-
-struct box {
- vec2<double> tl, tr, bl, br;
- vec2<double> center;
-};
-
-typedef vec2<int16_t> Coordinate;
-
-}
-
-#endif