diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2018-07-02 21:38:45 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2019-03-06 09:40:58 +0200 |
commit | 362aeadd03e2ad59db6999d2177fd0234bdf3130 (patch) | |
tree | 98ece2bdd880052b17506f2556f02251fa3ee32b | |
parent | 7ce593d5d20b2ef35cce21288a626ed98446b7b3 (diff) | |
download | qtlocation-mapboxgl-362aeadd03e2ad59db6999d2177fd0234bdf3130.tar.gz |
[core] Do not downcast values in TransformState
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/programs/symbol_program.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/tile/tile_id_io.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/util/tile_cover.cpp | 11 | ||||
-rw-r--r-- | test/style/source.test.cpp | 2 |
10 files changed, 35 insertions, 29 deletions
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp index f9a6555bcf..3a14dba73c 100644 --- a/src/mbgl/map/transform_state.cpp +++ b/src/mbgl/map/transform_state.cpp @@ -279,7 +279,7 @@ double TransformState::getMaxPitch() const { #pragma mark - Rotation -float TransformState::getBearing() const { +double TransformState::getBearing() const { return bearing; } @@ -287,15 +287,15 @@ void TransformState::setBearing(double bearing_) { bearing = bearing_; } -float TransformState::getFieldOfView() const { +double TransformState::getFieldOfView() const { return fov; } -float TransformState::getCameraToCenterDistance() const { +double TransformState::getCameraToCenterDistance() const { return 0.5 * size.height / std::tan(fov / 2.0); } -float TransformState::getPitch() const { +double TransformState::getPitch() const { return pitch; } diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp index fb10630d2d..016e2e212d 100644 --- a/src/mbgl/map/transform_state.hpp +++ b/src/mbgl/map/transform_state.hpp @@ -76,15 +76,15 @@ public: double getMaxPitch() const; // Rotation - float getBearing() const; + double getBearing() const; void setBearing(double bearing); // Camera - float getFieldOfView() const; - float getCameraToCenterDistance() const; + double getFieldOfView() const; + double getCameraToCenterDistance() const; // Tilt - float getPitch() const; + double getPitch() const; void setPitch(double pitch); // State diff --git a/src/mbgl/programs/symbol_program.cpp b/src/mbgl/programs/symbol_program.cpp index 0c195e4d37..473f923954 100644 --- a/src/mbgl/programs/symbol_program.cpp +++ b/src/mbgl/programs/symbol_program.cpp @@ -46,13 +46,15 @@ Values makeValues(const bool isText, const float symbolFadeChange, Args&&... args) { std::array<float, 2> extrudeScale; + const float cameraToCenterDistance = state.getCameraToCenterDistance(); + const float pitch = state.getPitch(); if (values.pitchAlignment == AlignmentType::Map) { extrudeScale.fill(tile.id.pixelsToTileUnits(1, state.getZoom())); } else { extrudeScale = {{ - pixelsToGLUnits[0] * state.getCameraToCenterDistance(), - pixelsToGLUnits[1] * state.getCameraToCenterDistance() + pixelsToGLUnits[0] * cameraToCenterDistance, + pixelsToGLUnits[1] * cameraToCenterDistance }}; } @@ -91,8 +93,8 @@ Values makeValues(const bool isText, uniforms::u_texture::Value( 0 ), uniforms::u_fade_change::Value( symbolFadeChange ), uniforms::u_is_text::Value( isText ), - uniforms::u_camera_to_center_distance::Value( state.getCameraToCenterDistance() ), - uniforms::u_pitch::Value( state.getPitch() ), + uniforms::u_camera_to_center_distance::Value( cameraToCenterDistance ), + uniforms::u_pitch::Value( pitch ), uniforms::u_pitch_with_map::Value( pitchWithMap ), uniforms::u_rotate_symbol::Value( rotateInShader ), uniforms::u_aspect_ratio::Value( state.getSize().aspectRatio() ), diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index aec6813823..34fc59b2d5 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 19edb6afbd..e9780229bc 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -237,6 +237,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { } } + const float cameraToCenterDistance = parameters.state.getCameraToCenterDistance(); + if (bucket.hasCollisionBoxData()) { static const style::Properties<>::PossiblyEvaluated properties {}; static const CollisionBoxProgram::Binders paintAttributeData(properties, 0); @@ -259,7 +261,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, @@ -295,7 +297,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { 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_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 f781551f31..831abc532c 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -243,7 +243,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. @@ -260,9 +260,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 bc2c370780..af242092d2 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, @@ -79,7 +79,7 @@ private: TileObserver* observer = nullptr; - float prevLng = 0; + double prevLng = 0; }; } // namespace mbgl diff --git a/src/mbgl/tile/tile_id_io.cpp b/src/mbgl/tile/tile_id_io.cpp index d8be6b93d6..360de131eb 100644 --- a/src/mbgl/tile/tile_id_io.cpp +++ b/src/mbgl/tile/tile_id_io.cpp @@ -18,12 +18,12 @@ std::string toString(const CanonicalTileID& rhs) { } // namespace util ::std::ostream& operator<<(::std::ostream& os, const OverscaledTileID& rhs) { - return os << rhs.canonical << "=>" << uint32_t(rhs.overscaledZ); + return os << rhs.canonical << "=>" << uint32_t(rhs.overscaledZ) << (rhs.wrap >= 0 ? "+" : "") << rhs.wrap; } namespace util { std::string toString(const OverscaledTileID& rhs) { - return util::toString(rhs.canonical) + "=>" + util::toString(rhs.overscaledZ); + return util::toString(rhs.canonical) + "=>" + util::toString(rhs.overscaledZ) + (rhs.wrap >= 0 ? "+" : "") + util::toString(rhs.wrap); } } // namespace util diff --git a/src/mbgl/util/tile_cover.cpp b/src/mbgl/util/tile_cover.cpp index 2b28c46ccc..aa6a581c86 100644 --- a/src/mbgl/util/tile_cover.cpp +++ b/src/mbgl/util/tile_cover.cpp @@ -116,15 +116,16 @@ std::vector<UnwrappedTileID> tileCover(const Point<double>& tl, return std::tie(a.sqDist, a.x, a.y) < std::tie(b.sqDist, b.x, b.y); }); - // Erase duplicate tile IDs (they typically occur at the common side of both triangles). - t.erase(std::unique(t.begin(), t.end(), [](const ID& a, const ID& b) { - return a.x == b.x && a.y == b.y; - }), t.end()); - std::vector<UnwrappedTileID> result; for (const auto& id : t) { result.emplace_back(z, id.x, id.y); } + + // Erase duplicate tile IDs (they typically occur at the common side of both triangles). + result.erase(std::unique(result.begin(), result.end(), [](const UnwrappedTileID& a, const UnwrappedTileID& b) { + return a.canonical == b.canonical; + }), result.end()); + return result; } diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index 8bc152926f..37e397d5e3 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -276,8 +276,8 @@ TEST(Source, RasterTileFail) { test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(SourceType::Raster, source_.baseImpl->type); - EXPECT_EQ(OverscaledTileID(0, 0, 0), tileID); EXPECT_EQ("Failed by the test case", util::toString(error)); + EXPECT_EQ(OverscaledTileID(0, 0, 0), tileID); test.end(); }; |