diff --git a/frontend/libs/components/pagescene/src/lib/engine/scene.ts b/frontend/libs/components/pagescene/src/lib/engine/scene.ts index ddd45f74ef..bc89e1723e 100644 --- a/frontend/libs/components/pagescene/src/lib/engine/scene.ts +++ b/frontend/libs/components/pagescene/src/lib/engine/scene.ts @@ -1079,15 +1079,10 @@ class Scene { } throw error; } - return new Promise((resolve) => { - new SplatMesh({ - fileBytes: buffer, - onLoad: (mesh) => { - resolve(mesh); - onComplete(); - }, - }); - }); + const mesh = new SplatMesh({ fileBytes: buffer }); + await mesh.initialized; + onComplete(); + return mesh; } /** diff --git a/frontend/libs/components/viewer-3d/src/lib/viewer-3d.tsx b/frontend/libs/components/viewer-3d/src/lib/viewer-3d.tsx index 0ddde8f2ce..a3808f86b8 100644 --- a/frontend/libs/components/viewer-3d/src/lib/viewer-3d.tsx +++ b/frontend/libs/components/viewer-3d/src/lib/viewer-3d.tsx @@ -408,9 +408,8 @@ export function Viewer3D({ if (SPLAT_EXTENSIONS.includes(urlExtension)) { console.log(`[Viewer3D] splat format detected (.${urlExtension})`); - new SplatMesh({ - url: modelUrl, - onLoad: (mesh) => { + void new SplatMesh({ url: modelUrl }).initialized + .then((mesh) => { if (cancelled) { mesh.dispose(); return; @@ -434,8 +433,10 @@ export function Viewer3D({ } console.log("Splat loaded"); - }, - }); + }) + .catch((error) => + console.error("[Viewer3D] splat load failed:", error), + ); } else if (!GLTF_EXTENSIONS.includes(urlExtension)) { // Known non-glTF model format with no loader wired here (obj, fbx, // pmx, …). Show the fallback shape rather than spamming a parse error.