UNPKG

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.68 kB
{"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';\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.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();\n"],"names":[],"mappings":";;;;AAwBO,MAAM,eACb,CAAA;AAAA,EAYI,YAAY,aACZ,EAAA;AACI,IAAK,IAAA,CAAA,WAAA,mBAAqB,MAAA,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,IAAK,IAAA,CAAA,aAAA,GAAgB,iBAAiB,EAAC,CAAA;AACvC,IAAA,IAAA,CAAK,gBAAmB,GAAA,KAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,uBAAA,CAAwB,YAAoB,WACpD,EAAA;AACI,IAAA,MAAM,MAAS,GAAA,UAAA,CAAW,GAAI,EAAA,CAAE,YAAa,EAAA,CAAA;AAE7C,IAAA,MAAA,CAAO,KAAQ,GAAA,UAAA,CAAA;AACf,IAAA,MAAA,CAAO,MAAS,GAAA,WAAA,CAAA;AAEhB,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAEtC,IAAO,OAAA,EAAE,QAAQ,OAAQ,EAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,0BAA2B,CAAA,QAAA,EAAkB,SAAmB,EAAA,UAAA,GAAa,CACpF,EAAA;AACI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAM,QAAW,GAAA,UAAA,GAAc,IAAI,CAAA,CAAA;AACnD,IAAA,SAAA,GAAY,IAAK,CAAA,IAAA,CAAM,SAAY,GAAA,UAAA,GAAc,IAAI,CAAA,CAAA;AACrD,IAAA,QAAA,GAAW,SAAS,QAAQ,CAAA,CAAA;AAC5B,IAAA,SAAA,GAAY,SAAS,SAAS,CAAA,CAAA;AAE9B,IAAM,MAAA,GAAA,GAAA,CAAO,QAAY,IAAA,EAAA,KAAO,SAAa,IAAA,CAAA,CAAA,CAAA;AAE7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAY,CAAA,GAAG,CACzB,EAAA;AACI,MAAK,IAAA,CAAA,WAAA,CAAY,GAAG,CAAA,GAAI,EAAC,CAAA;AAAA,KAC7B;AAEA,IAAA,IAAI,gBAAmB,GAAA,IAAA,CAAK,WAAY,CAAA,GAAG,EAAE,GAAI,EAAA,CAAA;AAEjD,IAAA,IAAI,CAAC,gBACL,EAAA;AACI,MAAmB,gBAAA,GAAA,IAAA,CAAK,uBAAwB,CAAA,QAAA,EAAU,SAAS,CAAA,CAAA;AAAA,KACvE;AAEA,IAAO,OAAA,gBAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,uBAAuB,gBAC9B,EAAA;AACI,IAAA,MAAM,SAAS,gBAAiB,CAAA,MAAA,CAAA;AAChC,IAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,MAAA,CAAA;AAE1B,IAAM,MAAA,GAAA,GAAA,CAAO,KAAS,IAAA,EAAA,KAAO,MAAU,IAAA,CAAA,CAAA,CAAA;AAEvC,IAAA,gBAAA,CAAiB,OAAQ,CAAA,SAAA,CAAU,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA,CAAA;AAEtD,IAAA,IAAA,CAAK,WAAY,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA;AAAA,GAC/C;AAAA,EAEO,KACP,GAAA;AACI,IAAA,IAAA,CAAK,cAAc,EAAC,CAAA;AAAA,GACxB;AACJ,CAAA;AAOa,MAAA,UAAA,GAAa,IAAI,eAAgB;;;;"}