{"version":3,"file":"CubeResource.mjs","sources":["../../../src/textures/resources/CubeResource.ts"],"sourcesContent":["import { TARGETS } from 'pixijs/constants';\nimport { AbstractMultiResource } from './AbstractMultiResource';\n\nimport type { ISize } from 'pixijs/math';\nimport type { ArrayFixed } from 'pixijs/utils';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\nimport type { Resource } from './Resource';\n\n/** Constructor options for CubeResource */\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":[],"mappings":"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"}