diff --git a/CHANGES.md b/CHANGES.md index 5e8fd07ee03..66ad21a4760 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,7 @@ - Improved performance when removing primitives. [#3018](https://github.com/CesiumGS/cesium/pull/3018) - Improved performance of terrain Quadtree handling of custom data [#12907](https://github.com/CesiumGS/cesium/pull/12907) - Fixed picking of `GroundPrimitive` with multiple `PolygonGeometry` instances selecting the wrong instance. [#12978](https://github.com/CesiumGS/cesium/pull/12978) +- Fixed a bug where the removal of draped imagery layers did not update the rendered state [#12923](https://github.com/CesiumGS/cesium/issues/12923) ## 1.134.1 - 2025-10-10 diff --git a/packages/engine/Source/Scene/Model/ModelImagery.js b/packages/engine/Source/Scene/Model/ModelImagery.js index 75609c6a42b..482315fb440 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(); } /** diff --git a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js index af3e21b0d61..3efaa889471 100644 --- a/packages/engine/Specs/Scene/Model/ModelImagerySpec.js +++ b/packages/engine/Specs/Scene/Model/ModelImagerySpec.js @@ -133,4 +133,30 @@ 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 () { + if (!scene.context.webgl2) { + return; + } + + 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(); + }); });