import { Color } from 'three'; import { Pass } from './Pass.js'; class RenderPass extends Pass { constructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) { super(); this.scene = scene; this.camera = camera; this.overrideMaterial = overrideMaterial; this.clearColor = clearColor; this.clearAlpha = clearAlpha; this.clear = true; this.clearDepth = false; this.needsSwap = false; this._oldClearColor = new Color(); } render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { const oldAutoClear = renderer.autoClear; renderer.autoClear = false; let oldClearAlpha, oldOverrideMaterial; if ( this.overrideMaterial !== null ) { oldOverrideMaterial = this.scene.overrideMaterial; this.scene.overrideMaterial = this.overrideMaterial; } if ( this.clearColor !== null ) { renderer.getClearColor( this._oldClearColor ); renderer.setClearColor( this.clearColor ); } if ( this.clearAlpha !== null ) { oldClearAlpha = renderer.getClearAlpha(); renderer.setClearAlpha( this.clearAlpha ); } if ( this.clearDepth == true ) { renderer.clearDepth(); } renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); if ( this.clear === true ) { // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600 renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); } renderer.render( this.scene, this.camera ); // restore if ( this.clearColor !== null ) { renderer.setClearColor( this._oldClearColor ); } if ( this.clearAlpha !== null ) { renderer.setClearAlpha( oldClearAlpha ); } if ( this.overrideMaterial !== null ) { this.scene.overrideMaterial = oldOverrideMaterial; } renderer.autoClear = oldAutoClear; } } export { RenderPass };