{"version":3,"file":"GlMeshAdaptor.mjs","sources":["../../../../src/scene/mesh/gl/GlMeshAdaptor.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { textureBitGl } 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 { WebGLRenderer } from '../../../rendering/renderers/gl/WebGLRenderer';\nimport type { Mesh } from '../shared/Mesh';\nimport type { MeshAdaptor, MeshPipe } from '../shared/MeshPipe';\n\n/**\n * A MeshAdaptor that uses the WebGL to render meshes.\n * @category rendering\n * @ignore\n */\nexport class GlMeshAdaptor implements MeshAdaptor\n{\n    public static extension = {\n        type: [\n            ExtensionType.WebGLPipesAdaptor,\n        ],\n        name: 'mesh',\n    } as const;\n\n    private _shader: Shader;\n\n    public init(): void\n    {\n        const glProgram = compileHighShaderGlProgram({\n            name: 'mesh',\n            bits: [\n                localUniformBitGl,\n                textureBitGl,\n                roundPixelsBitGl,\n            ]\n        });\n\n        this._shader = new Shader({\n            glProgram,\n            resources: {\n                uTexture: Texture.EMPTY.source,\n                textureUniforms: {\n                    uTextureMatrix: { type: 'mat3x3<f32>', value: new Matrix() },\n                }\n            }\n        });\n    }\n\n    public execute(meshPipe: MeshPipe, mesh: Mesh): void\n    {\n        const renderer = meshPipe.renderer as WebGLRenderer;\n\n        let shader: Shader = mesh._shader;\n\n        if (!shader)\n        {\n            shader = this._shader;\n\n            const texture = mesh.texture;\n            const source = texture.source;\n\n            shader.resources.uTexture = source;\n            shader.resources.uSampler = source.style;\n            shader.resources.textureUniforms.uniforms.uTextureMatrix = texture.textureMatrix.mapCoord;\n        }\n        else if (!shader.glProgram)\n        {\n            // #if _DEBUG\n            warn('Mesh shader has no glProgram', mesh.shader);\n            // #endif\n\n            return;\n        }\n\n        // setting the groups to be high to be compatible and not\n        // overlap any other groups\n        shader.groups[100] = renderer.globalUniforms.bindGroup;\n        shader.groups[101] = meshPipe.localUniformsBindGroup;\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,aAAA,CACb;AAAA,EAUW,IAAA,GACP;AACI,IAAA,MAAM,YAAY,0BAAA,CAA2B;AAAA,MACzC,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACF,iBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,MAAA,CAAO;AAAA,MACtB,SAAA;AAAA,MACA,SAAA,EAAW;AAAA,QACP,QAAA,EAAU,QAAQ,KAAA,CAAM,MAAA;AAAA,QACxB,eAAA,EAAiB;AAAA,UACb,gBAAgB,EAAE,IAAA,EAAM,eAAe,KAAA,EAAO,IAAI,QAAO;AAAE;AAC/D;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EAEO,OAAA,CAAQ,UAAoB,IAAA,EACnC;AACI,IAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAE1B,IAAA,IAAI,SAAiB,IAAA,CAAK,OAAA;AAE1B,IAAA,IAAI,CAAC,MAAA,EACL;AACI,MAAA,MAAA,GAAS,IAAA,CAAK,OAAA;AAEd,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,MAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,MAAA,MAAA,CAAO,UAAU,QAAA,GAAW,MAAA;AAC5B,MAAA,MAAA,CAAO,SAAA,CAAU,WAAW,MAAA,CAAO,KAAA;AACnC,MAAA,MAAA,CAAO,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAS,cAAA,GAAiB,QAAQ,aAAA,CAAc,QAAA;AAAA,IACrF,CAAA,MAAA,IACS,CAAC,MAAA,CAAO,SAAA,EACjB;AAEI,MAAA,IAAA,CAAK,8BAAA,EAAgC,KAAK,MAAM,CAAA;AAGhD,MAAA;AAAA,IACJ;AAIA,IAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAS,cAAA,CAAe,SAAA;AAC7C,IAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAS,sBAAA;AAE9B,IAAA,QAAA,CAAS,QAAQ,IAAA,CAAK;AAAA,MAClB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,MAAA;AAAA,MACA,OAAO,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACL;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACnB;AACJ;AA5Ea,aAAA,CAEK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}