/// import { mat4, vec3 } from 'gl-matrix'; import { Entity, Frustum, GLSLContext } from '../..'; import { IAttribute, IAttributeInitializationOptions } from './IAttribute'; import { IBuffer, IBufferInitializationOptions } from './IBuffer'; import { IComputeModel } from './IComputeModel'; import { IElements, IElementsInitializationOptions } from './IElements'; import { IFramebuffer, IFramebufferInitializationOptions } from './IFramebuffer'; import { IModel, IModelInitializationOptions } from './IModel'; import { IPass } from './IMultiPassRenderer'; import { ITexture2D, ITexture2DInitializationOptions } from './ITexture2D'; export interface ICamera { getFrustum(): Frustum; getViewTransform(): mat4; getWorldTransform(): mat4; getPerspective(): mat4; getPosition(): vec3; getProjectionMode(): string; rotate(azimuth: number, elevation: number, roll: number): void; pan(tx: number, ty: number): void; dolly(value: number): void; changeAzimuth(az: number): void; changeElevation(el: number): void; } export interface IScene { getEntities(): Entity[]; } export interface IViewport { x: number; y: number; width: number; height: number; } export interface IView { getCamera(): ICamera; getScene(): IScene; getViewport(): IViewport; getClearColor(): [number, number, number, number]; setCamera(camera: ICamera): IView; setScene(scene: IScene): IView; setViewport(viewport: IViewport): IView; setClearColor(clearColor: [number, number, number, number]): IView; pick(position: { x: number; y: number; }, view: IView): number | undefined; } export interface IRendererConfig { canvas: HTMLCanvasElement; /** * Whether to use WGSL instead of GLSL 450 */ useWGSL?: boolean; /** * 是否开启 multi pass */ enableMultiPassRenderer?: boolean; passes?: Array>; antialias?: boolean; preserveDrawingBuffer?: boolean; /** * Defines the category of adapter to use. * Is it the discrete or integrated device. */ powerPreference?: GPUPowerPreference; /** * Defines the device descriptor used to create a device. */ deviceDescriptor?: GPUDeviceDescriptor; /** * Defines the requested Swap Chain Format. */ swapChainFormat?: GPUTextureFormat; /** * Defines wether MSAA is enabled on the canvas. */ antialiasing?: boolean; /** * Whether to support ComputePipeline. */ supportCompute?: boolean; } export interface IClearOptions { color?: [number, number, number, number]; depth?: number; stencil?: number; framebuffer?: IFramebuffer | null; } export interface IReadPixelsOptions { x: number; y: number; width: number; height: number; framebuffer?: IFramebuffer; data?: Uint8Array; } export declare type BufferData = number[] | Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array; export interface IRendererService { supportWebGPU: boolean; useWGSL: boolean; init(cfg: IRendererConfig): Promise; clear(options: IClearOptions): void; createModel(options: IModelInitializationOptions): Promise; createAttribute(options: IAttributeInitializationOptions): IAttribute; createBuffer(options: IBufferInitializationOptions): IBuffer; createElements(options: IElementsInitializationOptions): IElements; createTexture2D(options: ITexture2DInitializationOptions | HTMLImageElement): ITexture2D; createFramebuffer(options: IFramebufferInitializationOptions): IFramebuffer; useFramebuffer(framebuffer: IFramebuffer | null, drawCommands: () => void): void; getCanvas(): HTMLCanvasElement; getGLContext(): WebGLRenderingContext; viewport(size: { x: number; y: number; width: number; height: number; }): void; readPixels(options: IReadPixelsOptions): Uint8Array; setScissor(scissor: Partial<{ enable: boolean; box: { x: number; y: number; width: number; height: number; }; }>): void; destroy(): void; beginFrame(): void; endFrame(): void; createComputeModel(context: GLSLContext): Promise; }