import { Box3, RGBA } from "../utils/math3d";
import { ILogger } from "./logger";
import { RpcSafeClient, SceneSettings } from "./rpcSafeClient";
import { ClientStreamError } from "./socketClient";
/**
 * Render settings that extend SceneSettings with additional rendering-specific properties
 */
export type RenderSettings = SceneSettings & {
    /** Whether to lock the Image-Based Lighting rotation */
    lockIblRotation: boolean;
    /** Color used for ghost/transparent rendering */
    ghostColor: RGBA;
};
/**
 * Default rendering settings
 */
export declare const defaultRenderSettings: RenderSettings;
/**
 * Interface defining the basic renderer capabilities
 */
export interface IRenderer {
    ghostColor: RGBA;
    lockIblRotation: boolean;
    hdrScale: number;
    toneMappingWhitePoint: number;
    hdrBackgroundScale: number;
    hdrBackgroundSaturation: number;
    backgroundBlur: number;
    backgroundColor: RGBA;
    getBoundingBox(): Promise<Box3 | undefined>;
}
/**
 * Renderer class that handles 3D scene rendering and settings management
 */
export declare class Renderer implements IRenderer {
    private _rpc;
    private _logger;
    private _settings;
    private _animationFrame;
    private _updateLighting;
    private _updateGhostColor;
    private _updateIblRotation;
    /**
     * Creates a new Renderer instance
     * @param rpc - RPC client for communication with the rendering backend
     * @param settings - Optional partial render settings to override defaults
     */
    constructor(rpc: RpcSafeClient, logger: ILogger, settings?: Partial<RenderSettings>);
    /**
     * Validates the connection to the server by attempting to start a scene.
     * @returns A promise that resolves to a ClientStreamError if the connection fails, or undefined if successful.
     */
    validateConnection(): Promise<ClientStreamError | undefined>;
    /**
     * Initializes the renderer when connection is established
     * Sets up initial scene settings, ghost color, and IBL rotation
     */
    onConnect(): void;
    /**
     * Gets the ghost color used for transparent rendering
     * @returns Current ghost color as RGBA
     */
    get ghostColor(): RGBA;
    /**
     * Gets the IBL rotation lock setting
     * @returns Whether IBL rotation is locked
     */
    get lockIblRotation(): boolean;
    /**
     * Gets the tone mapping white point value
     * @returns Current tone mapping white point
     */
    get toneMappingWhitePoint(): number;
    /**
     * Gets the HDR scale value
     * @returns Current HDR scale
     */
    get hdrScale(): number;
    /**
     * Gets the HDR background scale value
     * @returns Current HDR background scale
     */
    get hdrBackgroundScale(): number;
    /**
     * Gets the HDR background saturation value
     * @returns Current HDR background saturation
     */
    get hdrBackgroundSaturation(): number;
    /**
     * Gets the background blur value
     * @returns Current background blur
     */
    get backgroundBlur(): number;
    /**
     * Gets the background color
     * @returns Current background color as RGBA
     */
    get backgroundColor(): RGBA;
    /**
     * Updates the ghost color used for transparent rendering
     * @param value - New ghost color as RGBA
     */
    set ghostColor(value: RGBA);
    /**
     * Updates the IBL rotation lock setting
     * @param value - Whether to lock IBL rotation
     */
    set lockIblRotation(value: boolean);
    /**
     * Sets the tone mapping white point value
     * @param value - New tone mapping white point value
     */
    set toneMappingWhitePoint(value: number);
    /**
     * Sets the HDR scale value
     * @param value - New HDR scale value
     */
    set hdrScale(value: number);
    /**
     * Sets the HDR background scale value
     * @param value - New HDR background scale value
     */
    set hdrBackgroundScale(value: number);
    /**
     * Sets the HDR background saturation value
     * @param value - New HDR background saturation value
     */
    set hdrBackgroundSaturation(value: number);
    /**
     * Sets the background blur value
     * @param value - New background blur value
     */
    set backgroundBlur(value: number);
    /**
     * Sets the background color
     * @param value - New background color as RGBA
     */
    set backgroundColor(value: RGBA);
    getBoundingBox(): Promise<Box3 | undefined>;
    /**
     * Requests an update to be performed on the next animation frame.
     * Multiple setting changes will be batched into a single update.
     * @private
     */
    private requestSettingsUpdate;
    private applySettings;
    /**
     * Cleans up renderer resources
     * Cancels any pending animation frames
     */
    dispose(): void;
}
