'use strict'; exports.__esModule = true; var _WebGLManager2 = require('./WebGLManager'); var _WebGLManager3 = _interopRequireDefault(_WebGLManager2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * @class * @extends PIXI.WebGLManager * @memberof PIXI */ var StencilManager = function (_WebGLManager) { _inherits(StencilManager, _WebGLManager); /** * @param {PIXI.WebGLRenderer} renderer - The renderer this manager works for. */ function StencilManager(renderer) { _classCallCheck(this, StencilManager); var _this = _possibleConstructorReturn(this, _WebGLManager.call(this, renderer)); _this.stencilMaskStack = null; return _this; } /** * Changes the mask stack that is used by this manager. * * @param {PIXI.Graphics[]} stencilMaskStack - The mask stack */ StencilManager.prototype.setMaskStack = function setMaskStack(stencilMaskStack) { this.stencilMaskStack = stencilMaskStack; var gl = this.renderer.gl; if (stencilMaskStack.length === 0) { gl.disable(gl.STENCIL_TEST); } else { gl.enable(gl.STENCIL_TEST); } }; /** * Applies the Mask and adds it to the current filter stack. @alvin * * @param {PIXI.Graphics} graphics - The mask */ StencilManager.prototype.pushStencil = function pushStencil(graphics) { this.renderer.setObjectRenderer(this.renderer.plugins.graphics); this.renderer._activeRenderTarget.attachStencilBuffer(); var gl = this.renderer.gl; var sms = this.stencilMaskStack; if (sms.length === 0) { gl.enable(gl.STENCIL_TEST); gl.clear(gl.STENCIL_BUFFER_BIT); gl.stencilFunc(gl.ALWAYS, 1, 1); } sms.push(graphics); gl.colorMask(false, false, false, false); gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); this.renderer.plugins.graphics.render(graphics); gl.colorMask(true, true, true, true); gl.stencilFunc(gl.NOTEQUAL, 0, sms.length); gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); }; /** * TODO @alvin */ StencilManager.prototype.popStencil = function popStencil() { this.renderer.setObjectRenderer(this.renderer.plugins.graphics); var gl = this.renderer.gl; var sms = this.stencilMaskStack; var graphics = sms.pop(); if (sms.length === 0) { // the stack is empty! gl.disable(gl.STENCIL_TEST); } else { gl.colorMask(false, false, false, false); gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); this.renderer.plugins.graphics.render(graphics); gl.colorMask(true, true, true, true); gl.stencilFunc(gl.NOTEQUAL, 0, sms.length); gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); } }; /** * Destroys the mask stack. * */ StencilManager.prototype.destroy = function destroy() { _WebGLManager3.default.prototype.destroy.call(this); this.stencilMaskStack.stencilStack = null; }; return StencilManager; }(_WebGLManager3.default); exports.default = StencilManager; //# sourceMappingURL=StencilManager.js.map