{"version":3,"file":"GpuMeshAdapter.mjs","sources":["../../../../src/scene/mesh/gpu/GpuMeshAdapter.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { compileHighShaderGpuProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { localUniformBit } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBit } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { textureBit } from '../../../rendering/high-shader/shader-bits/textureBit';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport { warn } from '../../../utils/logging/warn';\n\nimport type { WebGPURenderer } from '../../../rendering/renderers/gpu/WebGPURenderer';\nimport type { Mesh } from '../shared/Mesh';\nimport type { MeshAdaptor, MeshPipe } from '../shared/MeshPipe';\n\n/**\n * The WebGL adaptor for the mesh system. Allows the Mesh System to be used with the WebGl renderer\n * @memberof rendering\n * @ignore\n */\nexport class GpuMeshAdapter implements MeshAdaptor\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGPUPipesAdaptor,\n        ],\n        name: 'mesh',\n    } as const;\n\n    private _shader: Shader;\n\n    public init(): void\n    {\n        const gpuProgram = compileHighShaderGpuProgram({\n            name: 'mesh',\n            bits: [\n                localUniformBit,\n                textureBit,\n                roundPixelsBit,\n            ]\n        });\n\n        this._shader = new Shader({\n            gpuProgram,\n            resources: {\n                uTexture: Texture.EMPTY._source,\n                uSampler: Texture.EMPTY._source.style,\n                textureUniforms: {\n                    uTextureMatrix: { type: 'mat3x3<f32>', value: new Matrix() },\n                }\n            }\n        });\n    }\n\n    public execute(meshPipe: MeshPipe, mesh: Mesh)\n    {\n        const renderer = meshPipe.renderer as WebGPURenderer;\n\n        let shader: Shader = mesh._shader;\n\n        if (!shader)\n        {\n            shader = this._shader;\n\n            shader.groups[2] = renderer.texture.getTextureBindGroup(mesh.texture);\n        }\n        else if (!shader.gpuProgram)\n        {\n            // #if _DEBUG\n            warn('Mesh shader has no gpuProgram', mesh.shader);\n            // #endif\n\n            return;\n        }\n\n        const gpuProgram = shader.gpuProgram;\n        // GPU..\n\n        if (gpuProgram.autoAssignGlobalUniforms)\n        {\n            shader.groups[0] = renderer.globalUniforms.bindGroup;\n        }\n\n        if (gpuProgram.autoAssignLocalUniforms)\n        {\n            const localUniforms = meshPipe.localUniforms;\n\n            shader.groups[1] = (renderer as WebGPURenderer)\n                .renderPipes.uniformBatch.getUniformBindGroup(localUniforms, true);\n        }\n\n        renderer.encoder.draw({\n            geometry: mesh._geometry,\n            shader,\n            state: mesh.state\n        });\n    }\n\n    public destroy(): void\n    {\n        this._shader.destroy(true);\n        this._shader = null;\n    }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAmBO,MAAM,cACb,CAAA;AAAA,EAWW,IACP,GAAA;AACI,IAAA,MAAM,aAAa,2BAA4B,CAAA;AAAA,MAC3C,IAAM,EAAA,MAAA;AAAA,MACN,IAAM,EAAA;AAAA,QACF,eAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAED,IAAK,IAAA,CAAA,OAAA,GAAU,IAAI,MAAO,CAAA;AAAA,MACtB,UAAA;AAAA,MACA,SAAW,EAAA;AAAA,QACP,QAAA,EAAU,QAAQ,KAAM,CAAA,OAAA;AAAA,QACxB,QAAA,EAAU,OAAQ,CAAA,KAAA,CAAM,OAAQ,CAAA,KAAA;AAAA,QAChC,eAAiB,EAAA;AAAA,UACb,gBAAgB,EAAE,IAAA,EAAM,eAAe,KAAO,EAAA,IAAI,QAAS,EAAA;AAAA,SAC/D;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AAAA,EAEO,OAAA,CAAQ,UAAoB,IACnC,EAAA;AACI,IAAA,MAAM,WAAW,QAAS,CAAA,QAAA,CAAA;AAE1B,IAAA,IAAI,SAAiB,IAAK,CAAA,OAAA,CAAA;AAE1B,IAAA,IAAI,CAAC,MACL,EAAA;AACI,MAAA,MAAA,GAAS,IAAK,CAAA,OAAA,CAAA;AAEd,MAAA,MAAA,CAAO,OAAO,CAAC,CAAA,GAAI,SAAS,OAAQ,CAAA,mBAAA,CAAoB,KAAK,OAAO,CAAA,CAAA;AAAA,KACxE,MAAA,IACS,CAAC,MAAA,CAAO,UACjB,EAAA;AAEI,MAAK,IAAA,CAAA,+BAAA,EAAiC,KAAK,MAAM,CAAA,CAAA;AAGjD,MAAA,OAAA;AAAA,KACJ;AAEA,IAAA,MAAM,aAAa,MAAO,CAAA,UAAA,CAAA;AAG1B,IAAA,IAAI,WAAW,wBACf,EAAA;AACI,MAAA,MAAA,CAAO,MAAO,CAAA,CAAC,CAAI,GAAA,QAAA,CAAS,cAAe,CAAA,SAAA,CAAA;AAAA,KAC/C;AAEA,IAAA,IAAI,WAAW,uBACf,EAAA;AACI,MAAA,MAAM,gBAAgB,QAAS,CAAA,aAAA,CAAA;AAE/B,MAAO,MAAA,CAAA,MAAA,CAAO,CAAC,CAAK,GAAA,QAAA,CACf,YAAY,YAAa,CAAA,mBAAA,CAAoB,eAAe,IAAI,CAAA,CAAA;AAAA,KACzE;AAEA,IAAA,QAAA,CAAS,QAAQ,IAAK,CAAA;AAAA,MAClB,UAAU,IAAK,CAAA,SAAA;AAAA,MACf,MAAA;AAAA,MACA,OAAO,IAAK,CAAA,KAAA;AAAA,KACf,CAAA,CAAA;AAAA,GACL;AAAA,EAEO,OACP,GAAA;AACI,IAAK,IAAA,CAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AACzB,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AAAA,GACnB;AACJ,CAAA;AAAA;AApFa,cAAA,CAGK,SAAY,GAAA;AAAA,EACtB,IAAM,EAAA;AAAA,IACF,aAAc,CAAA,kBAAA;AAAA,GAClB;AAAA,EACA,IAAM,EAAA,MAAA;AACV,CAAA;;;;"}