import { Texture2D, TextureCubeMap } from './resources.js'; import { SpriteRenderer } from './pipelines/sprite.js'; import { SkyboxPipeline } from './pipelines/skybox.js'; import { BspSurfacePipeline } from './pipelines/bspPipeline.js'; import { Camera } from '../camera.js'; import { WebGPUContextState } from './context.js'; import { DLight } from '../dlight.js'; import { BspSurfaceGeometry } from '../bsp.js'; import { BspMap } from '../../assets/bsp.js'; import { MaterialManager } from '../materials.js'; import { CameraState } from '../types/camera.js'; export interface FrameRenderStats { batches: number; facesDrawn: number; drawCalls: number; skyDrawn: boolean; viewModelDrawn: boolean; fps: number; vertexCount: number; } export type RenderMode = 'textured' | 'wireframe' | 'solid' | 'solid-faceted' | 'worldpos-debug' | 'distance-debug'; export interface RenderModeConfig { readonly mode: RenderMode; readonly applyToAll: boolean; readonly color?: readonly [number, number, number, number]; readonly generateRandomColor?: boolean; } export interface SkyRenderState { readonly scrollSpeeds?: readonly [number, number]; readonly cubemap?: TextureCubeMap; } export interface WorldRenderState { readonly map: BspMap; readonly surfaces: readonly BspSurfaceGeometry[]; readonly textures?: ReadonlyMap; readonly materials?: MaterialManager; readonly lightStyles?: ReadonlyArray; } export interface FrameRenderOptions { readonly camera: Camera; readonly cameraState?: CameraState; readonly world?: WorldRenderState; readonly sky?: SkyRenderState; readonly timeSeconds?: number; readonly deltaTime?: number; readonly clearColor?: readonly [number, number, number, number]; readonly renderMode?: RenderModeConfig; readonly underwaterWarp?: boolean; readonly bloom?: boolean; readonly bloomIntensity?: number; readonly onDraw2D?: () => void; readonly dlights?: readonly DLight[]; readonly disableLightmaps?: boolean; readonly lightmapOnly?: boolean; readonly brightness?: number; readonly gamma?: number; readonly fullbright?: boolean; readonly ambient?: number; readonly lightStyleOverrides?: Map; readonly portalState?: ReadonlyArray; } export { WebGPUContextState }; export interface FrameContext { device: GPUDevice; commandEncoder: GPUCommandEncoder; renderTarget: GPUTextureView; depthTexture: GPUTextureView; width: number; height: number; } export declare class FrameRenderer { private context; private pipelines; private depthTexture; private copyTexture; headlessTarget: GPUTexture | null; private lastWidth; private lastHeight; private lastFrameTime; private currentFrameContext; constructor(context: WebGPUContextState, pipelines: { sprite: SpriteRenderer; skybox: SkyboxPipeline; bsp: BspSurfacePipeline; }); private ensureDepthTexture; private ensureCopyTexture; ensureHeadlessTarget(width: number, height: number): GPUTextureView; beginFrame(): FrameContext; /** * Begin 2D rendering pass. Called by WebGPURenderer.begin2D() */ begin2DPass(): void; /** * End 2D rendering pass. Called by WebGPURenderer.end2D() */ end2DPass(): void; renderFrame(options: FrameRenderOptions): FrameRenderStats; } //# sourceMappingURL=frame.d.ts.map