From 340cd182e7af1fb53c1f8060778530bfe2bb8828 Mon Sep 17 00:00:00 2001 From: PitresAli Date: Wed, 26 Aug 2026 00:52:26 +0200 Subject: [PATCH] fix: Defer initial WebGL render until DOM layout completes for auto-loaded STL --- web/model-viewer.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/web/model-viewer.js b/web/model-viewer.js index 8477850..bf003e0 100644 --- a/web/model-viewer.js +++ b/web/model-viewer.js @@ -349,6 +349,11 @@ frame = 0; if (!vertexCount) return; const rect = canvas.getBoundingClientRect(); + if (rect.width < 10 || rect.height < 10) { + // Container layout is not ready yet; retry on next frame + requestDraw(); + return; + } const width = Math.max(1, Math.round(rect.width * renderScale)); const height = Math.max(1, Math.round(rect.height * renderScale)); if (canvas.width !== width || canvas.height !== height) { @@ -503,14 +508,18 @@ yawVelocity = 0; pitchVelocity = 0; - setTimeout(() => { - introAnimating = true; - introStartTime = performance.now(); - startYaw = yaw; - startPitch = pitch; - startZoom = zoom; + // Defer rendering to post-reflow rAF so canvas dimensions are ready + requestAnimationFrame(() => { requestDraw(); - }, 150); + setTimeout(() => { + introAnimating = true; + introStartTime = performance.now(); + startYaw = yaw; + startPitch = pitch; + startZoom = zoom; + requestDraw(); + }, 150); + }); requestDraw(); return { name, triangles: vertexCount / 3 };