Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit b43e1ae

Browse files
committed
[core] Correctly track sprite loaded state through smart setStyle
1 parent d362844 commit b43e1ae

File tree

6 files changed

+22
-15
lines changed

6 files changed

+22
-15
lines changed

src/mbgl/renderer/image_manager.cpp

+16-5
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,23 @@
44

55
namespace mbgl {
66

7-
void ImageManager::onSpriteLoaded() {
8-
loaded = true;
9-
for (const auto& entry : requestors) {
10-
notify(*entry.first, entry.second);
7+
void ImageManager::setLoaded(bool loaded_) {
8+
if (loaded == loaded_) {
9+
return;
1110
}
12-
requestors.clear();
11+
12+
loaded = loaded_;
13+
14+
if (loaded) {
15+
for (const auto& entry : requestors) {
16+
notify(*entry.first, entry.second);
17+
}
18+
requestors.clear();
19+
}
20+
}
21+
22+
bool ImageManager::isLoaded() const {
23+
return loaded;
1324
}
1425

1526
void ImageManager::addImage(Immutable<style::Image::Impl> image_) {

src/mbgl/renderer/image_manager.hpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,8 @@ class ImageManager : public util::noncopyable {
3939
ImageManager();
4040
~ImageManager();
4141

42-
void onSpriteLoaded();
43-
44-
bool isLoaded() const {
45-
return loaded;
46-
}
42+
void setLoaded(bool);
43+
bool isLoaded() const;
4744

4845
void dumpDebugLogs() const;
4946

src/mbgl/renderer/render_style.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ void RenderStyle::update(const UpdateParameters& parameters) {
143143
imageManager->updateImage(entry.second.after);
144144
}
145145

146-
if (parameters.spriteLoaded && !imageManager->isLoaded()) {
147-
imageManager->onSpriteLoaded();
148-
}
146+
imageManager->setLoaded(parameters.spriteLoaded);
149147

150148

151149
const LayerDifference layerDiff = diffLayers(layerImpls, parameters.layers);

src/mbgl/style/style_impl.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ void Style::Impl::parse(const std::string& json_) {
111111
defaultPitch = parser.pitch;
112112
setLight(std::make_unique<Light>(parser.light));
113113

114+
spriteLoaded = false;
114115
spriteLoader->load(parser.spriteURL, scheduler, fileSource);
115116
glyphURL = parser.glyphURL;
116117

test/renderer/image_manager.test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ TEST(ImageManager, NotifiesRequestorWhenSpriteIsLoaded) {
127127
imageManager.getImages(requestor, {"one"});
128128
ASSERT_FALSE(notified);
129129

130-
imageManager.onSpriteLoaded();
130+
imageManager.setLoaded(true);
131131
ASSERT_TRUE(notified);
132132
}
133133

0 commit comments

Comments
 (0)