src/passes/ClearPass.js
import { Color } from "three";
import { Pass } from "./Pass.js";
/**
* Used for saving the original clear color of the renderer.
*
* @type {Color}
* @private
*/
const color = new Color();
/**
* A pass that clears the input buffer or the screen.
*
* You can prevent specific bits from being cleared by setting either the
* autoClearColor, autoClearStencil or autoClearDepth properties of the renderer
* to false.
*/
export class ClearPass extends Pass {
/**
* Constructs a new clear pass.
*
* @param {Object} [options] - Additional options.
* @param {Color} [options.clearColor=null] - An override clear color.
* @param {Number} [options.clearAlpha=0.0] - An override clear alpha.
*/
constructor(options = {}) {
super("ClearPass", null, null);
this.needsSwap = false;
/**
* The clear color.
*
* @type {Color}
*/
this.clearColor = (options.clearColor !== undefined) ? options.clearColor : null;
/**
* The clear alpha.
*
* @type {Number}
*/
this.clearAlpha = (options.clearAlpha !== undefined) ? options.clearAlpha : 0.0;
}
/**
* Clears the input buffer or the screen.
*
* @param {WebGLRenderer} renderer - The renderer.
* @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass.
* @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen.
* @param {Number} [delta] - The time between the last frame and the current one in seconds.
* @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active.
*/
render(renderer, inputBuffer, outputBuffer, delta, stencilTest) {
const clearColor = this.clearColor;
let clearAlpha;
if(clearColor !== null) {
color.copy(renderer.getClearColor());
clearAlpha = renderer.getClearAlpha();
renderer.setClearColor(clearColor, this.clearAlpha);
}
renderer.setRenderTarget(this.renderToScreen ? null : inputBuffer);
renderer.clear();
if(clearColor !== null) {
renderer.setClearColor(color, clearAlpha);
}
}
}