import Bus from "./Bus";
import type { NDArray } from "ndarray";
import type { ShaderIdentifier, ShaderInfo } from "./Shaders";
import type { Shader } from "gl-shader";
import type { VisitorLike } from "./Visitor";
import type { WebGLTextureLoader } from "webgltexture-loader";
import type Node from "./Node";
type SurfaceProps = {
    children?: any;
    style?: any;
    preload?: Array<any>;
    onLoad?: () => void;
    onLoadError?: (e: Error) => void;
    onContextLost?: () => void;
    onContextRestored?: () => void;
    visitor?: VisitorLike;
    [key: string]: any;
};
export interface Surface {
    props: SurfaceProps;
    gl: WebGLRenderingContext | null;
    RenderLessElement: any;
    root: Node | null;
    id: number;
    mapRenderableContent: ((inst: any) => any) | undefined;
    getVisitors(): Array<VisitorLike>;
    getGLSize(): [number, number];
    getGLName(): string;
    getGLShortName(): string;
    captureAsDataURL(...args: any[]): string;
    captureAsBlob(...args: any[]): Promise<Blob>;
    capture(x?: number, y?: number, w?: number, h?: number): NDArray;
    redraw(): void;
    flush(): void;
    getEmptyTexture(): WebGLTexture;
    glIsAvailable(): boolean;
    rebootForDebug(): void;
    _addGLNodeChild(node: Node): void;
    _removeGLNodeChild(node: Node): void;
    _resolveTextureLoader(raw: any): {
        loader: WebGLTextureLoader | null;
        input: any;
    };
    _getShader(shaderId: ShaderIdentifier): Shader;
    _makeShader(shaderInfo: ShaderInfo): Shader;
    _draw(): void;
    _bindRootNode(): void;
}
export type SurfaceContext = {
    glParent: Node | Surface | Bus;
    glSurface: Surface;
    glSizable: {
        getGLSize(): [number, number];
    };
};
export declare const list: () => Array<Surface>;
type SurfaceOpts = {
    GLView: any;
    RenderLessElement: any;
    mapRenderableContent?: (instance: any) => any;
    requestFrame: (f: Function) => number;
    cancelFrame: (id: number) => void;
};
declare const _default: ({ GLView, RenderLessElement, mapRenderableContent, requestFrame, cancelFrame, }: SurfaceOpts) => any;
export default _default;
//# sourceMappingURL=createSurface.d.ts.map