summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2018-07-02 21:38:45 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2019-03-06 09:40:58 +0200
commit362aeadd03e2ad59db6999d2177fd0234bdf3130 (patch)
tree98ece2bdd880052b17506f2556f02251fa3ee32b
parent7ce593d5d20b2ef35cce21288a626ed98446b7b3 (diff)
downloadqtlocation-mapboxgl-362aeadd03e2ad59db6999d2177fd0234bdf3130.tar.gz
[core] Do not downcast values in TransformState
-rw-r--r--src/mbgl/map/transform_state.cpp8
-rw-r--r--src/mbgl/map/transform_state.hpp8
-rw-r--r--src/mbgl/programs/symbol_program.cpp10
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.cpp3
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp6
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp8
-rw-r--r--src/mbgl/renderer/tile_pyramid.hpp4
-rw-r--r--src/mbgl/tile/tile_id_io.cpp4
-rw-r--r--src/mbgl/util/tile_cover.cpp11
-rw-r--r--test/style/source.test.cpp2
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();
};