{"version":3,"file":"GlEncoderSystem.mjs","sources":["../../../../src/rendering/renderers/gl/GlEncoderSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\n\nimport type { Topology } from '../shared/geometry/const';\nimport type { Geometry } from '../shared/geometry/Geometry';\nimport type { Shader } from '../shared/shader/Shader';\nimport type { State } from '../shared/state/State';\nimport type { System } from '../shared/system/System';\nimport type { WebGLRenderer } from './WebGLRenderer';\n\n/**\n * The system that handles encoding commands for the WebGL.\n * @category rendering\n * @advanced\n */\nexport class GlEncoderSystem implements System\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLSystem,\n        ],\n        name: 'encoder',\n    } as const;\n\n    public readonly commandFinished = Promise.resolve();\n    private readonly _renderer: WebGLRenderer;\n\n    constructor(renderer: WebGLRenderer)\n    {\n        this._renderer = renderer;\n    }\n\n    public setGeometry(geometry: Geometry, shader?: Shader)\n    {\n        this._renderer.geometry.bind(geometry, shader.glProgram);\n    }\n\n    public finishRenderPass()\n    {\n        // noop\n    }\n\n    public draw(options: {\n        geometry: Geometry,\n        shader: Shader,\n        state?: State,\n        topology?: Topology,\n        size?: number,\n        start?: number,\n        instanceCount?: number\n        skipSync?: boolean,\n    })\n    {\n        const renderer = this._renderer;\n        const { geometry, shader, state, skipSync, topology: type, size, start, instanceCount } = options;\n\n        renderer.shader.bind(shader, skipSync);\n\n        renderer.geometry.bind(geometry, renderer.shader._activeProgram);\n\n        if (state)\n        {\n            renderer.state.set(state);\n        }\n\n        renderer.geometry.draw(type, size, start, instanceCount ?? geometry.instanceCount);\n    }\n\n    public destroy()\n    {\n        (this._renderer as null) = null;\n    }\n}\n"],"names":[],"mappings":";;;AAcO,MAAM,eAAA,CACb;AAAA,EAYI,YAAY,QAAA,EACZ;AAJA,IAAA,IAAA,CAAgB,eAAA,GAAkB,QAAQ,OAAA,EAAQ;AAK9C,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEO,WAAA,CAAY,UAAoB,MAAA,EACvC;AACI,IAAA,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,OAAO,SAAS,CAAA;AAAA,EAC3D;AAAA,EAEO,gBAAA,GACP;AAAA,EAEA;AAAA,EAEO,KAAK,OAAA,EAUZ;AACI,IAAA,MAAM,WAAW,IAAA,CAAK,SAAA;AACtB,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,UAAU,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,aAAA,EAAc,GAAI,OAAA;AAE1F,IAAA,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA;AAErC,IAAA,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,QAAA,CAAS,OAAO,cAAc,CAAA;AAE/D,IAAA,IAAI,KAAA,EACJ;AACI,MAAA,QAAA,CAAS,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,IAC5B;AAEA,IAAA,QAAA,CAAS,SAAS,IAAA,CAAK,IAAA,EAAM,MAAM,KAAA,EAAO,aAAA,IAAiB,SAAS,aAAa,CAAA;AAAA,EACrF;AAAA,EAEO,OAAA,GACP;AACI,IAAC,KAAK,SAAA,GAAqB,IAAA;AAAA,EAC/B;AACJ;AAAA;AA1Da,eAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}