/** * Component configuration from JSON preset */ export interface ComponentConfig { type: string; id?: string; props?: Record; children?: ComponentConfig[]; } /** * Preset configuration structure */ export interface PresetConfig { components: ComponentConfig[]; structureVersion?: number; } /** * Options for creating a preset renderer */ export interface PresetRendererOptions { enablePerformanceTracking?: boolean; gpu?: { device: GPUDevice; adapter: GPUAdapter; }; context?: WebGLRenderingContext | WebGL2RenderingContext; forceFullFrameRate?: boolean; } /** * GPU context information for sharing with other renderers */ export interface GPUContext { type: 'webgpu' | 'webgl'; device?: GPUDevice; adapter?: GPUAdapter; context?: WebGLRenderingContext | WebGL2RenderingContext; canvas: HTMLCanvasElement; } /** * Create a renderer from preset JSON configuration * Provides manual render control for integration with third-party tools * * @example * ```typescript * const preset = { * components: [ * { * type: 'RadialGradient', * props: { * color1: '#ff0000', * color2: '#0000ff' * } * } * ] * } * * const renderer = createRendererFromJSON(preset) * await renderer.initialize(canvas) * * // Manual render loop * function animate() { * await renderer.renderFrame() * requestAnimationFrame(animate) * } * animate() * ``` */ export declare function createRendererFromJSON(preset: PresetConfig, options?: PresetRendererOptions): { initialize: (canvas: HTMLCanvasElement) => Promise; renderFrame: (options?: { waitForGpu?: boolean; }) => Promise; updatePreset: (newPreset: PresetConfig) => void; getGPUContext: () => GPUContext; dispose: () => void; /** * Subscribe to "this environment can never run WebGPU" (or the GPU proved unusable at * runtime). Fires at most once; by then every GPU resource has been released and the * frame loop stopped. `initialize()` resolves normally in that case and * `renderFrame()` becomes a no-op, so a partner render loop keeps running safely — * subscribe here if you want to swap in a static fallback instead. */ setOnUnavailable: (callback: ((reason: import('.').GpuFailureReason, error?: unknown) => void) | null) => void; /** Why the renderer gave up, or `null` while it is healthy. */ getFailureReason: () => import('.').GpuFailureReason | null; }; //# sourceMappingURL=presetRenderer.d.ts.map