UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

85 lines (63 loc) 2.48 kB
import { CSS_ABSOLUTE_POSITIONING } from "../../../../../view/CSS_ABSOLUTE_POSITIONING.js"; import { CanvasView } from "../../../../../view/elements/CanvasView.js"; import EmptyView from "../../../../../view/elements/EmptyView.js"; import { sampler2d_write_to_canvas_raw } from "../../sampler/sampler2d_write_to_canvas_raw.js"; export class ResidencyDebugView extends EmptyView { /** * * @type {VirtualTexturePage|null} */ texture = null; #canvas = new CanvasView(); #previous_residency = new Uint32Array(1024); #scale =1; constructor({ scale = 1 } = {}) { super({ css: { position: "absolute", boxShadow: "0 0 8px black", background: "black" }, }); this.#scale = scale; this.#canvas.css(CSS_ABSOLUTE_POSITIONING); this.addChild(this.#canvas); this.#previous_residency.fill(-1); } update() { const t = this.texture; if (t === null) { return; } const canvas = this.#canvas; const scale = this.#scale; canvas.size.set( t.page_texture_resolution[0] * scale, t.page_texture_resolution[1] * scale, ); this.size.copy(canvas.size); const residentTiles = t.resident_tiles; const temp = new CanvasView(); const tile_resolution = t.tile_resolution; temp.size.setScalar(tile_resolution); const tile_columns = t.page_texture_resolution[0] / tile_resolution; for (let i = 0; i < residentTiles.length; i++) { const tile = residentTiles[i]; const page_slot = tile.page_slot; if (this.#previous_residency[page_slot] === tile.finger_print) { continue; } sampler2d_write_to_canvas_raw(tile.data, temp.el); const column = page_slot % tile_columns; const row = (page_slot / tile_columns) | 0; canvas.context2d.drawImage( temp.el, 0, 0, tile_resolution, tile_resolution, tile_resolution * column * scale, tile_resolution * row * scale, tile_resolution * scale, tile_resolution * scale ); this.#previous_residency[page_slot] = tile.finger_print; } } }