import type { ILayer } from '../layer/ILayerService'; import type { IFramebuffer } from './IFramebuffer'; import type { ITexture2D } from './ITexture2D'; export declare enum PassType { Normal = "normal", PostProcessing = "post-processing" } /** * Pass 分两类: * 1. 渲染相关 eg. ClearPass、RenderPass、PickingPass、ShadowPass * 2. PostProcessing eg. CopyPass、BlurPass * 另外考虑到 Pass 之间严格的执行顺序,render 方法必须是异步的 */ export interface IPass { getName(): string; getType(): PassType; init(layer: ILayer, config?: Partial): void; render(layer: ILayer, tex?: ITexture2D): void; } /** * PostProcessing,自动切换 renderTarget * 例如最后一个 PostProcessingPass 自动切换 renderTarget 为屏幕 */ export interface IPostProcessingPass extends IPass { setRenderToScreen(renderToScreen: boolean): void; setName(name: string): void; isEnabled(): boolean; setEnabled(enabled: boolean): void; updateOptions(config: Partial): void; } export interface IPostProcessor { getReadFBO(): IFramebuffer; getWriteFBO(): IFramebuffer; resize(viewportWidth: number, viewportHeight: number): void; add(pass: IPostProcessingPass, layer: ILayer, config?: Partial): void; render(layer: ILayer): Promise; getPostProcessingPassByName(name: string): IPostProcessingPass | undefined; } export interface IMultiPassRenderer { getPostProcessor(): IPostProcessor; resize(viewportWidth: number, viewportHeight: number): void; add(pass: IPass, config?: Partial): void; render(): void; getRenderFlag(): boolean; setRenderFlag(enabled: boolean): void; setLayer(layer: ILayer): void; destroy(): void; }