var WebGLManager = require('./WebGLManager'), AlphaMaskFilter = require('../filters/SpriteMaskFilter'); /** * @class * @memberof PIXI * @param renderer {WebGLRenderer} The renderer this manager works for. */ function MaskManager(renderer) { WebGLManager.call(this, renderer); this.stencilStack = []; this.reverse = true; this.count = 0; this.alphaMaskPool = []; } MaskManager.prototype = Object.create(WebGLManager.prototype); MaskManager.prototype.constructor = MaskManager; module.exports = MaskManager; /** * Applies the Mask and adds it to the current filter stack. * * @param graphics {Graphics} * @param webGLData {any[]} */ MaskManager.prototype.pushMask = function (target, maskData) { if (maskData.texture) { this.pushSpriteMask(target, maskData); } else { this.pushStencilMask(target, maskData); } }; /** * Removes the last mask from the mask stack and doesn't return it. * * @param target {RenderTarget} * @param maskData {any[]} */ MaskManager.prototype.popMask = function (target, maskData) { if (maskData.texture) { this.popSpriteMask(target, maskData); } else { this.popStencilMask(target, maskData); } }; /** * Applies the Mask and adds it to the current filter stack. * * @param target {RenderTarget} * @param maskData {any[]} */ MaskManager.prototype.pushSpriteMask = function (target, maskData) { var alphaMaskFilter = this.alphaMaskPool.pop(); if (!alphaMaskFilter) { alphaMaskFilter = [new AlphaMaskFilter(maskData)]; } alphaMaskFilter[0].maskSprite = maskData; this.renderer.filterManager.pushFilter(target, alphaMaskFilter); }; /** * Removes the last filter from the filter stack and doesn't return it. * */ MaskManager.prototype.popSpriteMask = function () { var filters = this.renderer.filterManager.popFilter(); this.alphaMaskPool.push(filters); }; /** * Applies the Mask and adds it to the current filter stack. * * @param target {RenderTarget} * @param maskData {any[]} */ MaskManager.prototype.pushStencilMask = function (target, maskData) { this.renderer.stencilManager.pushMask(maskData); }; /** * Removes the last filter from the filter stack and doesn't return it. * @param target {RenderTarget} * @param maskData {any[]} */ MaskManager.prototype.popStencilMask = function (target, maskData) { this.renderer.stencilManager.popMask(maskData); };