{"version":3,"file":"GlGraphicsAdaptor.mjs","sources":["../../../../src/scene/graphics/gl/GlGraphicsAdaptor.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { colorBitGl } from '../../../rendering/high-shader/shader-bits/colorBit';\nimport { generateTextureBatchBitGl } from '../../../rendering/high-shader/shader-bits/generateTextureBatchBit';\nimport { localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { getBatchSamplersUniformGroup } from '../../../rendering/renderers/gl/shader/getBatchSamplersUniformGroup';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { type Renderer } from '../../../rendering/renderers/types';\n\nimport type { Batch } from '../../../rendering/batcher/shared/Batcher';\nimport type { WebGLRenderer } from '../../../rendering/renderers/gl/WebGLRenderer';\nimport type { Graphics } from '../shared/Graphics';\nimport type { GraphicsContextSystem } from '../shared/GraphicsContextSystem';\nimport type { GraphicsAdaptor, GraphicsPipeLike } from '../shared/GraphicsPipe';\n\n/**\n * A GraphicsAdaptor that uses WebGL to render graphics.\n * @category rendering\n * @ignore\n */\nexport class GlGraphicsAdaptor implements GraphicsAdaptor\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLPipesAdaptor,\n        ],\n        name: 'graphics',\n    } as const;\n\n    public shader: Shader;\n\n    public contextChange(renderer: Renderer): void\n    {\n        const uniforms = new UniformGroup({\n            uColor: { value: new Float32Array([1, 1, 1, 1]), type: 'vec4<f32>' },\n            uTransformMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n            uRound: { value: 0, type: 'f32' },\n        });\n\n        const maxTextures = renderer.limits.maxBatchableTextures;\n\n        const glProgram = compileHighShaderGlProgram({\n            name: 'graphics',\n            bits: [\n                colorBitGl,\n                generateTextureBatchBitGl(maxTextures),\n                localUniformBitGl,\n                roundPixelsBitGl,\n            ]\n        });\n\n        this.shader = new Shader({\n            glProgram,\n            resources: {\n                localUniforms: uniforms,\n                batchSamplers: getBatchSamplersUniformGroup(maxTextures),\n            }\n        });\n    }\n\n    public execute(graphicsPipe: GraphicsPipeLike, renderable: Graphics): void\n    {\n        const context = renderable.context;\n        const shader = context.customShader || this.shader;\n        const renderer = graphicsPipe.renderer as WebGLRenderer;\n        const contextSystem = renderer.graphicsContext as GraphicsContextSystem;\n\n        const {\n            batcher, instructions,\n        } = contextSystem.getContextRenderData(context);\n\n        // WebGL specific..\n        shader.groups[0] = renderer.globalUniforms.bindGroup;\n\n        renderer.state.set(graphicsPipe.state);\n\n        renderer.shader.bind(shader);\n\n        renderer.geometry.bind(batcher.geometry, shader.glProgram);\n\n        const batches = instructions.instructions as Batch[];\n\n        for (let i = 0; i < instructions.instructionSize; i++)\n        {\n            const batch = batches[i];\n\n            if (batch.size)\n            {\n                for (let j = 0; j < batch.textures.count; j++)\n                {\n                    renderer.texture.bind(batch.textures.textures[j], j);\n                }\n\n                renderer.geometry.draw(batch.topology, batch.size, batch.start);\n            }\n        }\n    }\n\n    public destroy(): void\n    {\n        this.shader.destroy(true);\n        this.shader = null;\n    }\n}\n"],"names":[],"mappings":"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"}