Skip to content

Commit 0ee5670

Browse files
authored
Merge pull request #12924 from CesiumGS/fix-draped-imagery-removal
Fix draped imagery removal
2 parents 5ac1b07 + 9d00201 commit 0ee5670

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- Improved performance when removing primitives. [#3018](https://github.com/CesiumGS/cesium/pull/3018)
2323
- Improved performance of terrain Quadtree handling of custom data [#12907](https://github.com/CesiumGS/cesium/pull/12907)
2424
- Fixed picking of `GroundPrimitive` with multiple `PolygonGeometry` instances selecting the wrong instance. [#12978](https://github.com/CesiumGS/cesium/pull/12978)
25+
- Fixed a bug where the removal of draped imagery layers did not update the rendered state [#12923](https://github.com/CesiumGS/cesium/issues/12923)
2526

2627
## 1.134.1 - 2025-10-10
2728

packages/engine/Source/Scene/Model/ModelImagery.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ class ModelImagery {
100100
//>>includeEnd('debug');
101101

102102
if (!this._hasImagery) {
103+
// When there is no imagery, make sure to delete any model primitive
104+
// imageries that may previously have been created
105+
this._deleteModelPrimitiveImageries();
103106
return;
104107
}
105108

@@ -215,6 +218,7 @@ class ModelImagery {
215218
modelPrimitiveImagery.destroy();
216219
}
217220
delete this._modelPrimitiveImageries;
221+
this._model.resetDrawCommands();
218222
}
219223

220224
/**

packages/engine/Specs/Scene/Model/ModelImagerySpec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,30 @@ describe("Scene/Model/ModelImagery", function () {
133133
const modelPrimitiveImageries = modelImagery._modelPrimitiveImageries;
134134
expect(modelPrimitiveImageries.length).toBe(4);
135135
});
136+
137+
it("removes ModelPrimitiveImagery objects when imagery layers are removed", async function () {
138+
if (!scene.context.webgl2) {
139+
return;
140+
}
141+
142+
const tileset = await loadTilesetWithImagery(scene);
143+
144+
const root = tileset.root;
145+
const content = root.content;
146+
const model = content._model;
147+
const modelImagery = model._modelImagery;
148+
149+
// The model has four primitives
150+
const modelPrimitiveImageries = modelImagery._modelPrimitiveImageries;
151+
expect(modelPrimitiveImageries.length).toBe(4);
152+
153+
// Remove the imagery layer from the tileset, and trigger an update
154+
tileset.imageryLayers.removeAll(false);
155+
scene.renderForSpecs();
156+
157+
// The model imagery should no longer contain any
158+
// modelPrimitiveImagery objects now
159+
const newModelPrimitiveImageries = modelImagery._modelPrimitiveImageries;
160+
expect(newModelPrimitiveImageries).toBeUndefined();
161+
});
136162
});

0 commit comments

Comments
 (0)