UNPKG

8.91 kBSource Map (JSON)View Raw
1{"version":3,"file":"CubeResource.js","sources":["../../../src/textures/resources/CubeResource.ts"],"sourcesContent":["import { TARGETS } from '@pixi/constants';\nimport { AbstractMultiResource } from './AbstractMultiResource';\n\nimport type { ISize } from '@pixi/math';\nimport type { ArrayFixed } from '@pixi/utils';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\nimport type { Resource } from './Resource';\n\n/**\n * Constructor options for CubeResource.\n * @memberof PIXI\n */\nexport interface ICubeResourceOptions extends ISize\n{\n /** Whether to auto-load resources */\n autoLoad?: boolean;\n\n /** In case BaseTextures are supplied, whether to copy them or use. */\n linkBaseTexture?: boolean;\n}\n\n/**\n * Resource for a CubeTexture which contains six resources.\n * @memberof PIXI\n */\nexport class CubeResource extends AbstractMultiResource\n{\n items: ArrayFixed<BaseTexture, 6>;\n\n /**\n * In case BaseTextures are supplied, whether to use same resource or bind baseTexture itself.\n * @protected\n */\n linkBaseTexture: boolean;\n\n /**\n * @param {Array<string|PIXI.Resource>} [source] - Collection of URLs or resources\n * to use as the sides of the cube.\n * @param options - ImageResource options\n * @param {number} [options.width] - Width of resource\n * @param {number} [options.height] - Height of resource\n * @param {number} [options.autoLoad=true] - Whether to auto-load resources\n * @param {number} [options.linkBaseTexture=true] - In case BaseTextures are supplied,\n * whether to copy them or use\n */\n constructor(source?: ArrayFixed<string | Resource, 6>, options?: ICubeResourceOptions)\n {\n const { width, height, autoLoad, linkBaseTexture } = options || {};\n\n if (source && source.length !== CubeResource.SIDES)\n {\n throw new Error(`Invalid length. Got ${source.length}, expected 6`);\n }\n\n super(6, { width, height });\n\n for (let i = 0; i < CubeResource.SIDES; i++)\n {\n this.items[i].target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + i;\n }\n\n this.linkBaseTexture = linkBaseTexture !== false;\n\n if (source)\n {\n this.initFromArray(source, options);\n }\n\n if (autoLoad !== false)\n {\n this.load();\n }\n }\n\n /**\n * Add binding.\n * @param baseTexture - parent base texture\n */\n bind(baseTexture: BaseTexture): void\n {\n super.bind(baseTexture);\n\n baseTexture.target = TARGETS.TEXTURE_CUBE_MAP;\n }\n\n addBaseTextureAt(baseTexture: BaseTexture, index: number, linkBaseTexture?: boolean): this\n {\n if (linkBaseTexture === undefined)\n {\n linkBaseTexture = this.linkBaseTexture;\n }\n\n if (!this.items[index])\n {\n throw new Error(`Index ${index} is out of bounds`);\n }\n\n if (!this.linkBaseTexture\n || baseTexture.parentTextureArray\n || Object.keys(baseTexture._glTextures).length > 0)\n {\n // copy mode\n if (baseTexture.resource)\n {\n this.addResourceAt(baseTexture.resource, index);\n }\n else\n {\n throw new Error(`CubeResource does not support copying of renderTexture.`);\n }\n }\n else\n {\n // link mode, the difficult one!\n baseTexture.target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + index;\n baseTexture.parentTextureArray = this.baseTexture;\n\n this.items[index] = baseTexture;\n }\n\n if (baseTexture.valid && !this.valid)\n {\n this.resize(baseTexture.realWidth, baseTexture.realHeight);\n }\n\n this.items[index] = baseTexture;\n\n return this;\n }\n\n /**\n * Upload the resource\n * @param renderer\n * @param _baseTexture\n * @param glTexture\n * @returns {boolean} true is success\n */\n upload(renderer: Renderer, _baseTexture: BaseTexture, glTexture: GLTexture): boolean\n {\n const dirty = this.itemDirtyIds;\n\n for (let i = 0; i < CubeResource.SIDES; i++)\n {\n const side = this.items[i];\n\n if (dirty[i] < side.dirtyId || glTexture.dirtyId < _baseTexture.dirtyId)\n {\n if (side.valid && side.resource)\n {\n side.resource.upload(renderer, side, glTexture);\n dirty[i] = side.dirtyId;\n }\n else if (dirty[i] < -1)\n {\n // either item is not valid yet, either its a renderTexture\n // allocate the memory\n renderer.gl.texImage2D(side.target, 0,\n glTexture.internalFormat,\n _baseTexture.realWidth,\n _baseTexture.realHeight,\n 0,\n _baseTexture.format,\n glTexture.type,\n null);\n dirty[i] = -1;\n }\n }\n }\n\n return true;\n }\n\n /** Number of texture sides to store for CubeResources. */\n static SIDES = 6;\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if source is an array of 6 elements\n */\n static test(source: unknown): source is ArrayFixed<string | Resource, 6>\n {\n return Array.isArray(source) && source.length === CubeResource.SIDES;\n }\n}\n"],"names":["AbstractMultiResource","TARGETS"],"mappings":";;;;;;;AA2BO,MAAM,aAAA,GAAN,cAA2BA,2CAClC,CAAA;AAAA,EAmBI,WAAA,CAAY,QAA2C,OACvD,EAAA;AACI,IAAA,MAAM,EAAE,KAAO,EAAA,MAAA,EAAQ,QAAU,EAAA,eAAA,EAAA,GAAoB,WAAW,EAAC,CAAA;AAEjE,IAAA,IAAI,MAAU,IAAA,MAAA,CAAO,MAAW,KAAA,aAAA,CAAa,KAC7C,EAAA;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,MAAA,CAAO,MAAoB,CAAA,YAAA,CAAA,CAAA,CAAA;AAAA,KACtE;AAEA,IAAA,KAAA,CAAM,CAAG,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,CAAA,CAAA;AAE1B,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,aAAA,CAAa,OAAO,CACxC,EAAA,EAAA;AACI,MAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAA,CAAG,MAAS,GAAAC,iBAAA,CAAQ,2BAA8B,GAAA,CAAA,CAAA;AAAA,KACjE;AAEA,IAAA,IAAA,CAAK,kBAAkB,eAAoB,KAAA,KAAA,CAAA;AAE3C,IAAA,IAAI,MACJ,EAAA;AACI,MAAK,IAAA,CAAA,aAAA,CAAc,QAAQ,OAAO,CAAA,CAAA;AAAA,KACtC;AAEA,IAAA,IAAI,aAAa,KACjB,EAAA;AACI,MAAA,IAAA,CAAK,IAAK,EAAA,CAAA;AAAA,KACd;AAAA,GACJ;AAAA,EAMA,KAAK,WACL,EAAA;AACI,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA,CAAA;AAEtB,IAAA,WAAA,CAAY,SAASA,iBAAQ,CAAA,gBAAA,CAAA;AAAA,GACjC;AAAA,EAEA,gBAAA,CAAiB,WAA0B,EAAA,KAAA,EAAe,eAC1D,EAAA;AACI,IAAA,IAAI,oBAAoB,KACxB,CAAA,EAAA;AACI,MAAA,eAAA,GAAkB,IAAK,CAAA,eAAA,CAAA;AAAA,KAC3B;AAEA,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,KAChB,CAAA,EAAA;AACI,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,KAAwB,CAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,KACrD;AAEA,IAAI,IAAA,CAAC,IAAK,CAAA,eAAA,IACH,WAAY,CAAA,kBAAA,IACZ,MAAO,CAAA,IAAA,CAAK,WAAY,CAAA,WAAW,CAAE,CAAA,MAAA,GAAS,CACrD,EAAA;AAEI,MAAA,IAAI,YAAY,QAChB,EAAA;AACI,QAAK,IAAA,CAAA,aAAA,CAAc,WAAY,CAAA,QAAA,EAAU,KAAK,CAAA,CAAA;AAAA,OAGlD,MAAA;AACI,QAAM,MAAA,IAAI,MAAM,CAAyD,uDAAA,CAAA,CAAA,CAAA;AAAA,OAC7E;AAAA,KAGJ,MAAA;AAEI,MAAY,WAAA,CAAA,MAAA,GAASA,kBAAQ,2BAA8B,GAAA,KAAA,CAAA;AAC3D,MAAA,WAAA,CAAY,qBAAqB,IAAK,CAAA,WAAA,CAAA;AAEtC,MAAA,IAAA,CAAK,MAAM,KAAS,CAAA,GAAA,WAAA,CAAA;AAAA,KACxB;AAEA,IAAA,IAAI,WAAY,CAAA,KAAA,IAAS,CAAC,IAAA,CAAK,KAC/B,EAAA;AACI,MAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,SAAW,EAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AAAA,KAC7D;AAEA,IAAA,IAAA,CAAK,MAAM,KAAS,CAAA,GAAA,WAAA,CAAA;AAEpB,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EASA,MAAA,CAAO,QAAoB,EAAA,YAAA,EAA2B,SACtD,EAAA;AACI,IAAA,MAAM,QAAQ,IAAK,CAAA,YAAA,CAAA;AAEnB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,aAAA,CAAa,OAAO,CACxC,EAAA,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,KAAK,KAAM,CAAA,CAAA,CAAA,CAAA;AAExB,MAAA,IAAI,MAAM,CAAK,CAAA,GAAA,IAAA,CAAK,WAAW,SAAU,CAAA,OAAA,GAAU,aAAa,OAChE,EAAA;AACI,QAAI,IAAA,IAAA,CAAK,KAAS,IAAA,IAAA,CAAK,QACvB,EAAA;AACI,UAAA,IAAA,CAAK,QAAS,CAAA,MAAA,CAAO,QAAU,EAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAC9C,UAAA,KAAA,CAAM,KAAK,IAAK,CAAA,OAAA,CAAA;AAAA,SACpB,MAAA,IACS,KAAM,CAAA,CAAA,CAAA,GAAK,CACpB,CAAA,EAAA;AAGI,UAAA,QAAA,CAAS,GAAG,UAAW,CAAA,IAAA,CAAK,MAAQ,EAAA,CAAA,EAChC,UAAU,cACV,EAAA,YAAA,CAAa,SACb,EAAA,YAAA,CAAa,YACb,CACA,EAAA,YAAA,CAAa,MACb,EAAA,SAAA,CAAU,MACV,IAAI,CAAA,CAAA;AACR,UAAA,KAAA,CAAM,CAAK,CAAA,GAAA,CAAA,CAAA,CAAA;AAAA,SACf;AAAA,OACJ;AAAA,KACJ;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAUA,OAAO,KAAK,MACZ,EAAA;AACI,IAAA,OAAO,MAAM,OAAQ,CAAA,MAAM,CAAK,IAAA,MAAA,CAAO,WAAW,aAAa,CAAA,KAAA,CAAA;AAAA,GACnE;AACJ,CAAA,CAAA;AA/JO,IAAM,YAAN,GAAA,cAAA;AAAM,aAoJF,KAAQ,GAAA,CAAA;;;;"}
\No newline at end of file