#pragma once #include #include #include #include namespace mbgl { class BackgroundLayerPrograms; class CircleLayerPrograms; class RasterLayerPrograms; class HeatmapLayerPrograms; class HillshadeLayerPrograms; class FillLayerPrograms; class FillExtrusionLayerPrograms; class LineLayerPrograms; class SymbolLayerPrograms; class Programs { public: Programs(gfx::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 backgroundPrograms; std::unique_ptr circlePrograms; std::unique_ptr rasterPrograms; std::unique_ptr heatmapPrograms; std::unique_ptr hillshadePrograms; std::unique_ptr fillPrograms; std::unique_ptr fillExtrusionPrograms; std::unique_ptr linePrograms; std::unique_ptr symbolPrograms; gfx::Context& context; ProgramParameters programParameters; }; } // namespace mbgl