|
@@ -141,6 +141,16 @@ export abstract class EffectLayer {
|
|
|
public onBeforeComposeObservable = new Observable<EffectLayer>();
|
|
|
|
|
|
/**
|
|
|
+ * An event triggered when the mesh is rendered into the effect render target.
|
|
|
+ */
|
|
|
+ public onBeforeRenderMeshToEffect = new Observable<AbstractMesh>();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * An event triggered after the mesh has been rendered into the effect render target.
|
|
|
+ */
|
|
|
+ public onAfterRenderMeshToEffect = new Observable<AbstractMesh>();
|
|
|
+
|
|
|
+ /**
|
|
|
* An event triggered when the generated texture has been merged in the scene.
|
|
|
*/
|
|
|
public onAfterComposeObservable = new Observable<EffectLayer>();
|
|
@@ -677,7 +687,12 @@ export abstract class EffectLayer {
|
|
|
|
|
|
this._setEmissiveTextureAndColor(mesh, subMesh, material);
|
|
|
|
|
|
- if (this._isReady(subMesh, hardwareInstancedRendering, this._emissiveTextureAndColor.texture)) {
|
|
|
+ this.onBeforeRenderMeshToEffect.notifyObservers(mesh);
|
|
|
+
|
|
|
+ if (this._useMeshMaterial(mesh)) {
|
|
|
+ mesh.render(subMesh, hardwareInstancedRendering);
|
|
|
+ }
|
|
|
+ else if (this._isReady(subMesh, hardwareInstancedRendering, this._emissiveTextureAndColor.texture)) {
|
|
|
engine.enableEffect(this._effectLayerMapGenerationEffect);
|
|
|
mesh._bind(subMesh, this._effectLayerMapGenerationEffect, Material.TriangleFillMode);
|
|
|
|
|
@@ -752,6 +767,16 @@ export abstract class EffectLayer {
|
|
|
// Need to reset refresh rate of the main map
|
|
|
this._mainTexture.resetRefreshCounter();
|
|
|
}
|
|
|
+
|
|
|
+ this.onAfterRenderMeshToEffect.notifyObservers(mesh);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Defines wether the current material of the mesh should be use to render the effect.
|
|
|
+ * @param mesh defines the current mesh to render
|
|
|
+ */
|
|
|
+ protected _useMeshMaterial(mesh: AbstractMesh): boolean {
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -819,6 +844,8 @@ export abstract class EffectLayer {
|
|
|
this.onDisposeObservable.clear();
|
|
|
this.onBeforeRenderMainTextureObservable.clear();
|
|
|
this.onBeforeComposeObservable.clear();
|
|
|
+ this.onBeforeRenderMeshToEffect.clear();
|
|
|
+ this.onAfterRenderMeshToEffect.clear();
|
|
|
this.onAfterComposeObservable.clear();
|
|
|
this.onSizeChangedObservable.clear();
|
|
|
}
|