///
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;
}