|
@@ -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);
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+};
|