UNPKG

xgpu

Version:

XGPU is an extendable library for WebGPU that provides a higher-level, easy-to-use interface for building rendering engines or processing numeric data. It handles automatic data binding, buffer alignment, variable declarations in shaders, and more. XGPU i

239 lines (238 loc) 9.03 kB
/// <reference types="dist" /> import { Bindgroup } from "../shader/Bindgroup"; import { FragmentShader } from "../shader/FragmentShader"; import { VertexAttribute } from "../shader/resources/VertexAttribute"; import { VertexBuffer } from "../shader/resources/VertexBuffer"; import { VertexShader } from "../shader/VertexShader"; import { Pipeline } from "./Pipeline"; import { BlendMode } from "../blendmodes/BlendMode"; import { DepthStencilTexture } from "./resources/textures/DepthStencilTexture"; import { MultiSampleTexture } from "./resources/textures/MultiSampleTexture"; import { RenderPassTexture } from "./resources/textures/RenderPassTexture"; import { IndexBuffer } from "./resources/IndexBuffer"; import { IShaderResource } from "../shader/resources/IShaderResource"; import { IRenderer } from "../IRenderer"; import { DrawConfig } from "./resources/DrawConfig"; import { FragmentShaderInput, FragmentShaderOutputs, VertexShaderInput, VertexShaderOutput } from "../BuiltIns"; import { VertexBufferIO } from "../shader/resources/VertexBufferIO"; import { ImageTextureIO } from "../shader/resources/ImageTextureIO"; import { PrimitiveType } from "../PrimitiveType"; import { UniformBuffer } from "../shader/resources/UniformBuffer"; import { VertexShaderDebuggerPipeline } from "./VertexShaderDebuggerPipeline"; export type HighLevelShaderResource = (IShaderResource | VertexBufferIO | ImageTextureIO | PrimitiveType | VertexAttribute); export type BindgroupDescriptor = { [key: string]: HighLevelShaderResource; }; export type DefaultBindgroup = BindgroupDescriptor & { uniforms?: UniformBuffer; buffer?: VertexBuffer; }; export type BindgroupsDescriptor = { default?: DefaultBindgroup; [key: string]: (Bindgroup | BindgroupDescriptor); }; export type VertexShaderDescriptor = { main: string; constants?: string; inputs: { [key: string]: VertexShaderInput; }; outputs: { [key: string]: VertexShaderOutput; }; } | string; export type FragmentShaderDescriptor = { main: string; constants?: string; inputs: { [key: string]: FragmentShaderInput; }; outputs: { [key: string]: FragmentShaderOutputs; }; } | string; export type RenderPipelineProperties = { vertexShader: VertexShaderDescriptor; vertexCount?: number; instanceCount?: number; debugVertexCount?: number; firstVertexId?: number; firstInstanceId?: number; cullMode?: "front" | "back" | "none"; topology?: "point-list" | "line-list" | "line-strip" | "triangle-list" | "triangle-strip"; frontFace?: "ccw" | "cw"; stripIndexFormat?: "uint16" | "uint32"; antiAliasing?: boolean; useDepthTexture?: boolean; depthTextureSize?: number; depthTest?: boolean; clearColor?: { r: number; g: number; b: number; a: number; }; blendMode?: BlendMode; bindgroups?: BindgroupsDescriptor; indexBuffer?: IndexBuffer; fragmentShader?: FragmentShaderDescriptor; }; export type RenderPipelineDescriptor = RenderPipelineProperties & BindgroupDescriptor; export declare class RenderPipeline extends Pipeline { static ON_ADDED_TO_RENDERER: string; static ON_REMOVED_FROM_RENDERER: string; static ON_DRAW_BEGIN: string; static ON_DRAW_END: string; static ON_DRAW: string; static ON_GPU_PIPELINE_BUILT: string; static ON_LOG: string; static ON_VERTEX_SHADER_CODE_BUILT: string; static ON_FRAGMENT_SHADER_CODE_BUILT: string; static ON_INIT_FROM_OBJECT: string; static ON_DEVICE_LOST: string; static ON_UPDATE_RESOURCES: string; protected _renderer: IRenderer; get renderer(): IRenderer; set renderer(renderer: IRenderer); drawConfig: DrawConfig; protected multiSampleTextureDescriptor: any; protected waitingMultisampleTexture: boolean; protected multisampleTexture: MultiSampleTexture; protected waitingDepthStencilTexture: boolean; protected depthStencilTextureDescriptor: any; protected _depthStencilTexture: DepthStencilTexture; protected renderPassTexture: RenderPassTexture; outputColor: any; renderPassDescriptor: any; protected vertexShaderDebuggerPipeline: VertexShaderDebuggerPipeline; protected gpuPipeline: GPURenderPipeline; debug: string; constructor(bgColor?: { r: number; g: number; b: number; a: number; }); get depthStencilTexture(): DepthStencilTexture; destroy(): void; initFromObject(descriptor: { cullMode?: "front" | "back" | "none"; topology?: "point-list" | "line-list" | "line-strip" | "triangle-list" | "triangle-strip"; frontFace?: "ccw" | "cw"; stripIndexFormat?: "uint16" | "uint32"; keepRendererAspectRatio?: boolean; vertexCount?: number; instanceCount?: number; debugVertexCount?: number; antiAliasing?: boolean; useDepthTexture?: boolean; depthTextureSize?: number; depthTest?: boolean; clearColor?: { r: number; g: number; b: number; a: number; }; blendMode?: BlendMode; bindgroups?: any; indexBuffer?: IndexBuffer; vertexShader: { main: string; outputs?: any; inputs?: any; constants?: string; } | string | VertexShader; fragmentShader?: { main: string; outputs?: any; inputs?: any; constants?: string; } | string | FragmentShader; [key: string]: unknown; }): any; protected _clearValue: { r: number; g: number; b: number; a: number; }; get clearValue(): { r: number; g: number; b: number; a: number; }; createColorAttachment(rgba: { r: number; g: number; b: number; a: number; }, view?: GPUTextureView): any; setupDraw(o: { vertexCount: number; instanceCount?: number; firstVertexId?: number; firstInstanceId?: number; indexBuffer?: IndexBuffer; baseVertex?: number; }): void; get debugVertexCount(): number; set debugVertexCount(n: number); get vertexCount(): number; set vertexCount(n: number); get instanceCount(): number; set instanceCount(n: number); get firstVertexId(): number; set firstVertexId(n: number); get firstInstanceId(): number; set firstInstanceId(n: number); get baseVertex(): number; set baseVertex(n: number); setupMultiSampleView(descriptor?: { size?: GPUExtent3D; format?: GPUTextureFormat; usage?: GPUTextureUsageFlags; sampleCount?: GPUSize32; alphaToCoverageEnabled?: boolean; mask?: number; resolveTarget?: GPUTextureView; }): void; setupDepthStencilView(descriptor?: { size?: GPUExtent3D; format?: "stencil8" | "depth16unorm" | "depth24plus" | "depth24plus-stencil8" | "depth32float"; usage?: GPUTextureUsageFlags; sampleCount?: number; }, depthStencilDescription?: { depthWriteEnabled: boolean; depthCompare: "never" | "less" | "equal" | "less-equal" | "greater" | "not-equal" | "greater-equal" | "always"; }, depthStencilAttachmentOptions?: any): void; get renderPassView(): GPUTextureView; get renderPass(): RenderPassTexture; get useRenderPassTexture(): boolean; protected cleanInputs(): any[]; blendMode: BlendMode; private getFragmentShaderColorOptions; protected rebuildingAfterDeviceLost: boolean; onRebuildStartAfterDeviceLost: () => void; clearAfterDeviceLostAndRebuild(): void; private buildingPipeline; buildGpuPipeline(): GPURenderPipeline; private clearOpReady; private rendererUseSinglePipeline; beginRenderPass(commandEncoder: GPUCommandEncoder, outputView?: GPUTextureView, drawCallId?: number, usingRenderPassTexture?: boolean): GPURenderPassEncoder; private handleOutputColor; update(): void; draw(renderPass: GPURenderPassEncoder): void; end(commandEncoder: GPUCommandEncoder, renderPass: any): void; get resourceDefined(): boolean; get pipeline(): GPURenderPipeline; get cullMode(): "front" | "back" | "none"; set cullMode(s: "front" | "back" | "none"); get topology(): "point-list" | "line-list" | "line-strip" | "triangle-list" | "triangle-strip"; set topology(s: "point-list" | "line-list" | "line-strip" | "triangle-list" | "triangle-strip"); get frontFace(): "ccw" | "cw"; set frontFace(s: "ccw" | "cw"); get stripIndexFormat(): "uint16" | "uint32"; set stripIndexFormat(s: "uint16" | "uint32"); }