summaryrefslogtreecommitdiff
path: root/src/map/tile.cpp
diff options
context:
space:
mode:
authorJustin R. Miller <incanus@codesorcery.net>2014-02-21 14:18:48 -0800
committerJustin R. Miller <incanus@codesorcery.net>2014-02-21 14:18:48 -0800
commite59a5f1c1a9dd2f1921070cb4c03956c1278429b (patch)
tree60febe484201a548e37ef741e1e33f1c005f9e60 /src/map/tile.cpp
parentcfbde8242977c7a1b691261dcd3611915de5714b (diff)
parent32da0768b72da5a40a92f8c62465dbe16de2e41e (diff)
downloadqtlocation-mapboxgl-e59a5f1c1a9dd2f1921070cb4c03956c1278429b.tar.gz
Merge branch 'master' into tile-cancels
Diffstat (limited to 'src/map/tile.cpp')
-rw-r--r--src/map/tile.cpp24
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;
+}