import { DepthTexture, FloatType, IUniform, Texture, TextureDataType, UnsignedIntType, UnsignedShortType, WebGLRenderTarget } from 'three';
import { GBufferRenderPass } from '../../postprocessing';
import { ThreeViewer } from '../../viewer';
import { MaterialExtension } from '../../materials';
import { PipelinePassPlugin } from '../base/PipelinePassPlugin';
import { ICamera, IRenderManager, IScene, ITexture } from '../../core';
import { GBufferMaterial, GBufferUpdater } from './GBufferMaterial';
import { IRenderTarget } from '../../rendering';
export type GBufferPluginTarget = WebGLRenderTarget & IRenderTarget;
export type GBufferPluginPass = GBufferRenderPass<'gbuffer', GBufferPluginTarget | undefined>;
/**
 * G-Buffer Plugin
 *
 * Adds a pre-render pass to render the g-buffer(depth+normal+flags) to render target(s) that can be used as gbuffer and for postprocessing.
 * @category Plugins
 */
export declare class GBufferPlugin extends PipelinePassPlugin<GBufferPluginPass, 'gbuffer'> {
    renderFlagsBuffer: boolean;
    renderDepthTexture: boolean;
    depthTextureType: typeof UnsignedShortType | typeof UnsignedIntType | typeof FloatType;
    readonly passId = "gbuffer";
    static readonly PluginType = "GBuffer";
    target?: GBufferPluginTarget;
    textures: Texture[];
    get normalDepthTexture(): ITexture | undefined;
    get flagsTexture(): ITexture | undefined;
    get depthTexture(): (ITexture & DepthTexture) | undefined;
    material?: GBufferMaterial;
    readonly bufferType: TextureDataType;
    readonly isPrimaryGBuffer: boolean;
    unpackExtension: MaterialExtension;
    createMaterial(): GBufferMaterial;
    private _isPrimaryGBufferSet;
    protected _createTargetAndMaterial(recreateTarget?: boolean): void;
    protected _disposeTarget(): void;
    protected _createPass(): GBufferRenderPass<"gbuffer", GBufferPluginTarget | undefined>;
    protected _beforeRender(scene: IScene, camera: ICamera, renderManager: IRenderManager): boolean;
    constructor(bufferType?: TextureDataType, isPrimaryGBuffer?: boolean, enabled?: boolean, renderFlagsBuffer?: boolean, renderDepthTexture?: boolean, depthTextureType?: typeof UnsignedShortType | typeof UnsignedIntType | typeof FloatType);
    registerGBufferUpdater(key: string, updater: GBufferUpdater['updateGBufferFlags']): void;
    unregisterGBufferUpdater(key: string): void;
    onRemove(viewer: ThreeViewer): void;
    /**
     * @deprecated use {@link normalDepthTexture} instead
     */
    getDepthNormal(): Texture<import('three').TextureEventMap> | undefined;
    /**
     * @deprecated use {@link flagsTexture} instead
     */
    getFlagsTexture(): Texture<import('three').TextureEventMap> | undefined;
    /**
     * @deprecated use {@link target} instead
     */
    getTarget(): GBufferPluginTarget | undefined;
    /**
     * @deprecated use {@link unpackExtension} instead
     */
    getUnpackSnippet(): string;
    /**
     * @deprecated use {@link unpackExtension} instead, it adds the same uniforms and defines
     * @param material
     */
    updateShaderProperties(material: {
        defines: Record<string, string | number | undefined>;
        uniforms: {
            [p: string]: IUniform;
        };
        needsUpdate?: boolean;
    }): this;
}
//# sourceMappingURL=../../src/plugins/pipeline/GBufferPlugin.d.ts.map