Files
nothoughts/node_modules/pixi.js/lib/assets/loader/parsers/textures/loadTextures.mjs.map
2025-08-04 18:57:35 +02:00

1 line
8.0 KiB
Plaintext

{"version":3,"file":"loadTextures.mjs","sources":["../../../../../src/assets/loader/parsers/textures/loadTextures.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../environment/adapter';\nimport { ExtensionType } from '../../../../extensions/Extensions';\nimport { ImageSource } from '../../../../rendering/renderers/shared/texture/sources/ImageSource';\nimport { getResolutionOfUrl } from '../../../../utils/network/getResolutionOfUrl';\nimport { checkDataUrl } from '../../../utils/checkDataUrl';\nimport { checkExtension } from '../../../utils/checkExtension';\nimport { WorkerManager } from '../../workers/WorkerManager';\nimport { LoaderParserPriority } from '../LoaderParser';\nimport { createTexture } from './utils/createTexture';\n\nimport type { TextureSourceOptions } from '../../../../rendering/renderers/shared/texture/sources/TextureSource';\nimport type { Texture } from '../../../../rendering/renderers/shared/texture/Texture';\nimport type { ResolvedAsset } from '../../../types';\nimport type { Loader } from '../../Loader';\nimport type { LoaderParser } from '../LoaderParser';\n\nconst validImageExtensions = ['.jpeg', '.jpg', '.png', '.webp', '.avif'];\nconst validImageMIMEs = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/avif',\n];\n\n/**\n * Configuration for the [loadTextures]{@link assets.loadTextures} plugin.\n * @see assets.loadTextures\n * @memberof assets\n */\nexport interface LoadTextureConfig\n{\n /**\n * When set to `true`, loading and decoding images will happen with Worker thread,\n * if available on the browser. This is much more performant as network requests\n * and decoding can be expensive on the CPU. However, not all environments support\n * Workers, in some cases it can be helpful to disable by setting to `false`.\n * @default true\n */\n preferWorkers: boolean;\n /**\n * When set to `true`, loading and decoding images will happen with `createImageBitmap`,\n * otherwise it will use `new Image()`.\n * @default true\n */\n preferCreateImageBitmap: boolean;\n /**\n * The crossOrigin value to use for images when `preferCreateImageBitmap` is `false`.\n * @default 'anonymous'\n */\n crossOrigin: HTMLImageElement['crossOrigin'];\n}\n\n/**\n * Returns a promise that resolves an ImageBitmaps.\n * This function is designed to be used by a worker.\n * Part of WorkerManager!\n * @param url - The image to load an image bitmap for\n * @ignore\n */\nexport async function loadImageBitmap(url: string, asset?: ResolvedAsset<TextureSourceOptions<any>>): Promise<ImageBitmap>\n{\n const response = await DOMAdapter.get().fetch(url);\n\n if (!response.ok)\n {\n throw new Error(`[loadImageBitmap] Failed to fetch ${url}: `\n + `${response.status} ${response.statusText}`);\n }\n\n const imageBlob = await response.blob();\n\n return asset?.data?.alphaMode === 'premultiplied-alpha'\n ? createImageBitmap(imageBlob, { premultiplyAlpha: 'none' })\n : createImageBitmap(imageBlob);\n}\n\n/**\n * A simple plugin to load our textures!\n * This makes use of imageBitmaps where available.\n * We load the `ImageBitmap` on a different thread using workers if possible.\n * We can then use the `ImageBitmap` as a source for a Pixi texture\n *\n * You can customize the behavior of this loader by setting the `config` property.\n * Which can be found [here]{@link assets.LoadTextureConfig}\n * ```js\n * // Set the config\n * import { loadTextures } from 'pixi.js';\n *\n * loadTextures.config = {\n * // If true we will use a worker to load the ImageBitmap\n * preferWorkers: true,\n * // If false we will use new Image() instead of createImageBitmap,\n * // we'll also disable the use of workers as it requires createImageBitmap\n * preferCreateImageBitmap: true,\n * crossOrigin: 'anonymous',\n * };\n * ```\n * @memberof assets\n */\nexport const loadTextures: LoaderParser<Texture, TextureSourceOptions, LoadTextureConfig> = {\n\n name: 'loadTextures',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n name: 'loadTextures',\n },\n\n config: {\n preferWorkers: true,\n preferCreateImageBitmap: true,\n crossOrigin: 'anonymous',\n },\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validImageMIMEs) || checkExtension(url, validImageExtensions);\n },\n\n async load(url: string, asset: ResolvedAsset<TextureSourceOptions>, loader: Loader): Promise<Texture>\n {\n let src: any = null;\n\n if (globalThis.createImageBitmap && this.config.preferCreateImageBitmap)\n {\n if (this.config.preferWorkers && await WorkerManager.isImageBitmapSupported())\n {\n src = await WorkerManager.loadImageBitmap(url, asset);\n }\n else\n {\n src = await loadImageBitmap(url, asset);\n }\n }\n else\n {\n src = await new Promise((resolve) =>\n {\n src = new Image();\n src.crossOrigin = this.config.crossOrigin;\n\n src.src = url;\n if (src.complete)\n {\n resolve(src);\n }\n else\n {\n src.onload = (): void =>\n {\n resolve(src);\n };\n }\n });\n }\n\n const base = new ImageSource({\n resource: src,\n alphaMode: 'premultiply-alpha-on-upload',\n resolution: asset.data?.resolution || getResolutionOfUrl(url),\n ...asset.data,\n });\n\n return createTexture(base, loader, url);\n },\n\n unload(texture: Texture): void\n {\n texture.destroy(true);\n }\n};\n"],"names":[],"mappings":"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"}