pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 5.81 kB
Source Map (JSON)
{"version":3,"file":"CanvasPool.mjs","sources":["../../../../../src/rendering/renderers/shared/texture/CanvasPool.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../environment/adapter';\nimport { nextPow2 } from '../../../../maths/misc/pow2';\nimport { GlobalResourceRegistry } from '../../../../utils/pool/GlobalResourceRegistry';\n\nimport type { ICanvas, ICanvasRenderingContext2DSettings } from '../../../../environment/canvas/ICanvas';\nimport type { ICanvasRenderingContext2D } from '../../../../environment/canvas/ICanvasRenderingContext2D';\n\n/**\n * A utility type that represents a canvas and its rendering context.\n * @category rendering\n * @internal\n */\nexport interface CanvasAndContext\n{\n /** The canvas element. */\n canvas: ICanvas;\n /** The rendering context of the canvas. */\n context: ICanvasRenderingContext2D;\n}\n\n/**\n * CanvasPool is a utility class that manages a pool of reusable canvas elements\n * @category rendering\n * @internal\n */\nexport class CanvasPoolClass\n{\n public canvasOptions: ICanvasRenderingContext2DSettings;\n\n /**\n * Allow renderTextures of the same size as screen, not just pow2\n *\n * Automatically sets to true after `setScreenSize`\n * @default false\n */\n public enableFullScreen: boolean;\n private _canvasPool: {[x in string | number]: CanvasAndContext[]};\n\n constructor(canvasOptions?: ICanvasRenderingContext2DSettings)\n {\n this._canvasPool = Object.create(null);\n this.canvasOptions = canvasOptions || {};\n this.enableFullScreen = false;\n }\n\n /**\n * Creates texture with params that were specified in pool constructor.\n * @param pixelWidth - Width of texture in pixels.\n * @param pixelHeight - Height of texture in pixels.\n */\n private _createCanvasAndContext(pixelWidth: number, pixelHeight: number): CanvasAndContext\n {\n const canvas = DOMAdapter.get().createCanvas();\n\n canvas.width = pixelWidth;\n canvas.height = pixelHeight;\n\n const context = canvas.getContext('2d');\n\n return { canvas, context };\n }\n\n /**\n * Gets a Power-of-Two render texture or fullScreen texture\n * @param minWidth - The minimum width of the render texture.\n * @param minHeight - The minimum height of the render texture.\n * @param resolution - The resolution of the render texture.\n * @returns The new render texture.\n */\n public getOptimalCanvasAndContext(minWidth: number, minHeight: number, resolution = 1): CanvasAndContext\n {\n minWidth = Math.ceil((minWidth * resolution) - 1e-6);\n minHeight = Math.ceil((minHeight * resolution) - 1e-6);\n minWidth = nextPow2(minWidth);\n minHeight = nextPow2(minHeight);\n\n const key = (minWidth << 17) + (minHeight << 1);\n\n if (!this._canvasPool[key])\n {\n this._canvasPool[key] = [];\n }\n\n let canvasAndContext = this._canvasPool[key].pop();\n\n if (!canvasAndContext)\n {\n canvasAndContext = this._createCanvasAndContext(minWidth, minHeight);\n }\n\n return canvasAndContext;\n }\n\n /**\n * Place a render texture back into the pool.\n * @param canvasAndContext\n */\n public returnCanvasAndContext(canvasAndContext: CanvasAndContext): void\n {\n const canvas = canvasAndContext.canvas;\n const { width, height } = canvas;\n\n const key = (width << 17) + (height << 1);\n\n canvasAndContext.context.resetTransform();\n canvasAndContext.context.clearRect(0, 0, width, height);\n\n this._canvasPool[key].push(canvasAndContext);\n }\n\n public clear(): void\n {\n this._canvasPool = {};\n }\n}\n\n/**\n * CanvasPool is a utility class that manages a pool of reusable canvas elements\n * @category rendering\n * @internal\n */\nexport const CanvasPool = new CanvasPoolClass();\nGlobalResourceRegistry.register(CanvasPool);\n"],"names":[],"mappings":";;;;;AAyBO,MAAM,eAAA,CACb;AAAA,EAYI,YAAY,aAAA,EACZ;AACI,IAAA,IAAA,CAAK,WAAA,mBAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,aAAA,GAAgB,iBAAiB,EAAC;AACvC,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,uBAAA,CAAwB,YAAoB,WAAA,EACpD;AACI,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,EAAI,CAAE,YAAA,EAAa;AAE7C,IAAA,MAAA,CAAO,KAAA,GAAQ,UAAA;AACf,IAAA,MAAA,CAAO,MAAA,GAAS,WAAA;AAEhB,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAEtC,IAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,0BAAA,CAA2B,QAAA,EAAkB,SAAA,EAAmB,UAAA,GAAa,CAAA,EACpF;AACI,IAAA,QAAA,GAAW,IAAA,CAAK,IAAA,CAAM,QAAA,GAAW,UAAA,GAAc,IAAI,CAAA;AACnD,IAAA,SAAA,GAAY,IAAA,CAAK,IAAA,CAAM,SAAA,GAAY,UAAA,GAAc,IAAI,CAAA;AACrD,IAAA,QAAA,GAAW,SAAS,QAAQ,CAAA;AAC5B,IAAA,SAAA,GAAY,SAAS,SAAS,CAAA;AAE9B,IAAA,MAAM,GAAA,GAAA,CAAO,QAAA,IAAY,EAAA,KAAO,SAAA,IAAa,CAAA,CAAA;AAE7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EACzB;AACI,MAAA,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,GAAI,EAAC;AAAA,IAC7B;AAEA,IAAA,IAAI,gBAAA,GAAmB,IAAA,CAAK,WAAA,CAAY,GAAG,EAAE,GAAA,EAAI;AAEjD,IAAA,IAAI,CAAC,gBAAA,EACL;AACI,MAAA,gBAAA,GAAmB,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,SAAS,CAAA;AAAA,IACvE;AAEA,IAAA,OAAO,gBAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,uBAAuB,gBAAA,EAC9B;AACI,IAAA,MAAM,SAAS,gBAAA,CAAiB,MAAA;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,MAAA;AAE1B,IAAA,MAAM,GAAA,GAAA,CAAO,KAAA,IAAS,EAAA,KAAO,MAAA,IAAU,CAAA,CAAA;AAEvC,IAAA,gBAAA,CAAiB,QAAQ,cAAA,EAAe;AACxC,IAAA,gBAAA,CAAiB,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,OAAO,MAAM,CAAA;AAEtD,IAAA,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,CAAE,IAAA,CAAK,gBAAgB,CAAA;AAAA,EAC/C;AAAA,EAEO,KAAA,GACP;AACI,IAAA,IAAA,CAAK,cAAc,EAAC;AAAA,EACxB;AACJ;AAOO,MAAM,UAAA,GAAa,IAAI,eAAA;AAC9B,sBAAA,CAAuB,SAAS,UAAU,CAAA;;;;"}