import { WebGLRenderingContextWithProgram } from "../types/index";
import Scene from "./interface/Scene";
declare type SceneChangeCallback = (scene: Scene, index: number) => void;
declare type ListenerType = 'sceneChange';
declare type ListenerCallback = SceneChangeCallback;
/**
 * 容器
 * */
export default class Pano {
    /**
     * @static {WebGLProgram} CubeGLProgram 立方体 WebGL 程序对象
     * */
    static CubeGLProgram: WebGLProgram;
    /**
     * @static {WebGLProgram} SphereGLProgram 球体 WebGL 程序对象
     * */
    static SphereGLProgram: WebGLProgram;
    /**
     * 初始化着色器程序
     * */
    initShader(): void;
    /**
     * @property {HTMLElement} container 容器
     * */
    container: HTMLElement;
    /**
     * @property {HTMLCanvasElement} canvas canvas节点
     * */
    canvas: HTMLCanvasElement;
    /**
     * @property {WebGLRenderingContextWithProgram} gl WebGL绘制上下文
     * */
    gl: WebGLRenderingContextWithProgram;
    /**
     * @property {Scene[]} scenes 场景列表
     * */
    scenes: Scene[];
    /**
     * @property {number} sceneIndex 当前场景
     * */
    sceneIndex: number;
    /**
     * 是否已经渲染
     * */
    rendered: boolean;
    /**
     * 设置样式
     * */
    setStyle(): void;
    /**
     * container 尺寸变化监听，重新渲染
     * */
    onContainerResize(): void;
    /**
     * @constructor
     * @param {string} containerId 容器节点id
     * @param {boolean} debug 是否开启debug
     * */
    constructor(containerId: string, debug?: boolean);
    /**
     * 场景变化的回调函数
     * */
    sceneChangeCallbacks: SceneChangeCallback[];
    /**
     * 添加回调函数
     * @param {ListenerType} type 监听类型，预定义好的
     * @param {ListenerCallback} callback 回调函数
     * */
    addListener(type: ListenerType, callback: ListenerCallback): void;
    /**
     * 添加回调函数
     * @param {ListenerType} type 监听类型，预定义好的
     * @param {ListenerCallback} callback 回调函数
     * */
    removeListener(type: ListenerType, callback: ListenerCallback): void;
    /**
     * 移除所有监听
     * */
    removeAllListeners(): void;
    /**
     * 添加场景
     * @param {Scene} scene 场景
     * */
    addScene(scene: Scene): void;
    /**
     * 切换场景
     * @param {number} sceneIndex 切换后的场景
     * */
    switchScene: (sceneIndex: number) => void;
    /**
     * 渲染当前 Scene 到 canvas
     * */
    render(): void;
    /**
     * 获取当前场景索引
     * @return {Scene} 当前场景
     * */
    getCurrentScene(): Scene;
    /**
     * 设置当前场景
     * @param {Scene | number} scene 场景实例，或者场景索引
     * */
    setScene(scene: Scene | number): void;
}
export {};
