/// <reference types="@webgpu/types" />
import type { CurrentReadable, CurrentWritable } from './current-value.js';
import { type FragMaterial } from './material.js';
import { type MotionGPUErrorReport } from './error-report.js';
import type { FrameRegistry } from './frame-registry.js';
import type { AnyPass, ColorPipelineOptions, FrameInvalidationToken, RenderTargetDefinitionMap } from './types.js';
export interface MotionGPURuntimeLoopOptions {
    canvas: HTMLCanvasElement;
    registry: FrameRegistry;
    size: CurrentWritable<{
        width: number;
        height: number;
    }>;
    dpr: CurrentReadable<number>;
    maxDelta: CurrentReadable<number>;
    getMaterial: () => FragMaterial;
    getRenderTargets: () => RenderTargetDefinitionMap;
    getPasses: () => AnyPass[];
    getClearColor: () => [number, number, number, number];
    getColor?: () => ColorPipelineOptions | undefined;
    getAdapterOptions: () => GPURequestAdapterOptions | undefined;
    getDeviceDescriptor: () => GPUDeviceDescriptor | undefined;
    getOnError: () => ((report: MotionGPUErrorReport) => void) | undefined;
    reportError: (report: MotionGPUErrorReport | null) => void;
    getErrorHistoryLimit?: () => number | undefined;
    getOnErrorHistory?: () => ((history: MotionGPUErrorReport[]) => void) | undefined;
    reportErrorHistory?: (history: MotionGPUErrorReport[]) => void;
}
export interface MotionGPURuntimeLoop {
    requestFrame: () => void;
    invalidate: (token?: FrameInvalidationToken) => void;
    advance: () => void;
    destroy: () => void;
}
export declare function createMotionGPURuntimeLoop(options: MotionGPURuntimeLoopOptions): MotionGPURuntimeLoop;
//# sourceMappingURL=runtime-loop.d.ts.map