diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-13 10:59:33 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-13 10:59:33 -0700 |
commit | 5c7dfd948ffd52f2b60dcfe052176da788f17893 (patch) | |
tree | 596d02b0e28d6e7649f9527af2834c90c3c3b056 /src/mbgl/tile/raster_tile.cpp | |
parent | 3ab7c1cca3aa4658b40af1d7d591850e005d011e (diff) | |
download | qtlocation-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.cpp | 68 |
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(); +} |