#include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { Programs::Programs(const ProgramParameters& programParameters_) : programParameters(programParameters_) {} Programs::~Programs() = default; namespace { /// @brief Register a list of types with a shader registry instance /// @tparam ...T Type list parameter pack /// @param registry A shader registry instance /// programParameters_ ProgramParameters used to initialize each instance template void registerTypes(gfx::ShaderRegistry& registry, const ProgramParameters& programParameters_) { /// The following fold expression will create a shared_ptr for every type /// in the parameter pack and register it with the shader registry. /// Registration calls are wrapped in a lambda that throws on registration /// failure, we shouldn't expect registration to fail unless the shader /// registry instance provided already has conflicting programs present. ( [](bool expr) { if (!expr) { throw std::runtime_error("Failed to register " + std::string(T::Name) + " with shader registry!"); } }(registry.getLegacyGroup().registerShader(std::make_shared(programParameters_))), ...); } } // namespace void Programs::registerWith(gfx::ShaderRegistry& registry) { #if MLN_LEGACY_RENDERER /// The following types will be registered registerTypes(registry, programParameters); #else /// The following types will be registered registerTypes(registry, programParameters); #endif } } // namespace mbgl