diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 41 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 45 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_background.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_circle.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_clipping.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_debug.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_fill.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_line.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_raster.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_symbol.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/shader/shaders.hpp | 54 |
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 |