|
@@ -8057,15 +8057,21 @@ var BABYLON;
|
|
|
url = Tools.PreprocessUrl(url);
|
|
|
var img = new Image();
|
|
|
Tools.SetCorsBehavior(url, img);
|
|
|
- img.onload = function () {
|
|
|
+ var loadHandler = function () {
|
|
|
+ img.removeEventListener("load", loadHandler);
|
|
|
+ img.removeEventListener("error", errorHandler);
|
|
|
onLoad(img);
|
|
|
};
|
|
|
- img.onerror = function (err) {
|
|
|
+ var errorHandler = function (err) {
|
|
|
+ img.removeEventListener("load", loadHandler);
|
|
|
+ img.removeEventListener("error", errorHandler);
|
|
|
Tools.Error("Error while trying to load image: " + url);
|
|
|
if (onError) {
|
|
|
onError("Error while trying to load image: " + url, err);
|
|
|
}
|
|
|
};
|
|
|
+ img.addEventListener("load", loadHandler);
|
|
|
+ img.addEventListener("error", errorHandler);
|
|
|
var noIndexedDB = function () {
|
|
|
img.src = url;
|
|
|
};
|
|
@@ -8141,7 +8147,9 @@ var BABYLON;
|
|
|
request.addEventListener("progress", onProgress);
|
|
|
}
|
|
|
var onLoadEnd = function () {
|
|
|
+ request.removeEventListener("loadend", onLoadEnd);
|
|
|
fileRequest.onCompleteObservable.notifyObservers(fileRequest);
|
|
|
+ fileRequest.onCompleteObservable.clear();
|
|
|
};
|
|
|
request.addEventListener("loadend", onLoadEnd);
|
|
|
var onReadyStateChange = function () {
|
|
@@ -9319,84 +9327,47 @@ var BABYLON;
|
|
|
this._reject(e);
|
|
|
}
|
|
|
}
|
|
|
- Object.defineProperty(InternalPromise.prototype, "state", {
|
|
|
- get: function () {
|
|
|
- return this._state;
|
|
|
- },
|
|
|
- enumerable: true,
|
|
|
- configurable: true
|
|
|
- });
|
|
|
- Object.defineProperty(InternalPromise.prototype, "isFulfilled", {
|
|
|
- get: function () {
|
|
|
- return this._state === PromiseStates.Fulfilled;
|
|
|
- },
|
|
|
- enumerable: true,
|
|
|
- configurable: true
|
|
|
- });
|
|
|
- Object.defineProperty(InternalPromise.prototype, "isRejected", {
|
|
|
- get: function () {
|
|
|
- return this._state === PromiseStates.Rejected;
|
|
|
- },
|
|
|
- enumerable: true,
|
|
|
- configurable: true
|
|
|
- });
|
|
|
- Object.defineProperty(InternalPromise.prototype, "isPending", {
|
|
|
- get: function () {
|
|
|
- return this._state === PromiseStates.Pending;
|
|
|
- },
|
|
|
- enumerable: true,
|
|
|
- configurable: true
|
|
|
- });
|
|
|
- InternalPromise.prototype.value = function () {
|
|
|
- if (!this.isFulfilled) {
|
|
|
- throw new Error("Promise is not fulfilled");
|
|
|
- }
|
|
|
- return this._result;
|
|
|
- };
|
|
|
- InternalPromise.prototype.reason = function () {
|
|
|
- if (!this.isRejected) {
|
|
|
- throw new Error("Promise is not rejected");
|
|
|
- }
|
|
|
- return this._reason;
|
|
|
- };
|
|
|
InternalPromise.prototype.catch = function (onRejected) {
|
|
|
return this.then(undefined, onRejected);
|
|
|
};
|
|
|
InternalPromise.prototype.then = function (onFulfilled, onRejected) {
|
|
|
+ var _this = this;
|
|
|
var newPromise = new InternalPromise();
|
|
|
newPromise._onFulfilled = onFulfilled;
|
|
|
newPromise._onRejected = onRejected;
|
|
|
// Composition
|
|
|
this._children.push(newPromise);
|
|
|
if (this._state !== PromiseStates.Pending) {
|
|
|
- if (this._state === PromiseStates.Fulfilled || this._rejectWasConsumed) {
|
|
|
- var returnedValue = newPromise._resolve(this._result);
|
|
|
- if (returnedValue !== undefined && returnedValue !== null) {
|
|
|
- if (returnedValue._state !== undefined) {
|
|
|
- var returnedPromise = returnedValue;
|
|
|
- newPromise._children.push(returnedPromise);
|
|
|
- newPromise = returnedPromise;
|
|
|
- }
|
|
|
- else {
|
|
|
- newPromise._result = returnedValue;
|
|
|
+ BABYLON.Tools.SetImmediate(function () {
|
|
|
+ if (_this._state === PromiseStates.Fulfilled || _this._rejectWasConsumed) {
|
|
|
+ var returnedValue = newPromise._resolve(_this._result);
|
|
|
+ if (returnedValue !== undefined && returnedValue !== null) {
|
|
|
+ if (returnedValue._state !== undefined) {
|
|
|
+ var returnedPromise = returnedValue;
|
|
|
+ newPromise._children.push(returnedPromise);
|
|
|
+ newPromise = returnedPromise;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ newPromise._result = returnedValue;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
- newPromise._reject(this._reason);
|
|
|
- }
|
|
|
+ else {
|
|
|
+ newPromise._reject(_this._reason);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
return newPromise;
|
|
|
};
|
|
|
InternalPromise.prototype._moveChildren = function (children) {
|
|
|
(_a = this._children).push.apply(_a, children.splice(0, children.length));
|
|
|
- if (this.isFulfilled) {
|
|
|
+ if (this._state === PromiseStates.Fulfilled) {
|
|
|
for (var _i = 0, _b = this._children; _i < _b.length; _i++) {
|
|
|
var child = _b[_i];
|
|
|
child._resolve(this._result);
|
|
|
}
|
|
|
}
|
|
|
- else if (this.isRejected) {
|
|
|
+ else if (this._state === PromiseStates.Rejected) {
|
|
|
for (var _c = 0, _d = this._children; _c < _d.length; _c++) {
|
|
|
var child = _d[_c];
|
|
|
child._reject(this._reason);
|
|
@@ -9426,6 +9397,9 @@ var BABYLON;
|
|
|
var child = _a[_i];
|
|
|
child._resolve(value);
|
|
|
}
|
|
|
+ this._children.length = 0;
|
|
|
+ delete this._onFulfilled;
|
|
|
+ delete this._onRejected;
|
|
|
return returnedValue;
|
|
|
}
|
|
|
catch (e) {
|
|
@@ -9437,8 +9411,13 @@ var BABYLON;
|
|
|
this._state = PromiseStates.Rejected;
|
|
|
this._reason = reason;
|
|
|
if (this._onRejected) {
|
|
|
- this._onRejected(reason);
|
|
|
- this._rejectWasConsumed = true;
|
|
|
+ try {
|
|
|
+ this._onRejected(reason);
|
|
|
+ this._rejectWasConsumed = true;
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
+ reason = e;
|
|
|
+ }
|
|
|
}
|
|
|
for (var _i = 0, _a = this._children; _i < _a.length; _i++) {
|
|
|
var child = _a[_i];
|
|
@@ -9449,6 +9428,9 @@ var BABYLON;
|
|
|
child._reject(reason);
|
|
|
}
|
|
|
}
|
|
|
+ this._children.length = 0;
|
|
|
+ delete this._onFulfilled;
|
|
|
+ delete this._onRejected;
|
|
|
};
|
|
|
InternalPromise.resolve = function (value) {
|
|
|
var newPromise = new InternalPromise();
|
|
@@ -9464,7 +9446,7 @@ var BABYLON;
|
|
|
}
|
|
|
return null;
|
|
|
}, function (reason) {
|
|
|
- if (!agregator.rootPromise.isRejected) {
|
|
|
+ if (agregator.rootPromise._state !== PromiseStates.Rejected) {
|
|
|
agregator.rootPromise._reject(reason);
|
|
|
}
|
|
|
});
|
|
@@ -26304,7 +26286,6 @@ var BABYLON;
|
|
|
this.delayLoad();
|
|
|
};
|
|
|
Texture.prototype.delayLoad = function () {
|
|
|
- var _this = this;
|
|
|
if (this.delayLoadState !== BABYLON.Engine.DELAYLOADSTATE_NOTLOADED) {
|
|
|
return;
|
|
|
}
|
|
@@ -26321,20 +26302,17 @@ var BABYLON;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- if (this._texture.isReady) {
|
|
|
- BABYLON.Tools.SetImmediate(function () {
|
|
|
- if (!_this._delayedOnLoad) {
|
|
|
- return;
|
|
|
- }
|
|
|
- _this._delayedOnLoad();
|
|
|
- });
|
|
|
- }
|
|
|
- else {
|
|
|
- if (this._delayedOnLoad) {
|
|
|
+ if (this._delayedOnLoad) {
|
|
|
+ if (this._texture.isReady) {
|
|
|
+ BABYLON.Tools.SetImmediate(this._delayedOnLoad);
|
|
|
+ }
|
|
|
+ else {
|
|
|
this._texture.onLoadedObservable.add(this._delayedOnLoad);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ this._delayedOnLoad = null;
|
|
|
+ this._delayedOnError = null;
|
|
|
};
|
|
|
Texture.prototype.updateSamplingMode = function (samplingMode) {
|
|
|
if (!this._texture) {
|
|
@@ -51321,7 +51299,7 @@ var BABYLON;
|
|
|
|
|
|
|
|
|
|
|
|
-//# sourceMappingURL=babylon.iParticleEmitterType.js.map
|
|
|
+//# sourceMappingURL=babylon.IParticleEmitterType.js.map
|
|
|
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -88844,11 +88822,9 @@ var BABYLON;
|
|
|
this._loader.dispose();
|
|
|
this._loader = null;
|
|
|
}
|
|
|
- this.onParsedObservable.clear();
|
|
|
this.onMeshLoadedObservable.clear();
|
|
|
this.onTextureLoadedObservable.clear();
|
|
|
this.onMaterialLoadedObservable.clear();
|
|
|
- this.onCompleteObservable.clear();
|
|
|
this.onDisposeObservable.notifyObservers(this);
|
|
|
this.onDisposeObservable.clear();
|
|
|
};
|
|
@@ -88901,6 +88877,7 @@ var BABYLON;
|
|
|
};
|
|
|
}
|
|
|
this.onParsedObservable.notifyObservers(parsedData);
|
|
|
+ this.onParsedObservable.clear();
|
|
|
return parsedData;
|
|
|
};
|
|
|
GLTFFileLoader.prototype._getLoader = function (loaderData) {
|
|
@@ -88937,8 +88914,14 @@ var BABYLON;
|
|
|
loader.onMeshLoadedObservable.add(function (mesh) { return _this.onMeshLoadedObservable.notifyObservers(mesh); });
|
|
|
loader.onTextureLoadedObservable.add(function (texture) { return _this.onTextureLoadedObservable.notifyObservers(texture); });
|
|
|
loader.onMaterialLoadedObservable.add(function (material) { return _this.onMaterialLoadedObservable.notifyObservers(material); });
|
|
|
- loader.onCompleteObservable.add(function () { return _this.onCompleteObservable.notifyObservers(_this); });
|
|
|
loader.onExtensionLoadedObservable.add(function (extension) { return _this.onExtensionLoadedObservable.notifyObservers(extension); });
|
|
|
+ loader.onCompleteObservable.add(function () {
|
|
|
+ _this.onMeshLoadedObservable.clear();
|
|
|
+ _this.onTextureLoadedObservable.clear();
|
|
|
+ _this.onMaterialLoadedObservable.clear();
|
|
|
+ _this.onCompleteObservable.notifyObservers(_this);
|
|
|
+ _this.onCompleteObservable.clear();
|
|
|
+ });
|
|
|
return loader;
|
|
|
};
|
|
|
GLTFFileLoader._parseBinary = function (data) {
|
|
@@ -91333,9 +91316,9 @@ var BABYLON;
|
|
|
return;
|
|
|
}
|
|
|
this._disposed = true;
|
|
|
- this._abortRequests();
|
|
|
- this._releaseResources();
|
|
|
this.onDisposeObservable.notifyObservers(this);
|
|
|
+ this.onDisposeObservable.clear();
|
|
|
+ this._clear();
|
|
|
};
|
|
|
GLTFLoader.prototype.importMeshAsync = function (meshesNames, scene, data, rootUrl, onProgress) {
|
|
|
var _this = this;
|
|
@@ -91375,12 +91358,7 @@ var BABYLON;
|
|
|
GLTFLoader.prototype._loadAsync = function (nodes, scene, data, rootUrl, onProgress) {
|
|
|
var _this = this;
|
|
|
return Promise.resolve().then(function () {
|
|
|
- for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
|
|
|
- var name_1 = _a[_i];
|
|
|
- var extension = GLTFLoader._Factories[name_1](_this);
|
|
|
- _this._extensions[name_1] = extension;
|
|
|
- _this.onExtensionLoadedObservable.notifyObservers(extension);
|
|
|
- }
|
|
|
+ _this._loadExtensions();
|
|
|
_this._babylonScene = scene;
|
|
|
_this._rootUrl = rootUrl;
|
|
|
_this._progressCallback = onProgress;
|
|
@@ -91406,22 +91384,32 @@ var BABYLON;
|
|
|
BABYLON.Tools.SetImmediate(function () {
|
|
|
if (!_this._disposed) {
|
|
|
Promise.all(_this._completePromises).then(function () {
|
|
|
- _this._releaseResources();
|
|
|
_this._state = BABYLON.GLTFLoaderState.Complete;
|
|
|
_this.onCompleteObservable.notifyObservers(_this);
|
|
|
+ _this.onCompleteObservable.clear();
|
|
|
+ _this._clear();
|
|
|
}).catch(function (error) {
|
|
|
BABYLON.Tools.Error("glTF Loader: " + error.message);
|
|
|
- _this.dispose();
|
|
|
+ _this._clear();
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}).catch(function (error) {
|
|
|
BABYLON.Tools.Error("glTF Loader: " + error.message);
|
|
|
- _this.dispose();
|
|
|
+ _this._clear();
|
|
|
throw error;
|
|
|
});
|
|
|
};
|
|
|
+ GLTFLoader.prototype._loadExtensions = function () {
|
|
|
+ for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
|
|
|
+ var name_1 = _a[_i];
|
|
|
+ var extension = GLTFLoader._Factories[name_1](this);
|
|
|
+ this._extensions[name_1] = extension;
|
|
|
+ this.onExtensionLoadedObservable.notifyObservers(extension);
|
|
|
+ }
|
|
|
+ this.onExtensionLoadedObservable.clear();
|
|
|
+ };
|
|
|
GLTFLoader.prototype._loadData = function (data) {
|
|
|
this._gltf = data.json;
|
|
|
this._setupData();
|
|
@@ -92574,17 +92562,15 @@ var BABYLON;
|
|
|
}
|
|
|
return Promise.all(promises).then(function () { });
|
|
|
};
|
|
|
- GLTFLoader.prototype._abortRequests = function () {
|
|
|
+ GLTFLoader.prototype._clear = function () {
|
|
|
for (var _i = 0, _a = this._requests; _i < _a.length; _i++) {
|
|
|
var request = _a[_i];
|
|
|
request.abort();
|
|
|
}
|
|
|
this._requests.length = 0;
|
|
|
- };
|
|
|
- GLTFLoader.prototype._releaseResources = function () {
|
|
|
- if (this._gltf.images) {
|
|
|
- for (var _i = 0, _a = this._gltf.images; _i < _a.length; _i++) {
|
|
|
- var image = _a[_i];
|
|
|
+ if (this._gltf && this._gltf.images) {
|
|
|
+ for (var _b = 0, _c = this._gltf.images; _b < _c.length; _b++) {
|
|
|
+ var image = _c[_b];
|
|
|
if (image._objectURL) {
|
|
|
image._objectURL.then(function (value) {
|
|
|
URL.revokeObjectURL(value);
|
|
@@ -92593,6 +92579,15 @@ var BABYLON;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ delete this._gltf;
|
|
|
+ delete this._babylonScene;
|
|
|
+ this._completePromises.length = 0;
|
|
|
+ this._extensions = {};
|
|
|
+ delete this._rootBabylonMesh;
|
|
|
+ delete this._progressCallback;
|
|
|
+ this.onMeshLoadedObservable.clear();
|
|
|
+ this.onTextureLoadedObservable.clear();
|
|
|
+ this.onMaterialLoadedObservable.clear();
|
|
|
};
|
|
|
GLTFLoader.prototype._applyExtensions = function (actionAsync) {
|
|
|
for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
|