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/raster_program.hpp> 7 #include <mbgl/renderer/bucket.hpp> 8 #include <mbgl/renderer/tile_mask.hpp> 9 #include <mbgl/util/image.hpp> 10 #include <mbgl/util/mat4.hpp> 11 #include <mbgl/util/optional.hpp> 12 13 namespace mbgl { 14 15 class RasterBucket : public Bucket { 16 public: 17 RasterBucket(PremultipliedImage&&); 18 RasterBucket(std::shared_ptr<PremultipliedImage>); 19 20 void upload(gl::Context&) override; 21 bool hasData() const override; 22 23 void clear(); 24 void setImage(std::shared_ptr<PremultipliedImage>); 25 void setMask(TileMask&&); 26 27 std::shared_ptr<PremultipliedImage> image; 28 optional<gl::Texture> texture; 29 TileMask mask{ { 0, 0, 0 } }; 30 31 // Bucket specific vertices are used for Image Sources only 32 // Raster Tile Sources use the default buffers from Painter 33 gl::VertexVector<RasterLayoutVertex> vertices; 34 gl::IndexVector<gl::Triangles> indices; 35 SegmentVector<RasterAttributes> segments; 36 37 optional<gl::VertexBuffer<RasterLayoutVertex>> vertexBuffer; 38 optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; 39 }; 40 41 template <> is() const42inline bool Bucket::is<RasterBucket>() const { 43 return layerType == style::LayerType::Raster; 44 } 45 46 } // namespace mbgl 47