Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/shared/texture/CanvasPool.js
2025-08-04 18:57:35 +02:00

66 lines
2.2 KiB
JavaScript

'use strict';
var adapter = require('../../../../environment/adapter.js');
var pow2 = require('../../../../maths/misc/pow2.js');
"use strict";
class CanvasPoolClass {
constructor(canvasOptions) {
this._canvasPool = /* @__PURE__ */ Object.create(null);
this.canvasOptions = canvasOptions || {};
this.enableFullScreen = false;
}
/**
* Creates texture with params that were specified in pool constructor.
* @param pixelWidth - Width of texture in pixels.
* @param pixelHeight - Height of texture in pixels.
*/
_createCanvasAndContext(pixelWidth, pixelHeight) {
const canvas = adapter.DOMAdapter.get().createCanvas();
canvas.width = pixelWidth;
canvas.height = pixelHeight;
const context = canvas.getContext("2d");
return { canvas, context };
}
/**
* Gets a Power-of-Two render texture or fullScreen texture
* @param minWidth - The minimum width of the render texture.
* @param minHeight - The minimum height of the render texture.
* @param resolution - The resolution of the render texture.
* @returns The new render texture.
*/
getOptimalCanvasAndContext(minWidth, minHeight, resolution = 1) {
minWidth = Math.ceil(minWidth * resolution - 1e-6);
minHeight = Math.ceil(minHeight * resolution - 1e-6);
minWidth = pow2.nextPow2(minWidth);
minHeight = pow2.nextPow2(minHeight);
const key = (minWidth << 17) + (minHeight << 1);
if (!this._canvasPool[key]) {
this._canvasPool[key] = [];
}
let canvasAndContext = this._canvasPool[key].pop();
if (!canvasAndContext) {
canvasAndContext = this._createCanvasAndContext(minWidth, minHeight);
}
return canvasAndContext;
}
/**
* Place a render texture back into the pool.
* @param canvasAndContext
*/
returnCanvasAndContext(canvasAndContext) {
const canvas = canvasAndContext.canvas;
const { width, height } = canvas;
const key = (width << 17) + (height << 1);
this._canvasPool[key].push(canvasAndContext);
}
clear() {
this._canvasPool = {};
}
}
const CanvasPool = new CanvasPoolClass();
exports.CanvasPool = CanvasPool;
exports.CanvasPoolClass = CanvasPoolClass;
//# sourceMappingURL=CanvasPool.js.map