import type { ComputeNode, Renderer, Vector3 } from 'three/webgpu'; import { ComputePrefixSum } from '../../../Compute/ComputePrefixSum.cjs'; import type { TSLStorageNode, TSLUintNode, TSLUniformNode } from '../../../types/tsl.cjs'; export interface MPMBinningBlockGridSize { readonly x: number; readonly y: number; readonly z: number; } export interface MPMBinningPassOptions { sourceParticles: TSLStorageNode<'struct'>; targetParticles: TSLStorageNode<'struct'>; capacity: number; particleCount: number; particleCountNode?: TSLUintNode | undefined; gridSize: TSLUniformNode<'vec3', Vector3>; blockSize?: number | undefined; workgroupSize?: number | undefined; } export interface MPMBinningComputeBatch extends Array { id: 'MPMBlockBinning'; name: 'MPMBlockBinning'; isComputeNode: true; } /** Histogram/prefix/scatter block binning with one full-struct ping-pong write. */ export declare class MPMBinningPasses { sourceParticles: TSLStorageNode<'struct'>; targetParticles: TSLStorageNode<'struct'>; capacity: number; particleCount: number; gridSize: TSLUniformNode<'vec3', Vector3>; blockSize: number; workgroupSize: number; blockGridSize: MPMBinningBlockGridSize; blockCount: number; offsets: TSLStorageNode<'uint'>; offsetsAtomic: TSLStorageNode<'uint'>; cursors: TSLStorageNode<'uint'>; prefixSum: ComputePrefixSum; clear: ComputeNode; count: ComputeNode; scatter: ComputeNode; _renderer: Renderer | null; _passes: MPMBinningComputeBatch | null; constructor({ sourceParticles, targetParticles, capacity, particleCount, gridSize, blockSize, workgroupSize, }: MPMBinningPassOptions); _buildPasses(): void; getPasses(renderer: Renderer): MPMBinningComputeBatch; setParticleCount(count: number): void; dispose(): void; }