import type { GlRenderer, RectangleLike } from '../../core';
import type { Material } from '../resources';
import type { Rectangulable } from './interfaces';
import type { Node } from './Node';
import type { SceneTree } from './SceneTree';
import type { TimelineNodeEvents, TimelineNodeProperties } from './TimelineNode';
import { Aabb2D } from '../../core';
import { TimelineNode } from './TimelineNode';
import { Viewport } from './Viewport';
export type EffectMode = 'before' | 'parent' | 'children' | 'transition';
export interface EffectProperties extends TimelineNodeProperties {
    effectMode?: EffectMode;
    glsl?: string;
    glslSrc?: string;
    material?: Material;
}
export interface EffectContext {
    redraw?: boolean;
    /** parent redraw */
    target?: Node;
    /** transition */
    from?: Viewport;
    to?: Viewport;
}
export interface EffectEvents extends TimelineNodeEvents {
    updateRect: [];
}
export interface Effect {
    on: <K extends keyof EffectEvents & string>(event: K, listener: (...args: EffectEvents[K]) => void) => this;
    once: <K extends keyof EffectEvents & string>(event: K, listener: (...args: EffectEvents[K]) => void) => this;
    off: <K extends keyof EffectEvents & string>(event: K, listener: (...args: EffectEvents[K]) => void) => this;
    emit: <K extends keyof EffectEvents & string>(event: K, ...args: EffectEvents[K]) => this;
}
export declare class Effect extends TimelineNode implements Rectangulable {
    material?: Material;
    effectMode?: EffectMode;
    glsl?: string;
    glslSrc?: string;
    protected get _effectMode(): EffectMode;
    /** Viewports */
    readonly viewport1: Viewport;
    readonly viewport2: Viewport;
    /** Render call */
    protected _renderId: number;
    protected _renderViewport?: Viewport;
    /** Temporary nodes for transition */
    protected _previousSibling?: Node;
    protected _nextSibling?: Node;
    protected _rect: RectangleLike;
    constructor(properties?: Partial<EffectProperties>, children?: Node[]);
    protected _updateProperty(key: string, value: any, oldValue: any): void;
    protected _treeEnter(tree: SceneTree): void;
    protected _treeExit(oldTree: SceneTree): void;
    protected _onProcessing(): void;
    protected _onNodeProcessed(node: Node): void;
    getRect(): Aabb2D;
    protected _processParent(): void;
    protected _processChildren(): void;
    _onProcess(delta?: number): void;
    protected _renderBefore(renderer: GlRenderer): void;
    protected _renderTransition(renderer: GlRenderer): void;
    protected _renderParentOrChildren(renderer: GlRenderer): void;
    protected _render(renderer: GlRenderer): void;
    apply(renderer: GlRenderer, viewport: Viewport, context?: EffectContext): void;
}
