import { createCanvasSurface } from '../core/canvas_surface.js'; const MAX_STATIC_LAYERS = 24; export function createStaticLayerCanvas(width, height) { return createCanvasSurface(width, height)?.canvas || null; } export function drawCachedStaticLayer(state, g, layerId, key, rect, build) { if (!state || !rect || rect.w <= 0 || rect.h <= 0) return; if (!state.staticLayers) state.staticLayers = new Map(); const fullKey = `${layerId}:${key}:${Math.max(0, rect.w | 0)}x${Math.max(0, rect.h | 0)}`; let layer = state.staticLayers.get(fullKey); if (layer) { // Map-Reihenfolge als kleine LRU-Liste verwenden. state.staticLayers.delete(fullKey); state.staticLayers.set(fullKey, layer); } if (!layer) { const canvas = createStaticLayerCanvas(rect.w, rect.h); if (!canvas) return; const ctx = canvas.getContext('2d'); build(ctx, rect); layer = { canvas }; state.staticLayers.set(fullKey, layer); while (state.staticLayers.size > MAX_STATIC_LAYERS) { state.staticLayers.delete(state.staticLayers.keys().next().value); } } g.drawImage(layer.canvas, rect.x, rect.y); }