|
@@ -457,6 +457,8 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private _depthOfFieldSceneObserver: Nullable<Observer<Scene>> = null;
|
|
|
|
+
|
|
private _buildPipeline() {
|
|
private _buildPipeline() {
|
|
if (!this._buildAllowed) {
|
|
if (!this._buildAllowed) {
|
|
return;
|
|
return;
|
|
@@ -474,17 +476,36 @@
|
|
this._reset();
|
|
this._reset();
|
|
this._prevPostProcess = null;
|
|
this._prevPostProcess = null;
|
|
this._prevPrevPostProcess = null;
|
|
this._prevPrevPostProcess = null;
|
|
- this._hasCleared = false;
|
|
|
|
|
|
+ this._hasCleared = false;
|
|
|
|
|
|
if (this.depthOfFieldEnabled) {
|
|
if (this.depthOfFieldEnabled) {
|
|
- var depthTexture = this._scene.enableDepthRenderer(this._cameras[0]).getDepthMap();
|
|
|
|
- this.depthOfField.depthTexture = depthTexture;
|
|
|
|
|
|
+ // Multi camera suport
|
|
|
|
+ if (this._cameras.length > 1) {
|
|
|
|
+ for (let camera of this._cameras) {
|
|
|
|
+ this._scene.enableDepthRenderer(camera).getDepthMap();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add((scene) => {
|
|
|
|
+ if (this._cameras.indexOf(scene.activeCamera!) > -1) {
|
|
|
|
+ this.depthOfField.depthTexture = scene.enableDepthRenderer(scene.activeCamera).getDepthMap();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);
|
|
|
|
+ const depthRenderer = this._scene.enableDepthRenderer(this._cameras[0]);
|
|
|
|
+ this.depthOfField.depthTexture = depthRenderer.getDepthMap();
|
|
|
|
+ }
|
|
|
|
+
|
|
if(!this.depthOfField._isReady()){
|
|
if(!this.depthOfField._isReady()){
|
|
this.depthOfField._updateEffects();
|
|
this.depthOfField._updateEffects();
|
|
}
|
|
}
|
|
this.addEffect(this.depthOfField);
|
|
this.addEffect(this.depthOfField);
|
|
this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);
|
|
this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);
|
|
}
|
|
}
|
|
|
|
+ else {
|
|
|
|
+ this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);
|
|
|
|
+ }
|
|
|
|
|
|
if (this.bloomEnabled) {
|
|
if (this.bloomEnabled) {
|
|
if(!this.bloom._isReady()){
|
|
if(!this.bloom._isReady()){
|
|
@@ -562,7 +583,8 @@
|
|
this.sharpen.dispose(camera);
|
|
this.sharpen.dispose(camera);
|
|
}
|
|
}
|
|
|
|
|
|
- if(this.depthOfField){
|
|
|
|
|
|
+ if(this.depthOfField) {
|
|
|
|
+ this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);
|
|
this.depthOfField.disposeEffects(camera);
|
|
this.depthOfField.disposeEffects(camera);
|
|
}
|
|
}
|
|
|
|
|