diff options
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/programs/line_program.cpp | 22 | ||||
-rw-r--r-- | src/mbgl/programs/line_program.hpp | 17 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_line.cpp | 5 |
3 files changed, 21 insertions, 23 deletions
diff --git a/src/mbgl/programs/line_program.cpp b/src/mbgl/programs/line_program.cpp index cd53337c10..f7054d3398 100644 --- a/src/mbgl/programs/line_program.cpp +++ b/src/mbgl/programs/line_program.cpp @@ -16,18 +16,9 @@ template <class Values, class...Args> Values makeValues(const LinePaintProperties::Evaluated& properties, const RenderTile& tile, const TransformState& state, + const std::array<float, 2>& pixelsToGLUnits, Args&&... args) { - mat2 antialiasingMatrix; - matrix::identity(antialiasingMatrix); - matrix::scale(antialiasingMatrix, antialiasingMatrix, 1.0, std::cos(state.getPitch())); - matrix::rotate(antialiasingMatrix, antialiasingMatrix, state.getAngle()); - - // calculate how much longer the real world distance is at the top of the screen - // than at the middle of the screen. - float topedgelength = std::sqrt(std::pow(state.getSize().height, 2.0f) / 4.0f * (1.0f + std::pow(state.getCameraToCenterDistance(), 2.0f))); - float x = state.getSize().height / 2.0f * std::tan(state.getPitch()); - return Values { uniforms::u_matrix::Value{ tile.translatedMatrix(properties.get<LineTranslate>(), @@ -39,9 +30,8 @@ Values makeValues(const LinePaintProperties::Evaluated& properties, uniforms::u_gapwidth::Value{ properties.get<LineGapWidth>() }, uniforms::u_blur::Value{ properties.get<LineBlur>() }, uniforms::u_offset::Value{ properties.get<LineOffset>() }, - uniforms::u_antialiasingmatrix::Value{ antialiasingMatrix }, uniforms::u_ratio::Value{ 1.0f / tile.id.pixelsToTileUnits(1.0, state.getZoom()) }, - uniforms::u_extra::Value{ (topedgelength + x) / topedgelength - 1.0f }, + uniforms::u_gl_units_to_pixels::Value{{{ 1.0f / pixelsToGLUnits[0], 1.0f / pixelsToGLUnits[1] }}}, std::forward<Args>(args)... }; } @@ -49,11 +39,13 @@ Values makeValues(const LinePaintProperties::Evaluated& properties, LineProgram::UniformValues LineProgram::uniformValues(const LinePaintProperties::Evaluated& properties, const RenderTile& tile, - const TransformState& state) { + const TransformState& state, + const std::array<float, 2>& pixelsToGLUnits) { return makeValues<LineProgram::UniformValues>( properties, tile, state, + pixelsToGLUnits, uniforms::u_color::Value{ properties.get<LineColor>() } ); } @@ -63,6 +55,7 @@ LineSDFProgram::uniformValues(const LinePaintProperties::Evaluated& properties, float pixelRatio, const RenderTile& tile, const TransformState& state, + const std::array<float, 2>& pixelsToGLUnits, const LinePatternPos& posA, const LinePatternPos& posB, float dashLineWidth, @@ -84,6 +77,7 @@ LineSDFProgram::uniformValues(const LinePaintProperties::Evaluated& properties, properties, tile, state, + pixelsToGLUnits, uniforms::u_color::Value{ properties.get<LineColor>() }, uniforms::u_patternscale_a::Value{ scaleA }, uniforms::u_patternscale_b::Value{ scaleB }, @@ -99,6 +93,7 @@ LinePatternProgram::UniformValues LinePatternProgram::uniformValues(const LinePaintProperties::Evaluated& properties, const RenderTile& tile, const TransformState& state, + const std::array<float, 2>& pixelsToGLUnits, const SpriteAtlasPosition& posA, const SpriteAtlasPosition& posB) { std::array<float, 2> sizeA {{ @@ -115,6 +110,7 @@ LinePatternProgram::uniformValues(const LinePaintProperties::Evaluated& properti properties, tile, state, + pixelsToGLUnits, uniforms::u_pattern_tl_a::Value{ posA.tl }, uniforms::u_pattern_br_a::Value{ posA.br }, uniforms::u_pattern_tl_b::Value{ posB.tl }, diff --git a/src/mbgl/programs/line_program.hpp b/src/mbgl/programs/line_program.hpp index 059806ffb2..9b97cc47a9 100644 --- a/src/mbgl/programs/line_program.hpp +++ b/src/mbgl/programs/line_program.hpp @@ -22,7 +22,6 @@ namespace uniforms { MBGL_DEFINE_UNIFORM_SCALAR(float, u_ratio); MBGL_DEFINE_UNIFORM_SCALAR(float, u_width); MBGL_DEFINE_UNIFORM_SCALAR(float, u_gapwidth); -MBGL_DEFINE_UNIFORM_SCALAR(float, u_extra); MBGL_DEFINE_UNIFORM_SCALAR(float, u_offset); MBGL_DEFINE_UNIFORM_SCALAR(float, u_tex_y_a); MBGL_DEFINE_UNIFORM_SCALAR(float, u_tex_y_b); @@ -30,7 +29,7 @@ MBGL_DEFINE_UNIFORM_SCALAR(float, u_sdfgamma); MBGL_DEFINE_UNIFORM_SCALAR(float, u_fade); MBGL_DEFINE_UNIFORM_VECTOR(float, 2, u_patternscale_a); MBGL_DEFINE_UNIFORM_VECTOR(float, 2, u_patternscale_b); -MBGL_DEFINE_UNIFORM_MATRIX(double, 2, u_antialiasingmatrix); +MBGL_DEFINE_UNIFORM_VECTOR(float, 2, u_gl_units_to_pixels); } // namespace uniforms struct LineAttributes : gl::Attributes< @@ -93,9 +92,8 @@ class LineProgram : public Program< uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasingmatrix, uniforms::u_ratio, - uniforms::u_extra, + uniforms::u_gl_units_to_pixels, uniforms::u_color>> { public: @@ -103,7 +101,8 @@ public: static UniformValues uniformValues(const style::LinePaintProperties::Evaluated&, const RenderTile&, - const TransformState&); + const TransformState&, + const std::array<float, 2>& pixelsToGLUnits); }; class LinePatternProgram : public Program< @@ -117,9 +116,8 @@ class LinePatternProgram : public Program< uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasingmatrix, uniforms::u_ratio, - uniforms::u_extra, + uniforms::u_gl_units_to_pixels, uniforms::u_pattern_tl_a, uniforms::u_pattern_br_a, uniforms::u_pattern_tl_b, @@ -135,6 +133,7 @@ public: static UniformValues uniformValues(const style::LinePaintProperties::Evaluated&, const RenderTile&, const TransformState&, + const std::array<float, 2>& pixelsToGLUnits, const SpriteAtlasPosition& posA, const SpriteAtlasPosition& posB); }; @@ -150,9 +149,8 @@ class LineSDFProgram : public Program< uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasingmatrix, uniforms::u_ratio, - uniforms::u_extra, + uniforms::u_gl_units_to_pixels, uniforms::u_color, uniforms::u_patternscale_a, uniforms::u_patternscale_b, @@ -169,6 +167,7 @@ public: float pixelRatio, const RenderTile&, const TransformState&, + const std::array<float, 2>& pixelsToGLUnits, const LinePatternPos& posA, const LinePatternPos& posB, float dashLineWidth, diff --git a/src/mbgl/renderer/painter_line.cpp b/src/mbgl/renderer/painter_line.cpp index a66f53a856..012746d2f2 100644 --- a/src/mbgl/renderer/painter_line.cpp +++ b/src/mbgl/renderer/painter_line.cpp @@ -51,6 +51,7 @@ void Painter::renderLine(PaintParameters& parameters, frame.pixelRatio, tile, state, + pixelsToGLUnits, posA, posB, layer.impl->dashLineWidth, @@ -72,6 +73,7 @@ void Painter::renderLine(PaintParameters& parameters, properties, tile, state, + pixelsToGLUnits, *posA, *posB)); @@ -80,7 +82,8 @@ void Painter::renderLine(PaintParameters& parameters, LineProgram::uniformValues( properties, tile, - state)); + state, + pixelsToGLUnits)); } } |