diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-23 16:08:16 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-25 10:00:23 +0300 |
commit | 83c33cdeb25831cde370b543d9e10c8d1859aec8 (patch) | |
tree | e21874529fbf69bd7d4bbcbb064aaf8e28d0fe50 /src | |
parent | 9a70e755dcc52a661ac29715b048afee5d938bee (diff) | |
download | qtlocation-mapboxgl-83c33cdeb25831cde370b543d9e10c8d1859aec8.tar.gz |
[core] Pass ImageManager to ImageRequestor's constructor
This makes ImageRequestor API explicitly dependant on ImageManager, so that
ImageRequestor can unregister itself from ImageManager on destruction.
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/image_manager.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/image_manager.hpp | 15 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 2 |
4 files changed, 19 insertions, 7 deletions
diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp index f373167493..8e584ffd34 100644 --- a/src/mbgl/renderer/image_manager.cpp +++ b/src/mbgl/renderer/image_manager.cpp @@ -288,4 +288,11 @@ gfx::TextureBinding ImageManager::textureBinding(gfx::Context& context) { return { atlasTexture->getResource(), gfx::TextureFilterType::Linear }; } +ImageRequestor::ImageRequestor(ImageManager& imageManager_) : imageManager(imageManager_) { +} + +ImageRequestor::~ImageRequestor() { + imageManager.removeRequestor(*this); +} + } // namespace mbgl diff --git a/src/mbgl/renderer/image_manager.hpp b/src/mbgl/renderer/image_manager.hpp index f52808b614..61f3f3c276 100644 --- a/src/mbgl/renderer/image_manager.hpp +++ b/src/mbgl/renderer/image_manager.hpp @@ -19,11 +19,7 @@ namespace gfx { class Context; } // namespace gfx -class ImageRequestor { -public: - virtual ~ImageRequestor() = default; - virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0; -}; +class ImageRequestor; /* ImageManager does two things: @@ -105,4 +101,13 @@ private: bool dirty = true; }; +class ImageRequestor { +public: + explicit ImageRequestor(ImageManager&); + virtual ~ImageRequestor(); + virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0; +private: + ImageManager& imageManager; +}; + } // namespace mbgl diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 792586e73d..029c761e53 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -42,6 +42,7 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_, std::string sourceID_, const TileParameters& parameters) : Tile(Kind::Geometry, id_), + ImageRequestor(parameters.imageManager), sourceID(std::move(sourceID_)), mailbox(std::make_shared<Mailbox>(*Scheduler::GetCurrent())), worker(parameters.workerScheduler, @@ -60,7 +61,6 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_, GeometryTile::~GeometryTile() { glyphManager.removeRequestor(*this); - imageManager.removeRequestor(*this); markObsolete(); } diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 18f94b9a1f..975c7aab0e 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -22,7 +22,7 @@ class TileParameters; class GlyphAtlas; class ImageAtlas; -class GeometryTile : public Tile, public GlyphRequestor, ImageRequestor { +class GeometryTile : public Tile, public GlyphRequestor, public ImageRequestor { public: GeometryTile(const OverscaledTileID&, std::string sourceID, |