From 41d6b01e9636a64fdcef4ced5b588c6b51a62800 Mon Sep 17 00:00:00 2001 From: Mat Groves Date: Sun, 29 Dec 2013 12:14:34 +0000 Subject: [PATCH] Added canvas sprite tiniting Currently only works with browsers that support the new canvas blend modes still need to add tiniting to tilingsprite and graphics --- Gruntfile.js | 1 + bin/pixi.dev.js | 127 +++++++++++++++--- examples/example 2 - SpriteSheet/index.html | 4 +- src/pixi/display/DisplayObjectContainer.js | 2 +- src/pixi/display/Sprite.js | 69 +++++++--- .../renderers/canvas/utils/CanvasTinter.js | 54 ++++++++ 6 files changed, 217 insertions(+), 40 deletions(-) create mode 100644 src/pixi/renderers/canvas/utils/CanvasTinter.js diff --git a/Gruntfile.js b/Gruntfile.js index 073ec34..aa18450 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -43,6 +43,7 @@ module.exports = function(grunt) { '<%= dirs.src %>/renderers/webgl/WebGLRenderGroup.js', '<%= dirs.src %>/renderers/webgl/utils/WebGLFilterManager.js', '<%= dirs.src %>/renderers/canvas/utils/CanvasMaskManager.js', + '<%= dirs.src %>/renderers/canvas/utils/CanvasTinter.js', '<%= dirs.src %>/renderers/canvas/CanvasRenderer.js', '<%= dirs.src %>/renderers/canvas/CanvasGraphics.js', '<%= dirs.src %>/primitives/Graphics.js', diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index a9f3ad0..fc89d8e 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -4,7 +4,7 @@ * Copyright (c) 2012, Mat Groves * http://goodboydigital.com/ * - * Compiled: 2013-12-28 + * Compiled: 2013-12-29 * * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -1445,7 +1445,7 @@ PIXI.DisplayObjectContainer.prototype._renderCanvas = function(renderSession) child._renderCanvas(renderSession); } - if(this.mask) + if(this._mask) { renderSession.maskManager.popMask(renderSession.context); } @@ -1692,38 +1692,44 @@ PIXI.Sprite.prototype.getBounds = function() PIXI.Sprite.prototype._renderWebGL = function(renderSession) { + // if the sprite is not visible or the alpha is 0 then no need to render this element if(this.visible === false || this.alpha === 0)return; + // do a quick check to see if this element has a mask or a filter. if(this._mask || this._filters) { + var spriteBatch = renderSession.spriteBatch; + if(this._mask) { - renderSession.spriteBatch.stop(); + spriteBatch.stop(); renderSession.maskManager.pushMask(this.mask, renderSession.projection); - renderSession.spriteBatch.start(); + spriteBatch.start(); } if(this._filters) { - renderSession.spriteBatch.flush(); + spriteBatch.flush(); renderSession.filterManager.pushFilter(this._filterBlock); } - renderSession.spriteBatch.render(this); + // add this sprite to the batch + spriteBatch.render(this); - // simple render children! + // now loop through the children and make sure they get rendered for(var i=0,j=this.children.length; i