UNPKG

7.04 kBSource Map (JSON)View Raw
1{"version":3,"file":"BaseImageResource.mjs","sources":["../../../src/textures/resources/BaseImageResource.ts"],"sourcesContent":["import { ALPHA_MODES } from '@pixi/constants';\nimport { determineCrossOrigin } from '@pixi/utils';\nimport { Resource } from './Resource';\n\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture, ImageSource } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\n/**\n * Base for all the image/canvas resources.\n * @memberof PIXI\n */\nexport class BaseImageResource extends Resource\n{\n /**\n * The source element.\n * @member {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas}\n * @readonly\n */\n public source: ImageSource;\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 /**\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} source\n */\n constructor(source: ImageSource)\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 /**\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 = determineCrossOrigin(url);\n }\n else if (crossorigin !== false)\n {\n element.crossOrigin = typeof crossorigin === 'string' ? crossorigin : 'anonymous';\n }\n }\n\n /**\n * Upload the texture to the GPU.\n * @param renderer - Upload to the renderer\n * @param baseTexture - Reference to parent texture\n * @param glTexture\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} [source] - (optional)\n * @returns - true is success\n */\n override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture, source?: ImageSource): boolean\n {\n const gl = renderer.gl;\n const width = baseTexture.realWidth;\n const height = baseTexture.realHeight;\n\n source = source || this.source;\n\n if (typeof HTMLImageElement !== 'undefined' && source instanceof HTMLImageElement)\n {\n if (!source.complete || source.naturalWidth === 0)\n {\n return false;\n }\n }\n else if (typeof HTMLVideoElement !== 'undefined' && source instanceof HTMLVideoElement)\n {\n if (source.readyState <= 1 && source.buffered.length === 0)\n {\n return false;\n }\n }\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 override 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 /** Destroy this {@link PIXI.BaseImageResource} */\n override dispose(): void\n {\n this.source = null;\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file