import { Event, ContextManager, Observable, Context } from '@zcomponent/core'; import * as THREE from 'three'; import { ThreeSceneContext } from './scenecontext'; import { EffectPipeline } from './effectpipeline'; export interface ThreeContextConstructorProps { canvas?: HTMLCanvasElement; renderer?: THREE.Renderer; antialias?: boolean; alpha?: boolean; shadows?: boolean; shadowMapType?: THREE.ShadowMapType; autoRender?: boolean; xrCompatible?: boolean; powerPreference?: WebGLPowerPreference; stencil?: boolean; launchButton?: Element | null; } export declare enum EncodingType { sRGBEncoding = "sRGBEncoding", LinearEncoding = "LinearEncoding" } export declare function translateEncoding(encoding: EncodingType): string | number; /** * Manages the Three.js rendering context, including the WebGL renderer, scenes, cameras, and other rendering settings. * Handles the creation and configuration of the rendering pipeline, and provides event-driven interactions for rendering. * */ export declare class ThreeContext extends Context { constructorProps: ThreeContextConstructorProps; renderer: THREE.Renderer; onObject3DConstructed: Event<[THREE.Object3D]>; onObject3DDisposed: Event<[THREE.Object3D]>; effectPipeline: Observable; scenes: THREE.Scene[]; cameras: THREE.Camera[]; toneMapping: Observable; toneMappingExposure: Observable; outputEncoding: Observable; useLegacyLights: Observable; onCameraAdded: Event<[THREE.Camera]>; onCameraRemoved: Event<[THREE.Camera]>; private _sceneContexts; private _lastBeforeRenderTime; private _lastAfterRenderTime; /** * Initializes a new instance of the ThreeContext, setting up the WebGL renderer and configuring the rendering environment. * Supports custom canvas elements, renderer options, and rendering events. * * @param {ContextManager} contextManager - The context manager for handling various contexts. * @param {ThreeContextConstructorProps} constructorProps - Properties for configuring the rendering context. */ constructor(contextManager: ContextManager, constructorProps: ThreeContextConstructorProps); render: () => void; registerSceneContext(ctx: ThreeSceneContext, priority: number): void; unregisterSceneContext(ctx: ThreeSceneContext): void; registerCamera(camera: THREE.Camera): void; unregisterCamera(camera: THREE.Camera): void; } /** * Utility function to access the renderer from the `ThreeContext`. * * @param {ContextManager} mgr - The context manager instance. * @return {THREE.Renderer} The renderer associated with the ThreeContext. */ export declare function useRenderer(mgr: ContextManager): THREE.Renderer;