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

82 lines
2.8 KiB
JavaScript

'use strict';
var adapter = require('../../../../environment/adapter.js');
var Extensions = require('../../../../extensions/Extensions.js');
var ImageSource = require('../../../../rendering/renderers/shared/texture/sources/ImageSource.js');
var getResolutionOfUrl = require('../../../../utils/network/getResolutionOfUrl.js');
var checkDataUrl = require('../../../utils/checkDataUrl.js');
var checkExtension = require('../../../utils/checkExtension.js');
var WorkerManager = require('../../workers/WorkerManager.js');
var LoaderParser = require('../LoaderParser.js');
var createTexture = require('./utils/createTexture.js');
"use strict";
const validImageExtensions = [".jpeg", ".jpg", ".png", ".webp", ".avif"];
const validImageMIMEs = [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
];
async function loadImageBitmap(url, asset) {
const response = await adapter.DOMAdapter.get().fetch(url);
if (!response.ok) {
throw new Error(`[loadImageBitmap] Failed to fetch ${url}: ${response.status} ${response.statusText}`);
}
const imageBlob = await response.blob();
return asset?.data?.alphaMode === "premultiplied-alpha" ? createImageBitmap(imageBlob, { premultiplyAlpha: "none" }) : createImageBitmap(imageBlob);
}
const loadTextures = {
name: "loadTextures",
extension: {
type: Extensions.ExtensionType.LoadParser,
priority: LoaderParser.LoaderParserPriority.High,
name: "loadTextures"
},
config: {
preferWorkers: true,
preferCreateImageBitmap: true,
crossOrigin: "anonymous"
},
test(url) {
return checkDataUrl.checkDataUrl(url, validImageMIMEs) || checkExtension.checkExtension(url, validImageExtensions);
},
async load(url, asset, loader) {
let src = null;
if (globalThis.createImageBitmap && this.config.preferCreateImageBitmap) {
if (this.config.preferWorkers && await WorkerManager.WorkerManager.isImageBitmapSupported()) {
src = await WorkerManager.WorkerManager.loadImageBitmap(url, asset);
} else {
src = await loadImageBitmap(url, asset);
}
} else {
src = await new Promise((resolve) => {
src = new Image();
src.crossOrigin = this.config.crossOrigin;
src.src = url;
if (src.complete) {
resolve(src);
} else {
src.onload = () => {
resolve(src);
};
}
});
}
const base = new ImageSource.ImageSource({
resource: src,
alphaMode: "premultiply-alpha-on-upload",
resolution: asset.data?.resolution || getResolutionOfUrl.getResolutionOfUrl(url),
...asset.data
});
return createTexture.createTexture(base, loader, url);
},
unload(texture) {
texture.destroy(true);
}
};
exports.loadImageBitmap = loadImageBitmap;
exports.loadTextures = loadTextures;
//# sourceMappingURL=loadTextures.js.map