From 39eb725c804f4c3ea4aa7683017bbfca10728160 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Fri, 24 Jul 2026 13:32:19 -0700 Subject: [PATCH] [eric] canvas: dot grid is a cached SVG tile, not a per-zoom-rasterized gradient (kills the white-patch dropouts) --- frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx index ac3da88a..db1feba6 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx @@ -355,14 +355,16 @@ const DashboardCanvas: React.FC = ({ /> )} - {/* Dot grid background; gestures move it imperatively via gridRef (phase + scale), commits re-render it here (dot radius included) */} + {/* Dot grid background; gestures move it imperatively via gridRef (phase + scale), commits re-render it here (dot radius included). The tile is an SVG IMAGE, not a procedural gradient: Chromium caches a decoded image as a GPU texture, while a radial-gradient re-rasterizes the whole layer every backgroundSize change, and under GPU memory pressure (many webviews, external monitors) those rasters get dropped and paint as a giant blank rectangle, the 1.5.9 white-patch bug. Same backgroundSize/Position write contract, so the per-frame camera writer is untouched. */} `, + )}")`, backgroundSize: `${dotSpacing}px ${dotSpacing}px`, backgroundPosition: `${canvas.panX % dotSpacing}px ${canvas.panY % dotSpacing}px`, }}