diff --git a/plugin-packages/editor-gizmo/src/gizmo-loader.ts b/plugin-packages/editor-gizmo/src/gizmo-loader.ts index 86b4788d7..c3b3b7e75 100644 --- a/plugin-packages/editor-gizmo/src/gizmo-loader.ts +++ b/plugin-packages/editor-gizmo/src/gizmo-loader.ts @@ -157,11 +157,21 @@ export class EditorGizmoPlugin extends AbstractPlugin { } } } - const wireframeMesh = gizmoVFXItem.wireframeMesh; - if (wireframeMesh && !wireframeMesh.isDestroyed) { - destroyWireframeMesh(wireframeMesh); - this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh); + if (gizmoVFXItem.wireframeMeshes.length > 0) { + gizmoVFXItem.wireframeMeshes.forEach(mesh => { + if (!mesh.isDestroyed) { + destroyWireframeMesh(mesh); + this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh); + } + }); + } else { + const wireframeMesh = gizmoVFXItem.wireframeMesh; + + if (wireframeMesh && !wireframeMesh.isDestroyed) { + destroyWireframeMesh(wireframeMesh); + this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh); + } } const arr: GizmoVFXItem[] = composition.loaderData.gizmoItems; diff --git a/plugin-packages/editor-gizmo/src/gizmo-vfx-item.ts b/plugin-packages/editor-gizmo/src/gizmo-vfx-item.ts index 96820e9d4..bbb266db1 100644 --- a/plugin-packages/editor-gizmo/src/gizmo-vfx-item.ts +++ b/plugin-packages/editor-gizmo/src/gizmo-vfx-item.ts @@ -96,6 +96,7 @@ export class GizmoVFXItem extends VFXItem { hitBounding?: { key: string, position: Vector3 }; mat = Matrix4.fromIdentity(); wireframeMesh?: Mesh; + wireframeMeshes: Mesh[] = []; spriteMesh?: SpriteMesh; private engine: Engine; @@ -197,9 +198,12 @@ export class GizmoVFXItem extends VFXItem { if (ms) { this.targetItem = item; + this.wireframeMeshes = []; ms.forEach(m => { const mesh = this.wireframeMesh = createModeWireframe(engine, m, this.color); + this.wireframeMeshes.push(mesh); + meshesToAdd.push(mesh); }); } @@ -326,10 +330,12 @@ export class GizmoVFXItem extends VFXItem { } else if (this.subType === GizmoSubType.modelWireframe) { // 模型线框 if (this.wireframeMesh && this.targetItem) { const meshes = this.targetItem.content.mriMeshs as Mesh[]; - const wireframeMesh = this.wireframeMesh; + const wireframeMeshes = this.wireframeMeshes; if (meshes?.length > 0) { - meshes.forEach(mesh => updateWireframeMesh(mesh, wireframeMesh, WireframeGeometryType.triangle)); + for (let i = 0;i < meshes.length;i++) { + updateWireframeMesh(meshes[i], wireframeMeshes[i], WireframeGeometryType.triangle); + } } } } else { // 几何体模型 diff --git a/plugin-packages/editor-gizmo/src/wireframe.ts b/plugin-packages/editor-gizmo/src/wireframe.ts index 70fbb3dea..be629c75c 100644 --- a/plugin-packages/editor-gizmo/src/wireframe.ts +++ b/plugin-packages/editor-gizmo/src/wireframe.ts @@ -48,7 +48,7 @@ export enum WireframeGeometryType { } export function destroyWireframeMesh (mesh: Mesh) { - //mesh.geometry?.destroy(); + mesh.geometry?.dispose(); mesh.dispose({ material: { textures: DestroyOptions.keep }, geometries: DestroyOptions.keep }); } @@ -244,8 +244,13 @@ export class SharedGeometry extends GLGeometry { super.flush(); } - destroy () { + override dispose () { + // from source geometry + this.buffers = {}; + this.bufferProps = {}; super.dispose(); + // @ts-expect-error + this.source = null; } }