summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/raster_tile.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-06-13 10:59:33 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-06-13 10:59:33 -0700
commit5c7dfd948ffd52f2b60dcfe052176da788f17893 (patch)
tree596d02b0e28d6e7649f9527af2834c90c3c3b056 /src/mbgl/tile/raster_tile.cpp
parent3ab7c1cca3aa4658b40af1d7d591850e005d011e (diff)
downloadqtlocation-mapboxgl-5c7dfd948ffd52f2b60dcfe052176da788f17893.tar.gz
[core] *Tile ↔ *TileData
Tile is now the main base class; RasterTile, VectorTile, etc are its subclasses. GeometryTileData and its subclasses form the piece that's passed to the worker.
Diffstat (limited to 'src/mbgl/tile/raster_tile.cpp')
-rw-r--r--src/mbgl/tile/raster_tile.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp
new file mode 100644
index 0000000000..c3838bc59b
--- /dev/null
+++ b/src/mbgl/tile/raster_tile.cpp
@@ -0,0 +1,68 @@
+#include <mbgl/tile/raster_tile.hpp>
+#include <mbgl/tile/tile_observer.hpp>
+#include <mbgl/tile/tile_source_impl.hpp>
+#include <mbgl/style/source.hpp>
+#include <mbgl/style/update_parameters.hpp>
+#include <mbgl/storage/resource.hpp>
+#include <mbgl/storage/response.hpp>
+#include <mbgl/storage/file_source.hpp>
+#include <mbgl/util/worker.hpp>
+#include <mbgl/util/work_request.hpp>
+
+using namespace mbgl;
+
+RasterTile::RasterTile(const OverscaledTileID& id_,
+ const style::UpdateParameters& parameters,
+ const Tileset& tileset)
+ : Tile(id_),
+ texturePool(parameters.texturePool),
+ worker(parameters.worker),
+ tileSource(*this, id_, parameters, tileset) {
+}
+
+void RasterTile::setError(std::exception_ptr err) {
+ observer->onTileError(*this, err);
+}
+
+void RasterTile::setData(std::shared_ptr<const std::string> data,
+ optional<Timestamp> modified_,
+ optional<Timestamp> expires_) {
+ modified = modified_;
+ expires = expires_;
+
+ if (!data) {
+ // This is a 404 response. We're treating these as empty tiles.
+ workRequest.reset();
+ availableData = DataAvailability::All;
+ bucket.reset();
+ observer->onTileLoaded(*this, true);
+ return;
+ }
+
+ workRequest.reset();
+ workRequest = worker.parseRasterTile(std::make_unique<RasterBucket>(texturePool), data, [this] (RasterTileParseResult result) {
+ workRequest.reset();
+
+ availableData = DataAvailability::All;
+
+ if (result.is<std::unique_ptr<Bucket>>()) {
+ bucket = std::move(result.get<std::unique_ptr<Bucket>>());
+ observer->onTileLoaded(*this, true);
+ } else {
+ bucket.reset();
+ observer->onTileError(*this, result.get<std::exception_ptr>());
+ }
+ });
+}
+
+Bucket* RasterTile::getBucket(const style::Layer&) {
+ return bucket.get();
+}
+
+void RasterTile::setNecessity(Necessity necessity) {
+ tileSource.setNecessity(static_cast<TileSource<RasterTile>::Necessity>(necessity));
+}
+
+void RasterTile::cancel() {
+ workRequest.reset();
+}