diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-01 10:50:45 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-01 11:18:43 +0300 |
commit | 59f9a9f93c01fc289eefd38f0805dbf3d6ee445b (patch) | |
tree | e3483d71304a74aa3062cb3339c49a392476f686 /src/mbgl/renderer/painter_symbol.cpp | |
parent | 5e7736ce87f558e2d57869efef9512bcc3d2d1a5 (diff) | |
download | qtlocation-mapboxgl-59f9a9f93c01fc289eefd38f0805dbf3d6ee445b.tar.gz |
[core] Update sdf shader code
Ported the following patch:
- [convert mat4 exMatrix to a vec2 extrudeScale](https://github.com/mapbox/mapbox-gl-shaders/commit/a8d549b7a41540d3a99767975ff1b7b18a6010e9)
Diffstat (limited to 'src/mbgl/renderer/painter_symbol.cpp')
-rw-r--r-- | src/mbgl/renderer/painter_symbol.cpp | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/mbgl/renderer/painter_symbol.cpp b/src/mbgl/renderer/painter_symbol.cpp index 6f628b9d16..d19d7bc498 100644 --- a/src/mbgl/renderer/painter_symbol.cpp +++ b/src/mbgl/renderer/painter_symbol.cpp @@ -36,34 +36,28 @@ void Painter::renderSDF(SymbolBucket &bucket, { mat4 vtxMatrix = translatedMatrix(matrix, translate, tileID, translateAnchor); - bool skewed = rotationAlignment == RotationAlignmentType::Map; - mat4 exMatrix; - float s; - float gammaScale; - - if (skewed) { - matrix::identity(exMatrix); - s = tileID.pixelsToTileUnits(1, state.getZoom()); - gammaScale = 1.0f / std::cos(state.getPitch()); - } else { - exMatrix = extrudeMatrix; - s = state.getAltitude(); - gammaScale = 1.0f; - matrix::rotate_z(exMatrix, exMatrix, state.getNorthOrientationAngle()); - } - const bool flippedY = !skewed && state.getViewportMode() == ViewportMode::FlippedY; - matrix::scale(exMatrix, exMatrix, s, flippedY ? -s : s, 1); - // If layerStyle.size > bucket.info.fontSize then labels may collide float fontSize = paintSize; float fontScale = fontSize / sdfFontSize; - matrix::scale(exMatrix, exMatrix, fontScale, fontScale, 1.0f); + + float scale = fontScale; + std::array<float, 2> exScale = extrudeScale; + bool alignedWithMap = rotationAlignment == RotationAlignmentType::Map; + float gammaScale = 1.0f; + + if (alignedWithMap) { + scale *= tileID.pixelsToTileUnits(1, state.getZoom()); + exScale.fill(scale); + gammaScale /= std::cos(state.getPitch()); + } else { + exScale = {{ exScale[0] * scale, exScale[1] * scale }}; + } config.program = sdfShader.getID(); sdfShader.u_matrix = vtxMatrix; - sdfShader.u_exmatrix = exMatrix; + sdfShader.u_extrude_scale = exScale; sdfShader.u_texsize = texsize; - sdfShader.u_skewed = skewed; + sdfShader.u_skewed = alignedWithMap; sdfShader.u_texture = 0; // adjust min/max zooms for variable font sies |