import { d } from './index'; import { GpuFragmentParams, KitTexture } from '../contract'; import { ComputeStep } from '../compute'; export interface WaveFieldKernels { resolution: number; propagateLayout: ReturnType; gradientLayout: ReturnType; /** Callable inside a `'use gpu'` wrapper; resolvable via `tgpu.resolve` in tests. */ propagateKernel: (cx: number, cy: number) => void; gradientKernel: (cx: number, cy: number) => void; } declare function buildPropagateLayout(cellCount: number): import('typegpu').TgpuBindGroupLayout<{ readBuf: { storage: d.WgslArray; access: "readonly"; }; writeBuf: { storage: d.WgslArray; access: "mutable"; }; params: { uniform: d.WgslStruct<{ cursorX: d.F32; cursorY: d.F32; cursorSpeed: d.F32; dt: d.F32; damping: d.F32; radius: d.F32; aspect: d.F32; }>; }; }>; declare function buildGradientLayout(cellCount: number): import('typegpu').TgpuBindGroupLayout<{ srcBuf: { storage: d.WgslArray; access: "readonly"; }; dispTex: { storageTexture: d.WgslStorageTexture2d<"rgba16float", string>; }; }>; /** Layouts + kernels for one grid resolution. Memoized; $name carries the resolution key. */ export declare function buildWaveFieldKernels(resolution: number): WaveFieldKernels; export interface WaveFieldConfig { resolution: number; /** Prop name read per frame as the damping value (std `op.wave({damping})`). */ dampingProp: string; /** Prop name read per frame as the brush radius (std `op.splat({radius})`). */ radiusProp: string; /** UI radius → field-space radius scale. */ radiusScale: number; /** Pointer-speed clamp (std `pointerSpeed({max})`). */ speedMax: number; } export interface WaveFieldSim { /** The RG displacement-gradient texture (a registered compute texture). */ displacement: KitTexture; getComputeNodes: (frameParams: unknown) => ComputeStep[] | null; } /** * The per-instance wave-field runtime: two ping-pong height-field state buffers * (createStateBuffer; WebGPU zero-inits → the field starts flat), two dispatches/frame — * propagation (+ cursor injection) then the gradient pass writing the RG displacement texture. * Child-independent (a pure wave field), so there is no bindInputs. Returns null when the * composition has no GPU root (GPU-free resolve/tests fall back to zero displacement). */ export declare function createWaveFieldSim(params: GpuFragmentParams, config: WaveFieldConfig): WaveFieldSim | null; export {}; //# sourceMappingURL=waves.d.ts.map