Spaces:
Running
Running
| 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 }; | |