Skip to content

Commit

Permalink
Merge pull request #14449 from Popov72/test-leak-sdw
Browse files Browse the repository at this point in the history
ShadowDepthWrapper: Fix a memory leak when new effects must be created
  • Loading branch information
sebavan committed Oct 20, 2023
2 parents 539283a + 1fd13ac commit 965d7f4
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions packages/dev/core/src/Materials/shadowDepthWrapper.ts
Expand Up @@ -116,18 +116,31 @@ export class ShadowDepthWrapper {
const subMesh = key.value;
if (subMesh?.getMesh() === (mesh as AbstractMesh)) {
this._subMeshToEffect.delete(subMesh);
this._subMeshToDepthWrapper.mm.delete(subMesh);
this._deleteDepthWrapperEffect(subMesh);
}
}
})
);
}

this._subMeshToEffect.set(params.subMesh, [params.effect, this._scene.getEngine().currentRenderPassId]);
this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation
if (this._subMeshToEffect.get(params.subMesh)?.[0] !== params.effect) {
this._subMeshToEffect.set(params.subMesh, [params.effect, this._scene.getEngine().currentRenderPassId]);
this._deleteDepthWrapperEffect(params.subMesh);
}
});
}

private _deleteDepthWrapperEffect(subMesh: Nullable<SubMesh>): void {
const depthWrapperEntries = this._subMeshToDepthWrapper.mm.get(subMesh);
if (depthWrapperEntries) {
// find and release the previous depth effect
depthWrapperEntries.forEach((depthWrapper) => {
depthWrapper.mainDrawWrapper.effect?.dispose();
});
this._subMeshToDepthWrapper.mm.delete(subMesh); // trigger a depth effect recreation
}
}

/**
* Gets the effect to use to generate the depth map
* @param subMesh subMesh to get the effect for
Expand Down

0 comments on commit 965d7f4

Please sign in to comment.