1 #include <mbgl/renderer/render_source.hpp> 2 #include <mbgl/renderer/render_source_observer.hpp> 3 #include <mbgl/renderer/sources/render_geojson_source.hpp> 4 #include <mbgl/renderer/sources/render_raster_source.hpp> 5 #include <mbgl/renderer/sources/render_raster_dem_source.hpp> 6 #include <mbgl/renderer/sources/render_vector_source.hpp> 7 #include <mbgl/renderer/tile_parameters.hpp> 8 #include <mbgl/annotation/render_annotation_source.hpp> 9 #include <mbgl/renderer/sources/render_image_source.hpp> 10 #include <mbgl/renderer/sources/render_custom_geometry_source.hpp> 11 #include <mbgl/tile/tile.hpp> 12 13 namespace mbgl { 14 15 using namespace style; 16 create(Immutable<Source::Impl> impl)17std::unique_ptr<RenderSource> RenderSource::create(Immutable<Source::Impl> impl) { 18 switch (impl->type) { 19 case SourceType::Vector: 20 return std::make_unique<RenderVectorSource>(staticImmutableCast<VectorSource::Impl>(impl)); 21 case SourceType::Raster: 22 return std::make_unique<RenderRasterSource>(staticImmutableCast<RasterSource::Impl>(impl)); 23 case SourceType::RasterDEM: 24 return std::make_unique<RenderRasterDEMSource>(staticImmutableCast<RasterSource::Impl>(impl)); 25 case SourceType::GeoJSON: 26 return std::make_unique<RenderGeoJSONSource>(staticImmutableCast<GeoJSONSource::Impl>(impl)); 27 case SourceType::Video: 28 assert(false); 29 return nullptr; 30 case SourceType::Annotations: 31 return std::make_unique<RenderAnnotationSource>(staticImmutableCast<AnnotationSource::Impl>(impl)); 32 case SourceType::Image: 33 return std::make_unique<RenderImageSource>(staticImmutableCast<ImageSource::Impl>(impl)); 34 case SourceType::CustomVector: 35 return std::make_unique<RenderCustomGeometrySource>(staticImmutableCast<CustomGeometrySource::Impl>(impl)); 36 } 37 38 // Not reachable, but placate GCC. 39 assert(false); 40 return nullptr; 41 } 42 43 static RenderSourceObserver nullObserver; 44 RenderSource(Immutable<style::Source::Impl> impl)45RenderSource::RenderSource(Immutable<style::Source::Impl> impl) 46 : baseImpl(impl), 47 observer(&nullObserver) { 48 } 49 setObserver(RenderSourceObserver * observer_)50void RenderSource::setObserver(RenderSourceObserver* observer_) { 51 observer = observer_; 52 } 53 onTileChanged(Tile & tile)54void RenderSource::onTileChanged(Tile& tile) { 55 observer->onTileChanged(*this, tile.id); 56 } 57 onTileError(Tile & tile,std::exception_ptr error)58void RenderSource::onTileError(Tile& tile, std::exception_ptr error) { 59 observer->onTileError(*this, tile.id, error); 60 } 61 isEnabled() const62bool RenderSource::isEnabled() const { 63 return enabled; 64 } 65 66 } // namespace mbgl 67