blob: 79e41fa9353a3e39b6e81143061bdfd5df1bd7b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
|