starry / backend /libs /three /loaders /ImageLoader.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';
import { createElementNS } from '../utils.js';
class ImageLoader extends Loader {
constructor(manager) {
super(manager);
}
load(url, onLoad, onProgress, onError) {
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 image = createElementNS('img');
function onImageLoad() {
removeEventListeners();
Cache.add(url, this);
if (onLoad) onLoad(this);
scope.manager.itemEnd(url);
}
function onImageError(event) {
removeEventListeners();
if (onError) onError(event);
scope.manager.itemError(url);
scope.manager.itemEnd(url);
}
function removeEventListeners() {
image.removeEventListener('load', onImageLoad, false);
image.removeEventListener('error', onImageError, false);
}
image.addEventListener('load', onImageLoad, false);
image.addEventListener('error', onImageError, false);
if (url.substr(0, 5) !== 'data:') {
if (this.crossOrigin !== undefined) image.crossOrigin = this.crossOrigin;
}
scope.manager.itemStart(url);
image.src = url;
return image;
}
}
export { ImageLoader };