diff options
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.hpp | 4 |
4 files changed, 14 insertions, 10 deletions
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index de4e5720bf..a877cb30a1 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -54,6 +54,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { const bool scaleWithMap = evaluated.get<CirclePitchScale>() == CirclePitchScaleType::Map; const bool pitchWithMap = evaluated.get<CirclePitchAlignment>() == AlignmentType::Map; + const float cameraToCenterDistance = parameters.state.getCameraToCenterDistance(); for (const RenderTile& tile : renderTiles) { auto bucket_ = tile.tile.getBucket<CircleBucket>(*baseImpl); @@ -79,7 +80,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { tile.id.pixelsToTileUnits(1, parameters.state.getZoom()), tile.id.pixelsToTileUnits(1, parameters.state.getZoom()) }} : parameters.pixelsToGLUnits }, - uniforms::u_camera_to_center_distance::Value{ parameters.state.getCameraToCenterDistance() }, + uniforms::u_camera_to_center_distance::Value{ cameraToCenterDistance }, uniforms::u_pitch_with_map::Value{ pitchWithMap } }, paintPropertyBinders, diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 63fcb6cfd5..615df577d2 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -232,6 +232,9 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { } } + const float cameraToCenterDistance = parameters.state.getCameraToCenterDistance(); + const float overscaleFactor = tile.tile.id.overscaleFactor(); + if (bucket.hasCollisionBoxData()) { static const style::Properties<>::PossiblyEvaluated properties {}; static const CollisionBoxProgram::PaintPropertyBinders paintAttributeData(properties, 0); @@ -253,7 +256,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { CollisionBoxProgram::UniformValues { uniforms::u_matrix::Value{ tile.matrix }, uniforms::u_extrude_scale::Value{ extrudeScale }, - uniforms::u_camera_to_center_distance::Value{ parameters.state.getCameraToCenterDistance() } + uniforms::u_camera_to_center_distance::Value{ cameraToCenterDistance } }, *bucket.collisionBox.vertexBuffer, *bucket.collisionBox.dynamicVertexBuffer, @@ -287,8 +290,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { CollisionCircleProgram::UniformValues { uniforms::u_matrix::Value{ tile.matrix }, uniforms::u_extrude_scale::Value{ extrudeScale }, - uniforms::u_overscale_factor::Value{ float(tile.tile.id.overscaleFactor()) }, - uniforms::u_camera_to_center_distance::Value{ parameters.state.getCameraToCenterDistance() } + uniforms::u_overscale_factor::Value{ overscaleFactor }, + uniforms::u_camera_to_center_distance::Value{ cameraToCenterDistance } }, *bucket.collisionCircle.vertexBuffer, *bucket.collisionCircle.dynamicVertexBuffer, diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index fd4356ca02..3fcdabd98f 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -240,7 +240,7 @@ void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layer } } -void TilePyramid::handleWrapJump(float lng) { +void TilePyramid::handleWrapJump(double lng) { // On top of the regular z/x/y values, TileIDs have a `wrap` value that specify // which cppy of the world the tile belongs to. For example, at `lng: 10` you // might render z/x/y/0 while at `lng: 370` you would render z/x/y/1. @@ -257,9 +257,9 @@ void TilePyramid::handleWrapJump(float lng) { // // This enables us to reuse the tiles at more ideal locations and prevent flickering. - const float lngDifference = lng - prevLng; - const float worldDifference = lngDifference / 360; - const int wrapDelta = ::round(worldDifference); + const double lngDifference = lng - prevLng; + const double worldDifference = lngDifference / 360; + const int16_t wrapDelta = ::round(worldDifference); prevLng = lng; if (wrapDelta) { diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp index 4e5f50fd52..c9d14af449 100644 --- a/src/mbgl/renderer/tile_pyramid.hpp +++ b/src/mbgl/renderer/tile_pyramid.hpp @@ -49,7 +49,7 @@ public: std::vector<std::reference_wrapper<RenderTile>> getRenderTiles(); Tile* getTile(const OverscaledTileID&); - void handleWrapJump(float lng); + void handleWrapJump(double lng); std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, @@ -75,7 +75,7 @@ public: TileObserver* observer = nullptr; - float prevLng = 0; + double prevLng = 0; }; } // namespace mbgl |