summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-07-08 14:25:54 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-07-11 18:39:50 -0700
commit822ec091da5f1810bcba8afbb7cde35476b2f119 (patch)
tree30ee3d6bd0abc9a6349344fcfb3596f0de280ce3 /src
parent462137a5360dc1d47a1cee654e43243e729befb7 (diff)
downloadqtlocation-mapboxgl-822ec091da5f1810bcba8afbb7cde35476b2f119.tar.gz
[core] Introduce non-anonymous Shaders class
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/renderer/painter.cpp41
-rw-r--r--src/mbgl/renderer/painter.hpp45
-rw-r--r--src/mbgl/renderer/painter_background.cpp7
-rw-r--r--src/mbgl/renderer/painter_circle.cpp4
-rw-r--r--src/mbgl/renderer/painter_clipping.cpp4
-rw-r--r--src/mbgl/renderer/painter_debug.cpp6
-rw-r--r--src/mbgl/renderer/painter_fill.cpp13
-rw-r--r--src/mbgl/renderer/painter_line.cpp10
-rw-r--r--src/mbgl/renderer/painter_raster.cpp4
-rw-r--r--src/mbgl/renderer/painter_symbol.cpp12
-rw-r--r--src/mbgl/shader/shaders.hpp54
11 files changed, 86 insertions, 114 deletions
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp
index 46207fbcfe..2b82983d27 100644
--- a/src/mbgl/renderer/painter.cpp
+++ b/src/mbgl/renderer/painter.cpp
@@ -18,18 +18,7 @@
#include <mbgl/geometry/line_atlas.hpp>
#include <mbgl/geometry/glyph_atlas.hpp>
-#include <mbgl/shader/pattern_shader.hpp>
-#include <mbgl/shader/plain_shader.hpp>
-#include <mbgl/shader/outline_shader.hpp>
-#include <mbgl/shader/outlinepattern_shader.hpp>
-#include <mbgl/shader/line_shader.hpp>
-#include <mbgl/shader/linesdf_shader.hpp>
-#include <mbgl/shader/linepattern_shader.hpp>
-#include <mbgl/shader/icon_shader.hpp>
-#include <mbgl/shader/raster_shader.hpp>
-#include <mbgl/shader/sdf_shader.hpp>
-#include <mbgl/shader/collision_box_shader.hpp>
-#include <mbgl/shader/circle_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/algorithm/generate_clip_ids.hpp>
#include <mbgl/algorithm/generate_clip_ids_impl.hpp>
@@ -55,32 +44,8 @@ Painter::Painter(const TransformState& state_,
: state(state_), store(store_) {
gl::debugging::enable();
- shader.plain = std::make_unique<PlainShader>(store);
- shader.outline = std::make_unique<OutlineShader>(store);
- shader.outlinePattern = std::make_unique<OutlinePatternShader>(store);
- shader.line = std::make_unique<LineShader>(store);
- shader.linesdf = std::make_unique<LineSDFShader>(store);
- shader.linepattern = std::make_unique<LinepatternShader>(store);
- shader.pattern = std::make_unique<PatternShader>(store);
- shader.icon = std::make_unique<IconShader>(store);
- shader.raster = std::make_unique<RasterShader>(store);
- shader.sdfGlyph = std::make_unique<SDFShader>(store);
- shader.sdfIcon = std::make_unique<SDFShader>(store);
- shader.collisionBox = std::make_unique<CollisionBoxShader>(store);
- shader.circle = std::make_unique<CircleShader>(store);
-
- overdrawShader.plain = std::make_unique<PlainShader>(store, Shader::Overdraw);
- overdrawShader.outline = std::make_unique<OutlineShader>(store, Shader::Overdraw);
- overdrawShader.outlinePattern = std::make_unique<OutlinePatternShader>(store, Shader::Overdraw);
- overdrawShader.line = std::make_unique<LineShader>(store, Shader::Overdraw);
- overdrawShader.linesdf = std::make_unique<LineSDFShader>(store, Shader::Overdraw);
- overdrawShader.linepattern = std::make_unique<LinepatternShader>(store, Shader::Overdraw);
- overdrawShader.pattern = std::make_unique<PatternShader>(store, Shader::Overdraw);
- overdrawShader.icon = std::make_unique<IconShader>(store, Shader::Overdraw);
- overdrawShader.raster = std::make_unique<RasterShader>(store, Shader::Overdraw);
- overdrawShader.sdfGlyph = std::make_unique<SDFShader>(store, Shader::Overdraw);
- overdrawShader.sdfIcon = std::make_unique<SDFShader>(store, Shader::Overdraw);
- overdrawShader.circle = std::make_unique<CircleShader>(store, Shader::Overdraw);
+ shaders = std::make_unique<Shaders>(store);
+ overdrawShaders = std::make_unique<Shaders>(store, Shader::Overdraw);
// Reset GL values
config.setDirty();
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp
index 5e8831b239..dc8e2b7fca 100644
--- a/src/mbgl/renderer/painter.hpp
+++ b/src/mbgl/renderer/painter.hpp
@@ -41,19 +41,8 @@ class CircleBucket;
class SymbolBucket;
class RasterBucket;
+class Shaders;
class SDFShader;
-class PlainShader;
-class OutlineShader;
-class OutlinePatternShader;
-class LineShader;
-class LinejoinShader;
-class LineSDFShader;
-class LinepatternShader;
-class CircleShader;
-class PatternShader;
-class IconShader;
-class RasterShader;
-class CollisionBoxShader;
struct ClipID;
@@ -197,36 +186,8 @@ private:
FrameHistory frameHistory;
- struct {
- std::unique_ptr<PlainShader> plain;
- std::unique_ptr<OutlineShader> outline;
- std::unique_ptr<OutlinePatternShader> outlinePattern;
- std::unique_ptr<LineShader> line;
- std::unique_ptr<LineSDFShader> linesdf;
- std::unique_ptr<LinepatternShader> linepattern;
- std::unique_ptr<PatternShader> pattern;
- std::unique_ptr<IconShader> icon;
- std::unique_ptr<RasterShader> raster;
- std::unique_ptr<SDFShader> sdfGlyph;
- std::unique_ptr<SDFShader> sdfIcon;
- std::unique_ptr<CollisionBoxShader> collisionBox;
- std::unique_ptr<CircleShader> circle;
- } shader;
-
- struct {
- std::unique_ptr<PlainShader> plain;
- std::unique_ptr<OutlineShader> outline;
- std::unique_ptr<OutlinePatternShader> outlinePattern;
- std::unique_ptr<LineShader> line;
- std::unique_ptr<LineSDFShader> linesdf;
- std::unique_ptr<LinepatternShader> linepattern;
- std::unique_ptr<PatternShader> pattern;
- std::unique_ptr<IconShader> icon;
- std::unique_ptr<RasterShader> raster;
- std::unique_ptr<SDFShader> sdfGlyph;
- std::unique_ptr<SDFShader> sdfIcon;
- std::unique_ptr<CircleShader> circle;
- } overdrawShader;
+ std::unique_ptr<Shaders> shaders;
+ std::unique_ptr<Shaders> overdrawShaders;
// Set up the stencil quad we're using to generate the stencil mask.
StaticVertexBuffer tileStencilBuffer {
diff --git a/src/mbgl/renderer/painter_background.cpp b/src/mbgl/renderer/painter_background.cpp
index 68463f3154..e2fb4db494 100644
--- a/src/mbgl/renderer/painter_background.cpp
+++ b/src/mbgl/renderer/painter_background.cpp
@@ -2,8 +2,7 @@
#include <mbgl/style/layers/background_layer.hpp>
#include <mbgl/style/layers/background_layer_impl.hpp>
-#include <mbgl/shader/pattern_shader.hpp>
-#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
#include <mbgl/util/mat4.hpp>
#include <mbgl/util/tile_cover.hpp>
@@ -22,8 +21,8 @@ void Painter::renderBackground(const BackgroundLayer& layer) {
optional<SpriteAtlasPosition> imagePosB;
const bool overdraw = isOverdraw();
- auto& patternShader = overdraw ? *overdrawShader.pattern : *shader.pattern;
- auto& plainShader = overdraw ? *overdrawShader.plain : *shader.plain;
+ auto& patternShader = overdraw ? overdrawShaders->pattern : shaders->pattern;
+ auto& plainShader = overdraw ? overdrawShaders->plain : shaders->plain;
auto& arrayBackgroundPattern = overdraw ? backgroundPatternOverdrawArray : backgroundPatternArray;
auto& arrayBackground = overdraw ? backgroundOverdrawArray : backgroundArray;
diff --git a/src/mbgl/renderer/painter_circle.cpp b/src/mbgl/renderer/painter_circle.cpp
index 8e9f1909bb..19cdbaf8f7 100644
--- a/src/mbgl/renderer/painter_circle.cpp
+++ b/src/mbgl/renderer/painter_circle.cpp
@@ -4,7 +4,7 @@
#include <mbgl/style/layers/circle_layer.hpp>
#include <mbgl/style/layers/circle_layer_impl.hpp>
-#include <mbgl/shader/circle_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
namespace mbgl {
@@ -27,7 +27,7 @@ void Painter::renderCircle(CircleBucket& bucket,
mat4 vtxMatrix = translatedMatrix(matrix, properties.circleTranslate, tileID,
properties.circleTranslateAnchor);
- auto& circleShader = isOverdraw() ? *overdrawShader.circle : *shader.circle;
+ auto& circleShader = isOverdraw() ? overdrawShaders->circle : shaders->circle;
config.program = circleShader.getID();
diff --git a/src/mbgl/renderer/painter_clipping.cpp b/src/mbgl/renderer/painter_clipping.cpp
index 4f03ec4fb3..f67c12b929 100644
--- a/src/mbgl/renderer/painter_clipping.cpp
+++ b/src/mbgl/renderer/painter_clipping.cpp
@@ -1,6 +1,6 @@
#include <mbgl/renderer/painter.hpp>
#include <mbgl/style/source.hpp>
-#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/util/clip_id.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/gl/debugging.hpp>
@@ -12,7 +12,7 @@ void Painter::drawClippingMasks(const std::map<UnwrappedTileID, ClipID>& stencil
MBGL_DEBUG_GROUP("clipping masks");
const bool overdraw = isOverdraw();
- auto& plainShader = overdraw ? *overdrawShader.plain : *shader.plain;
+ auto& plainShader = overdraw ? overdrawShaders->plain : shaders->plain;
auto& arrayCoveringPlain = overdraw ? coveringPlainOverdrawArray : coveringPlainArray;
mat4 matrix;
diff --git a/src/mbgl/renderer/painter_debug.cpp b/src/mbgl/renderer/painter_debug.cpp
index f0b29ebf24..1265d4eb5e 100644
--- a/src/mbgl/renderer/painter_debug.cpp
+++ b/src/mbgl/renderer/painter_debug.cpp
@@ -2,7 +2,7 @@
#include <mbgl/renderer/debug_bucket.hpp>
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/tile/tile.hpp>
-#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/gl/debugging.hpp>
#include <mbgl/gl/gl.hpp>
@@ -40,7 +40,7 @@ void Painter::renderDebugText(Tile& tile, const mat4 &matrix) {
tile.expires, frame.debugOptions);
}
- auto& plainShader = *shader.plain;
+ auto& plainShader = shaders->plain;
config.program = plainShader.getID();
plainShader.u_matrix = matrix;
plainShader.u_opacity = 1.0f;
@@ -75,7 +75,7 @@ void Painter::renderDebugFrame(const mat4 &matrix) {
config.stencilOp.reset();
config.stencilTest = GL_TRUE;
- auto& plainShader = *shader.plain;
+ auto& plainShader = shaders->plain;
config.program = plainShader.getID();
plainShader.u_matrix = matrix;
plainShader.u_opacity = 1.0f;
diff --git a/src/mbgl/renderer/painter_fill.cpp b/src/mbgl/renderer/painter_fill.cpp
index 1a7b758000..034f84d8fc 100644
--- a/src/mbgl/renderer/painter_fill.cpp
+++ b/src/mbgl/renderer/painter_fill.cpp
@@ -3,10 +3,7 @@
#include <mbgl/style/layers/fill_layer.hpp>
#include <mbgl/style/layers/fill_layer_impl.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
-#include <mbgl/shader/outline_shader.hpp>
-#include <mbgl/shader/outlinepattern_shader.hpp>
-#include <mbgl/shader/pattern_shader.hpp>
-#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/util/convert.hpp>
namespace mbgl {
@@ -44,10 +41,10 @@ void Painter::renderFill(FillBucket& bucket,
config.lineWidth = 2.0f; // This is always fixed and does not depend on the pixelRatio!
const bool overdraw = isOverdraw();
- auto& outlineShader = overdraw ? *overdrawShader.outline : *shader.outline;
- auto& patternShader = overdraw ? *overdrawShader.pattern : *shader.pattern;
- auto& outlinePatternShader = overdraw ? *overdrawShader.outlinePattern : *shader.outlinePattern;
- auto& plainShader = overdraw ? *overdrawShader.plain : *shader.plain;
+ auto& outlineShader = overdraw ? overdrawShaders->outline : shaders->outline;
+ auto& patternShader = overdraw ? overdrawShaders->pattern : shaders->pattern;
+ auto& outlinePatternShader = overdraw ? overdrawShaders->outlinePattern : shaders->outlinePattern;
+ auto& plainShader = overdraw ? overdrawShaders->plain : shaders->plain;
// Because we're drawing top-to-bottom, and we update the stencil mask
// befrom, we have to draw the outline first (!)
diff --git a/src/mbgl/renderer/painter_line.cpp b/src/mbgl/renderer/painter_line.cpp
index ce1c6758fc..d2e6c4c29a 100644
--- a/src/mbgl/renderer/painter_line.cpp
+++ b/src/mbgl/renderer/painter_line.cpp
@@ -2,9 +2,7 @@
#include <mbgl/renderer/line_bucket.hpp>
#include <mbgl/style/layers/line_layer.hpp>
#include <mbgl/style/layers/line_layer_impl.hpp>
-#include <mbgl/shader/line_shader.hpp>
-#include <mbgl/shader/linesdf_shader.hpp>
-#include <mbgl/shader/linepattern_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
#include <mbgl/geometry/line_atlas.hpp>
#include <mbgl/util/mat2.hpp>
@@ -56,9 +54,9 @@ void Painter::renderLine(LineBucket& bucket,
setDepthSublayer(0);
const bool overdraw = isOverdraw();
- auto& linesdfShader = overdraw ? *overdrawShader.linesdf : *shader.linesdf;
- auto& linepatternShader = overdraw ? *overdrawShader.linepattern : *shader.linepattern;
- auto& lineShader = overdraw ? *overdrawShader.line : *shader.line;
+ auto& linesdfShader = overdraw ? overdrawShaders->linesdf : shaders->linesdf;
+ auto& linepatternShader = overdraw ? overdrawShaders->linepattern : shaders->linepattern;
+ auto& lineShader = overdraw ? overdrawShaders->line : shaders->line;
if (!properties.lineDasharray.value.from.empty()) {
config.program = linesdfShader.getID();
diff --git a/src/mbgl/renderer/painter_raster.cpp b/src/mbgl/renderer/painter_raster.cpp
index 5c7bec03ac..aeb5e85879 100644
--- a/src/mbgl/renderer/painter_raster.cpp
+++ b/src/mbgl/renderer/painter_raster.cpp
@@ -3,7 +3,7 @@
#include <mbgl/renderer/raster_bucket.hpp>
#include <mbgl/style/layers/raster_layer.hpp>
#include <mbgl/style/layers/raster_layer_impl.hpp>
-#include <mbgl/shader/raster_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
namespace mbgl {
@@ -19,7 +19,7 @@ void Painter::renderRaster(RasterBucket& bucket,
if (bucket.hasData()) {
const bool overdraw = isOverdraw();
- auto& rasterShader = overdraw ? *overdrawShader.raster : *shader.raster;
+ auto& rasterShader = overdraw ? overdrawShaders->raster : shaders->raster;
auto& rasterVAO = overdraw ? coveringRasterOverdrawArray : coveringRasterArray;
config.program = rasterShader.getID();
diff --git a/src/mbgl/renderer/painter_symbol.cpp b/src/mbgl/renderer/painter_symbol.cpp
index df29d16b9d..d541479b10 100644
--- a/src/mbgl/renderer/painter_symbol.cpp
+++ b/src/mbgl/renderer/painter_symbol.cpp
@@ -4,9 +4,7 @@
#include <mbgl/style/layers/symbol_layer_impl.hpp>
#include <mbgl/geometry/glyph_atlas.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
-#include <mbgl/shader/sdf_shader.hpp>
-#include <mbgl/shader/icon_shader.hpp>
-#include <mbgl/shader/collision_box_shader.hpp>
+#include <mbgl/shader/shaders.hpp>
#include <mbgl/util/math.hpp>
#include <cmath>
@@ -171,7 +169,7 @@ void Painter::renderSymbol(SymbolBucket& bucket,
matrix,
1.0f,
{{ float(activeSpriteAtlas->getWidth()) / 4.0f, float(activeSpriteAtlas->getHeight()) / 4.0f }},
- isOverdraw() ? *overdrawShader.sdfIcon : *shader.sdfIcon,
+ isOverdraw() ? overdrawShaders->sdfIcon : shaders->sdfIcon,
&SymbolBucket::drawIcons,
layout.iconRotationAlignment,
// icon-pitch-alignment is not yet implemented
@@ -203,7 +201,7 @@ void Painter::renderSymbol(SymbolBucket& bucket,
}
const bool overdraw = isOverdraw();
- auto& iconShader = overdraw ? *overdrawShader.icon : *shader.icon;
+ auto& iconShader = overdraw ? overdrawShaders->icon : shaders->icon;
config.program = iconShader.getID();
iconShader.u_matrix = vtxMatrix;
@@ -240,7 +238,7 @@ void Painter::renderSymbol(SymbolBucket& bucket,
matrix,
24.0f,
{{ float(glyphAtlas->width) / 4, float(glyphAtlas->height) / 4 }},
- isOverdraw() ? *overdrawShader.sdfGlyph : *shader.sdfGlyph,
+ isOverdraw() ? overdrawShaders->sdfGlyph : shaders->sdfGlyph,
&SymbolBucket::drawGlyphs,
layout.textRotationAlignment,
layout.textPitchAlignment,
@@ -259,7 +257,7 @@ void Painter::renderSymbol(SymbolBucket& bucket,
config.stencilOp.reset();
config.stencilTest = GL_TRUE;
- auto& collisionBoxShader = *shader.collisionBox;
+ auto& collisionBoxShader = shaders->collisionBox;
config.program = collisionBoxShader.getID();
collisionBoxShader.u_matrix = matrix;
// TODO: This was the overscaled z instead of the canonical z.
diff --git a/src/mbgl/shader/shaders.hpp b/src/mbgl/shader/shaders.hpp
new file mode 100644
index 0000000000..574f71a1c3
--- /dev/null
+++ b/src/mbgl/shader/shaders.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <mbgl/gl/gl.hpp>
+#include <mbgl/gl/object_store.hpp>
+
+#include <mbgl/shader/pattern_shader.hpp>
+#include <mbgl/shader/plain_shader.hpp>
+#include <mbgl/shader/outline_shader.hpp>
+#include <mbgl/shader/outlinepattern_shader.hpp>
+#include <mbgl/shader/line_shader.hpp>
+#include <mbgl/shader/linesdf_shader.hpp>
+#include <mbgl/shader/linepattern_shader.hpp>
+#include <mbgl/shader/icon_shader.hpp>
+#include <mbgl/shader/raster_shader.hpp>
+#include <mbgl/shader/sdf_shader.hpp>
+#include <mbgl/shader/collision_box_shader.hpp>
+#include <mbgl/shader/circle_shader.hpp>
+
+namespace mbgl {
+
+class Shaders {
+public:
+ Shaders(gl::ObjectStore& store, Shader::Defines defines = Shader::None)
+ : plain(store, defines),
+ outline(store, defines),
+ outlinePattern(store, defines),
+ line(store, defines),
+ linesdf(store, defines),
+ linepattern(store, defines),
+ pattern(store, defines),
+ icon(store, defines),
+ raster(store, defines),
+ sdfGlyph(store, defines),
+ sdfIcon(store, defines),
+ collisionBox(store),
+ circle(store, defines)
+ {}
+
+ PlainShader plain;
+ OutlineShader outline;
+ OutlinePatternShader outlinePattern;
+ LineShader line;
+ LineSDFShader linesdf;
+ LinepatternShader linepattern;
+ PatternShader pattern;
+ IconShader icon;
+ RasterShader raster;
+ SDFShader sdfGlyph;
+ SDFShader sdfIcon;
+ CollisionBoxShader collisionBox;
+ CircleShader circle;
+};
+
+} // namespace mbgl