From 545a09fcb383595f8a012a2504cd61a924ca62ac Mon Sep 17 00:00:00 2001 From: Gali Nelle Date: Fri, 10 Apr 2020 12:57:46 +0300 Subject: [PATCH] Fix LocationIndicator not updating image sizes when image manager content changes --- metrics/ignores/platform-linux.json | 3 +- .../change_image/expected.png | Bin 0 -> 12111 bytes .../change_image/style.json | 104 ++++++++++++++++++ .../render_location_indicator_layer.cpp | 46 ++++---- 4 files changed, 133 insertions(+), 20 deletions(-) create mode 100644 metrics/tests/location_indicator/change_image/expected.png create mode 100644 metrics/tests/location_indicator/change_image/style.json diff --git a/metrics/ignores/platform-linux.json b/metrics/ignores/platform-linux.json index 29d06bfc3..ec018eb80 100644 --- a/metrics/ignores/platform-linux.json +++ b/metrics/ignores/platform-linux.json @@ -21,5 +21,6 @@ "location_indicator/tilted_texture_shift_top_left": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering", "location_indicator/tilted_texture_shift_top_right": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering", "location_indicator/two_textures": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering", - "location_indicator/image_pixel_ratio": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering" + "location_indicator/image_pixel_ratio": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering", + "location_indicator/change_image": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering" } diff --git a/metrics/tests/location_indicator/change_image/expected.png b/metrics/tests/location_indicator/change_image/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd054207860efc5b4189d7646cb60ce4d9fb062 GIT binary patch literal 12111 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 b3=2GJezYdk_4DZZVl7N* img) { - if ((img && &img->get()->image == image) || (!img && !image)) return; imageDirty = true; - image = (img) ? &img->get()->image : nullptr; + image = (img) ? &(img->get()->image) : nullptr; width = height = 0; pixelRatio = 1.0f; - if (img) { + if (image) { sharedImage = *img; // keep reference until uploaded width = image->size.width; height = image->size.height; @@ -293,7 +292,7 @@ public: initialize(); MBGL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texId)); - if (!image || !image->valid()) { + if (!sharedImage || !image || !image->valid()) { MBGL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr)); } else { MBGL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, @@ -399,9 +398,9 @@ public: params.puckShadowScale != oldParams.puckShadowScale) bearingChanged = true; // changes puck geometry but not necessarily the location if (params.errorRadiusMeters != oldParams.errorRadiusMeters) radiusChanged = true; - setTextureFromImageID(params.puckImagePath, texPuck, params); - setTextureFromImageID(params.puckShadowImagePath, texShadow, params); - setTextureFromImageID(params.puckHatImagePath, texPuckHat, params); + bearingChanged |= setTextureFromImageID(params.puckImagePath, texPuck, params); + bearingChanged |= setTextureFromImageID(params.puckShadowImagePath, texShadow, params); + bearingChanged |= setTextureFromImageID(params.puckHatImagePath, texPuckHat, params); projectionCircle = params.projectionMatrix; const Point positionMercator = project(params.puckPosition, *params.state); @@ -514,7 +513,10 @@ protected: return vec2(posScreenDelta - posScreen).normalized(); } - void updatePuck(const mbgl::LocationIndicatorRenderParameters& params) { return updatePuckPerspective(params); } + void updatePuck(const mbgl::LocationIndicatorRenderParameters& params) { + updatePuckPerspective(params); + bearingChanged = false; + } void updatePuckPerspective(const mbgl::LocationIndicatorRenderParameters& params) { const TransformState& s = *params.state; @@ -572,8 +574,6 @@ protected: hatGeometry[i] = vec2(hatOffset + (verticalShift * (tilt * params.puckLayersDisplacement * horizontalScaleFactor))); } - - bearingChanged = false; } void drawRadius(const mbgl::LocationIndicatorRenderParameters& params) { @@ -636,23 +636,31 @@ protected: return s.screenCoordinateToLatLng(flippedPoint, wrapMode); } - void setTextureFromImageID(const std::string& imagePath, - std::shared_ptr& tex, + bool setTextureFromImageID(const std::string& imagePath, + std::shared_ptr& texture, const mbgl::LocationIndicatorRenderParameters& params) { + bool updated = false; if (textures.find(imagePath) == textures.end()) { std::shared_ptr tx = std::make_shared(); - if (!imagePath.empty() && params.imageManager) + if (!imagePath.empty() && params.imageManager) { tx->assign(params.imageManager->getSharedImage(imagePath)); - else + updated = true; + } else { tx->assign(nullptr); + } textures[imagePath] = tx; + texture = tx; } else { - const Immutable* ima = params.imageManager->getSharedImage(imagePath); - const mbgl::PremultipliedImage* img = (ima) ? &ima->get()->image : nullptr; - if (textures.at(imagePath)->image != img) // image for the ID might have changed. - textures.at(imagePath)->assign(ima); + const Immutable* sharedImage = params.imageManager->getSharedImage(imagePath); + const mbgl::PremultipliedImage* img = (sharedImage) ? &sharedImage->get()->image : nullptr; + std::shared_ptr& tex = textures.at(imagePath); + if (tex->image != img) { // image for the ID might have changed. + tex->assign(sharedImage); + updated = true; + } + texture = tex; } - tex = textures.at(imagePath); + return updated; } std::map> textures;