diff options
Diffstat (limited to 'src/mbgl/renderer/image_manager.hpp')
-rw-r--r-- | src/mbgl/renderer/image_manager.hpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/mbgl/renderer/image_manager.hpp b/src/mbgl/renderer/image_manager.hpp index e56f30ac3f..99887ae384 100644 --- a/src/mbgl/renderer/image_manager.hpp +++ b/src/mbgl/renderer/image_manager.hpp @@ -6,6 +6,7 @@ #include <mbgl/util/immutable.hpp> #include <mbgl/util/optional.hpp> #include <mbgl/gfx/texture.hpp> +#include <mbgl/renderer/image_manager_observer.hpp> #include <mapbox/shelf-pack.hpp> @@ -21,7 +22,7 @@ class Context; class ImageRequestor { public: virtual ~ImageRequestor() = default; - virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, uint64_t imageCorrelationID) = 0; + virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0; }; /* @@ -39,6 +40,8 @@ public: ImageManager(); ~ImageManager(); + void setObserver(ImageManagerObserver*); + void setLoaded(bool); bool isLoaded() const; @@ -47,20 +50,31 @@ public: const style::Image::Impl* getImage(const std::string&) const; void addImage(Immutable<style::Image::Impl>); - void updateImage(Immutable<style::Image::Impl>); + bool updateImage(Immutable<style::Image::Impl>); void removeImage(const std::string&); void getImages(ImageRequestor&, ImageRequestPair&&); void removeRequestor(ImageRequestor&); + void notifyIfMissingImageAdded(); + + ImageVersionMap updatedImageVersions; private: + void checkMissingAndNotify(ImageRequestor&, const ImageRequestPair&); void notify(ImageRequestor&, const ImageRequestPair&) const; bool loaded = false; - std::unordered_map<ImageRequestor*, ImageRequestPair> requestors; + std::map<ImageRequestor*, ImageRequestPair> requestors; + struct MissingImageRequestPair { + ImageRequestPair pair; + unsigned int callbacksRemaining; + }; + std::map<ImageRequestor*, MissingImageRequestPair> missingImageRequestors; ImageMap images; + ImageManagerObserver* observer = nullptr; + // Pattern stuff public: optional<ImagePosition> getPattern(const std::string& name); |