From 0cefb9cf139d748e1b35f341cc31c2c2a401e2f0 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 6 Dec 2019 12:04:08 -0500 Subject: allow world to be rendered small than 512px fix #16019 --- include/mbgl/util/constants.hpp | 3 ++- src/mbgl/map/transform_state.hpp | 2 +- src/mbgl/util/tile_cover.cpp | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp index ffdc4b2b30..1c703b45e2 100644 --- a/include/mbgl/util/constants.hpp +++ b/include/mbgl/util/constants.hpp @@ -35,11 +35,12 @@ constexpr double LONGITUDE_MAX = 180; constexpr double DEGREES_MAX = 360; constexpr double PITCH_MIN = 0.0; constexpr double PITCH_MAX = M_PI / 3; -constexpr double MIN_ZOOM = 0.0; +constexpr double MIN_ZOOM = -2; constexpr double MAX_ZOOM = 25.5; constexpr float MIN_ZOOM_F = MIN_ZOOM; constexpr float MAX_ZOOM_F = MAX_ZOOM; constexpr uint8_t DEFAULT_MAX_ZOOM = 22; +constexpr int8_t DEFAULT_MIN_ZOOM = -2; // ONE_EM constant used to go between "em" units used in style spec and "points" used internally for layout. constexpr float ONE_EM = 24.0f; diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp index edc7f3b9cf..d1f6d24b0c 100644 --- a/src/mbgl/map/transform_state.hpp +++ b/src/mbgl/map/transform_state.hpp @@ -221,7 +221,7 @@ private: LatLngBounds bounds; // Limit the amount of zooming possible on the map. - double min_scale = std::pow(2, 0); + double min_scale = std::pow(2, util::DEFAULT_MIN_ZOOM); double max_scale = std::pow(2, util::DEFAULT_MAX_ZOOM); NorthOrientation orientation = NorthOrientation::Upwards; diff --git a/src/mbgl/util/tile_cover.cpp b/src/mbgl/util/tile_cover.cpp index 9e2451e1af..c7ef73c4ba 100644 --- a/src/mbgl/util/tile_cover.cpp +++ b/src/mbgl/util/tile_cover.cpp @@ -131,7 +131,8 @@ std::vector tileCover(const Point& tl, } // namespace int32_t coveringZoomLevel(double zoom, style::SourceType type, uint16_t size) { - zoom += util::log2(util::tileSize / size); + // At negative zoom levels load tiles from z0 because negative tile zoom levels don't exist. + zoom = ::fmax(0.0, zoom + util::log2(util::tileSize / size)); if (type == style::SourceType::Raster || type == style::SourceType::Video) { return ::round(zoom); } else { -- cgit v1.2.1