summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnsis Brammanis <ansis@mapbox.com>2017-10-27 12:37:10 -0400
committerChris Loer <chris.loer@gmail.com>2017-10-31 10:25:57 -0700
commit2fd2c2d37ca5e13018cb033f81aa1e4f899659a4 (patch)
tree607daff237a0b84ded2c2398a59c43a95c4fa628
parentb3463653c5366a0281ee9425ca90b2b04958c6d8 (diff)
downloadqtlocation-mapboxgl-2fd2c2d37ca5e13018cb033f81aa1e4f899659a4.tar.gz
fix flickering [skip ci]
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp2
-rw-r--r--src/mbgl/text/placement.cpp8
-rw-r--r--src/mbgl/text/placement.hpp2
3 files changed, 8 insertions, 4 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..5fe2b1afe6 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);
+ mat4 posMatrix;
+ state.matrixFor(posMatrix, renderTile.id);
+ matrix::multiply(posMatrix, projMatrix, posMatrix);
+
mat4 textLabelPlaneMatrix = getLabelPlaneMatrix(renderTile.matrix,
layout.get<TextPitchAlignment>() == style::AlignmentType::Map,
layout.get<TextRotationAlignment>() == style::AlignmentType::Map,
@@ -63,7 +67,7 @@ void Placement::placeLayer(RenderSymbolLayer& symbolLayer, bool showCollisionBox
state,
pixelsToTileUnits);
- placeLayerBucket(symbolBucket, renderTile.matrix, textLabelPlaneMatrix, iconLabelPlaneMatrix, scale, showCollisionBoxes);
+ placeLayerBucket(symbolBucket, posMatrix, textLabelPlaneMatrix, iconLabelPlaneMatrix, scale, showCollisionBoxes);
}
}
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;