UNPKG

textmode.js

Version:

textmode.js is a lightweight creative coding library for creating real-time ASCII art on the web.

80 lines (79 loc) 2.62 kB
import type { GLRenderer, GLFramebuffer } from '../../rendering'; import type { TextmodeLayer } from './TextmodeLayer'; /** * Parameters for the composite operation. */ export interface CompositeParams { /** The base layer placement (texture + size + offset). */ base: CompositeLayerPlacement; /** The array of user layer placements to composite on top of the base. */ layers: readonly CompositeLayerPlacement[]; /** The target framebuffer to render the final result into. */ targetFramebuffer: GLFramebuffer; /** The background color as RGBA values (0-1 range). */ backgroundColor: [number, number, number, number]; /** Canvas width in pixels. */ canvasWidth: number; /** Canvas height in pixels. */ canvasHeight: number; } export interface CompositeLayerPlacement { layer: TextmodeLayer; texture: WebGLTexture; width: number; height: number; offsetX: number; offsetY: number; } /** * Handles the compositing of multiple layers using shader-based blending. * * This class is responsible for: * - Managing ping-pong framebuffers for layer compositing * - Applying blend modes via the composite shader * - Rendering the final composited result to a target framebuffer * * @ignore * * @remarks * The compositor uses a ping-pong buffer technique to avoid WebGL feedback loops * when reading from and writing to textures during blend operations. */ export declare class Layer2DCompositor { private readonly _renderer; private readonly _blendShader; private _pingPongBuffers; private _currentPingPongIndex; /** * Create a new LayerCompositor. * @param renderer The WebGL renderer instance. * @param canvasWidth The canvas width in pixels. * @param canvasHeight The canvas height in pixels. */ constructor(renderer: GLRenderer, canvasWidth: number, canvasHeight: number); /** * Composite all layers onto the target framebuffer. * @param params The composite parameters. */ $composite(params: CompositeParams): void; /** * Blend a single layer onto the current composite. */ private _blendLayer; /** * Copy the final composite result to the target framebuffer. */ private _copyToTarget; /** * Resize the compositor's framebuffers. * @param canvasWidth The canvas width in pixels. * @param canvasHeight The canvas height in pixels. * @ignore */ $resize(canvasWidth: number, canvasHeight: number): void; /** * Dispose of all compositor resources. * @ignore */ $dispose(): void; }