{"version":3,"file":"WebGPURenderer.mjs","sources":["../../../../src/rendering/renderers/gpu/WebGPURenderer.ts"],"sourcesContent":["import { extensions, ExtensionType } from '../../../extensions/Extensions';\nimport { GpuGraphicsAdaptor } from '../../../scene/graphics/gpu/GpuGraphicsAdaptor';\nimport { GpuMeshAdapter } from '../../../scene/mesh/gpu/GpuMeshAdapter';\nimport { GpuBatchAdaptor } from '../../batcher/gpu/GpuBatchAdaptor';\nimport { AbstractRenderer } from '../shared/system/AbstractRenderer';\nimport { SharedRenderPipes, SharedSystems } from '../shared/system/SharedSystems';\nimport { RendererType } from '../types';\nimport { BindGroupSystem } from './BindGroupSystem';\nimport { GpuBufferSystem } from './buffer/GpuBufferSystem';\nimport { GpuColorMaskSystem } from './GpuColorMaskSystem';\nimport { type GPU, GpuDeviceSystem } from './GpuDeviceSystem';\nimport { GpuEncoderSystem } from './GpuEncoderSystem';\nimport { GpuStencilSystem } from './GpuStencilSystem';\nimport { GpuUboSystem } from './GpuUboSystem';\nimport { GpuUniformBatchPipe } from './GpuUniformBatchPipe';\nimport { PipelineSystem } from './pipeline/PipelineSystem';\nimport { GpuRenderTargetSystem } from './renderTarget/GpuRenderTargetSystem';\nimport { GpuShaderSystem } from './shader/GpuShaderSystem';\nimport { GpuStateSystem } from './state/GpuStateSystem';\nimport { GpuTextureSystem } from './texture/GpuTextureSystem';\n\nimport type { ICanvas } from '../../../environment/canvas/ICanvas';\nimport type { PipeConstructor } from '../shared/instructions/RenderPipe';\nimport type { SharedRendererOptions } from '../shared/system/SharedSystems';\nimport type { SystemConstructor } from '../shared/system/System';\nimport type { ExtractRendererOptions, ExtractSystemTypes } from '../shared/system/utils/typeUtils';\n\nconst DefaultWebGPUSystems = [\n    ...SharedSystems,\n    GpuUboSystem,\n    GpuEncoderSystem,\n    GpuDeviceSystem,\n    GpuBufferSystem,\n    GpuTextureSystem,\n    GpuRenderTargetSystem,\n    GpuShaderSystem,\n    GpuStateSystem,\n    PipelineSystem,\n    GpuColorMaskSystem,\n    GpuStencilSystem,\n    BindGroupSystem,\n];\nconst DefaultWebGPUPipes = [...SharedRenderPipes, GpuUniformBatchPipe];\nconst DefaultWebGPUAdapters = [GpuBatchAdaptor, GpuMeshAdapter, GpuGraphicsAdaptor];\n\n// installed systems will bbe added to this array by the extensions manager..\nconst systems: { name: string; value: SystemConstructor }[] = [];\nconst renderPipes: { name: string; value: PipeConstructor }[] = [];\nconst renderPipeAdaptors: { name: string; value: any }[] = [];\n\nextensions.handleByNamedList(ExtensionType.WebGPUSystem, systems);\nextensions.handleByNamedList(ExtensionType.WebGPUPipes, renderPipes);\nextensions.handleByNamedList(ExtensionType.WebGPUPipesAdaptor, renderPipeAdaptors);\n\n// add all the default systems as well as any user defined ones from the extensions\nextensions.add(...DefaultWebGPUSystems, ...DefaultWebGPUPipes, ...DefaultWebGPUAdapters);\n\ntype WebGPUSystems = ExtractSystemTypes<typeof DefaultWebGPUSystems> &\nPixiMixins.RendererSystems &\nPixiMixins.WebGPUSystems;\n\nexport type WebGPUPipes = ExtractSystemTypes<typeof DefaultWebGPUPipes> &\nPixiMixins.RendererPipes &\nPixiMixins.WebGPUPipes;\n\n/**\n * Options for WebGPURenderer.\n * @memberof rendering\n */\nexport interface WebGPUOptions extends\n    SharedRendererOptions,\n    ExtractRendererOptions<typeof DefaultWebGPUSystems>,\n    PixiMixins.WebGPUOptions{}\n\nexport interface WebGPURenderer<T extends ICanvas = HTMLCanvasElement>\n    extends AbstractRenderer<WebGPUPipes, WebGPUOptions, T>,\n    WebGPUSystems {}\n\n/* eslint-disable max-len */\n/**\n * The WebGPU PixiJS Renderer. This renderer allows you to use the next-generation graphics API, WebGPU.\n * ```ts\n * // Create a new renderer\n * const renderer = new WebGPURenderer();\n * await renderer.init();\n *\n * // Add the renderer to the stage\n * document.body.appendChild(renderer.canvas);\n *\n * // Create a new stage\n * const stage = new Container();\n *\n * // Render the stage\n * renderer.render(stage);\n * ```\n *\n * You can use {@link rendering.autoDetectRenderer} to create a renderer that will automatically detect the best\n * renderer for the environment.\n * ```ts\n * // Create a new renderer\n * const renderer = await rendering.autoDetectRenderer();\n * ```\n *\n * The renderer is composed of systems that manage specific tasks. The following systems are added by default\n * whenever you create a WebGPU renderer:\n *\n * | WebGPU Core Systems                      | Systems that are specific to the WebGL renderer                               |\n * | ---------------------------------------- | ----------------------------------------------------------------------------- |\n * | {@link rendering.GpuUboSystem}           | This manages WebGPU uniform buffer objects feature for shaders                |\n * | {@link rendering.GpuEncoderSystem}       | This manages the WebGPU command encoder                                       |\n * | {@link rendering.GpuDeviceSystem}        | This manages the WebGPU Device and its extensions                             |\n * | {@link rendering.GpuBufferSystem}        | This manages buffers and their GPU resources, keeps everything in sync        |\n * | {@link rendering.GpuTextureSystem}       | This manages textures and their GPU resources, keeps everything in sync       |\n * | {@link rendering.GpuRenderTargetSystem}  | This manages what we render too. For example the screen, or another texture   |\n * | {@link rendering.GpuShaderSystem}        | This manages shaders, programs that run on the GPU to output lovely pixels    |\n * | {@link rendering.GpuStateSystem}         | This manages the state of the WebGPU Pipelines. eg the various flags that can be set blend modes / depthTesting etc |\n * | {@link rendering.PipelineSystem}         | This manages the WebGPU pipelines, used for rendering                         |\n * | {@link rendering.GpuColorMaskSystem}     | This manages the color mask. Used for color masking                           |\n * | {@link rendering.GpuStencilSystem}       | This manages the stencil buffer. Used primarily for masking                   |\n * | {@link rendering.BindGroupSystem}        | This manages the WebGPU bind groups. this is how data is bound to a shader when rendering |\n *\n * The breadth of the API surface provided by the renderer is contained within these systems.\n * @memberof rendering\n * @property {rendering.GpuUboSystem} ubo - UboSystem instance.\n * @property {rendering.GpuEncoderSystem} encoder - EncoderSystem instance.\n * @property {rendering.GpuDeviceSystem} device - DeviceSystem instance.\n * @property {rendering.GpuBufferSystem} buffer - BufferSystem instance.\n * @property {rendering.GpuTextureSystem} texture - TextureSystem instance.\n * @property {rendering.GpuRenderTargetSystem} renderTarget - RenderTargetSystem instance.\n * @property {rendering.GpuShaderSystem} shader - ShaderSystem instance.\n * @property {rendering.GpuStateSystem} state - StateSystem instance.\n * @property {rendering.PipelineSystem} pipeline - PipelineSystem instance.\n * @property {rendering.GpuColorMaskSystem} colorMask - ColorMaskSystem instance.\n * @property {rendering.GpuStencilSystem} stencil - StencilSystem instance.\n * @property {rendering.BindGroupSystem} bindGroup - BindGroupSystem instance.\n * @extends rendering.AbstractRenderer\n */\nexport class WebGPURenderer<T extends ICanvas = HTMLCanvasElement>\n    extends AbstractRenderer<WebGPUPipes, WebGPUOptions, T>\n    implements WebGPUSystems\n{\n    /** The WebGPU Device. */\n    public gpu: GPU;\n\n    constructor()\n    {\n        const systemConfig = {\n            name: 'webgpu',\n            type: RendererType.WEBGPU,\n            systems,\n            renderPipes,\n            renderPipeAdaptors,\n        };\n\n        super(systemConfig);\n    }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,oBAAuB,GAAA;AAAA,EACzB,GAAG,aAAA;AAAA,EACH,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AACJ,CAAA,CAAA;AACA,MAAM,kBAAqB,GAAA,CAAC,GAAG,iBAAA,EAAmB,mBAAmB,CAAA,CAAA;AACrE,MAAM,qBAAwB,GAAA,CAAC,eAAiB,EAAA,cAAA,EAAgB,kBAAkB,CAAA,CAAA;AAGlF,MAAM,UAAwD,EAAC,CAAA;AAC/D,MAAM,cAA0D,EAAC,CAAA;AACjE,MAAM,qBAAqD,EAAC,CAAA;AAE5D,UAAW,CAAA,iBAAA,CAAkB,aAAc,CAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAChE,UAAW,CAAA,iBAAA,CAAkB,aAAc,CAAA,WAAA,EAAa,WAAW,CAAA,CAAA;AACnE,UAAW,CAAA,iBAAA,CAAkB,aAAc,CAAA,kBAAA,EAAoB,kBAAkB,CAAA,CAAA;AAGjF,UAAA,CAAW,IAAI,GAAG,oBAAA,EAAsB,GAAG,kBAAA,EAAoB,GAAG,qBAAqB,CAAA,CAAA;AAkFhF,MAAM,uBACD,gBAEZ,CAAA;AAAA,EAII,WACA,GAAA;AACI,IAAA,MAAM,YAAe,GAAA;AAAA,MACjB,IAAM,EAAA,QAAA;AAAA,MACN,MAAM,YAAa,CAAA,MAAA;AAAA,MACnB,OAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,KACJ,CAAA;AAEA,IAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,GACtB;AACJ;;;;"}