summaryrefslogtreecommitdiff
path: root/src/mbgl/programs
diff options
context:
space:
mode:
authorMolly Lloyd <mollymerp@users.noreply.github.com>2016-11-16 17:34:33 -0800
committerGitHub <noreply@github.com>2016-11-16 17:34:33 -0800
commit3380f0803a62525a6884ee4d05e103e072c36117 (patch)
treedd9263d66d91eea1f41f21d3eaf5173d12b559a2 /src/mbgl/programs
parenta5ac64316642cacb32466ea24ba2bf29b8d35da4 (diff)
downloadqtlocation-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.hpp4
-rw-r--r--src/mbgl/programs/line_program.cpp18
-rw-r--r--src/mbgl/programs/line_program.hpp14
-rw-r--r--src/mbgl/programs/program.hpp31
-rw-r--r--src/mbgl/programs/program_parameters.hpp16
-rw-r--r--src/mbgl/programs/programs.hpp31
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;