diff --git a/include/llmr/map/transform.hpp b/include/llmr/map/transform.hpp index a6dde2b4f..f43802ffa 100644 --- a/include/llmr/map/transform.hpp +++ b/include/llmr/map/transform.hpp @@ -37,6 +37,7 @@ public: // Getters void matrixFor(mat4& matrix, const Tile::ID& id) const; float getZoom() const; + float getNormalizedZoom() const; int32_t getIntegerZoom() const; double getScale() const; double getAngle() const; diff --git a/src/map/map.cpp b/src/map/map.cpp index c564ede64..078fe01b9 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -46,7 +46,7 @@ void Map::loadSettings() { transform.setAngle(settings.angle); transform.setScale(settings.scale); transform.setLonLat(settings.longitude, settings.latitude); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); } @@ -87,7 +87,7 @@ void Map::stopPanning() { void Map::scaleBy(double ds, double cx, double cy, double duration) { transform.scaleBy(ds, cx, cy, duration); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); transform.getLonLat(settings.longitude, settings.latitude); @@ -137,7 +137,7 @@ void Map::getLonLat(double& lon, double& lat) const { void Map::setLonLatZoom(double lon, double lat, double zoom, double duration) { transform.setLonLatZoom(lon, lat, zoom, duration); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); transform.getLonLat(settings.longitude, settings.latitude); @@ -151,7 +151,7 @@ void Map::getLonLatZoom(double& lon, double& lat, double& zoom) const { void Map::setScale(double scale, double cx, double cy, double duration) { transform.setScale(scale, cx, cy, duration); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); transform.getLonLat(settings.longitude, settings.latitude); @@ -161,7 +161,7 @@ void Map::setScale(double scale, double cx, double cy, double duration) { void Map::setZoom(double zoom, double duration) { transform.setZoom(zoom, duration); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); transform.getLonLat(settings.longitude, settings.latitude); @@ -215,7 +215,7 @@ void Map::resetPosition() { transform.setAngle(0); transform.setLonLat(0, 0); transform.setZoom(0); - style.cascade(transform.getZoom()); + style.cascade(transform.getNormalizedZoom()); update(); transform.getLonLat(settings.longitude, settings.latitude); diff --git a/src/map/transform.cpp b/src/map/transform.cpp index 8cb580ea4..5662e36b6 100644 --- a/src/map/transform.cpp +++ b/src/map/transform.cpp @@ -256,6 +256,10 @@ float Transform::getZoom() const { return log(scale) / M_LN2; } +float Transform::getNormalizedZoom() const { + return log(scale * util::tileSize / 256.0f) / M_LN2; +} + int32_t Transform::getIntegerZoom() const { return floor(log(scale) / M_LN2); } diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index eef751c9c..255cc2208 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -153,7 +153,7 @@ void Painter::render(const Tile& tile) { return; } - frameHistory.record(transform.getZoom()); + frameHistory.record(transform.getNormalizedZoom()); matrix = tile.matrix; glStencilFunc(GL_EQUAL, tile.clip_id, 0xFF); @@ -534,7 +534,7 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons textShader->setAngle((int32_t)(angle + 256) % 256); textShader->setFlip(bucket.geom_desc.path == TextPathType::Curve ? 1 : 0); - textShader->setZoom((transform.getZoom() - zoomAdjust) * 10); // current zoom level + textShader->setZoom((transform.getNormalizedZoom() - zoomAdjust) * 10); // current zoom level // Label fading const float duration = 300.0f;