import { IMaterial, IMaterialParameters, PhysicalMaterial } from '../../core';
import { BufferGeometry, Camera, Group, NormalMapTypes, Object3D, Scene, ShaderMaterialParameters, Vector4, WebGLRenderer } from 'three';
import { ShaderMaterial2 } from '../../core/material/ShaderMaterial2';
export interface GBufferUpdaterContext {
    material: IMaterial;
    renderer: WebGLRenderer;
    scene: Scene;
    camera: Camera;
    geometry: BufferGeometry;
    object: Object3D;
}
export interface GBufferUpdater {
    updateGBufferFlags: (data: Vector4, context: GBufferUpdaterContext) => void;
}
/**
 * Renders DepthNormal to a texture and flags to another
 */
export declare class GBufferMaterial extends ShaderMaterial2 {
    constructor(multipleRT?: boolean, parameters?: ShaderMaterialParameters & IMaterialParameters);
    flagUpdaters: Map<string, GBufferUpdater['updateGBufferFlags']>;
    normalMapType: NormalMapTypes;
    flatShading: boolean;
    onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void;
    protected _updateFlagsUniform(flags: Vector4, material: IMaterial & Partial<PhysicalMaterial>, renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D): void;
    onAfterRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void;
    reset(): void;
}
/**
 * @deprecated use GBufferMaterial instead
 */
export declare class DepthNormalMaterial extends GBufferMaterial {
    constructor(multipleRT: boolean, parameters?: ShaderMaterialParameters & IMaterialParameters);
}
//# sourceMappingURL=../../src/plugins/pipeline/GBufferMaterial.d.ts.map