1 #pragma once 2 3 #include <mbgl/gl/index_buffer.hpp> 4 #include <mbgl/gl/texture.hpp> 5 #include <mbgl/gl/vertex_buffer.hpp> 6 #include <mbgl/programs/hillshade_program.hpp> 7 #include <mbgl/programs/hillshade_prepare_program.hpp> 8 #include <mbgl/renderer/bucket.hpp> 9 #include <mbgl/renderer/tile_mask.hpp> 10 #include <mbgl/geometry/dem_data.hpp> 11 #include <mbgl/util/tileset.hpp> 12 #include <mbgl/util/image.hpp> 13 #include <mbgl/util/mat4.hpp> 14 #include <mbgl/util/optional.hpp> 15 16 namespace mbgl { 17 18 class HillshadeBucket : public Bucket { 19 public: 20 HillshadeBucket(PremultipliedImage&&, Tileset::DEMEncoding encoding); 21 HillshadeBucket(std::shared_ptr<PremultipliedImage>, Tileset::DEMEncoding encoding); 22 HillshadeBucket(DEMData&&); 23 24 25 void upload(gl::Context&) override; 26 bool hasData() const override; 27 28 void clear(); 29 void setMask(TileMask&&); 30 31 optional<gl::Texture> dem; 32 optional<gl::Texture> texture; 33 34 TileMask mask{ { 0, 0, 0 } }; 35 36 const DEMData& getDEMData() const; 37 DEMData& getDEMData(); 38 isPrepared() const39 bool isPrepared() const { 40 return prepared; 41 } 42 setPrepared(bool preparedState)43 void setPrepared (bool preparedState) { 44 prepared = preparedState; 45 } 46 47 // Raster-DEM Tile Sources use the default buffers from Painter 48 gl::VertexVector<HillshadeLayoutVertex> vertices; 49 gl::IndexVector<gl::Triangles> indices; 50 SegmentVector<HillshadeAttributes> segments; 51 52 optional<gl::VertexBuffer<HillshadeLayoutVertex>> vertexBuffer; 53 optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; 54 private: 55 DEMData demdata; 56 bool prepared = false; 57 }; 58 59 template <> is() const60inline bool Bucket::is<HillshadeBucket>() const { 61 return layerType == style::LayerType::Hillshade; 62 } 63 64 } // namespace mbgl 65