diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index 7b0323c78ac04b..7aff770861aad3 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -32,7 +32,6 @@ const _screen = new Vector4(); const _frustum = new Frustum(); const _projScreenMatrix = new Matrix4(); const _vector3 = new Vector3(); -const _quad = new QuadMesh( new NodeMaterial() ); class Renderer { @@ -99,6 +98,8 @@ class Renderer { this._textures = null; this._background = null; + this._quad = new QuadMesh( new NodeMaterial() ); + this._currentRenderContext = null; this._opaqueSort = null; @@ -679,14 +680,16 @@ class Renderer { this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel ); + const quad = this._quad; + if ( this._nodes.hasOutputChange( renderTarget.texture ) ) { - _quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture ); - _quad.material.needsUpdate = true; + quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture ); + quad.material.needsUpdate = true; } - this._renderScene( _quad, _quad.camera, false ); + this._renderScene( quad, quad.camera, false ); } @@ -967,14 +970,16 @@ class Renderer { // If a color space transform or tone mapping is required, // the clear operation clears the intermediate renderTarget texture, but does not update the screen canvas. + const quad = this._quad; + if ( this._nodes.hasOutputChange( renderTarget.texture ) ) { - _quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture ); - _quad.material.needsUpdate = true; + quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture ); + quad.material.needsUpdate = true; } - this._renderScene( _quad, _quad.camera, false ); + this._renderScene( quad, quad.camera, false ); }