diff options
author | Molly Lloyd <mollymerp@users.noreply.github.com> | 2016-11-16 17:34:33 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-16 17:34:33 -0800 |
commit | 3380f0803a62525a6884ee4d05e103e072c36117 (patch) | |
tree | dd9263d66d91eea1f41f21d3eaf5173d12b559a2 /src/mbgl/programs | |
parent | a5ac64316642cacb32466ea24ba2bf29b8d35da4 (diff) | |
download | qtlocation-mapboxgl-3380f0803a62525a6884ee4d05e103e072c36117.tar.gz |
[core] update native for line property function shaders changes (#6658)
* [core] update shaders for line property functions
update deps, define device pixel ratio for all shaders
[core] create ShaderParameter struct to store pixel ratio and overdraw param
repair rebase errs
update shaders to include pixel ratio
make sure collision_box never overdraws
update test suite, move shaders to Painter::render so the correct pixel ratio is applied
move shader compiling back to the Painter constructor
rebase from shader --> program refactor
re-factor parameters for collisionBox and debug programs
remove unused vars from line-program, move blur math to shader
update core files
remove unecessary files
update shaders PR, remove comments
bump test suite sha
fix formatting, incorporate feedback
refactor program.hpp
* [core] remove line transformations that were moved to the shaders, bump shader sha
* [core] shorten ProgramParameter instantiation
* [core] bump shader+test suite shas
Diffstat (limited to 'src/mbgl/programs')
-rw-r--r-- | src/mbgl/programs/circle_program.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/programs/line_program.cpp | 18 | ||||
-rw-r--r-- | src/mbgl/programs/line_program.hpp | 14 | ||||
-rw-r--r-- | src/mbgl/programs/program.hpp | 31 | ||||
-rw-r--r-- | src/mbgl/programs/program_parameters.hpp | 16 | ||||
-rw-r--r-- | src/mbgl/programs/programs.hpp | 31 |
6 files changed, 59 insertions, 55 deletions
diff --git a/src/mbgl/programs/circle_program.hpp b/src/mbgl/programs/circle_program.hpp index b428937e33..6b713bb41c 100644 --- a/src/mbgl/programs/circle_program.hpp +++ b/src/mbgl/programs/circle_program.hpp @@ -11,7 +11,6 @@ namespace mbgl { namespace uniforms { MBGL_DEFINE_UNIFORM_SCALAR(float, u_radius); MBGL_DEFINE_UNIFORM_SCALAR(bool, u_scale_with_map); -MBGL_DEFINE_UNIFORM_SCALAR(float, u_devicepixelratio); } // namespace uniforms using CircleAttributes = gl::Attributes< @@ -28,8 +27,7 @@ class CircleProgram : public Program< uniforms::u_radius, uniforms::u_blur, uniforms::u_scale_with_map, - uniforms::u_extrude_scale, - uniforms::u_devicepixelratio>> + uniforms::u_extrude_scale>> { public: using Program::Program; diff --git a/src/mbgl/programs/line_program.cpp b/src/mbgl/programs/line_program.cpp index 07af464eb3..8c35df1b6e 100644 --- a/src/mbgl/programs/line_program.cpp +++ b/src/mbgl/programs/line_program.cpp @@ -12,13 +12,9 @@ static_assert(sizeof(LineAttributes::Vertex) == 8, "expected LineVertex size"); template <class Values, class...Args> Values makeValues(const style::LinePaintProperties& properties, - float pixelRatio, const RenderTile& tile, const TransformState& state, Args&&... args) { - // the distance over which the line edge fades out. - // Retina devices need a smaller distance to avoid aliasing. - float antialiasing = 1.0 / pixelRatio; mat2 antialiasingMatrix; matrix::identity(antialiasingMatrix); @@ -35,11 +31,10 @@ Values makeValues(const style::LinePaintProperties& properties, properties.lineTranslateAnchor.value, state) }, uniforms::u_opacity::Value{ properties.lineOpacity.value }, - uniforms::u_linewidth::Value{ properties.lineWidth.value / 2 }, - uniforms::u_gapwidth::Value{ properties.lineGapWidth.value / 2 }, - uniforms::u_blur::Value{ properties.lineBlur.value + antialiasing }, - uniforms::u_offset::Value{ -properties.lineOffset.value }, - uniforms::u_antialiasing::Value{ antialiasing / 2 }, + uniforms::u_width::Value{ properties.lineWidth.value }, + uniforms::u_gapwidth::Value{ properties.lineGapWidth.value }, + uniforms::u_blur::Value{ properties.lineBlur.value }, + uniforms::u_offset::Value{ properties.lineOffset.value }, 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 }, @@ -49,12 +44,10 @@ Values makeValues(const style::LinePaintProperties& properties, LineProgram::UniformValues LineProgram::uniformValues(const style::LinePaintProperties& properties, - float pixelRatio, const RenderTile& tile, const TransformState& state) { return makeValues<LineProgram::UniformValues>( properties, - pixelRatio, tile, state, uniforms::u_color::Value{ properties.lineColor.value } @@ -85,7 +78,6 @@ LineSDFProgram::uniformValues(const style::LinePaintProperties& properties, return makeValues<LineSDFProgram::UniformValues>( properties, - pixelRatio, tile, state, uniforms::u_color::Value{ properties.lineColor.value }, @@ -101,7 +93,6 @@ LineSDFProgram::uniformValues(const style::LinePaintProperties& properties, LinePatternProgram::UniformValues LinePatternProgram::uniformValues(const style::LinePaintProperties& properties, - float pixelRatio, const RenderTile& tile, const TransformState& state, const SpriteAtlasPosition& posA, @@ -118,7 +109,6 @@ LinePatternProgram::uniformValues(const style::LinePaintProperties& properties, return makeValues<LinePatternProgram::UniformValues>( properties, - pixelRatio, tile, state, uniforms::u_pattern_tl_a::Value{ posA.tl }, diff --git a/src/mbgl/programs/line_program.hpp b/src/mbgl/programs/line_program.hpp index 07ae35b8ed..de3297de96 100644 --- a/src/mbgl/programs/line_program.hpp +++ b/src/mbgl/programs/line_program.hpp @@ -23,9 +23,8 @@ class SpriteAtlasPosition; namespace uniforms { MBGL_DEFINE_UNIFORM_SCALAR(float, u_ratio); -MBGL_DEFINE_UNIFORM_SCALAR(float, u_linewidth); +MBGL_DEFINE_UNIFORM_SCALAR(float, u_width); MBGL_DEFINE_UNIFORM_SCALAR(float, u_gapwidth); -MBGL_DEFINE_UNIFORM_SCALAR(float, u_antialiasing); MBGL_DEFINE_UNIFORM_SCALAR(float, u_extra); MBGL_DEFINE_UNIFORM_SCALAR(float, u_offset); MBGL_DEFINE_UNIFORM_SCALAR(float, u_tex_y_a); @@ -93,11 +92,10 @@ class LineProgram : public Program< gl::Uniforms< uniforms::u_matrix, uniforms::u_opacity, - uniforms::u_linewidth, + uniforms::u_width, uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasing, uniforms::u_antialiasingmatrix, uniforms::u_ratio, uniforms::u_extra, @@ -107,7 +105,6 @@ public: using Program::Program; static UniformValues uniformValues(const style::LinePaintProperties&, - float pixelRatio, const RenderTile&, const TransformState&); }; @@ -119,11 +116,10 @@ class LinePatternProgram : public Program< gl::Uniforms< uniforms::u_matrix, uniforms::u_opacity, - uniforms::u_linewidth, + uniforms::u_width, uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasing, uniforms::u_antialiasingmatrix, uniforms::u_ratio, uniforms::u_extra, @@ -140,7 +136,6 @@ public: using Program::Program; static UniformValues uniformValues(const style::LinePaintProperties&, - float pixelRatio, const RenderTile&, const TransformState&, const SpriteAtlasPosition& posA, @@ -154,11 +149,10 @@ class LineSDFProgram : public Program< gl::Uniforms< uniforms::u_matrix, uniforms::u_opacity, - uniforms::u_linewidth, + uniforms::u_width, uniforms::u_gapwidth, uniforms::u_blur, uniforms::u_offset, - uniforms::u_antialiasing, uniforms::u_antialiasingmatrix, uniforms::u_ratio, uniforms::u_extra, diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp index fa41d43e5c..c912de13fe 100644 --- a/src/mbgl/programs/program.hpp +++ b/src/mbgl/programs/program.hpp @@ -1,33 +1,38 @@ #pragma once #include <mbgl/gl/program.hpp> +#include <mbgl/programs/program_parameters.hpp> #include <cassert> namespace mbgl { -enum class ProgramDefines : bool { - None = false, - Overdraw = true, -}; - template <class Shaders, class Primitive, class Attributes, class Uniforms> class Program : public gl::Program<Primitive, Attributes, Uniforms> { public: using ParentType = gl::Program<Primitive, Attributes, Uniforms>; - Program(gl::Context& context, ProgramDefines defines) - : ParentType(context, Shaders::vertexSource, fragmentSource(defines)) + Program(gl::Context& context, const ProgramParameters& programParameters) + : ParentType(context, vertexSource(programParameters), fragmentSource(programParameters)) {} + + static std::string pixelRatioDefine(const ProgramParameters& parameters) { + return std::string("#define DEVICE_PIXEL_RATIO ") + std::to_string(parameters.pixelRatio) + "\n"; + } - static std::string fragmentSource(ProgramDefines defines) { - std::string fragment = Shaders::fragmentSource; - if (defines == ProgramDefines::Overdraw) { - assert(fragment.find("#ifdef OVERDRAW_INSPECTOR") != std::string::npos); - fragment.replace(fragment.find_first_of('\n'), 1, "\n#define OVERDRAW_INSPECTOR\n"); + static std::string fragmentSource(const ProgramParameters& parameters) { + std::string source = pixelRatioDefine(parameters) + Shaders::fragmentSource; + if (parameters.overdraw) { + assert(source.find("#ifdef OVERDRAW_INSPECTOR") != std::string::npos); + source.replace(source.find_first_of('\n'), 1, "\n#define OVERDRAW_INSPECTOR\n"); } - return fragment; + return source; } + + static std::string vertexSource(const ProgramParameters& parameters) { + return pixelRatioDefine(parameters) + Shaders::vertexSource; + } + }; } // namespace mbgl diff --git a/src/mbgl/programs/program_parameters.hpp b/src/mbgl/programs/program_parameters.hpp new file mode 100644 index 0000000000..ad8cbf1bf8 --- /dev/null +++ b/src/mbgl/programs/program_parameters.hpp @@ -0,0 +1,16 @@ +#pragma once + +namespace mbgl { + +class ProgramParameters { +public: + ProgramParameters(float pixelRatio_ = 1.0, bool overdraw_ = false) + : pixelRatio(pixelRatio_), + overdraw(overdraw_) {} + + float pixelRatio; + bool overdraw; +}; + +} // namespace mbgl + diff --git a/src/mbgl/programs/programs.hpp b/src/mbgl/programs/programs.hpp index 53ed26e969..dd71c2ce97 100644 --- a/src/mbgl/programs/programs.hpp +++ b/src/mbgl/programs/programs.hpp @@ -7,26 +7,27 @@ #include <mbgl/programs/symbol_program.hpp> #include <mbgl/programs/debug_program.hpp> #include <mbgl/programs/collision_box_program.hpp> +#include <mbgl/programs/program_parameters.hpp> namespace mbgl { class Programs { public: - Programs(gl::Context& context, ProgramDefines defines = ProgramDefines::None) - : circle(context, defines), - fill(context, defines), - fillPattern(context, defines), - fillOutline(context, defines), - fillOutlinePattern(context, defines), - line(context, defines), - lineSDF(context, defines), - linePattern(context, defines), - raster(context, defines), - symbolIcon(context, defines), - symbolIconSDF(context, defines), - symbolGlyph(context, defines), - debug(context, ProgramDefines::None), - collisionBox(context, ProgramDefines::None) { + Programs(gl::Context& context, const ProgramParameters& programParameters) + : circle(context, programParameters), + fill(context, programParameters), + fillPattern(context, programParameters), + fillOutline(context, programParameters), + fillOutlinePattern(context, programParameters), + line(context, programParameters), + lineSDF(context, programParameters), + linePattern(context, programParameters), + raster(context, programParameters), + symbolIcon(context, programParameters), + symbolIconSDF(context, programParameters), + symbolGlyph(context, programParameters), + debug(context, ProgramParameters(programParameters.pixelRatio, false)), + collisionBox(context, ProgramParameters(programParameters.pixelRatio, false)) { } CircleProgram circle; |