From ee38a8f312ae4d09608381fe9bd4f6a4afe1b579 Mon Sep 17 00:00:00 2001 From: Martin Valigursky <59932779+mvaligursky@users.noreply.github.com> Date: Mon, 4 Dec 2023 12:23:03 +0000 Subject: [PATCH] [Fix] Fix compatibility with deprecated Layer.renderTarget (#5877) Co-authored-by: Martin Valigursky --- src/scene/renderer/renderer.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/scene/renderer/renderer.js b/src/scene/renderer/renderer.js index a5c08aa1cc3..d7246d08811 100644 --- a/src/scene/renderer/renderer.js +++ b/src/scene/renderer/renderer.js @@ -1074,9 +1074,8 @@ class Renderer { for (let i = 0; i < numCameras; i++) { const camera = comp.cameras[i]; - // update camera and frustum - camera.frameUpdate(camera.renderTarget); - this.updateCameraFrustum(camera.camera); + let currentRenderTarget; + let cameraChanged = true; this._camerasRendered++; // for all of its enabled layers @@ -1085,6 +1084,17 @@ class Renderer { const layer = comp.getLayerById(layerIds[j]); if (layer && layer.enabled) { + // update camera and frustum when the render target changes + // TODO: This is done here to handle the backwards compatibility with the deprecated Layer.renderTarget, + // when this is no longer needed, this code can be moved up to execute once per camera. + const renderTarget = camera.renderTarget ?? layer.renderTarget; + if (cameraChanged || renderTarget !== currentRenderTarget) { + cameraChanged = false; + currentRenderTarget = renderTarget; + camera.frameUpdate(renderTarget); + this.updateCameraFrustum(camera.camera); + } + // cull each layer's non-directional lights once with each camera // lights aren't collected anywhere, but marked as visible this.cullLights(camera.camera, layer._lights);