{"version":3,"file":"GlBatchAdaptor.mjs","sources":["../../../../src/rendering/batcher/gl/GlBatchAdaptor.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { State } from '../../renderers/shared/state/State';\n\nimport type { WebGLRenderer } from '../../renderers/gl/WebGLRenderer';\nimport type { Geometry } from '../../renderers/shared/geometry/Geometry';\nimport type { Shader } from '../../renderers/shared/shader/Shader';\nimport type { Batch } from '../shared/Batcher';\nimport type { BatcherAdaptor, BatcherPipe } from '../shared/BatcherPipe';\n\n/**\n * A BatcherAdaptor that uses WebGL to render batches.\n * @category rendering\n * @ignore\n */\nexport class GlBatchAdaptor implements BatcherAdaptor\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLPipesAdaptor,\n        ],\n        name: 'batch',\n    } as const;\n\n    private readonly _tempState = State.for2d();\n\n    /**\n     * We only want to sync the a batched shaders uniforms once on first use\n     * this is a hash of shader uids to a boolean value.  When the shader is first bound\n     * we set the value to true.  When the shader is bound again we check the value and\n     * if it is true we know that the uniforms have already been synced and we skip it.\n     */\n    private _didUploadHash: Record<string, boolean> = {};\n    public init(batcherPipe: BatcherPipe): void\n    {\n        batcherPipe.renderer.runners.contextChange.add(this);\n    }\n\n    public contextChange(): void\n    {\n        this._didUploadHash = {};\n    }\n\n    public start(batchPipe: BatcherPipe, geometry: Geometry, shader: Shader): void\n    {\n        const renderer = batchPipe.renderer as WebGLRenderer;\n\n        const didUpload = this._didUploadHash[shader.uid];\n\n        // only want to sync the shade ron its first bind!\n        renderer.shader.bind(shader, didUpload);\n\n        if (!didUpload)\n        {\n            this._didUploadHash[shader.uid] = true;\n        }\n\n        renderer.shader.updateUniformGroup(renderer.globalUniforms.uniformGroup);\n\n        renderer.geometry.bind(geometry, shader.glProgram);\n    }\n\n    public execute(batchPipe: BatcherPipe, batch: Batch): void\n    {\n        const renderer = batchPipe.renderer as WebGLRenderer;\n\n        this._tempState.blendMode = batch.blendMode;\n\n        renderer.state.set(this._tempState);\n\n        const textures = batch.textures.textures;\n\n        for (let i = 0; i < batch.textures.count; i++)\n        {\n            renderer.texture.bind(textures[i], i);\n        }\n\n        renderer.geometry.draw(batch.topology, batch.size, batch.start);\n    }\n}\n"],"names":[],"mappings":";;;;AAcO,MAAM,cAAA,CACb;AAAA,EADO,WAAA,GAAA;AAUH,IAAA,IAAA,CAAiB,UAAA,GAAa,MAAM,KAAA,EAAM;AAQ1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,iBAA0C,EAAC;AAAA,EAAA;AAAA,EAC5C,KAAK,WAAA,EACZ;AACI,IAAA,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAAA,EACvD;AAAA,EAEO,aAAA,GACP;AACI,IAAA,IAAA,CAAK,iBAAiB,EAAC;AAAA,EAC3B;AAAA,EAEO,KAAA,CAAM,SAAA,EAAwB,QAAA,EAAoB,MAAA,EACzD;AACI,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAE3B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAGhD,IAAA,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAEtC,IAAA,IAAI,CAAC,SAAA,EACL;AACI,MAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,IACtC;AAEA,IAAA,QAAA,CAAS,MAAA,CAAO,kBAAA,CAAmB,QAAA,CAAS,cAAA,CAAe,YAAY,CAAA;AAEvE,IAAA,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,SAAS,CAAA;AAAA,EACrD;AAAA,EAEO,OAAA,CAAQ,WAAwB,KAAA,EACvC;AACI,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAE3B,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,KAAA,CAAM,SAAA;AAElC,IAAA,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAElC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,QAAA;AAEhC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAA,EAC1C;AACI,MAAA,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,CAAC,GAAG,CAAC,CAAA;AAAA,IACxC;AAEA,IAAA,QAAA,CAAS,SAAS,IAAA,CAAK,KAAA,CAAM,UAAU,KAAA,CAAM,IAAA,EAAM,MAAM,KAAK,CAAA;AAAA,EAClE;AACJ;AAAA;AAjEa,cAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}