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 • 12.3 kB
Source Map (JSON)
{"version":3,"file":"RenderTarget.mjs","sources":["../../../../../src/rendering/renderers/shared/renderTarget/RenderTarget.ts"],"sourcesContent":["// what we are building is a platform and a framework.\n// import { Matrix } from '../../shared/maths/Matrix';\nimport { uid } from '../../../../utils/data/uid';\nimport { TextureSource } from '../texture/sources/TextureSource';\nimport { Texture } from '../texture/Texture';\n\nimport type { BindableTexture } from '../texture/Texture';\n\n/**\n * Options for creating a render target.\n * @category rendering\n * @advanced\n */\nexport interface RenderTargetOptions\n{\n /** the width of the RenderTarget */\n width?: number;\n /** the height of the RenderTarget */\n height?: number;\n /** the resolution of the RenderTarget */\n resolution?: number;\n /** an array of textures, or a number indicating how many color textures there should be */\n colorTextures?: BindableTexture[] | number;\n /** should this render target have a stencil buffer? */\n stencil?: boolean;\n /** should this render target have a depth buffer? */\n depth?: boolean;\n /** a depth stencil texture that the depth and stencil outputs will be written to */\n depthStencilTexture?: BindableTexture | boolean;\n /** should this render target be antialiased? */\n antialias?: boolean;\n /** is this a root element, true if this is gl context owners render target */\n isRoot?: boolean;\n}\n\n/**\n * A class that describes what the renderers are rendering to.\n * This can be as simple as a Texture, or as complex as a multi-texture, multi-sampled render target.\n * Support for stencil and depth buffers is also included.\n *\n * If you need something more complex than a Texture to render to, you should use this class.\n * Under the hood, all textures you render to have a RenderTarget created on their behalf.\n * @category rendering\n * @advanced\n */\nexport class RenderTarget\n{\n /** The default options for a render target */\n public static defaultOptions: RenderTargetOptions = {\n /** the width of the RenderTarget */\n width: 0,\n /** the height of the RenderTarget */\n height: 0,\n /** the resolution of the RenderTarget */\n resolution: 1,\n /** an array of textures, or a number indicating how many color textures there should be */\n colorTextures: 1,\n /** should this render target have a stencil buffer? */\n stencil: false,\n /** should this render target have a depth buffer? */\n depth: false,\n /** should this render target be antialiased? */\n antialias: false, // save on perf by default!\n /** is this a root element, true if this is gl context owners render target */\n isRoot: false\n };\n\n /** unique id for this render target */\n public readonly uid: number = uid('renderTarget');\n\n /**\n * An array of textures that can be written to by the GPU - mostly this has one texture in Pixi, but you could\n * write to multiple if required! (eg deferred lighting)\n */\n public colorTextures: TextureSource[] = [];\n /** the stencil and depth buffer will right to this texture in WebGPU */\n public depthStencilTexture: TextureSource;\n /** if true, will ensure a stencil buffer is added. For WebGPU, this will automatically create a depthStencilTexture */\n public stencil: boolean;\n /** if true, will ensure a depth buffer is added. For WebGPU, this will automatically create a depthStencilTexture */\n public depth: boolean;\n\n public dirtyId = 0;\n public isRoot = false;\n\n private readonly _size = new Float32Array(2);\n /** if true, then when the render target is destroyed, it will destroy all the textures that were created for it. */\n private readonly _managedColorTextures: boolean = false;\n\n /**\n * @param [descriptor] - Options for creating a render target.\n */\n constructor(descriptor: RenderTargetOptions = {})\n {\n descriptor = { ...RenderTarget.defaultOptions, ...descriptor };\n\n this.stencil = descriptor.stencil;\n this.depth = descriptor.depth;\n this.isRoot = descriptor.isRoot;\n\n if (typeof descriptor.colorTextures === 'number')\n {\n this._managedColorTextures = true;\n\n for (let i = 0; i < descriptor.colorTextures; i++)\n {\n this.colorTextures.push(new TextureSource({\n width: descriptor.width,\n height: descriptor.height,\n resolution: descriptor.resolution,\n antialias: descriptor.antialias,\n })\n );\n }\n }\n else\n {\n this.colorTextures = [...descriptor.colorTextures.map((texture) => texture.source)];\n\n const colorSource = this.colorTexture.source;\n\n this.resize(colorSource.width, colorSource.height, colorSource._resolution);\n }\n\n // the first color texture drives the size of all others..\n this.colorTexture.source.on('resize', this.onSourceResize, this);\n\n // TODO should listen for texture destroyed?\n\n if (descriptor.depthStencilTexture || this.stencil)\n {\n // TODO add a test\n if (descriptor.depthStencilTexture instanceof Texture\n || descriptor.depthStencilTexture instanceof TextureSource)\n {\n this.depthStencilTexture = descriptor.depthStencilTexture.source;\n }\n else\n {\n this.ensureDepthStencilTexture();\n }\n }\n }\n\n get size(): [number, number]\n {\n const _size = this._size;\n\n _size[0] = this.pixelWidth;\n _size[1] = this.pixelHeight;\n\n return _size as any as [number, number];\n }\n\n get width(): number\n {\n return this.colorTexture.source.width;\n }\n\n get height(): number\n {\n return this.colorTexture.source.height;\n }\n get pixelWidth(): number\n {\n return this.colorTexture.source.pixelWidth;\n }\n\n get pixelHeight(): number\n {\n return this.colorTexture.source.pixelHeight;\n }\n\n get resolution(): number\n {\n return this.colorTexture.source._resolution;\n }\n\n get colorTexture(): TextureSource\n {\n return this.colorTextures[0];\n }\n\n protected onSourceResize(source: TextureSource)\n {\n this.resize(source.width, source.height, source._resolution, true);\n }\n\n /**\n * This will ensure a depthStencil texture is created for this render target.\n * Most likely called by the mask system to make sure we have stencil buffer added.\n * @internal\n */\n public ensureDepthStencilTexture()\n {\n if (!this.depthStencilTexture)\n {\n this.depthStencilTexture = new TextureSource({\n width: this.width,\n height: this.height,\n resolution: this.resolution,\n format: 'depth24plus-stencil8',\n autoGenerateMipmaps: false,\n antialias: false,\n mipLevelCount: 1,\n // sampleCount: handled by the render target system..\n });\n }\n }\n\n public resize(width: number, height: number, resolution = this.resolution, skipColorTexture = false)\n {\n this.dirtyId++;\n\n this.colorTextures.forEach((colorTexture, i) =>\n {\n if (skipColorTexture && i === 0) return;\n\n colorTexture.source.resize(width, height, resolution);\n });\n\n if (this.depthStencilTexture)\n {\n this.depthStencilTexture.source.resize(width, height, resolution);\n }\n }\n\n public destroy()\n {\n this.colorTexture.source.off('resize', this.onSourceResize, this);\n\n if (this._managedColorTextures)\n {\n this.colorTextures.forEach((texture) =>\n {\n texture.destroy();\n });\n }\n\n if (this.depthStencilTexture)\n {\n this.depthStencilTexture.destroy();\n delete this.depthStencilTexture;\n }\n }\n}\n"],"names":[],"mappings":";;;;;AA6CO,MAAM,aAAA,GAAN,MAAM,aAAA,CACb;AAAA;AAAA;AAAA;AAAA,EA8CI,WAAA,CAAY,UAAA,GAAkC,EAAC,EAC/C;AAzBA;AAAA,IAAA,IAAA,CAAgB,GAAA,GAAc,IAAI,cAAc,CAAA;AAMhD;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAO,gBAAiC,EAAC;AAQzC,IAAA,IAAA,CAAO,OAAA,GAAU,CAAA;AACjB,IAAA,IAAA,CAAO,MAAA,GAAS,KAAA;AAEhB,IAAA,IAAA,CAAiB,KAAA,GAAQ,IAAI,YAAA,CAAa,CAAC,CAAA;AAE3C;AAAA,IAAA,IAAA,CAAiB,qBAAA,GAAiC,KAAA;AAO9C,IAAA,UAAA,GAAa,EAAE,GAAG,aAAA,CAAa,cAAA,EAAgB,GAAG,UAAA,EAAW;AAE7D,IAAA,IAAA,CAAK,UAAU,UAAA,CAAW,OAAA;AAC1B,IAAA,IAAA,CAAK,QAAQ,UAAA,CAAW,KAAA;AACxB,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,MAAA;AAEzB,IAAA,IAAI,OAAO,UAAA,CAAW,aAAA,KAAkB,QAAA,EACxC;AACI,MAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA;AAE7B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,eAAe,CAAA,EAAA,EAC9C;AACI,QAAA,IAAA,CAAK,aAAA,CAAc,IAAA;AAAA,UAAK,IAAI,aAAA,CAAc;AAAA,YACtC,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,YACnB,YAAY,UAAA,CAAW,UAAA;AAAA,YACvB,WAAW,UAAA,CAAW;AAAA,WACzB;AAAA,SACD;AAAA,MACJ;AAAA,IACJ,CAAA,MAEA;AACI,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAC,GAAG,UAAA,CAAW,aAAA,CAAc,IAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAM,CAAC,CAAA;AAElF,MAAA,MAAM,WAAA,GAAc,KAAK,YAAA,CAAa,MAAA;AAEtC,MAAA,IAAA,CAAK,OAAO,WAAA,CAAY,KAAA,EAAO,WAAA,CAAY,MAAA,EAAQ,YAAY,WAAW,CAAA;AAAA,IAC9E;AAGA,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAI/D,IAAA,IAAI,UAAA,CAAW,mBAAA,IAAuB,IAAA,CAAK,OAAA,EAC3C;AAEI,MAAA,IAAI,UAAA,CAAW,mBAAA,YAA+B,OAAA,IACvC,UAAA,CAAW,+BAA+B,aAAA,EACjD;AACI,QAAA,IAAA,CAAK,mBAAA,GAAsB,WAAW,mBAAA,CAAoB,MAAA;AAAA,MAC9D,CAAA,MAEA;AACI,QAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,IAAA,GACJ;AACI,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAEnB,IAAA,KAAA,CAAM,CAAC,IAAI,IAAA,CAAK,UAAA;AAChB,IAAA,KAAA,CAAM,CAAC,IAAI,IAAA,CAAK,WAAA;AAEhB,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,IAAI,KAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,CAAO,KAAA;AAAA,EACpC;AAAA,EAEA,IAAI,MAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,CAAO,MAAA;AAAA,EACpC;AAAA,EACA,IAAI,UAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AAAA,EACpC;AAAA,EAEA,IAAI,WAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,CAAO,WAAA;AAAA,EACpC;AAAA,EAEA,IAAI,UAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,CAAO,WAAA;AAAA,EACpC;AAAA,EAEA,IAAI,YAAA,GACJ;AACI,IAAA,OAAO,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,EAC/B;AAAA,EAEU,eAAe,MAAA,EACzB;AACI,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,KAAA,EAAO,OAAO,MAAA,EAAQ,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,yBAAA,GACP;AACI,IAAA,IAAI,CAAC,KAAK,mBAAA,EACV;AACI,MAAA,IAAA,CAAK,mBAAA,GAAsB,IAAI,aAAA,CAAc;AAAA,QACzC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,MAAA,EAAQ,sBAAA;AAAA,QACR,mBAAA,EAAqB,KAAA;AAAA,QACrB,SAAA,EAAW,KAAA;AAAA,QACX,aAAA,EAAe;AAAA;AAAA,OAElB,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EAEO,OAAO,KAAA,EAAe,MAAA,EAAgB,aAAa,IAAA,CAAK,UAAA,EAAY,mBAAmB,KAAA,EAC9F;AACI,IAAA,IAAA,CAAK,OAAA,EAAA;AAEL,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,CAAC,YAAA,EAAc,CAAA,KAC1C;AACI,MAAA,IAAI,gBAAA,IAAoB,MAAM,CAAA,EAAG;AAEjC,MAAA,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAAA,IACxD,CAAC,CAAA;AAED,IAAA,IAAI,KAAK,mBAAA,EACT;AACI,MAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,UAAU,CAAA;AAAA,IACpE;AAAA,EACJ;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAEhE,IAAA,IAAI,KAAK,qBAAA,EACT;AACI,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,CAAC,OAAA,KAC5B;AACI,QAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,MACpB,CAAC,CAAA;AAAA,IACL;AAEA,IAAA,IAAI,KAAK,mBAAA,EACT;AACI,MAAA,IAAA,CAAK,oBAAoB,OAAA,EAAQ;AACjC,MAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,IAChB;AAAA,EACJ;AACJ,CAAA;AAAA;AAxMa,aAAA,CAGK,cAAA,GAAsC;AAAA;AAAA,EAEhD,KAAA,EAAO,CAAA;AAAA;AAAA,EAEP,MAAA,EAAQ,CAAA;AAAA;AAAA,EAER,UAAA,EAAY,CAAA;AAAA;AAAA,EAEZ,aAAA,EAAe,CAAA;AAAA;AAAA,EAEf,OAAA,EAAS,KAAA;AAAA;AAAA,EAET,KAAA,EAAO,KAAA;AAAA;AAAA,EAEP,SAAA,EAAW,KAAA;AAAA;AAAA;AAAA,EAEX,MAAA,EAAQ;AACZ,CAAA;AApBG,IAAM,YAAA,GAAN;;;;"}