Spaces:
Running
Running
File size: 1,722 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | import { Cache } from './Cache.js';
import { Loader } from './Loader.js';
class ImageBitmapLoader extends Loader {
constructor(manager) {
super(manager);
if (typeof createImageBitmap === 'undefined') {
console.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.');
}
if (typeof fetch === 'undefined') {
console.warn('THREE.ImageBitmapLoader: fetch() not supported.');
}
this.options = { premultiplyAlpha: 'none' };
}
setOptions(options) {
this.options = options;
return this;
}
load(url, onLoad, onProgress, onError) {
if (url === undefined) url = '';
if (this.path !== undefined) url = this.path + url;
url = this.manager.resolveURL(url);
const scope = this;
const cached = Cache.get(url);
if (cached !== undefined) {
scope.manager.itemStart(url);
setTimeout(function () {
if (onLoad) onLoad(cached);
scope.manager.itemEnd(url);
}, 0);
return cached;
}
const fetchOptions = {};
fetchOptions.credentials = this.crossOrigin === 'anonymous' ? 'same-origin' : 'include';
fetchOptions.headers = this.requestHeader;
fetch(url, fetchOptions)
.then(function (res) {
return res.blob();
})
.then(function (blob) {
return createImageBitmap(blob, Object.assign(scope.options, { colorSpaceConversion: 'none' }));
})
.then(function (imageBitmap) {
Cache.add(url, imageBitmap);
if (onLoad) onLoad(imageBitmap);
scope.manager.itemEnd(url);
})
.catch(function (e) {
if (onError) onError(e);
scope.manager.itemError(url);
scope.manager.itemEnd(url);
});
scope.manager.itemStart(url);
}
}
ImageBitmapLoader.prototype.isImageBitmapLoader = true;
export { ImageBitmapLoader };
|