diff --git a/packages/dev/core/src/Layers/highlightLayer.ts b/packages/dev/core/src/Layers/highlightLayer.ts index afeeceb7d41..ddd3229b84b 100644 --- a/packages/dev/core/src/Layers/highlightLayer.ts +++ b/packages/dev/core/src/Layers/highlightLayer.ts @@ -178,6 +178,10 @@ interface IHighlightLayerExcludedMesh { * The mesh render callback use to restore previous stencil use */ afterRender: Nullable>; + /** + * Current stencil state of the engine + */ + stencilState: boolean; } /** @@ -625,15 +629,23 @@ export class HighlightLayer extends EffectLayer { const meshExcluded = this._excludedMeshes[mesh.uniqueId]; if (!meshExcluded) { - this._excludedMeshes[mesh.uniqueId] = { + const obj: IHighlightLayerExcludedMesh = { mesh: mesh, - beforeBind: mesh.onBeforeBindObservable.add((mesh: Mesh) => { - mesh.getEngine().setStencilBuffer(false); - }), - afterRender: mesh.onAfterRenderObservable.add((mesh: Mesh) => { - mesh.getEngine().setStencilBuffer(true); - }), + beforeBind: null, + afterRender: null, + stencilState: false, }; + + obj.beforeBind = mesh.onBeforeBindObservable.add((mesh: Mesh) => { + obj.stencilState = mesh.getEngine().getStencilBuffer(); + mesh.getEngine().setStencilBuffer(false); + }); + + obj.afterRender = mesh.onAfterRenderObservable.add((mesh: Mesh) => { + mesh.getEngine().setStencilBuffer(obj.stencilState); + }); + + this._excludedMeshes[mesh.uniqueId] = obj; } }