// call at scene-build time; returns a shared handle keyed on src function prepareImage(src: string, onReady?: () => void): PreparedImage type PreparedImage = { src: string naturalWidth: number // 0 until ready naturalHeight: number aspect: number // 1 until ready (safe default) ready: boolean error: boolean } function layoutImage(p: PreparedImage, targetWidth: number) : { width: number; height: number } // pure
Shared cache means ten cells pointing at the same url share one load. Render loop discovers readiness by calling layoutImage every frame.