diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-01 21:44:15 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-04 16:56:43 +0300 |
commit | 63dd17e2bbdb2c956789865c1d517305f860a175 (patch) | |
tree | 6888c96f50df988e55b5722dd870db98fdd877b5 /src/mbgl/renderer/tile_render_data.hpp | |
parent | b1cbc2f2451d6eea9a8ad2adde1c8087ab581192 (diff) | |
download | qtlocation-mapboxgl-63dd17e2bbdb2c956789865c1d517305f860a175.tar.gz |
[core] Introduce TileRenderData
Remove rendering functionality from Tile implementations.
Diffstat (limited to 'src/mbgl/renderer/tile_render_data.hpp')
-rw-r--r-- | src/mbgl/renderer/tile_render_data.hpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mbgl/renderer/tile_render_data.hpp b/src/mbgl/renderer/tile_render_data.hpp new file mode 100644 index 0000000000..85bbc49565 --- /dev/null +++ b/src/mbgl/renderer/tile_render_data.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include <mbgl/gfx/texture.hpp> +#include <mbgl/renderer/image_atlas.hpp> +#include <mbgl/style/layer_impl.hpp> + +#include <memory> + +namespace mbgl { + +namespace gfx { +class UploadPass; +} // namespace gfx + +class Bucket; +class LayerRenderData; +class SourcePrepareParameters; + +class TileAtlasTextures { +public: + optional<gfx::Texture> glyph; + optional<gfx::Texture> icon; +}; + +class TileRenderData { +public: + virtual ~TileRenderData(); + const gfx::Texture& getGlyphAtlasTexture() const; + const gfx::Texture& getIconAtlasTexture() const; + // To be implemented for concrete tile types. + virtual optional<ImagePosition> getPattern(const std::string&) const; + virtual const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const; + virtual Bucket* getBucket(const style::Layer::Impl&) const; + virtual void upload(gfx::UploadPass&) {} + virtual void prepare(const SourcePrepareParameters&) {} + +protected: + TileRenderData(); + TileRenderData(std::shared_ptr<TileAtlasTextures>); + std::shared_ptr<TileAtlasTextures> atlasTextures; +}; + +template <typename BucketType> +class SharedBucketTileRenderData final : public TileRenderData { +public: + SharedBucketTileRenderData(std::shared_ptr<BucketType> bucket_) + : bucket(std::move(bucket_)) {} + +private: + // TileRenderData overrides. + Bucket* getBucket(const style::Layer::Impl&) const override { + return bucket ? bucket.get() : nullptr; + } + void upload(gfx::UploadPass& uploadPass) override { + if (bucket) bucket->upload(uploadPass); + } + + std::shared_ptr<BucketType> bucket; +}; + +} // namespace mbgl |