import { type EventizedObject } from '@spearwolf/eventize';
import { Color, type Node, RenderTarget, type RenderPipeline, type WebGPURenderer } from 'three/webgpu';
import type { IPassProvider } from './IPassProvider.js';
import type { IRenderable } from './IRenderable.js';
import type { IStage } from './IStage.js';
import type { IStageRendererHost } from './IStageRendererHost.js';
export type StageRendererBuildOutputNode = (stagePasses: Node[]) => Node;
export type StageRendererParentType = IStageRendererHost | StageRenderer;
interface StageItem {
    stage: IStage & IRenderable;
    width: number;
    height: number;
}
export interface StageRenderer extends EventizedObject {
}
export declare class StageRenderer implements IStage, IRenderable, IPassProvider {
    #private;
    name: string;
    width: number;
    height: number;
    clear: boolean;
    get clearColor(): Color | null;
    set clearColor(color: Color | null | undefined);
    clearAlpha: number;
    clearColorBuffer: boolean;
    clearDepthBuffer: boolean;
    clearStencilBuffer: boolean;
    setClearColor(color: Color | null, alpha?: number): this;
    readonly stages: StageItem[];
    set renderOrder(order: string | undefined);
    protected onRenderOrderChanged(): void;
    get renderOrder(): string;
    get renderOrderArray(): string[];
    get parent(): StageRendererParentType | undefined;
    set parent(parent: StageRendererParentType | undefined);
    constructor(parent?: StageRendererParentType);
    attach(parent: StageRendererParentType): this;
    detach(): this;
    resize(width: number, height: number): void;
    protected resizeStage(stageItem: StageItem, width: number, height: number): void;
    updateFrame(now: number, deltaTime: number, frameNo: number): void;
    pipeline?: RenderPipeline;
    outputRenderTarget?: RenderTarget;
    buildOutputNode?: StageRendererBuildOutputNode;
    invalidateOutputNode(): void;
    renderTo(renderer: WebGPURenderer): void;
    asPassNode(renderer: WebGPURenderer): Node;
    dispose(): void;
    protected renderStage(stageItem: StageItem, renderer: WebGPURenderer): void;
    get orderedStages(): StageItem[];
    hasStage(stage: IStage): boolean;
    add(stage: IStage & IRenderable): this;
    remove(stage: IStage): this;
}
export {};
//# sourceMappingURL=StageRenderer.d.ts.map