import Material from '../Material'; import Texture2D from '../Texture2D'; import GBuffer from './GBuffer'; import type ShadowMapPass from '../prePass/ShadowMap'; import type Scene from '../Scene'; import type Camera from '../Camera'; import Renderer, { RendererViewport } from '../Renderer'; import type Light from '../Light'; /** * Deferred renderer */ declare class DeferredRenderer { /** * Provide ShadowMapPass for shadow rendering. * @type {clay.prePass.ShadowMap} */ shadowMapPass?: ShadowMapPass; /** * If enable auto resizing from given defualt renderer size. * @type {boolean} */ autoResize: boolean; private _gBuffer; private _lightAccumFrameBuffer; private _lightAccumTex; private _fullQuadPass; private _depthWriteMat; private _directionalLightMat; private _ambientMat; private _ambientSHMat; private _ambientCubemapMat; private _emissiveOutMat; private _spotLightShader; private _pointLightShader; private _sphereLightShader; private _tubeLightShader; private _lightSphereGeo; private _lightConeGeo; private _lightCylinderGeo; private _outputPass; private _createLightPassMat; private _volumeMeshMap; private _lightShadowInfosMap; private _extraLightTypes; constructor(); extendLightType(lightType: T['type'], opts?: { fullQuad?: boolean; getLightMaterial?: (light: T) => Material; }): void; /** * Do render * @param {clay.Renderer} renderer * @param {clay.Scene} scene * @param {clay.Camera} camera */ render(renderer: Renderer, scene: Scene, camera: Camera, opts?: { /** * If not ouput and render to the target texture */ notUpdateScene?: boolean; /** * If not update the scene. */ notUpdateShadow?: boolean; /** * If using input gbuffer texture */ gBufferTexture1?: Texture2D; gBufferTexture2?: Texture2D; gBufferTexture3?: Texture2D; gBufferTexture4?: Texture2D; ssaoTexture?: Texture2D; /** * If render to target texture. */ targetTexture?: Texture2D; }): void; getTargetTexture(): Texture2D; /** * @return {clay.deferred.GBuffer} */ getGBuffer(): GBuffer; setViewport(x: RendererViewport): void; setViewport(x: number, y: number, width: number, height: number, dpr?: number): void; /** * Set renderer size. * @param {number} width * @param {number} height */ resize(width: number, height: number): void; private _renderOthers; private _accumulateLightBuffer; private _updatePCFKernel; private _prepareLightShadow; private _prepareSingleLightShadow; private _updateLightProxy; private _renderVolumeMeshList; dispose(renderer: Renderer): void; } export default DeferredRenderer;