/** * Instanced Particle Renderer for WebGPU Physics * * Efficiently renders 100K+ particles using GPU instancing. * Supports LOD (Level of Detail), frustum culling, and async buffer readback. * * @module gpu/InstancedRenderer */ import type { WebGPUContext } from './WebGPUContext.js'; export interface InstancedRendererOptions { /** Maximum number of particles to render */ maxParticles: number; /** Sphere geometry quality (number of segments) */ sphereSegments?: number; /** Enable LOD (Level of Detail) based on distance */ enableLOD?: boolean; /** LOD distance thresholds [near, medium, far] */ lodDistances?: [number, number, number]; /** Enable frustum culling */ enableFrustumCulling?: boolean; } export interface CameraParams { position: [number, number, number]; target: [number, number, number]; fov: number; aspect: number; near: number; far: number; } /** * Instanced Particle Renderer * * Renders large numbers of particles efficiently using GPU instancing. * Integrates with WebGPU physics simulation for optimal performance. * * @example * ```typescript * const renderer = new InstancedRenderer(context, canvas, { * maxParticles: 100000, * sphereSegments: 16, * enableLOD: true, * }); * * await renderer.initialize(); * * // Each frame: * const particleData = await bufferManager.downloadParticleData(); * renderer.render(particleData.positions, camera); * ``` */ export declare class InstancedRenderer { private context; private device; private canvas; private gpuContext; private options; private pipeline; private vertexBuffer; private indexBuffer; private instanceBuffer; private uniformBuffer; private indexCount; private vertexCount; private lastFrameTime; private frameCount; constructor(context: WebGPUContext, canvas: HTMLCanvasElement, options: InstancedRendererOptions); /** * Initialize renderer */ initialize(): Promise; /** * Create sphere geometry */ private createSphereGeometry; /** * Create vertex buffer */ private createVertexBuffer; /** * Create index buffer */ private createIndexBuffer; /** * Create instance and uniform buffers */ private createBuffers; /** * Create render pipeline */ private createRenderPipeline; /** * Update instance buffer with particle data */ updateInstances(positions: Float32Array, count: number): void; /** * Update camera uniforms */ updateCamera(camera: CameraParams): void; /** * Build view matrix (lookAt) */ private buildViewMatrix; /** * Build projection matrix (perspective) */ private buildProjectionMatrix; /** * Render particles */ render(positions: Float32Array, particleCount: number, camera: CameraParams): void; /** * Vector math helpers */ private normalize; private cross; private dot; /** * Cleanup resources */ destroy(): void; } //# sourceMappingURL=InstancedRenderer.d.ts.map