{"version":3,"file":"State.mjs","sources":["../../src/state/State.ts"],"sourcesContent":["import { BLEND_MODES } from '@pixi/constants';\n\n/* eslint-disable max-len */\n\nconst BLEND = 0;\nconst OFFSET = 1;\nconst CULLING = 2;\nconst DEPTH_TEST = 3;\nconst WINDING = 4;\nconst DEPTH_MASK = 5;\n\n/**\n * This is a WebGL state, and is is passed to {@link PIXI.StateSystem}.\n *\n * Each mesh rendered may require WebGL to be in a different state.\n * For example you may want different blend mode or to enable polygon offsets\n * @memberof PIXI\n */\nexport class State\n{\n    data: number;\n    _blendMode: BLEND_MODES;\n    _polygonOffset: number;\n\n    constructor()\n    {\n        this.data = 0;\n\n        this.blendMode = BLEND_MODES.NORMAL;\n        this.polygonOffset = 0;\n\n        this.blend = true;\n        this.depthMask = true;\n        //  this.depthTest = true;\n    }\n\n    /**\n     * Activates blending of the computed fragment color values.\n     * @default true\n     */\n    get blend(): boolean\n    {\n        return !!(this.data & (1 << BLEND));\n    }\n\n    set blend(value: boolean)\n    {\n        if (!!(this.data & (1 << BLEND)) !== value)\n        {\n            this.data ^= (1 << BLEND);\n        }\n    }\n\n    /**\n     * Activates adding an offset to depth values of polygon's fragments\n     * @default false\n     */\n    get offsets(): boolean\n    {\n        return !!(this.data & (1 << OFFSET));\n    }\n\n    set offsets(value: boolean)\n    {\n        if (!!(this.data & (1 << OFFSET)) !== value)\n        {\n            this.data ^= (1 << OFFSET);\n        }\n    }\n\n    /**\n     * Activates culling of polygons.\n     * @default false\n     */\n    get culling(): boolean\n    {\n        return !!(this.data & (1 << CULLING));\n    }\n\n    set culling(value: boolean)\n    {\n        if (!!(this.data & (1 << CULLING)) !== value)\n        {\n            this.data ^= (1 << CULLING);\n        }\n    }\n\n    /**\n     * Activates depth comparisons and updates to the depth buffer.\n     * @default false\n     */\n    get depthTest(): boolean\n    {\n        return !!(this.data & (1 << DEPTH_TEST));\n    }\n\n    set depthTest(value: boolean)\n    {\n        if (!!(this.data & (1 << DEPTH_TEST)) !== value)\n        {\n            this.data ^= (1 << DEPTH_TEST);\n        }\n    }\n\n    /**\n     * Enables or disables writing to the depth buffer.\n     * @default true\n     */\n    get depthMask(): boolean\n    {\n        return !!(this.data & (1 << DEPTH_MASK));\n    }\n\n    set depthMask(value: boolean)\n    {\n        if (!!(this.data & (1 << DEPTH_MASK)) !== value)\n        {\n            this.data ^= (1 << DEPTH_MASK);\n        }\n    }\n\n    /**\n     * Specifies whether or not front or back-facing polygons can be culled.\n     * @default false\n     */\n    get clockwiseFrontFace(): boolean\n    {\n        return !!(this.data & (1 << WINDING));\n    }\n\n    set clockwiseFrontFace(value: boolean)\n    {\n        if (!!(this.data & (1 << WINDING)) !== value)\n        {\n            this.data ^= (1 << WINDING);\n        }\n    }\n\n    /**\n     * The blend mode to be applied when this state is set. Apply a value of `PIXI.BLEND_MODES.NORMAL` to reset the blend mode.\n     * Setting this mode to anything other than NO_BLEND will automatically switch blending on.\n     * @default PIXI.BLEND_MODES.NORMAL\n     */\n    get blendMode(): BLEND_MODES\n    {\n        return this._blendMode;\n    }\n\n    set blendMode(value: BLEND_MODES)\n    {\n        this.blend = (value !== BLEND_MODES.NONE);\n        this._blendMode = value;\n    }\n\n    /**\n     * The polygon offset. Setting this property to anything other than 0 will automatically enable polygon offset fill.\n     * @default 0\n     */\n    get polygonOffset(): number\n    {\n        return this._polygonOffset;\n    }\n\n    set polygonOffset(value: number)\n    {\n        this.offsets = !!value;\n        this._polygonOffset = value;\n    }\n\n    static for2d(): State\n    {\n        const state = new State();\n\n        state.depthTest = false;\n        state.blend = true;\n\n        return state;\n    }\n}\n\nif (process.env.DEBUG)\n{\n    State.prototype.toString = function toString(): string\n    {\n        return `[@pixi/core:State `\n            + `blendMode=${this.blendMode} `\n            + `clockwiseFrontFace=${this.clockwiseFrontFace} `\n            + `culling=${this.culling} `\n            + `depthMask=${this.depthMask} `\n            + `polygonOffset=${this.polygonOffset}`\n            + `]`;\n    };\n}\n\n"],"names":[],"mappings":";AAIA,MAAM,QAAQ,GACR,SAAS,GACT,UAAU,GACV,aAAa,GACb,UAAU,GACV,aAAa;AASZ,MAAM,MACb;AAAA,EAKI,cACA;AACI,SAAK,OAAO,GAEZ,KAAK,YAAY,YAAY,QAC7B,KAAK,gBAAgB,GAErB,KAAK,QAAQ,IACb,KAAK,YAAY;AAAA,EAErB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,MAAM,OACV;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,WAAY,UAEjC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,QAAQ,OACZ;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,YAAa,UAElC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,QAAQ,OACZ;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,aAAc,UAEnC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,UAAU,OACd;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,gBAAiB,UAEtC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,UAAU,OACd;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,gBAAiB,UAEtC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,qBACJ;AACI,WAAO,CAAC,EAAE,KAAK,OAAQ,KAAK;AAAA,EAChC;AAAA,EAEA,IAAI,mBAAmB,OACvB;AACQ,KAAC,EAAE,KAAK,OAAQ,KAAK,aAAc,UAEnC,KAAK,QAAS,KAAK;AAAA,EAE3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YACJ;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU,OACd;AACI,SAAK,QAAS,UAAU,YAAY,MACpC,KAAK,aAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBACJ;AACI,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAc,OAClB;AACI,SAAK,UAAU,CAAC,CAAC,OACjB,KAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,OAAO,QACP;AACU,UAAA,QAAQ,IAAI;AAElB,WAAA,MAAM,YAAY,IAClB,MAAM,QAAQ,IAEP;AAAA,EACX;AACJ;AAII,MAAM,UAAU,WAAW,WAC3B;AACI,SAAO,+BACY,KAAK,SAAS,uBACL,KAAK,kBAAkB,YAClC,KAAK,OAAO,cACV,KAAK,SAAS,kBACV,KAAK,aAAa;AAE7C;"}