aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsis Brammanis <brammanis@gmail.com>2017-06-30 10:41:22 -0400
committerAnsis Brammanis <brammanis@gmail.com>2017-06-30 10:41:22 -0400
commit021aeca1386e5ad58888145a4281da09a8f39fd8 (patch)
tree596d6c3c9cdc1a1a2af5cc94652e752fbdac610f
parent9d076dbe6b815c851dc1295a6c9899c992415bd4 (diff)
fix pitched-with-map rendering
-rw-r--r--src/mbgl/layout/symbol_projection.cpp2
-rw-r--r--src/mbgl/programs/symbol_program.cpp10
-rw-r--r--src/mbgl/text/quads.cpp2
3 files changed, 8 insertions, 6 deletions
diff --git a/src/mbgl/layout/symbol_projection.cpp b/src/mbgl/layout/symbol_projection.cpp
index 5b1dce29f..3b259468d 100644
--- a/src/mbgl/layout/symbol_projection.cpp
+++ b/src/mbgl/layout/symbol_projection.cpp
@@ -18,7 +18,7 @@ namespace mbgl {
matrix::rotate_z(m, m, state.getAngle());
}
} else {
- matrix::scale(m, m, state.getSize().width / 2.0, -state.getSize().height / 2.0, 1.0);
+ matrix::scale(m, m, state.getSize().width / 2.0, -static_cast<float>(state.getSize().height) / 2.0, 1.0);
matrix::translate(m, m, 1, -1, 0);
matrix::multiply(m, m, posMatrix);
}
diff --git a/src/mbgl/programs/symbol_program.cpp b/src/mbgl/programs/symbol_program.cpp
index 1c85be779..93eea2291 100644
--- a/src/mbgl/programs/symbol_program.cpp
+++ b/src/mbgl/programs/symbol_program.cpp
@@ -50,6 +50,8 @@ Values makeValues(const bool isText,
}
const float pixelsToTileUnits = tile.id.pixelsToTileUnits(1.0, state.getZoom());
+ const bool pitchWithMap = values.pitchAlignment == style::AlignmentType::Map;
+ const bool rotateWithMap = values.rotationAlignment == style::AlignmentType::Map;
mat4 labelPlaneMatrix;
if (alongLine) {
@@ -57,10 +59,10 @@ Values makeValues(const bool isText,
// Pass an identity matrix because no transformation needs to be done in the vertex shader.
matrix::identity(labelPlaneMatrix);
} else {
- labelPlaneMatrix = getLabelPlaneMatrix(tile.matrix, true, true, state, pixelsToTileUnits);
+ labelPlaneMatrix = getLabelPlaneMatrix(tile.matrix, pitchWithMap, rotateWithMap, state, pixelsToTileUnits);
}
- mat4 glCoordMatrix = getGlCoordMatrix(tile.matrix, true, true, state, pixelsToTileUnits);
+ mat4 glCoordMatrix = getGlCoordMatrix(tile.matrix, pitchWithMap, rotateWithMap, state, pixelsToTileUnits);
return Values {
uniforms::u_matrix::Value{ tile.translatedMatrix(values.translate,
@@ -113,8 +115,8 @@ typename SymbolSDFProgram<PaintProperties>::UniformValues SymbolSDFProgram<Paint
const SymbolSDFPart part)
{
const float gammaScale = (values.pitchAlignment == AlignmentType::Map
- ? std::cos(state.getPitch())
- : 1.0) * state.getCameraToCenterDistance();
+ ? std::cos(state.getPitch()) * state.getCameraToCenterDistance()
+ : 1.0);
return makeValues<SymbolSDFProgram<PaintProperties>::UniformValues>(
isText,
diff --git a/src/mbgl/text/quads.cpp b/src/mbgl/text/quads.cpp
index e4e425794..7908ea4ab 100644
--- a/src/mbgl/text/quads.cpp
+++ b/src/mbgl/text/quads.cpp
@@ -117,7 +117,7 @@ SymbolQuads getGlyphQuads(const Shaping& shapedText,
const float rectBuffer = 3.0f + glyphPadding;
const float halfAdvance = glyph.metrics.advance / 2.0;
- const bool alongLine = placement == style::SymbolPlacementType::Line;
+ const bool alongLine = layout.get<TextRotationAlignment>() == AlignmentType::Map && placement == SymbolPlacementType::Line;
const Point<float> glyphOffset = alongLine ?
Point<float>{ positionedGlyph.x + halfAdvance, positionedGlyph.y } :