{"version":3,"file":"GpuStateSystem.mjs","sources":["../../../../../src/rendering/renderers/gpu/state/GpuStateSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\nimport { State } from '../../shared/state/State';\nimport { GpuBlendModesToPixi } from './GpuBlendModesToPixi';\n\nimport type { BLEND_MODES } from '../../shared/state/const';\nimport type { System } from '../../shared/system/System';\nimport type { GPU } from '../GpuDeviceSystem';\n\n/**\n * System plugin to the renderer to manage WebGL state machines.\n * @category rendering\n * @advanced\n */\nexport class GpuStateSystem implements System\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGPUSystem,\n        ],\n        name: 'state',\n    } as const;\n    /**\n     * State ID\n     * @readonly\n     */\n    public stateId: number;\n\n    /**\n     * Polygon offset\n     * @readonly\n     */\n    public polygonOffset: number;\n\n    /**\n     * Blend mode\n     * @default 'none'\n     * @readonly\n     */\n    public blendMode: BLEND_MODES;\n\n    /** Whether current blend equation is different */\n    protected _blendEq: boolean;\n\n    /**\n     * GL context\n     * @type {WebGLRenderingContext}\n     * @readonly\n     */\n    protected gpu: GPU;\n\n    /**\n     * Default WebGL State\n     * @readonly\n     */\n    protected defaultState: State;\n\n    constructor()\n    {\n        this.defaultState = new State();\n        this.defaultState.blend = true;\n    }\n\n    protected contextChange(gpu: GPU): void\n    {\n        this.gpu = gpu;\n    }\n\n    /**\n     * Gets the blend mode data for the current state\n     * @param state - The state to get the blend mode from\n     * @param count - The number of color targets to create\n     */\n    public getColorTargets(state: State, count: number): GPUColorTargetState[]\n    {\n        const blend = GpuBlendModesToPixi[state.blendMode] || GpuBlendModesToPixi.normal;\n\n        const targets: GPUColorTargetState[] = [];\n        const target = {\n            format: 'bgra8unorm',\n            writeMask: 0,\n            blend,\n        } as GPUColorTargetState;\n\n        for (let i = 0; i < count; i++)\n        {\n            targets[i] = target;\n        }\n\n        return targets;\n    }\n\n    public destroy(): void\n    {\n        this.gpu = null;\n    }\n}\n"],"names":[],"mappings":";;;;;AAaO,MAAM,cAAA,CACb;AAAA,EA2CI,WAAA,GACA;AACI,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,KAAA,EAAM;AAC9B,IAAA,IAAA,CAAK,aAAa,KAAA,GAAQ,IAAA;AAAA,EAC9B;AAAA,EAEU,cAAc,GAAA,EACxB;AACI,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAA,CAAgB,OAAc,KAAA,EACrC;AACI,IAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,KAAA,CAAM,SAAS,KAAK,mBAAA,CAAoB,MAAA;AAE1E,IAAA,MAAM,UAAiC,EAAC;AACxC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAA,EAAQ,YAAA;AAAA,MACR,SAAA,EAAW,CAAA;AAAA,MACX;AAAA,KACJ;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAC3B;AACI,MAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAAA,IACjB;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AAAA,EACf;AACJ;AAAA;AAnFa,cAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}