const BLEND = 0; const OFFSET = 1; const CULLING = 2; const DEPTH_TEST = 3; const WINDING = 4; export default class State { constructor() { this.data = 0; this.blendMode = 0; this.polygonOffset = 0; } set blend(value) { if (!!(this.data & (1 << BLEND)) !== value) { this.data ^= (1 << BLEND); } } get blend() { return !!(this.data & (1 << BLEND)); } set offsets(value) { if (!!(this.data & (1 << OFFSET)) !== value) { this.data ^= (1 << OFFSET); } } get offsets() { return !!(this.data & (1 << OFFSET)); } set culling(value) { if (!!(this.data & (1 << CULLING)) !== value) { this.data ^= (1 << CULLING); } } get culling() { return !!(this.data & (1 << CULLING)); } set depthTest(value) { if (!!(this.data & (1 << DEPTH_TEST)) !== value) { this.data ^= (1 << DEPTH_TEST); } } get depthTest() { return !!(this.data & (1 << DEPTH_TEST)); } set clockwiseFrontFace(value) { if (!!(this.data & (1 << WINDING)) !== value) { this.data ^= (1 << WINDING); } } get clockwiseFrontFace() { return !!(this.data & (1 << WINDING)); } set blendMode(value) { // 17 is NO BLEND this.blend = (value === 17); this._blendMode = value; } get blendMode() { return this._blendMode; } set polygonOffset(value) { this.offsets = !!value; this._polygonOffset = value; } get polygonOffset() { return this._polygonOffset; } set cullFace(value) { this.culling = !!value; this._cullFace = value; } get cullFace() { return this._cullFace; } }