src/passes/LuminancePass.js
- import { UnsignedByteType, WebGLRenderTarget } from "three";
- import { Resolution } from "../core/Resolution.js";
- import { LuminanceMaterial } from "../materials/LuminanceMaterial.js";
- import { Pass } from "./Pass.js";
-
- /**
- * A pass that renders luminance.
- */
-
- export class LuminancePass extends Pass {
-
- /**
- * Constructs a new luminance pass.
- *
- * @param {Object} [options] - The options. See {@link LuminanceMaterial} for additional options.
- * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target.
- * @param {Number} [options.resolutionScale=1.0] - The resolution scale.
- * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution.
- * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution.
- * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead.
- * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead.
- */
-
- constructor({
- renderTarget,
- luminanceRange,
- colorOutput,
- resolutionScale = 1.0,
- width = Resolution.AUTO_SIZE,
- height = Resolution.AUTO_SIZE,
- resolutionX = width,
- resolutionY = height
- } = {}) {
-
- super("LuminancePass");
-
- this.fullscreenMaterial = new LuminanceMaterial(colorOutput, luminanceRange);
- this.needsSwap = false;
-
- /**
- * The luminance render target.
- *
- * @type {WebGLRenderTarget}
- * @readonly
- */
-
- this.renderTarget = renderTarget;
-
- if(this.renderTarget === undefined) {
-
- this.renderTarget = new WebGLRenderTarget(1, 1, { depthBuffer: false });
- this.renderTarget.texture.name = "LuminancePass.Target";
-
- }
-
- /**
- * The resolution.
- *
- * @type {Resolution}
- * @readonly
- */
-
- const resolution = this.resolution = new Resolution(this, resolutionX, resolutionY, resolutionScale);
- resolution.addEventListener("change", (e) => this.setSize(resolution.baseWidth, resolution.baseHeight));
-
- }
-
- /**
- * The luminance texture.
- *
- * @type {Texture}
- */
-
- get texture() {
-
- return this.renderTarget.texture;
-
- }
-
- /**
- * Returns the luminance texture.
- *
- * @deprecated Use texture instead.
- * @return {Texture} The texture.
- */
-
- getTexture() {
-
- return this.renderTarget.texture;
-
- }
-
- /**
- * Returns the resolution settings.
- *
- * @deprecated Use resolution instead.
- * @return {Resolution} The resolution.
- */
-
- getResolution() {
-
- return this.resolution;
-
- }
-
- /**
- * Renders the luminance.
- *
- * @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} [deltaTime] - 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, deltaTime, stencilTest) {
-
- const material = this.fullscreenMaterial;
- material.inputBuffer = inputBuffer.texture;
- renderer.setRenderTarget(this.renderToScreen ? null : this.renderTarget);
- renderer.render(this.scene, this.camera);
-
- }
-
- /**
- * Updates the size of this pass.
- *
- * @param {Number} width - The width.
- * @param {Number} height - The height.
- */
-
- setSize(width, height) {
-
- const resolution = this.resolution;
- resolution.setBaseSize(width, height);
- this.renderTarget.setSize(resolution.width, resolution.height);
-
- }
-
- /**
- * Performs initialization tasks.
- *
- * @param {WebGLRenderer} renderer - A renderer.
- * @param {Boolean} alpha - Whether the renderer uses the alpha channel.
- * @param {Number} frameBufferType - The type of the main frame buffers.
- */
-
- initialize(renderer, alpha, frameBufferType) {
-
- if(frameBufferType !== undefined && frameBufferType !== UnsignedByteType) {
-
- this.renderTarget.texture.type = frameBufferType;
- this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1";
-
- }
-
- }
-
- }