|
@@ -3076,6 +3076,73 @@ var BABYLON;
|
|
|
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
|
+ var Observer = (function () {
|
|
|
+ function Observer(callback) {
|
|
|
+ this.callback = callback;
|
|
|
+ }
|
|
|
+ return Observer;
|
|
|
+ })();
|
|
|
+ BABYLON.Observer = Observer;
|
|
|
+ var Observable = (function () {
|
|
|
+ function Observable() {
|
|
|
+ this._observers = new Array();
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Create a new Observer with the specified callback
|
|
|
+ * @param callback the callback that will be executed for that Observer
|
|
|
+ */
|
|
|
+ Observable.prototype.add = function (callback) {
|
|
|
+ var observer = new Observer(callback);
|
|
|
+ this._observers.push(observer);
|
|
|
+ return observer;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * Remove an Observer from the Observable object
|
|
|
+ * @param observer the instance of the Observer to remove. If it doesn't belong to this Observable, false will be returned.
|
|
|
+ */
|
|
|
+ Observable.prototype.remove = function (observer) {
|
|
|
+ var index = this._observers.indexOf(observer);
|
|
|
+ if (index !== -1) {
|
|
|
+ this._observers.splice(index, 1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * Remove a callback from the Observable object
|
|
|
+ * @param callback the callback to remove. If it doesn't belong to this Observable, false will be returned.
|
|
|
+ */
|
|
|
+ Observable.prototype.removeCallback = function (callback) {
|
|
|
+ for (var index = 0; index < this._observers.length; index++) {
|
|
|
+ if (this._observers[index].callback === callback) {
|
|
|
+ this._observers.splice(index, 1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * Notify all Observers by calling their respective callback with the given data
|
|
|
+ * @param eventData
|
|
|
+ */
|
|
|
+ Observable.prototype.notifyObservers = function (eventData) {
|
|
|
+ this._observers.forEach(function (observer) {
|
|
|
+ observer.callback(eventData);
|
|
|
+ });
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * Clear the list of observers
|
|
|
+ */
|
|
|
+ Observable.prototype.clear = function () {
|
|
|
+ this._observers = new Array();
|
|
|
+ };
|
|
|
+ return Observable;
|
|
|
+ })();
|
|
|
+ BABYLON.Observable = Observable;
|
|
|
+})(BABYLON || (BABYLON = {}));
|
|
|
+
|
|
|
+var BABYLON;
|
|
|
+(function (BABYLON) {
|
|
|
var Database = (function () {
|
|
|
function Database(urlToScene, callbackManifestChecked) {
|
|
|
// Handling various flavors of prefixed version of IndexedDB
|
|
@@ -13798,6 +13865,77 @@ var BABYLON;
|
|
|
this.forceShowBoundingBoxes = false;
|
|
|
this.animationsEnabled = true;
|
|
|
this.constantlyUpdateMeshUnderPointer = false;
|
|
|
+ // Events
|
|
|
+ /**
|
|
|
+ * An event triggered when the scene is disposed.
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onDisposeObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered before rendering the scene
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onBeforeRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered after rendering the scene
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onAfterRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when the scene is ready
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onReadyObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered before rendering a camera
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onBeforeCameraRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered after rendering a camera
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onAfterCameraRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a camera is created
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onNewCameraAddedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a camera is removed
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onCameraRemovedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a light is created
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onNewLightAddedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a light is removed
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onLightRemovedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a geometry is created
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onNewGeometryAddedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a geometry is removed
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onGeometryRemovedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a mesh is created
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onNewMeshAddedObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered when a mesh is removed
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onMeshRemovedObservable = new BABYLON.Observable();
|
|
|
// Animations
|
|
|
this.animations = [];
|
|
|
this.cameraToUseForPointers = null; // Define this parameter if you are using multiple cameras and you want to specify which one should be used for pointer position
|
|
@@ -13904,10 +14042,7 @@ var BABYLON;
|
|
|
this._executeWhenReadyTimeoutId = -1;
|
|
|
this._intermediateRendering = false;
|
|
|
this._toBeDisposed = new BABYLON.SmartArray(256);
|
|
|
- this._onReadyCallbacks = new Array();
|
|
|
this._pendingData = []; //ANY
|
|
|
- this._onBeforeRenderCallbacks = new Array();
|
|
|
- this._onAfterRenderCallbacks = new Array();
|
|
|
this._activeMeshes = new BABYLON.SmartArray(256);
|
|
|
this._processedMaterials = new BABYLON.SmartArray(256);
|
|
|
this._renderTargets = new BABYLON.SmartArray(256);
|
|
@@ -13968,6 +14103,56 @@ var BABYLON;
|
|
|
enumerable: true,
|
|
|
configurable: true
|
|
|
});
|
|
|
+ Object.defineProperty(Scene.prototype, "onDispose", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onDisposeObserver) {
|
|
|
+ this.onDisposeObservable.remove(this._onDisposeObserver);
|
|
|
+ }
|
|
|
+ this._onDisposeObserver = this.onDisposeObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
+ Object.defineProperty(Scene.prototype, "beforeRender", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onBeforeRenderObserver) {
|
|
|
+ this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);
|
|
|
+ }
|
|
|
+ this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
+ Object.defineProperty(Scene.prototype, "afterRender", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onAfterRenderObserver) {
|
|
|
+ this.onAfterRenderObservable.remove(this._onAfterRenderObserver);
|
|
|
+ }
|
|
|
+ this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
+ Object.defineProperty(Scene.prototype, "beforeCameraRender", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onBeforeCameraRenderObserver) {
|
|
|
+ this.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver);
|
|
|
+ }
|
|
|
+ this._onBeforeCameraRenderObserver = this.onBeforeCameraRenderObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
+ Object.defineProperty(Scene.prototype, "afterCameraRender", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onAfterCameraRenderObserver) {
|
|
|
+ this.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver);
|
|
|
+ }
|
|
|
+ this._onAfterCameraRenderObserver = this.onAfterCameraRenderObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
Object.defineProperty(Scene.prototype, "debugLayer", {
|
|
|
// Properties
|
|
|
get: function () {
|
|
@@ -14329,22 +14514,16 @@ var BABYLON;
|
|
|
this._cachedMaterial = null;
|
|
|
};
|
|
|
Scene.prototype.registerBeforeRender = function (func) {
|
|
|
- this._onBeforeRenderCallbacks.push(func);
|
|
|
+ this.onBeforeRenderObservable.add(func);
|
|
|
};
|
|
|
Scene.prototype.unregisterBeforeRender = function (func) {
|
|
|
- var index = this._onBeforeRenderCallbacks.indexOf(func);
|
|
|
- if (index > -1) {
|
|
|
- this._onBeforeRenderCallbacks.splice(index, 1);
|
|
|
- }
|
|
|
+ this.onBeforeRenderObservable.removeCallback(func);
|
|
|
};
|
|
|
Scene.prototype.registerAfterRender = function (func) {
|
|
|
- this._onAfterRenderCallbacks.push(func);
|
|
|
+ this.onAfterRenderObservable.add(func);
|
|
|
};
|
|
|
Scene.prototype.unregisterAfterRender = function (func) {
|
|
|
- var index = this._onAfterRenderCallbacks.indexOf(func);
|
|
|
- if (index > -1) {
|
|
|
- this._onAfterRenderCallbacks.splice(index, 1);
|
|
|
- }
|
|
|
+ this.onAfterRenderObservable.removeCallback(func);
|
|
|
};
|
|
|
Scene.prototype._addPendingData = function (data) {
|
|
|
this._pendingData.push(data);
|
|
@@ -14364,7 +14543,7 @@ var BABYLON;
|
|
|
*/
|
|
|
Scene.prototype.executeWhenReady = function (func) {
|
|
|
var _this = this;
|
|
|
- this._onReadyCallbacks.push(func);
|
|
|
+ this.onReadyObservable.add(func);
|
|
|
if (this._executeWhenReadyTimeoutId !== -1) {
|
|
|
return;
|
|
|
}
|
|
@@ -14375,10 +14554,8 @@ var BABYLON;
|
|
|
Scene.prototype._checkIsReady = function () {
|
|
|
var _this = this;
|
|
|
if (this.isReady()) {
|
|
|
- this._onReadyCallbacks.forEach(function (func) {
|
|
|
- func();
|
|
|
- });
|
|
|
- this._onReadyCallbacks = [];
|
|
|
+ this.onReadyObservable.notifyObservers(this);
|
|
|
+ this.onReadyObservable.clear();
|
|
|
this._executeWhenReadyTimeoutId = -1;
|
|
|
return;
|
|
|
}
|
|
@@ -14491,9 +14668,7 @@ var BABYLON;
|
|
|
var position = this.meshes.push(newMesh);
|
|
|
//notify the collision coordinator
|
|
|
this.collisionCoordinator.onMeshAdded(newMesh);
|
|
|
- if (this.onNewMeshAdded) {
|
|
|
- this.onNewMeshAdded(newMesh, position, this);
|
|
|
- }
|
|
|
+ this.onNewMeshAddedObservable.notifyObservers(newMesh);
|
|
|
};
|
|
|
Scene.prototype.removeMesh = function (toRemove) {
|
|
|
var index = this.meshes.indexOf(toRemove);
|
|
@@ -14503,9 +14678,7 @@ var BABYLON;
|
|
|
}
|
|
|
//notify the collision coordinator
|
|
|
this.collisionCoordinator.onMeshRemoved(toRemove);
|
|
|
- if (this.onMeshRemoved) {
|
|
|
- this.onMeshRemoved(toRemove);
|
|
|
- }
|
|
|
+ this.onMeshRemovedObservable.notifyObservers(toRemove);
|
|
|
return index;
|
|
|
};
|
|
|
Scene.prototype.removeSkeleton = function (toRemove) {
|
|
@@ -14522,9 +14695,7 @@ var BABYLON;
|
|
|
// Remove from the scene if mesh found
|
|
|
this.lights.splice(index, 1);
|
|
|
}
|
|
|
- if (this.onLightRemoved) {
|
|
|
- this.onLightRemoved(toRemove);
|
|
|
- }
|
|
|
+ this.onLightRemovedObservable.notifyObservers(toRemove);
|
|
|
return index;
|
|
|
};
|
|
|
Scene.prototype.removeCamera = function (toRemove) {
|
|
@@ -14548,24 +14719,18 @@ var BABYLON;
|
|
|
this.activeCamera = null;
|
|
|
}
|
|
|
}
|
|
|
- if (this.onCameraRemoved) {
|
|
|
- this.onCameraRemoved(toRemove);
|
|
|
- }
|
|
|
+ this.onCameraRemovedObservable.notifyObservers(toRemove);
|
|
|
return index;
|
|
|
};
|
|
|
Scene.prototype.addLight = function (newLight) {
|
|
|
newLight.uniqueId = this._uniqueIdCounter++;
|
|
|
var position = this.lights.push(newLight);
|
|
|
- if (this.onNewLightAdded) {
|
|
|
- this.onNewLightAdded(newLight, position, this);
|
|
|
- }
|
|
|
+ this.onNewLightAddedObservable.notifyObservers(newLight);
|
|
|
};
|
|
|
Scene.prototype.addCamera = function (newCamera) {
|
|
|
newCamera.uniqueId = this._uniqueIdCounter++;
|
|
|
var position = this.cameras.push(newCamera);
|
|
|
- if (this.onNewCameraAdded) {
|
|
|
- this.onNewCameraAdded(newCamera, position, this);
|
|
|
- }
|
|
|
+ this.onNewCameraAddedObservable.notifyObservers(newCamera);
|
|
|
};
|
|
|
/**
|
|
|
* Switch active camera
|
|
@@ -14782,9 +14947,7 @@ var BABYLON;
|
|
|
this._geometries.push(geometry);
|
|
|
//notify the collision coordinator
|
|
|
this.collisionCoordinator.onGeometryAdded(geometry);
|
|
|
- if (this.onGeometryAdded) {
|
|
|
- this.onGeometryAdded(geometry);
|
|
|
- }
|
|
|
+ this.onNewGeometryAddedObservable.notifyObservers(geometry);
|
|
|
return true;
|
|
|
};
|
|
|
/**
|
|
@@ -14798,9 +14961,7 @@ var BABYLON;
|
|
|
this._geometries.splice(index, 1);
|
|
|
//notify the collision coordinator
|
|
|
this.collisionCoordinator.onGeometryDeleted(geometry);
|
|
|
- if (this.onGeometryRemoved) {
|
|
|
- this.onGeometryRemoved(geometry);
|
|
|
- }
|
|
|
+ this.onGeometryRemovedObservable.notifyObservers(geometry);
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
@@ -15099,9 +15260,7 @@ var BABYLON;
|
|
|
this.resetCachedMaterial();
|
|
|
this._renderId++;
|
|
|
this.updateTransformMatrix();
|
|
|
- if (this.beforeCameraRender) {
|
|
|
- this.beforeCameraRender(this.activeCamera);
|
|
|
- }
|
|
|
+ this.onBeforeCameraRenderObservable.notifyObservers(this.activeCamera);
|
|
|
// Meshes
|
|
|
var beforeEvaluateActiveMeshesDate = BABYLON.Tools.Now;
|
|
|
BABYLON.Tools.StartPerformanceCounter("Active meshes evaluation");
|
|
@@ -15192,9 +15351,7 @@ var BABYLON;
|
|
|
this.activeCamera._updateFromScene();
|
|
|
// Reset some special arrays
|
|
|
this._renderTargets.reset();
|
|
|
- if (this.afterCameraRender) {
|
|
|
- this.afterCameraRender(this.activeCamera);
|
|
|
- }
|
|
|
+ this.onAfterCameraRenderObservable.notifyObservers(this.activeCamera);
|
|
|
BABYLON.Tools.EndPerformanceCounter("Rendering camera " + this.activeCamera.name);
|
|
|
};
|
|
|
Scene.prototype._processSubCameras = function (camera) {
|
|
@@ -15279,13 +15436,7 @@ var BABYLON;
|
|
|
BABYLON.Tools.EndPerformanceCounter("Physics");
|
|
|
}
|
|
|
// Before render
|
|
|
- if (this.beforeRender) {
|
|
|
- this.beforeRender();
|
|
|
- }
|
|
|
- var callbackIndex;
|
|
|
- for (callbackIndex = 0; callbackIndex < this._onBeforeRenderCallbacks.length; callbackIndex++) {
|
|
|
- this._onBeforeRenderCallbacks[callbackIndex]();
|
|
|
- }
|
|
|
+ this.onBeforeRenderObservable.notifyObservers(this);
|
|
|
// Customs render targets
|
|
|
var beforeRenderTargetDate = BABYLON.Tools.Now;
|
|
|
var engine = this.getEngine();
|
|
@@ -15370,9 +15521,7 @@ var BABYLON;
|
|
|
if (this.afterRender) {
|
|
|
this.afterRender();
|
|
|
}
|
|
|
- for (callbackIndex = 0; callbackIndex < this._onAfterRenderCallbacks.length; callbackIndex++) {
|
|
|
- this._onAfterRenderCallbacks[callbackIndex]();
|
|
|
- }
|
|
|
+ this.onAfterRenderObservable.notifyObservers(this);
|
|
|
// Cleaning
|
|
|
for (var index = 0; index < this._toBeDisposed.length; index++) {
|
|
|
this._toBeDisposed.data[index].dispose();
|
|
@@ -15533,8 +15682,8 @@ var BABYLON;
|
|
|
if (this.onDispose) {
|
|
|
this.onDispose();
|
|
|
}
|
|
|
- this._onBeforeRenderCallbacks = [];
|
|
|
- this._onAfterRenderCallbacks = [];
|
|
|
+ this.onBeforeRenderObservable.clear();
|
|
|
+ this.onAfterRenderObservable.clear();
|
|
|
this.detachControl();
|
|
|
// Release sounds & sounds tracks
|
|
|
if (BABYLON.AudioEngine) {
|
|
@@ -16296,12 +16445,26 @@ var BABYLON;
|
|
|
function Mesh(name, scene, parent, source, doNotCloneChildren) {
|
|
|
if (parent === void 0) { parent = null; }
|
|
|
_super.call(this, name, scene);
|
|
|
+ // Events
|
|
|
+ /**
|
|
|
+ * An event triggered before rendering the mesh
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onBeforeRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered after rendering the mesh
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onAfterRenderObservable = new BABYLON.Observable();
|
|
|
+ /**
|
|
|
+ * An event triggered before drawing the mesh
|
|
|
+ * @type {BABYLON.Observable}
|
|
|
+ */
|
|
|
+ this.onBeforeDrawObservable = new BABYLON.Observable();
|
|
|
// Members
|
|
|
this.delayLoadState = BABYLON.Engine.DELAYLOADSTATE_NONE;
|
|
|
this.instances = new Array();
|
|
|
this._LODLevels = new Array();
|
|
|
- this._onBeforeRenderCallbacks = new Array();
|
|
|
- this._onAfterRenderCallbacks = new Array();
|
|
|
this._visibleInstances = {};
|
|
|
this._renderIdForInstances = new Array();
|
|
|
this._batchCache = new _InstancesBatch();
|
|
@@ -16401,6 +16564,16 @@ var BABYLON;
|
|
|
enumerable: true,
|
|
|
configurable: true
|
|
|
});
|
|
|
+ Object.defineProperty(Mesh.prototype, "onBeforeDraw", {
|
|
|
+ set: function (callback) {
|
|
|
+ if (this._onBeforeDrawObserver) {
|
|
|
+ this.onBeforeDrawObservable.remove(this._onBeforeDrawObserver);
|
|
|
+ }
|
|
|
+ this._onBeforeDrawObserver = this.onBeforeDrawObservable.add(callback);
|
|
|
+ },
|
|
|
+ enumerable: true,
|
|
|
+ configurable: true
|
|
|
+ });
|
|
|
// Methods
|
|
|
/**
|
|
|
* @param {boolean} fullDetails - support for multiple levels of logging within scene loading
|
|
@@ -16778,9 +16951,7 @@ var BABYLON;
|
|
|
if (!this._geometry || !this._geometry.getVertexBuffers() || !this._geometry.getIndexBuffer()) {
|
|
|
return;
|
|
|
}
|
|
|
- if (this.onBeforeDraw) {
|
|
|
- this.onBeforeDraw();
|
|
|
- }
|
|
|
+ this.onBeforeDrawObservable.notifyObservers(this);
|
|
|
var engine = this.getScene().getEngine();
|
|
|
// Draw order
|
|
|
switch (fillMode) {
|
|
@@ -16805,22 +16976,16 @@ var BABYLON;
|
|
|
}
|
|
|
};
|
|
|
Mesh.prototype.registerBeforeRender = function (func) {
|
|
|
- this._onBeforeRenderCallbacks.push(func);
|
|
|
+ this.onBeforeRenderObservable.add(func);
|
|
|
};
|
|
|
Mesh.prototype.unregisterBeforeRender = function (func) {
|
|
|
- var index = this._onBeforeRenderCallbacks.indexOf(func);
|
|
|
- if (index > -1) {
|
|
|
- this._onBeforeRenderCallbacks.splice(index, 1);
|
|
|
- }
|
|
|
+ this.onBeforeRenderObservable.removeCallback(func);
|
|
|
};
|
|
|
Mesh.prototype.registerAfterRender = function (func) {
|
|
|
- this._onAfterRenderCallbacks.push(func);
|
|
|
+ this.onAfterRenderObservable.add(func);
|
|
|
};
|
|
|
Mesh.prototype.unregisterAfterRender = function (func) {
|
|
|
- var index = this._onAfterRenderCallbacks.indexOf(func);
|
|
|
- if (index > -1) {
|
|
|
- this._onAfterRenderCallbacks.splice(index, 1);
|
|
|
- }
|
|
|
+ this.onAfterRenderObservable.removeCallback(func);
|
|
|
};
|
|
|
Mesh.prototype._getInstancesRenderList = function (subMeshId) {
|
|
|
var scene = this.getScene();
|
|
@@ -16929,9 +17094,7 @@ var BABYLON;
|
|
|
return;
|
|
|
}
|
|
|
var callbackIndex;
|
|
|
- for (callbackIndex = 0; callbackIndex < this._onBeforeRenderCallbacks.length; callbackIndex++) {
|
|
|
- this._onBeforeRenderCallbacks[callbackIndex](this);
|
|
|
- }
|
|
|
+ this.onBeforeRenderObservable.notifyObservers(this);
|
|
|
var engine = scene.getEngine();
|
|
|
var hardwareInstancedRendering = (engine.getCaps().instancedArrays !== null) && (batch.visibleInstances[subMesh._id] !== null) && (batch.visibleInstances[subMesh._id] !== undefined);
|
|
|
// Material
|
|
@@ -16979,9 +17142,7 @@ var BABYLON;
|
|
|
scene.getOutlineRenderer().render(subMesh, batch, true);
|
|
|
engine.setAlphaMode(currentMode);
|
|
|
}
|
|
|
- for (callbackIndex = 0; callbackIndex < this._onAfterRenderCallbacks.length; callbackIndex++) {
|
|
|
- this._onAfterRenderCallbacks[callbackIndex](this);
|
|
|
- }
|
|
|
+ this.onAfterRenderObservable.notifyObservers(this);
|
|
|
};
|
|
|
Mesh.prototype.getEmittedParticleSystems = function () {
|
|
|
var results = new Array();
|