diff --git a/examples/js/loaders/ImageBitmapLoader.js b/examples/js/loaders/ImageBitmapLoader.js new file mode 100644 index 0000000000000000000000000000000000000000..89e4fc130ab0622e55e7413cd92a539406f939c0 --- /dev/null +++ b/examples/js/loaders/ImageBitmapLoader.js @@ -0,0 +1,76 @@ +'use strict'; + +/** + * @author thespite / http://clicktorelease.com/ + */ + +THREE.ImageBitmapLoader = function (manager) { + + this.manager = manager !== undefined ? manager : THREE.DefaultLoadingManager; + this.options = {}; + +}; + +THREE.ImageBitmapLoader.prototype = { + + constructor: THREE.ImageBitmapLoader, + + setOptions: function setOptions(options) { + + this.options = options; + return this; + + }, + + load: function load(url, onLoad, onProgress, onError) { + + if (url === undefined) url = ''; + + if (this.path !== undefined) url = this.path + url; + + var scope = this; + + var cached = THREE.Cache.get(url); + + if (cached !== undefined) { + + scope.manager.itemStart(url); + + setTimeout(function () { + + if (onLoad) onLoad(cached); + + scope.manager.itemEnd(url); + + }, 0); + + return cached; + } + + fetch(url).then(function (res) { + + return res.blob(); + + }).then(function (res) { + + return createImageBitmap(res, scope.options); + + }).then(function (res) { + + THREE.Cache.add(url, res); + + if (onLoad) onLoad(res); + + scope.manager.itemEnd(url); + + }).catch(function (e) { + + if (onError) onError(e); + + scope.manager.itemEnd(url); + scope.manager.itemError(url); + + }); + } + +};