starry / backend /libs /three /loaders /ImageBitmapLoader.js
k-l-lambda's picture
feat: add Python ML services (CPU mode) with model download
2b7aae2
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 };