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)17 std::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)45 RenderSource::RenderSource(Immutable<style::Source::Impl> impl)
46     : baseImpl(impl),
47       observer(&nullObserver) {
48 }
49 
setObserver(RenderSourceObserver * observer_)50 void RenderSource::setObserver(RenderSourceObserver* observer_) {
51     observer = observer_;
52 }
53 
onTileChanged(Tile & tile)54 void RenderSource::onTileChanged(Tile& tile) {
55     observer->onTileChanged(*this, tile.id);
56 }
57 
onTileError(Tile & tile,std::exception_ptr error)58 void RenderSource::onTileError(Tile& tile, std::exception_ptr error) {
59     observer->onTileError(*this, tile.id, error);
60 }
61 
isEnabled() const62 bool RenderSource::isEnabled() const {
63     return enabled;
64 }
65 
66 } // namespace mbgl
67