diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2017-10-27 12:37:10 -0400 |
---|---|---|
committer | Ansis Brammanis <ansis@mapbox.com> | 2017-10-27 12:37:10 -0400 |
commit | 9e1e4f7968a0f30c8bfe90138306c009b336ad77 (patch) | |
tree | 8b94db16b9e1d451d3f487fa4151ee417c3c66d9 | |
parent | d59f0007797cc5889f9d22105e5679eab7aaef3b (diff) | |
download | qtlocation-mapboxgl-9e1e4f7968a0f30c8bfe90138306c009b336ad77.tar.gz |
fix flickering [skip ci]
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 77810f0ca2..ea8ddbee28 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -367,7 +367,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { auto newPlacement = std::make_unique<Placement>(parameters.state); for (auto it = order.rbegin(); it != order.rend(); ++it) { if (it->layer.is<RenderSymbolLayer>()) { - newPlacement->placeLayer(*it->layer.as<RenderSymbolLayer>(), parameters.debugOptions & MapDebugOptions::Collision); + newPlacement->placeLayer(*it->layer.as<RenderSymbolLayer>(), parameters.projMatrix, parameters.debugOptions & MapDebugOptions::Collision); } } diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 39c4a9c79e..d67da53643 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -34,7 +34,7 @@ uint32_t Placement::maxCrossTileID = 0; Placement::Placement(const TransformState& state_) : collisionIndex(state_), state(state_) {} -void Placement::placeLayer(RenderSymbolLayer& symbolLayer, bool showCollisionBoxes) { +void Placement::placeLayer(RenderSymbolLayer& symbolLayer, const mat4& projMatrix, bool showCollisionBoxes) { for (RenderTile& renderTile : symbolLayer.renderTiles) { if (!renderTile.tile.isRenderable()) { @@ -51,6 +51,10 @@ void Placement::placeLayer(RenderSymbolLayer& symbolLayer, bool showCollisionBox const float scale = std::pow(2, state.getZoom() - renderTile.id.canonical.z); + // TODO perf: do this only once for each tile, not once per layer + state.matrixFor(renderTile.matrix, renderTile.id); + matrix::multiply(renderTile.matrix, projMatrix, renderTile.matrix); + mat4 textLabelPlaneMatrix = getLabelPlaneMatrix(renderTile.matrix, layout.get<TextPitchAlignment>() == style::AlignmentType::Map, layout.get<TextRotationAlignment>() == style::AlignmentType::Map, diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index 7e08301bf2..c694e8ef98 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -39,7 +39,7 @@ namespace mbgl { class Placement { public: Placement(const TransformState&); - void placeLayer(RenderSymbolLayer&, bool showCollisionBoxes); + void placeLayer(RenderSymbolLayer&, const mat4&, bool showCollisionBoxes); bool commit(const Placement& prevPlacement, TimePoint); void updateLayerOpacities(RenderSymbolLayer&); JointOpacityState getOpacity(uint32_t crossTileSymbolID) const; |