25 lines
897 B
JavaScript
25 lines
897 B
JavaScript
export function createStaticLayerCanvas(width, height) {
|
|
const w = Math.max(1, width | 0);
|
|
const h = Math.max(1, height | 0);
|
|
if (typeof OffscreenCanvas !== 'undefined') return new OffscreenCanvas(w, h);
|
|
const c = document.createElement('canvas');
|
|
c.width = w;
|
|
c.height = h;
|
|
return c;
|
|
}
|
|
|
|
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) {
|
|
const canvas = createStaticLayerCanvas(rect.w, rect.h);
|
|
const ctx = canvas.getContext('2d');
|
|
build(ctx, rect);
|
|
layer = { canvas };
|
|
state.staticLayers.set(fullKey, layer);
|
|
}
|
|
g.drawImage(layer.canvas, rect.x, rect.y);
|
|
}
|