123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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, renderer.getClearAlpha() );
- }
- 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 };
|