diff options
author | Ansis Brammanis <brammanis@gmail.com> | 2017-06-30 10:41:22 -0400 |
---|---|---|
committer | Ansis Brammanis <brammanis@gmail.com> | 2017-06-30 10:41:22 -0400 |
commit | 021aeca1386e5ad58888145a4281da09a8f39fd8 (patch) | |
tree | 596d6c3c9cdc1a1a2af5cc94652e752fbdac610f | |
parent | 9d076dbe6b815c851dc1295a6c9899c992415bd4 (diff) |
fix pitched-with-map rendering
-rw-r--r-- | src/mbgl/layout/symbol_projection.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/programs/symbol_program.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/text/quads.cpp | 2 |
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 } : |