diff options
author | Justin R. Miller <incanus@codesorcery.net> | 2014-02-21 14:18:48 -0800 |
---|---|---|
committer | Justin R. Miller <incanus@codesorcery.net> | 2014-02-21 14:18:48 -0800 |
commit | e59a5f1c1a9dd2f1921070cb4c03956c1278429b (patch) | |
tree | 60febe484201a548e37ef741e1e33f1c005f9e60 /src/map/tile.cpp | |
parent | cfbde8242977c7a1b691261dcd3611915de5714b (diff) | |
parent | 32da0768b72da5a40a92f8c62465dbe16de2e41e (diff) | |
download | qtlocation-mapboxgl-e59a5f1c1a9dd2f1921070cb4c03956c1278429b.tar.gz |
Merge branch 'master' into tile-cancels
Diffstat (limited to 'src/map/tile.cpp')
-rw-r--r-- | src/map/tile.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/map/tile.cpp b/src/map/tile.cpp index 9e9dc5aac2..e30fc203b1 100644 --- a/src/map/tile.cpp +++ b/src/map/tile.cpp @@ -4,9 +4,11 @@ #include <llmr/map/vector_tile.hpp> #include <llmr/geometry/fill_buffer.hpp> #include <llmr/geometry/line_buffer.hpp> +#include <llmr/geometry/point_buffer.hpp> #include <llmr/geometry/elements_buffer.hpp> #include <llmr/renderer/fill_bucket.hpp> #include <llmr/renderer/line_bucket.hpp> +#include <llmr/renderer/point_bucket.hpp> #include <llmr/platform/platform.hpp> #include <llmr/util/pbf.hpp> #include <llmr/util/string.hpp> @@ -45,6 +47,7 @@ Tile::Tile(ID id, const Style& style) state(initial), fillVertexBuffer(std::make_shared<FillVertexBuffer>()), lineVertexBuffer(std::make_shared<LineVertexBuffer>()), + pointVertexBuffer(std::make_shared<PointVertexBuffer>()), triangleElementsBuffer(std::make_shared<TriangleElementsBuffer>()), lineElementsBuffer(std::make_shared<LineElementsBuffer>()), pointElementsBuffer(std::make_shared<PointElementsBuffer>()), @@ -80,8 +83,7 @@ void Tile::request() { fprintf(stderr, "tile loading failed\n"); } }, []() { - // TODO: Make sure this gets passed the correct map ID/pointer. - platform::restart(nullptr); + platform::restart(); }); } @@ -159,6 +161,8 @@ std::shared_ptr<Bucket> Tile::createBucket(const VectorTile& tile, const BucketD return createFillBucket(layer, bucket_desc); } else if (bucket_desc.type == BucketType::Line) { return createLineBucket(layer, bucket_desc); + } else if (bucket_desc.type == BucketType::Point) { + return createPointBucket(layer, bucket_desc); } else { // TODO: create other bucket types. } @@ -200,3 +204,19 @@ std::shared_ptr<Bucket> Tile::createLineBucket(const VectorTileLayer& layer, con return bucket; } + +std::shared_ptr<Bucket> Tile::createPointBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { + std::shared_ptr<PointBucket> bucket = std::make_shared<PointBucket>(pointVertexBuffer, bucket_desc); + + FilteredVectorTileLayer filtered_layer(layer, bucket_desc); + for (pbf feature : filtered_layer) { + while (feature.next(4)) { // geometry + pbf geometry_pbf = feature.message(); + if (geometry_pbf) { + bucket->addGeometry(geometry_pbf); + } + } + } + + return bucket; +} |