aboutsummaryrefslogtreecommitdiffstats
path: root/src/mbgl/style/layers/terrain_layer_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/terrain_layer_impl.cpp')
-rw-r--r--src/mbgl/style/layers/terrain_layer_impl.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/mbgl/style/layers/terrain_layer_impl.cpp b/src/mbgl/style/layers/terrain_layer_impl.cpp
new file mode 100644
index 000000000..79e41fa93
--- /dev/null
+++ b/src/mbgl/style/layers/terrain_layer_impl.cpp
@@ -0,0 +1,47 @@
+#include <mbgl/style/layers/terrain_layer_impl.hpp>
+#include <mbgl/style/geometry_bucket_parameters.hpp>
+#include <mbgl/style/raster_bucket_parameters.hpp>
+#include <mbgl/renderer/terrain_bucket.hpp>
+
+namespace mbgl {
+namespace style {
+
+void TerrainLayer::Impl::cascade(const CascadeParameters& parameters) {
+ paint.cascade(parameters);
+}
+
+bool TerrainLayer::Impl::recalculate(const CalculationParameters& parameters) {
+ bool hasTransitions = paint.recalculate(parameters);
+
+ passes = RenderPass::Translucent;
+
+ return hasTransitions;
+}
+
+std::unique_ptr<Bucket> TerrainLayer::Impl::createBucket(BucketParameters& params) const {
+ if (params.is<mapbox::util::recursive_wrapper<GeometryBucketParameters>>()) {
+ // DEM data encoded into vector tile
+ auto& parameters = params.get<GeometryBucketParameters>();
+ auto& layer = parameters.layer;
+
+ for (std::size_t i = 0; !parameters.cancelled() && i < layer.featureCount(); i++) {
+ auto feature = layer.getFeature(i);
+ if (feature->getType() == FeatureType(4)) {
+ return std::make_unique<TerrainBucket>(feature->getDEMPyramid());
+ } else {
+ // Trying to create a DEM from another feature type.
+ }
+ }
+ } else if (params.is<mapbox::util::recursive_wrapper<RasterBucketParameters>>()) {
+ // DEM data from raster tile
+ auto& parameters = params.get<RasterBucketParameters>();
+ if (parameters.data) {
+ return std::make_unique<TerrainBucket>(decodeImage(*parameters.data));
+ }
+ }
+
+ return nullptr;
+}
+
+} // namespace style
+} // namespace mbgl