summaryrefslogtreecommitdiff
path: root/src/mbgl/programs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/programs')
-rw-r--r--src/mbgl/programs/background_program.hpp9
-rw-r--r--src/mbgl/programs/circle_program.hpp7
-rw-r--r--src/mbgl/programs/fill_extrusion_program.hpp13
-rw-r--r--src/mbgl/programs/fill_program.hpp13
-rw-r--r--src/mbgl/programs/heatmap_program.hpp10
-rw-r--r--src/mbgl/programs/hillshade_program.hpp10
-rw-r--r--src/mbgl/programs/line_program.hpp13
-rw-r--r--src/mbgl/programs/program.hpp5
-rw-r--r--src/mbgl/programs/programs.cpp87
-rw-r--r--src/mbgl/programs/programs.hpp102
-rw-r--r--src/mbgl/programs/raster_program.hpp7
-rw-r--r--src/mbgl/programs/symbol_program.hpp16
12 files changed, 227 insertions, 65 deletions
diff --git a/src/mbgl/programs/background_program.hpp b/src/mbgl/programs/background_program.hpp
index 667db7792b..6f9ab2a200 100644
--- a/src/mbgl/programs/background_program.hpp
+++ b/src/mbgl/programs/background_program.hpp
@@ -80,4 +80,13 @@ public:
using BackgroundLayoutVertex = BackgroundProgram::LayoutVertex;
using BackgroundAttributes = BackgroundProgram::Attributes;
+class BackgroundLayerPrograms final : public LayerTypePrograms {
+public:
+ BackgroundLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : background(context, programParameters),
+ backgroundPattern(context, programParameters) {}
+ BackgroundProgram background;
+ BackgroundPatternProgram backgroundPattern;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/circle_program.hpp b/src/mbgl/programs/circle_program.hpp
index 3590acbeef..b75dd18c5e 100644
--- a/src/mbgl/programs/circle_program.hpp
+++ b/src/mbgl/programs/circle_program.hpp
@@ -48,4 +48,11 @@ public:
using CircleLayoutVertex = CircleProgram::LayoutVertex;
using CircleAttributes = CircleProgram::Attributes;
+class CircleLayerPrograms final : public LayerTypePrograms {
+public:
+ CircleLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : circle(context, programParameters) {}
+ ProgramMap<CircleProgram> circle;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/fill_extrusion_program.hpp b/src/mbgl/programs/fill_extrusion_program.hpp
index 657238d4c0..4573119e70 100644
--- a/src/mbgl/programs/fill_extrusion_program.hpp
+++ b/src/mbgl/programs/fill_extrusion_program.hpp
@@ -2,6 +2,7 @@
#include <mbgl/programs/program.hpp>
#include <mbgl/programs/attributes.hpp>
+#include <mbgl/programs/extrusion_texture_program.hpp>
#include <mbgl/programs/uniforms.hpp>
#include <mbgl/shaders/fill_extrusion.hpp>
#include <mbgl/shaders/fill_extrusion_pattern.hpp>
@@ -112,4 +113,16 @@ public:
using FillExtrusionLayoutVertex = FillExtrusionProgram::LayoutVertex;
using FillExtrusionAttributes = FillExtrusionProgram::Attributes;
+
+class FillExtrusionLayerPrograms final : public LayerTypePrograms {
+public:
+ FillExtrusionLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : fillExtrusion(context, programParameters),
+ fillExtrusionPattern(context, programParameters),
+ extrusionTexture(context, programParameters) {}
+ ProgramMap<FillExtrusionProgram> fillExtrusion;
+ ProgramMap<FillExtrusionPatternProgram> fillExtrusionPattern;
+ ExtrusionTextureProgram extrusionTexture;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/fill_program.hpp b/src/mbgl/programs/fill_program.hpp
index 9c623fee22..12544ec073 100644
--- a/src/mbgl/programs/fill_program.hpp
+++ b/src/mbgl/programs/fill_program.hpp
@@ -103,4 +103,17 @@ public:
using FillLayoutVertex = FillProgram::LayoutVertex;
using FillAttributes = FillProgram::Attributes;
+class FillLayerPrograms final : public LayerTypePrograms {
+public:
+ FillLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : fill(context, programParameters),
+ fillPattern(context, programParameters),
+ fillOutline(context, programParameters),
+ fillOutlinePattern(context, programParameters) {}
+ ProgramMap<FillProgram> fill;
+ ProgramMap<FillPatternProgram> fillPattern;
+ ProgramMap<FillOutlineProgram> fillOutline;
+ ProgramMap<FillOutlinePatternProgram> fillOutlinePattern;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/heatmap_program.hpp b/src/mbgl/programs/heatmap_program.hpp
index 2d9b80404f..f558dc4eaa 100644
--- a/src/mbgl/programs/heatmap_program.hpp
+++ b/src/mbgl/programs/heatmap_program.hpp
@@ -2,6 +2,7 @@
#include <mbgl/programs/program.hpp>
#include <mbgl/programs/attributes.hpp>
+#include <mbgl/programs/heatmap_texture_program.hpp>
#include <mbgl/programs/uniforms.hpp>
#include <mbgl/shaders/heatmap.hpp>
#include <mbgl/util/geometry.hpp>
@@ -46,4 +47,13 @@ public:
using HeatmapLayoutVertex = HeatmapProgram::LayoutVertex;
using HeatmapAttributes = HeatmapProgram::Attributes;
+class HeatmapLayerPrograms final : public LayerTypePrograms {
+public:
+ HeatmapLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : heatmap(context, programParameters),
+ heatmapTexture(context, programParameters) {}
+ ProgramMap<HeatmapProgram> heatmap;
+ HeatmapTextureProgram heatmapTexture;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/hillshade_program.hpp b/src/mbgl/programs/hillshade_program.hpp
index 5f9b4d1c2f..aaef884b80 100644
--- a/src/mbgl/programs/hillshade_program.hpp
+++ b/src/mbgl/programs/hillshade_program.hpp
@@ -2,6 +2,7 @@
#include <mbgl/programs/program.hpp>
#include <mbgl/programs/attributes.hpp>
+#include <mbgl/programs/hillshade_prepare_program.hpp>
#include <mbgl/programs/uniforms.hpp>
#include <mbgl/shaders/hillshade.hpp>
#include <mbgl/util/geometry.hpp>
@@ -52,4 +53,13 @@ public:
using HillshadeLayoutVertex = HillshadeProgram::LayoutVertex;
using HillshadeAttributes = HillshadeProgram::Attributes;
+class HillshadeLayerPrograms final : public LayerTypePrograms {
+public:
+ HillshadeLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : hillshade(context, programParameters),
+ hillshadePrepare(context, programParameters) {}
+ HillshadeProgram hillshade;
+ HillshadePrepareProgram hillshadePrepare;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/line_program.hpp b/src/mbgl/programs/line_program.hpp
index 9dde0939e7..e43fa171c6 100644
--- a/src/mbgl/programs/line_program.hpp
+++ b/src/mbgl/programs/line_program.hpp
@@ -178,4 +178,17 @@ public:
using LineLayoutVertex = LineProgram::LayoutVertex;
using LineAttributes = LineProgram::Attributes;
+class LineLayerPrograms final : public LayerTypePrograms {
+public:
+ LineLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : line(context, programParameters),
+ lineGradient(context, programParameters),
+ lineSDF(context, programParameters),
+ linePattern(context, programParameters) {}
+ ProgramMap<LineProgram> line;
+ ProgramMap<LineGradientProgram> lineGradient;
+ ProgramMap<LineSDFProgram> lineSDF;
+ ProgramMap<LinePatternProgram> linePattern;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp
index ddbda30686..7c97727d89 100644
--- a/src/mbgl/programs/program.hpp
+++ b/src/mbgl/programs/program.hpp
@@ -133,4 +133,9 @@ private:
std::unordered_map<Bitset, Program> programs;
};
+class LayerTypePrograms {
+public:
+ virtual ~LayerTypePrograms() = default;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/programs.cpp b/src/mbgl/programs/programs.cpp
new file mode 100644
index 0000000000..f3b3af8ac9
--- /dev/null
+++ b/src/mbgl/programs/programs.cpp
@@ -0,0 +1,87 @@
+#include <mbgl/programs/programs.hpp>
+
+#include <mbgl/programs/background_program.hpp>
+#include <mbgl/programs/circle_program.hpp>
+#include <mbgl/programs/heatmap_program.hpp>
+#include <mbgl/programs/hillshade_program.hpp>
+#include <mbgl/programs/fill_extrusion_program.hpp>
+#include <mbgl/programs/fill_program.hpp>
+#include <mbgl/programs/line_program.hpp>
+#include <mbgl/programs/raster_program.hpp>
+#include <mbgl/programs/symbol_program.hpp>
+
+namespace mbgl {
+
+Programs::Programs(gl::Context& context_, const ProgramParameters& programParameters_)
+ : debug(context_, programParameters_),
+ clippingMask(context_, programParameters_),
+ context(context_),
+ programParameters(std::move(programParameters_)) {
+}
+
+Programs::~Programs() = default;
+
+BackgroundLayerPrograms& Programs::getBackgroundLayerPrograms() noexcept {
+ if (!backgroundPrograms) {
+ backgroundPrograms = std::make_unique<BackgroundLayerPrograms>(context, programParameters);
+ }
+ return static_cast<BackgroundLayerPrograms&>(*backgroundPrograms);
+}
+
+RasterLayerPrograms& Programs::getRasterLayerPrograms() noexcept {
+ if (!rasterPrograms) {
+ rasterPrograms = std::make_unique<RasterLayerPrograms>(context, programParameters);
+ }
+ return static_cast<RasterLayerPrograms&>(*rasterPrograms);
+}
+
+HeatmapLayerPrograms& Programs::getHeatmapLayerPrograms() noexcept {
+ if (!heatmapPrograms) {
+ heatmapPrograms = std::make_unique<HeatmapLayerPrograms>(context, programParameters);
+ }
+ return static_cast<HeatmapLayerPrograms&>(*heatmapPrograms);
+}
+
+HillshadeLayerPrograms& Programs::getHillshadeLayerPrograms() noexcept {
+ if (!hillshadePrograms) {
+ hillshadePrograms = std::make_unique<HillshadeLayerPrograms>(context, programParameters);
+ }
+ return static_cast<HillshadeLayerPrograms&>(*hillshadePrograms);
+}
+
+FillLayerPrograms& Programs::getFillLayerPrograms() noexcept {
+ if (!fillPrograms) {
+ fillPrograms = std::make_unique<FillLayerPrograms>(context, programParameters);
+ }
+ return static_cast<FillLayerPrograms&>(*fillPrograms);
+}
+
+FillExtrusionLayerPrograms& Programs::getFillExtrusionLayerPrograms() noexcept {
+ if (!fillExtrusionPrograms) {
+ fillExtrusionPrograms = std::make_unique<FillExtrusionLayerPrograms>(context, programParameters);
+ }
+ return static_cast<FillExtrusionLayerPrograms&>(*fillExtrusionPrograms);
+}
+
+CircleLayerPrograms& Programs::getCircleLayerPrograms() noexcept {
+ if (!circlePrograms) {
+ circlePrograms = std::make_unique<CircleLayerPrograms>(context, programParameters);
+ }
+ return static_cast<CircleLayerPrograms&>(*circlePrograms);
+}
+
+LineLayerPrograms& Programs::getLineLayerPrograms() noexcept {
+ if (!linePrograms) {
+ linePrograms = std::make_unique<LineLayerPrograms>(context, programParameters);
+ }
+ return static_cast<LineLayerPrograms&>(*linePrograms);
+}
+
+SymbolLayerPrograms& Programs::getSymbolLayerPrograms() noexcept {
+ if (!symbolPrograms) {
+ symbolPrograms = std::make_unique<SymbolLayerPrograms>(context, programParameters);
+ }
+ return static_cast<SymbolLayerPrograms&>(*symbolPrograms);
+}
+
+} // namespace mbgl
diff --git a/src/mbgl/programs/programs.hpp b/src/mbgl/programs/programs.hpp
index 7895069112..a12a0e8fa6 100644
--- a/src/mbgl/programs/programs.hpp
+++ b/src/mbgl/programs/programs.hpp
@@ -1,82 +1,54 @@
#pragma once
-#include <mbgl/programs/background_program.hpp>
-#include <mbgl/programs/circle_program.hpp>
#include <mbgl/programs/clipping_mask_program.hpp>
-#include <mbgl/programs/extrusion_texture_program.hpp>
-#include <mbgl/programs/fill_program.hpp>
-#include <mbgl/programs/fill_extrusion_program.hpp>
-#include <mbgl/programs/heatmap_program.hpp>
-#include <mbgl/programs/heatmap_texture_program.hpp>
-#include <mbgl/programs/hillshade_program.hpp>
-#include <mbgl/programs/hillshade_prepare_program.hpp>
-#include <mbgl/programs/line_program.hpp>
-#include <mbgl/programs/raster_program.hpp>
-#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>
+#include <memory>
namespace mbgl {
+class BackgroundLayerPrograms;
+
+class CircleLayerPrograms;
+class RasterLayerPrograms;
+class HeatmapLayerPrograms;
+class HillshadeLayerPrograms;
+class FillLayerPrograms;
+class FillExtrusionLayerPrograms;
+class LineLayerPrograms;
+class SymbolLayerPrograms;
+
class Programs {
public:
- Programs(gl::Context& context, const ProgramParameters& programParameters)
- : background(context, programParameters),
- backgroundPattern(context, programParameters),
- circle(context, programParameters),
- extrusionTexture(context, programParameters),
- fill(context, programParameters),
- fillExtrusion(context, programParameters),
- fillExtrusionPattern(context, programParameters),
- fillPattern(context, programParameters),
- fillOutline(context, programParameters),
- fillOutlinePattern(context, programParameters),
- heatmap(context, programParameters),
- heatmapTexture(context, programParameters),
- hillshade(context, programParameters),
- hillshadePrepare(context, programParameters),
- line(context, programParameters),
- lineGradient(context, programParameters),
- lineSDF(context, programParameters),
- linePattern(context, programParameters),
- raster(context, programParameters),
- symbolIcon(context, programParameters),
- symbolIconSDF(context, programParameters),
- symbolGlyph(context, programParameters),
- debug(context, programParameters),
- collisionBox(context, programParameters),
- collisionCircle(context, programParameters),
- clippingMask(context, programParameters) {
- }
+ Programs(gl::Context&, const ProgramParameters&);
+ ~Programs();
- BackgroundProgram background;
- BackgroundPatternProgram backgroundPattern;
- ProgramMap<CircleProgram> circle;
- ExtrusionTextureProgram extrusionTexture;
- ProgramMap<FillProgram> fill;
- ProgramMap<FillExtrusionProgram> fillExtrusion;
- ProgramMap<FillExtrusionPatternProgram> fillExtrusionPattern;
- ProgramMap<FillPatternProgram> fillPattern;
- ProgramMap<FillOutlineProgram> fillOutline;
- ProgramMap<FillOutlinePatternProgram> fillOutlinePattern;
- ProgramMap<HeatmapProgram> heatmap;
- HeatmapTextureProgram heatmapTexture;
- HillshadeProgram hillshade;
- HillshadePrepareProgram hillshadePrepare;
- ProgramMap<LineProgram> line;
- ProgramMap<LineGradientProgram> lineGradient;
- ProgramMap<LineSDFProgram> lineSDF;
- ProgramMap<LinePatternProgram> linePattern;
- RasterProgram raster;
- ProgramMap<SymbolIconProgram> symbolIcon;
- ProgramMap<SymbolSDFIconProgram> symbolIconSDF;
- ProgramMap<SymbolSDFTextProgram> symbolGlyph;
+ BackgroundLayerPrograms& getBackgroundLayerPrograms() noexcept;
+ RasterLayerPrograms& getRasterLayerPrograms() noexcept;
+ HeatmapLayerPrograms& getHeatmapLayerPrograms() noexcept;
+ CircleLayerPrograms& getCircleLayerPrograms() noexcept;
+ HillshadeLayerPrograms& getHillshadeLayerPrograms() noexcept;
+ FillLayerPrograms& getFillLayerPrograms() noexcept;
+ FillExtrusionLayerPrograms& getFillExtrusionLayerPrograms() noexcept;
+ LineLayerPrograms& getLineLayerPrograms() noexcept;
+ SymbolLayerPrograms& getSymbolLayerPrograms() noexcept;
DebugProgram debug;
- CollisionBoxProgram collisionBox;
- CollisionCircleProgram collisionCircle;
ClippingMaskProgram clippingMask;
+
+private:
+ std::unique_ptr<LayerTypePrograms> backgroundPrograms;
+ std::unique_ptr<LayerTypePrograms> circlePrograms;
+ std::unique_ptr<LayerTypePrograms> rasterPrograms;
+ std::unique_ptr<LayerTypePrograms> heatmapPrograms;
+ std::unique_ptr<LayerTypePrograms> hillshadePrograms;
+ std::unique_ptr<LayerTypePrograms> fillPrograms;
+ std::unique_ptr<LayerTypePrograms> fillExtrusionPrograms;
+ std::unique_ptr<LayerTypePrograms> linePrograms;
+ std::unique_ptr<LayerTypePrograms> symbolPrograms;
+
+ gl::Context& context;
+ ProgramParameters programParameters;
};
} // namespace mbgl
diff --git a/src/mbgl/programs/raster_program.hpp b/src/mbgl/programs/raster_program.hpp
index 09cb94ac17..a07e5c3870 100644
--- a/src/mbgl/programs/raster_program.hpp
+++ b/src/mbgl/programs/raster_program.hpp
@@ -65,4 +65,11 @@ public:
using RasterLayoutVertex = RasterProgram::LayoutVertex;
using RasterAttributes = RasterProgram::Attributes;
+class RasterLayerPrograms final : public LayerTypePrograms {
+public:
+ RasterLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : raster(context, programParameters) {}
+ RasterProgram raster;
+};
+
} // namespace mbgl
diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp
index 272c72ef99..8f64225679 100644
--- a/src/mbgl/programs/symbol_program.hpp
+++ b/src/mbgl/programs/symbol_program.hpp
@@ -6,6 +6,7 @@
#include <mbgl/util/interpolate.hpp>
#include <mbgl/programs/attributes.hpp>
+#include <mbgl/programs/collision_box_program.hpp>
#include <mbgl/programs/uniforms.hpp>
#include <mbgl/programs/segment.hpp>
#include <mbgl/shaders/symbol_icon.hpp>
@@ -448,4 +449,19 @@ using SymbolLayoutVertex = SymbolLayoutAttributes::Vertex;
using SymbolIconAttributes = SymbolIconProgram::Attributes;
using SymbolTextAttributes = SymbolSDFTextProgram::Attributes;
+class SymbolLayerPrograms final : public LayerTypePrograms {
+public:
+ SymbolLayerPrograms(gl::Context& context, const ProgramParameters& programParameters)
+ : symbolIcon(context, programParameters),
+ symbolIconSDF(context, programParameters),
+ symbolGlyph(context, programParameters),
+ collisionBox(context, programParameters),
+ collisionCircle(context, programParameters) {}
+ ProgramMap<SymbolIconProgram> symbolIcon;
+ ProgramMap<SymbolSDFIconProgram> symbolIconSDF;
+ ProgramMap<SymbolSDFTextProgram> symbolGlyph;
+ CollisionBoxProgram collisionBox;
+ CollisionCircleProgram collisionCircle;
+};
+
} // namespace mbgl