From a51814f934c35f857af09bc8ae95240d1979c10d Mon Sep 17 00:00:00 2001 From: Marco Hutter Date: Thu, 25 Sep 2025 15:08:04 +0200 Subject: [PATCH 1/4] Delete rendered imagery when layer was removed --- packages/engine/Source/Scene/Model/ModelImagery.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/engine/Source/Scene/Model/ModelImagery.js b/packages/engine/Source/Scene/Model/ModelImagery.js index 75609c6a42b2..482315fb4408 100644 --- a/packages/engine/Source/Scene/Model/ModelImagery.js +++ b/packages/engine/Source/Scene/Model/ModelImagery.js @@ -100,6 +100,9 @@ class ModelImagery { //>>includeEnd('debug'); if (!this._hasImagery) { + // When there is no imagery, make sure to delete any model primitive + // imageries that may previously have been created + this._deleteModelPrimitiveImageries(); return; } @@ -215,6 +218,7 @@ class ModelImagery { modelPrimitiveImagery.destroy(); } delete this._modelPrimitiveImageries; + this._model.resetDrawCommands(); } /** From 540e7c2bcff2aaed5e09997582c0861f40e95371 Mon Sep 17 00:00:00 2001 From: Marco Hutter Date: Thu, 25 Sep 2025 15:08:22 +0200 Subject: [PATCH 2/4] Update spec for imagery layer removal --- .../Specs/Scene/Model/ModelImagerySpec.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js index af3e21b0d61d..65b1aedf15fb 100644 --- a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js +++ b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js @@ -133,4 +133,26 @@ describe("Scene/Model/ModelImagery", function () { const modelPrimitiveImageries = modelImagery._modelPrimitiveImageries; expect(modelPrimitiveImageries.length).toBe(4); }); + + it("removes ModelPrimitiveImagery objects when imagery layers are removed", async function () { + const tileset = await loadTilesetWithImagery(scene); + + const root = tileset.root; + const content = root.content; + const model = content._model; + const modelImagery = model._modelImagery; + + // The model has four primitives + const modelPrimitiveImageries = modelImagery._modelPrimitiveImageries; + expect(modelPrimitiveImageries.length).toBe(4); + + // Remove the imagery layer from the tileset, and trigger an update + tileset.imageryLayers.removeAll(false); + scene.renderForSpecs(); + + // The model imagery should no longer contain any + // modelPrimitiveImagery objects now + const newModelPrimitiveImageries = modelImagery._modelPrimitiveImageries; + expect(newModelPrimitiveImageries).toBeUndefined(); + }); }); From a4b010c30d1f28b1549f734042aa172e31bd7f74 Mon Sep 17 00:00:00 2001 From: Marco Hutter Date: Thu, 25 Sep 2025 15:09:24 +0200 Subject: [PATCH 3/4] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index ed244a0b0c4a..92ae5bd9a3b8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ - Improved performance and reduced memory usage of `Event` class. [#12896](https://github.com/CesiumGS/cesium/pull/12896) - Fixes vertical misalignment of glyphs in labels with small fonts [#8474](https://github.com/CesiumGS/cesium/issues/8474) - Prevent runtime errors for certain forms of invalid PNTS files [#12872](https://github.com/CesiumGS/cesium/issues/12872) +- Fixed a bug where the removal of draped imagery layers did not update the rendered state [#12923](https://github.com/CesiumGS/cesium/issues/12923) #### Additions :tada: From d353922ac3be6b2ee07cda3d0e4dc856693b2292 Mon Sep 17 00:00:00 2001 From: Marco Hutter Date: Fri, 26 Sep 2025 16:18:46 +0200 Subject: [PATCH 4/4] Skip GL-based test in CI --- packages/engine/Specs/Scene/Model/ModelImagerySpec.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js index 65b1aedf15fb..3efaa8894714 100644 --- a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js +++ b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js @@ -135,6 +135,10 @@ describe("Scene/Model/ModelImagery", function () { }); it("removes ModelPrimitiveImagery objects when imagery layers are removed", async function () { + if (!scene.context.webgl2) { + return; + } + const tileset = await loadTilesetWithImagery(scene); const root = tileset.root;