[core] Introduce StyleUpdateParameters
This commit is contained in:
committed by
John Firebaugh
parent
f27c28b6c4
commit
40ebf5d0d0
@@ -15,6 +15,7 @@
|
||||
#include <mbgl/util/mapbox.hpp>
|
||||
#include <mbgl/storage/file_source.hpp>
|
||||
#include <mbgl/style/style_layer.hpp>
|
||||
#include <mbgl/style/style_update_parameters.hpp>
|
||||
#include <mbgl/platform/log.hpp>
|
||||
#include <mbgl/util/std.hpp>
|
||||
#include <mbgl/util/token.hpp>
|
||||
@@ -246,11 +247,7 @@ bool Source::handlePartialTile(const TileID& id, Worker&) {
|
||||
});
|
||||
}
|
||||
|
||||
TileData::State Source::addTile(MapData& data,
|
||||
const TransformState& transformState,
|
||||
Style& style,
|
||||
TexturePool& texturePool,
|
||||
const TileID& id) {
|
||||
TileData::State Source::addTile(const TileID& id, const StyleUpdateParameters& parameters) {
|
||||
const TileData::State state = hasTile(id);
|
||||
|
||||
if (state != TileData::State::invalid) {
|
||||
@@ -281,24 +278,24 @@ TileData::State Source::addTile(MapData& data,
|
||||
}
|
||||
|
||||
if (!new_tile.data) {
|
||||
auto callback = std::bind(&Source::tileLoadingCompleteCallback, this, normalized_id, transformState, data.getDebug() & MapDebugOptions::Collision);
|
||||
auto callback = std::bind(&Source::tileLoadingCompleteCallback, this, normalized_id, parameters.transformState, parameters.debugOptions & MapDebugOptions::Collision);
|
||||
|
||||
// If we don't find working tile data, we're just going to load it.
|
||||
if (info.type == SourceType::Raster) {
|
||||
auto tileData = std::make_shared<RasterTileData>(normalized_id,
|
||||
texturePool,
|
||||
parameters.texturePool,
|
||||
info,
|
||||
style.workers);
|
||||
parameters.worker);
|
||||
|
||||
tileData->request(data.pixelRatio, callback);
|
||||
tileData->request(parameters.pixelRatio, callback);
|
||||
new_tile.data = tileData;
|
||||
} else {
|
||||
std::unique_ptr<GeometryTileMonitor> monitor;
|
||||
|
||||
if (info.type == SourceType::Vector) {
|
||||
monitor = std::make_unique<VectorTileMonitor>(info, normalized_id, data.pixelRatio);
|
||||
monitor = std::make_unique<VectorTileMonitor>(info, normalized_id, parameters.pixelRatio);
|
||||
} else if (info.type == SourceType::Annotations) {
|
||||
monitor = std::make_unique<AnnotationTileMonitor>(normalized_id, data);
|
||||
monitor = std::make_unique<AnnotationTileMonitor>(normalized_id, parameters.data);
|
||||
} else {
|
||||
throw std::runtime_error("source type not implemented");
|
||||
}
|
||||
@@ -306,7 +303,7 @@ TileData::State Source::addTile(MapData& data,
|
||||
new_tile.data = std::make_shared<VectorTileData>(normalized_id,
|
||||
std::move(monitor),
|
||||
info.source_id,
|
||||
style,
|
||||
parameters.style,
|
||||
callback);
|
||||
}
|
||||
|
||||
@@ -408,24 +405,20 @@ void Source::findLoadedParent(const TileID& id, int32_t minCoveringZoom, std::fo
|
||||
}
|
||||
}
|
||||
|
||||
bool Source::update(MapData& data,
|
||||
const TransformState& transformState,
|
||||
Style& style,
|
||||
TexturePool& texturePool,
|
||||
bool shouldReparsePartialTiles) {
|
||||
bool Source::update(const StyleUpdateParameters& parameters) {
|
||||
bool allTilesUpdated = true;
|
||||
|
||||
if (!loaded || data.getAnimationTime() <= updated) {
|
||||
if (!loaded || parameters.animationTime <= updated) {
|
||||
return allTilesUpdated;
|
||||
}
|
||||
|
||||
double zoom = getZoom(transformState);
|
||||
double zoom = getZoom(parameters.transformState);
|
||||
if (info.type == SourceType::Raster || info.type == SourceType::Video) {
|
||||
zoom = ::round(zoom);
|
||||
} else {
|
||||
zoom = std::floor(zoom);
|
||||
}
|
||||
std::forward_list<TileID> required = coveringTiles(transformState);
|
||||
std::forward_list<TileID> required = coveringTiles(parameters.transformState);
|
||||
|
||||
// Determine the overzooming/underzooming amounts.
|
||||
int32_t minCoveringZoom = util::clamp<int32_t>(zoom - 10, info.min_zoom, info.max_zoom);
|
||||
@@ -442,14 +435,14 @@ bool Source::update(MapData& data,
|
||||
|
||||
switch (state) {
|
||||
case TileData::State::partial:
|
||||
if (shouldReparsePartialTiles) {
|
||||
if (!handlePartialTile(id, style.workers)) {
|
||||
if (parameters.shouldReparsePartialTiles) {
|
||||
if (!handlePartialTile(id, parameters.worker)) {
|
||||
allTilesUpdated = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TileData::State::invalid:
|
||||
state = addTile(data, transformState, style, texturePool, id);
|
||||
state = addTile(id, parameters);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -472,9 +465,9 @@ bool Source::update(MapData& data,
|
||||
}
|
||||
|
||||
if (info.type != SourceType::Raster && cache.getSize() == 0) {
|
||||
size_t conservativeCacheSize = ((float)transformState.getWidth() / util::tileSize) *
|
||||
((float)transformState.getHeight() / util::tileSize) *
|
||||
(transformState.getMaxZoom() - transformState.getMinZoom() + 1) *
|
||||
size_t conservativeCacheSize = ((float)parameters.transformState.getWidth() / util::tileSize) *
|
||||
((float)parameters.transformState.getHeight() / util::tileSize) *
|
||||
(parameters.transformState.getMaxZoom() - parameters.transformState.getMinZoom() + 1) *
|
||||
0.5;
|
||||
cache.setSize(conservativeCacheSize);
|
||||
}
|
||||
@@ -521,10 +514,10 @@ bool Source::update(MapData& data,
|
||||
|
||||
for (auto& tilePtr : tilePtrs) {
|
||||
tilePtr->data->redoPlacement(
|
||||
{ transformState.getAngle(), transformState.getPitch(), data.getDebug() & MapDebugOptions::Collision });
|
||||
{ parameters.transformState.getAngle(), parameters.transformState.getPitch(), parameters.debugOptions & MapDebugOptions::Collision });
|
||||
}
|
||||
|
||||
updated = data.getAnimationTime();
|
||||
updated = parameters.animationTime;
|
||||
|
||||
return allTilesUpdated;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user