import { Cell } from '../../reactive'; import { Camera, Scene, WebGLRenderer, Object3D, Raycaster, Vector2 } from 'three'; export declare const TRES_CONTEXT: unique symbol; export interface TresContextState { scene: Scene; camera: Cell; cameras: Cell; renderer: Cell; raycaster: Raycaster | null; pointer: Vector2 | null; onBeforeRender: Set<(state: TresContextState, delta: number) => void>; onAfterRender: Set<(state: TresContextState, delta: number) => void>; interactiveObjects: Set; isRunning: Cell; } export interface TresContext { /** The Three.js scene */ scene: Scene; /** Get the active camera */ getCamera(): Camera | null; /** Get all registered cameras */ getCameras(): Camera[]; /** Get the WebGL renderer */ getRenderer(): WebGLRenderer | null; /** Register a callback to run before each render */ onBeforeRender(callback: (state: TresContextState, delta: number) => void): () => void; /** Register a callback to run after each render */ onAfterRender(callback: (state: TresContextState, delta: number) => void): () => void; /** Register an object for pointer events */ registerInteractiveObject(object: Object3D): void; /** Unregister an object from pointer events */ unregisterInteractiveObject(object: Object3D): void; /** Pause the render loop */ pause(): void; /** Resume the render loop */ resume(): void; /** Check if the render loop is running */ isRunning(): boolean; /** Internal state (for advanced use) */ state: TresContextState; } /** * Create a new Tres context state */ export declare function createTresContextState(scene: Scene): TresContextState; /** * Create a Tres context from state */ export declare function createTresContext(state: TresContextState): TresContext;