Files
MapLibreParticleLab/src/mbgl/programs/programs.hpp
Mikhail Pozdnyakov d37918c169 [core] Split layer type specific code in mbgl::Programs
Progams code for a certain layer type is encapsulted within
a dedicated `<layer type>Programs` class, inherited from
the generic base `LayerTypePrograms` class.

`mbgl::Programs::get<layer type>Programs()` lazily initializes the
layer type-specific programs code using pointer to the base class,
which allows LTO to remove this code from binaries (if the corresponding
`get<layer type>Programs()` method can never be invoked).
2019-01-11 16:43:52 +02:00

55 lines
1.7 KiB
C++

#pragma once
#include <mbgl/programs/clipping_mask_program.hpp>
#include <mbgl/programs/debug_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&, const ProgramParameters&);
~Programs();
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;
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