Skip to content

Commit 7a73a90

Browse files
authored
Stop single-layer mode from showing the layer below (#482)
startLayer is inclusive: the bottom clipping plane sits at the bottom of layer startLayer. Collapsing the range to endLayer - 1 therefore left two layers visible. Collapse it onto endLayer itself, in both the endLayer setter and the singleLayerMode setter. Fixes #450
1 parent 4f75882 commit 7a73a90

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

src/__tests__/scene-manager-properties.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,18 @@ describe('SceneManager properties', () => {
774774
sceneManager.singleLayerMode = true;
775775

776776
expect(sceneManager.singleLayerMode).toBe(true);
777-
expect(sceneManager.startLayer).toBe(1);
777+
expect(sceneManager.startLayer).toBe(2);
778+
});
779+
780+
test('singleLayerMode clips away the layer below the end layer', () => {
781+
sceneManager.endLayer = 2;
782+
783+
sceneManager.singleLayerMode = true;
784+
785+
const layer = sceneManager.job.layers[1];
786+
const planes = objectsManager(sceneManager).clippingPlanes;
787+
expect(planes).toHaveLength(1);
788+
expect(planes[0].constant).toBe(-(layer.z - layer.height));
778789
});
779790

780791
test('singleLayerMode restores the previous start layer when turned off', () => {
@@ -825,11 +836,15 @@ describe('SceneManager properties', () => {
825836
fresh.dispose();
826837
});
827838

828-
test('endLayer follows the end layer while single layer mode is on', () => {
839+
test('startLayer follows the end layer while single layer mode is on', () => {
829840
sceneManager.singleLayerMode = true;
830841

831842
sceneManager.endLayer = 2;
832843

844+
expect(sceneManager.startLayer).toBe(2);
845+
846+
sceneManager.endLayer = 1;
847+
833848
expect(sceneManager.startLayer).toBe(1);
834849
});
835850
});

src/scene-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ export class SceneManager {
519519
}
520520

521521
if (this._singleLayerMode === true) {
522-
this.startLayer = this._endLayer - 1;
522+
this.startLayer = this._endLayer;
523523
}
524524

525525
this.updateClippingPlanes();
@@ -546,7 +546,7 @@ export class SceneManager {
546546

547547
if (this._singleLayerMode) {
548548
this.prevStartLayer = this._startLayer;
549-
this._startLayer = Math.max(this._endLayer - 1, 1);
549+
this._startLayer = Math.max(this._endLayer, 1);
550550
} else {
551551
this._startLayer = this.prevStartLayer;
552552
}

0 commit comments

Comments
 (0)