{"version":3,"file":"ImageBitmapResource.mjs","sources":["../../../src/textures/resources/ImageBitmapResource.ts"],"sourcesContent":["import { ALPHA_MODES } from 'pixijs/constants';\nimport { settings } from 'pixijs/settings';\nimport { BaseImageResource } from './BaseImageResource';\n\nimport type { ICanvas } from 'pixijs/settings';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\nexport interface IImageBitmapResourceOptions\n{\n    /** Start loading process automatically when constructed. */\n    autoLoad?: boolean;\n\n    /** Load image using cross origin. */\n    crossOrigin?: boolean;\n\n    /** Alpha mode used when creating the ImageBitmap. */\n    alphaMode?: ALPHA_MODES;\n}\n\n/**\n * Resource type for ImageBitmap.\n * @memberof PIXI\n */\nexport class ImageBitmapResource extends BaseImageResource\n{\n    /** URL of the image source. */\n    url: string | null;\n\n    /**\n     * Load image using cross origin.\n     * @default false\n     */\n    crossOrigin: boolean;\n\n    /**\n     * Controls texture alphaMode field\n     * Copies from options\n     * Default is `null`, copies option from baseTexture\n     * @readonly\n     */\n    alphaMode: ALPHA_MODES | null;\n\n    /**\n     * Promise when loading.\n     * @default null\n     */\n    private _load: Promise<ImageBitmapResource>;\n\n    /**\n     * @param source - ImageBitmap or URL to use\n     * @param options\n     * @param {boolean} [options.autoLoad=true] - Start loading process automatically when constructed.\n     * @param {boolean} [options.crossOrigin=true] - Load image using cross origin.\n     * @param {PIXI.ALPHA_MODES} [options.alphaMode=null] - Alpha mode used when creating the ImageBitmap.\n     */\n    constructor(source: ImageBitmap | string, options?: IImageBitmapResourceOptions)\n    {\n        options = options || {};\n\n        let baseSource;\n        let url;\n\n        if (typeof source === 'string')\n        {\n            baseSource = ImageBitmapResource.EMPTY;\n            url = source;\n        }\n        else\n        {\n            baseSource = source;\n            url = null;\n        }\n        // Using super() in if() can cause transpilation problems in some cases, so take it out of if().\n        // See https://github.com/pixijs/pixijs/pull/9093 for details.\n        super(baseSource);\n        this.url = url;\n\n        this.crossOrigin = options.crossOrigin ?? true;\n        this.alphaMode = typeof options.alphaMode === 'number' ? options.alphaMode : null;\n\n        this._load = null;\n\n        if (options.autoLoad !== false)\n        {\n            this.load();\n        }\n    }\n\n    load(): Promise<ImageBitmapResource>\n    {\n        if (this._load)\n        {\n            return this._load;\n        }\n\n        this._load = new Promise(async (resolve, reject) =>\n        {\n            if (this.url === null)\n            {\n                resolve(this);\n\n                return;\n            }\n\n            try\n            {\n                const response = await settings.ADAPTER.fetch(this.url, {\n                    mode: this.crossOrigin ? 'cors' : 'no-cors'\n                });\n\n                if (this.destroyed) return;\n\n                const imageBlob = await response.blob();\n\n                if (this.destroyed) return;\n\n                const imageBitmap = await createImageBitmap(imageBlob, {\n                    premultiplyAlpha: this.alphaMode === null || this.alphaMode === ALPHA_MODES.UNPACK\n                        ? 'premultiply' : 'none',\n                });\n\n                if (this.destroyed) return;\n\n                this.source = imageBitmap;\n                this.update();\n\n                resolve(this);\n            }\n            catch (e)\n            {\n                if (this.destroyed) return;\n\n                reject(e);\n                this.onError.emit(e);\n            }\n        });\n\n        return this._load;\n    }\n\n    /**\n     * Upload the image bitmap resource to GPU.\n     * @param renderer - Renderer to upload to\n     * @param baseTexture - BaseTexture for this resource\n     * @param glTexture - GLTexture to use\n     * @returns {boolean} true is success\n     */\n    override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture): boolean\n    {\n        if (!(this.source instanceof ImageBitmap))\n        {\n            this.load();\n\n            return false;\n        }\n\n        if (typeof this.alphaMode === 'number')\n        {\n            baseTexture.alphaMode = this.alphaMode;\n        }\n\n        return super.upload(renderer, baseTexture, glTexture);\n    }\n\n    /** Destroys this resource. */\n    override dispose(): void\n    {\n        if (this.source instanceof ImageBitmap)\n        {\n            this.source.close();\n        }\n\n        super.dispose();\n\n        this._load = null;\n    }\n\n    /**\n     * Used to auto-detect the type of resource.\n     * @param {*} source - The source object\n     * @returns {boolean} `true` if current environment support ImageBitmap, and source is string or ImageBitmap\n     */\n    static override test(source: unknown): source is string | ImageBitmap\n    {\n        return !!globalThis.createImageBitmap && typeof ImageBitmap !== 'undefined'\n            && (typeof source === 'string' || source instanceof ImageBitmap);\n    }\n\n    /**\n     * Cached empty placeholder canvas.\n     * @see EMPTY\n     */\n    private static _EMPTY: ICanvas;\n\n    /**\n     * ImageBitmap cannot be created synchronously, so a empty placeholder canvas is needed when loading from URLs.\n     * Only for internal usage.\n     * @returns The cached placeholder canvas.\n     */\n    private static get EMPTY(): ICanvas\n    {\n        ImageBitmapResource._EMPTY = ImageBitmapResource._EMPTY ?? settings.ADAPTER.createCanvas(0, 0);\n\n        return ImageBitmapResource._EMPTY;\n    }\n}\n"],"names":[],"mappings":"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"}