{"version":3,"file":"NodeCanvasResource.mjs","sources":["../../src/adapter/NodeCanvasResource.ts"],"sourcesContent":["import { ALPHA_MODES, Resource, utils } from 'pixijs/core';\nimport { NodeCanvasElement } from './NodeCanvasElement';\n\nimport type { BaseTexture, GLTexture, Renderer } from 'pixijs/core';\n\n/**\n * A canvas resource using node-canvas\n * used for images, svg, and bitmap text\n * @memberof PIXI\n */\nexport class NodeCanvasResource extends Resource\n{\n    /**\n     * The source element.\n     * @member {NodeCanvasElement}\n     * @readonly\n     */\n    public source: NodeCanvasElement;\n\n    /**\n     * If set to `true`, will force `texImage2D` over `texSubImage2D` for uploading.\n     * Certain types of media (e.g. video) using `texImage2D` is more performant.\n     * @default false\n     * @private\n     */\n    public noSubImage: boolean;\n\n    constructor(source: NodeCanvasElement)\n    {\n        const sourceAny = source as any;\n        const width = sourceAny.naturalWidth || sourceAny.videoWidth || sourceAny.width;\n        const height = sourceAny.naturalHeight || sourceAny.videoHeight || sourceAny.height;\n\n        super(width, height);\n\n        this.source = source;\n        this.noSubImage = false;\n    }\n\n    override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture, source?: HTMLCanvasElement): boolean\n    {\n        const gl = renderer.gl;\n        const width = baseTexture.realWidth;\n        const height = baseTexture.realHeight;\n\n        source = (source || this.source) as HTMLCanvasElement;\n\n        gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, baseTexture.alphaMode === ALPHA_MODES.UNPACK);\n\n        if (!this.noSubImage\n             && baseTexture.target === gl.TEXTURE_2D\n             && glTexture.width === width\n             && glTexture.height === height)\n        {\n            gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, baseTexture.format, glTexture.type, source);\n        }\n        else\n        {\n            glTexture.width = width;\n            glTexture.height = height;\n\n            gl.texImage2D(baseTexture.target, 0, glTexture.internalFormat, baseTexture.format, glTexture.type, source);\n        }\n\n        return true;\n    }\n\n    /**\n     * Checks if source width/height was changed, resize can cause extra baseTexture update.\n     * Triggers one update in any case.\n     */\n    update(): void\n    {\n        if (this.destroyed)\n        {\n            return;\n        }\n\n        const source = this.source as any;\n\n        const width = source.naturalWidth || source.videoWidth || source.width;\n        const height = source.naturalHeight || source.videoHeight || source.height;\n\n        this.resize(width, height);\n\n        super.update();\n    }\n\n    dispose(): void\n    {\n        this.source = null;\n    }\n\n    static override test(source: unknown): source is NodeCanvasElement\n    {\n        return source instanceof NodeCanvasElement;\n    }\n\n    /**\n     * Set cross origin based detecting the url and the crossorigin\n     * @param element - Element to apply crossOrigin\n     * @param url - URL to check\n     * @param crossorigin - Cross origin value to use\n     */\n    static crossOrigin(element: HTMLImageElement | HTMLVideoElement, url: string, crossorigin?: boolean | string): void\n    {\n        if (crossorigin === undefined && !url.startsWith('data:'))\n        {\n            element.crossOrigin = utils.determineCrossOrigin(url);\n        }\n        else if (crossorigin !== false)\n        {\n            element.crossOrigin = typeof crossorigin === 'string' ? crossorigin : 'anonymous';\n        }\n    }\n}\n"],"names":[],"mappings":"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"}