import type { BufferAttribute, Renderer, WebGPURenderer } from 'three/webgpu'; import type { WebGLRenderer } from 'three'; interface RendererBindingGroup { bindings?: readonly unknown[]; } interface RendererRenderObject { material?: unknown; getBindings?: () => unknown; onDispose: () => void; } /** Narrow the renderer callback's legacy WebGL type to the r185 WebGPU renderer marker. */ declare function isWebGPURenderer(renderer: WebGLRenderer | WebGPURenderer): renderer is WebGPURenderer; /** * Ensure an r185 renderer backend has allocated a storage attribute before readback. * Both methods are private backend capabilities and are intentionally probed at runtime. */ declare function ensureRendererStorageAttribute(renderer: Renderer, attribute: BufferAttribute): void; /** Return whether the renderer has a compiled pipeline for a compute node. */ declare function rendererHasComputePipeline(renderer: Renderer | null, computeNode: object): boolean; /** Read the r185 node-manager binding groups associated with a compute node. */ declare function getRendererComputeBindingGroups(renderer: Renderer | null, computeNode: object): readonly RendererBindingGroup[]; declare function getRendererBindingGroupBindings(bindGroup: RendererBindingGroup): readonly unknown[]; /** * Destroy the backend buffer owned by a binding, then delete its r185 DataMap entry. * Render-object cleanup can require an existing entry; compute cleanup intentionally * follows the historical behavior and lets backend.get() materialize an empty entry. */ declare function destroyRendererBindingBuffer(renderer: Renderer | null, binding: object, clearBufferReference: boolean, requireExisting: boolean): void; /** Delete a BufferAttribute from the renderer's private r185 attribute manager. */ declare function deleteRendererAttribute(renderer: Renderer | null, attribute: BufferAttribute): void; /** * Patch the r185 RenderObjects factory once for the renderer lifetime. * The runtime predicate keeps the private factory result structural and bounded. */ declare function patchRendererRenderObjectFactory(renderer: Renderer | null, installedKey: symbol, decorate: (renderObject: RendererRenderObject) => void): void; declare function getRendererRenderObjectBindingGroups(renderObject: RendererRenderObject): readonly RendererBindingGroup[]; export { deleteRendererAttribute, destroyRendererBindingBuffer, ensureRendererStorageAttribute, getRendererBindingGroupBindings, getRendererComputeBindingGroups, getRendererRenderObjectBindingGroups, isWebGPURenderer, patchRendererRenderObjectFactory, rendererHasComputePipeline, }; export type { RendererRenderObject };