pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 8.45 kB
Source Map (JSON)
{"version":3,"file":"loadTextures.mjs","sources":["../../../../../src/assets/loader/parsers/textures/loadTextures.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../environment/adapter';\nimport { type ImageLike } from '../../../../environment/ImageLike';\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 loadTextures} plugin.\n * @see loadTextures\n * @category assets\n * @advanced\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: ImageLike['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 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 * @category assets\n * @advanced\n */\nexport const loadTextures: LoaderParser<Texture, TextureSourceOptions, LoadTextureConfig> = {\n\n /** used for deprecation purposes */\n name: 'loadTextures',\n id: 'texture',\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, reject) =>\n {\n src = DOMAdapter.get().createImage();\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 src.onerror = reject;\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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"}