import type { GlRenderer, RectangleLike, Vector2, Vector2Like } from '../../core';
import type { Texture2D } from '../resources';
import type { Rectangulable, RectangulableEvents } from './interfaces';
import type { NodeEvents } from './Node';
import { Aabb2D, Transform2D } from '../../core';
import { RenderTarget } from '../resources';
import { Node } from './Node';
export interface ViewportEvents extends NodeEvents, RectangulableEvents {
}
export interface Viewport {
    on: <K extends keyof ViewportEvents & string>(event: K, listener: (...args: ViewportEvents[K]) => void) => this;
    once: <K extends keyof ViewportEvents & string>(event: K, listener: (...args: ViewportEvents[K]) => void) => this;
    off: <K extends keyof ViewportEvents & string>(event: K, listener: (...args: ViewportEvents[K]) => void) => this;
    emit: <K extends keyof ViewportEvents & string>(event: K, ...args: ViewportEvents[K]) => this;
}
export declare class Viewport extends Node implements Rectangulable {
    readonly canvasTransform: Transform2D;
    renderTargetIndex: number;
    readonly renderTargets: RenderTarget[];
    x: number;
    y: number;
    width: number;
    height: number;
    mipLevel: number;
    msaa: boolean;
    get valid(): boolean;
    get renderTarget(): RenderTarget;
    get previousRenderTarget(): RenderTarget;
    get texture(): Texture2D<null>;
    getViewport(): Viewport;
    protected _updateProperty(key: string, value: any, oldValue: any): void;
    flush(renderer: GlRenderer): void;
    resize(width: number, height: number): void;
    activate(renderer: GlRenderer, frame?: RectangleLike): boolean;
    redraw(renderer: GlRenderer, cb: () => void): boolean;
    activateWithCopy(renderer: GlRenderer, target: Viewport): void;
    renderStart(renderer: GlRenderer, frame?: RectangleLike): void;
    renderEnd(renderer: GlRenderer, oldViewport: Viewport | undefined): void;
    render(renderer: GlRenderer, next?: () => void): void;
    getRect(): Aabb2D;
    toCanvasGlobal<P extends Vector2Like = Vector2>(screenPos: Vector2Like, newPos?: P): P;
    toCanvasScreen<P extends Vector2Like = Vector2>(globalPos: Vector2Like, newPos?: P): P;
}
