Source: packages/core/src/mask/AbstractMaskSystem.js

packages/core/src/mask/AbstractMaskSystem.js

import { System } from '../System';
/**
 * System plugin to the renderer to manage masks of certain type
 *
 * @class
 * @extends PIXI.System
 * @memberof PIXI.systems
 */
export class AbstractMaskSystem extends System {
    /**
     * @param {PIXI.Renderer} renderer - The renderer this System works for.
     */
    constructor(renderer) {
        super(renderer);
        /**
         * The mask stack
         * @member {PIXI.MaskData[]}
         */
        this.maskStack = [];
        /**
         * Constant for gl.enable
         * @member {number}
         * @private
         */
        this.glConst = 0;
    }
    /**
     * gets count of masks of certain type
     * @returns {number}
     */
    getStackLength() {
        return this.maskStack.length;
    }
    /**
     * Changes the mask stack that is used by this System.
     *
     * @param {PIXI.MaskData[]} maskStack - The mask stack
     */
    setMaskStack(maskStack) {
        const { gl } = this.renderer;
        const curStackLen = this.getStackLength();
        this.maskStack = maskStack;
        const newStackLen = this.getStackLength();
        if (newStackLen !== curStackLen) {
            if (newStackLen === 0) {
                gl.disable(this.glConst);
            }
            else {
                gl.enable(this.glConst);
                this._useCurrent();
            }
        }
    }
    /**
     * Setup renderer to use the current mask data.
     * @private
     */
    _useCurrent() {
        // OVERWRITE;
    }
    /**
     * Destroys the mask stack.
     *
     */
    destroy() {
        super.destroy();
        this.maskStack = null;
    }
}