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 };