Newer
Older
pixi.js / src / core / renderers / webgl / managers / MaskManager.js
@mathew groves mathew groves on 23 Jan 2015 2 KB big changes
var WebGLManager = require('./WebGLManager'),
    AlphaMaskFilter = require('../utils/SpriteMaskFilter'),
    utils = require('../../../utils');

/**
 * @class
 * @namespace 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.destroy = function ()
{

};

MaskManager.prototype.pushMask = function (target, maskData)
{
    if(maskData.texture)
    {
        this.pushSpriteMask(target, maskData);
    }
    else
    {
        this.pushStencilMask(target, maskData);
    }

}

MaskManager.prototype.popMask = function (target, maskData)
{
    if(maskData.texture)
    {
        this.popSpriteMask(target, maskData);
    }
    else
    {
        this.popStencilMask(target, maskData);
    }  
}

MaskManager.prototype.pushSpriteMask = function (target, maskData)
{
    var alphaMaskFilter = this.alphaMaskPool.pop();

    if(!alphaMaskFilter)alphaMaskFilter = [ new AlphaMaskFilter( maskData ) ];

    this.renderer.filterManager.pushFilter(target, alphaMaskFilter)
}

/**
 * Removes the last filter from the filter stack and doesn't return it.
 *
 * @param maskData {any[]}
 */
MaskManager.prototype.popSpriteMask = function (maskData)
{
   
    var filters = this.renderer.filterManager.popFilter();

    this.alphaMaskPool.push(filters);
};


/**
 * Applies the Mask and adds it to the current filter stack.
 *
 * @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 maskData {any[]}
 */
MaskManager.prototype.popStencilMask = function (target, maskData)
{
    this.renderer.stencilManager.popMask(maskData);
};