import * as THREE from 'three'; import type { Disposable, FrameContext } from '../types.js'; /** Options for {@link createShaderQuad}: the fragment shader, extra uniforms, and an optional pointer-tracking element. */ export interface ShaderQuadOptions { /** Fragment shader. Receives iResolution, iTime, uPointer + your uniforms. */ fragmentShader: string; /** Extra uniforms merged into the standard set. */ uniforms?: Record; /** Track pointer position on this element into uPointer. */ pointerElement?: HTMLElement; } /** A self-contained fullscreen shader scene. `update` advances the uniform contract; `render` also draws it. */ export interface ShaderQuad extends Disposable { scene: THREE.Scene; camera: THREE.OrthographicCamera; material: THREE.ShaderMaterial; /** Advance iTime and (if sizeable) iResolution. Call once per frame. */ update(ctx: FrameContext, renderer: THREE.WebGLRenderer): void; /** update + renderer.render in one call, for shader-only scenes. */ render(ctx: FrameContext, renderer: THREE.WebGLRenderer): void; } /** * Fullscreen fragment-shader runner: one fullscreen triangle and a * `ShaderMaterial` with the shadertoy-style uniform contract — `iResolution` * (px), `iTime` (s), `uPointer` (-1..1, +y up) — plus your own uniforms. * * @param options - Fragment shader, extra uniforms, pointer element. * @returns A {@link ShaderQuad}: use `render(ctx, renderer)` for shader-only * scenes or `update` + your own composition as a backdrop layer. * @example * const quad = createShaderQuad({ fragmentShader: RAYMARCH_GLSL }) * loop.onFrame(ctx => quad.render(ctx, renderer)) */ export declare function createShaderQuad({ fragmentShader, uniforms, pointerElement }: ShaderQuadOptions): ShaderQuad; //# sourceMappingURL=shader-quad.d.ts.map