diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index 3e4b587..4f69d71 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -1536,8 +1536,23 @@ PIXI.Sprite = function(texture) */ this._height = 0; + + /** + * The tint applied to the sprite. This is a hex value + * + * @property tint + * @type Number + * @default 0xFFFFFF + */ this.tint = 0xFFFFFF;// * Math.random(); + /** + * The blend mode to be applied to the sprite + * + * @property blendMode + * @type Number + * @default PIXI.blendModes.NORMAL; + */ this.blendMode = PIXI.blendModes.NORMAL; if(texture.baseTexture.hasLoaded) @@ -3517,6 +3532,19 @@ PIXI.canUseNewCanvasBlendModes = function() return context.getImageData(0,0,1,1).data[0] === 0; }; +// this function is taken from Starling Framework as its pretty neat ;) +PIXI.getNextPowerOfTwo = function(number) +{ + if (number > 0 && (number & (number - 1)) === 0) // see: http://goo.gl/D9kPj + return number; + else + { + var result = 1; + while (result < number) result <<= 1; + return result; + } +}; + /** @@ -4425,7 +4453,6 @@ PIXI.WebGLGraphics.renderGraphics = function(graphics, renderSession)//projectio gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint)); - gl.uniform1f(shader.alpha, graphics.worldAlpha); gl.uniform1f(shader.alpha, graphics.worldAlpha); gl.bindBuffer(gl.ARRAY_BUFFER, webGL.buffer); @@ -5308,9 +5335,9 @@ PIXI.WebGLRenderer.prototype.handleContextRestored = function() // need to set the context... - this.shaderManager.setContext(gl); - this.spriteBatch.setContext(gl); - this.maskManager.setContext(gl); + this.shaderManager.setContext(gl); + this.spriteBatch.setContext(gl); + this.maskManager.setContext(gl); this.filterManager.setContext(gl); @@ -5430,7 +5457,7 @@ PIXI.WebGLShaderManager.prototype.setContext = function(gl) gl.enableVertexAttribArray(this.defaultShader.aTextureCoord); -} +}; PIXI.WebGLShaderManager.prototype.activatePrimitiveShader = function() { @@ -5515,11 +5542,7 @@ PIXI.WebGLSpriteBatch.prototype.setContext = function(gl) this.indexBuffer = gl.createBuffer(); // 65535 is max index, so 65535 / 6 = 10922. - - //the total number of floats in our batch - var numVerts = this.size * 4 * this.vertSize; - //the total number of indices in our batch - var numIndices = this.size * 6; + //upload the index data gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); @@ -5529,7 +5552,7 @@ PIXI.WebGLSpriteBatch.prototype.setContext = function(gl) gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); this.currentBlendMode = 99999; -} +}; PIXI.WebGLSpriteBatch.prototype.begin = function(renderSession) { @@ -5868,7 +5891,7 @@ PIXI.WebGLFilterManager.prototype.setContext = function(gl) this.texturePool = []; this.initShaderBuffers(); -} +}; PIXI.WebGLFilterManager.prototype.begin = function(renderSession, buffer) { @@ -5911,10 +5934,10 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) gl.bindTexture(gl.TEXTURE_2D, texture.texture); - this.getBounds(filterBlock.target); +// this.getBounds(filterBlock.target); filterBlock.target.filterArea = filterBlock.target.getBounds(); - + // console.log(filterBlock.target.filterArea) // console.log(filterBlock.target.filterArea); // addpadding? //displayObject.filterArea.x @@ -6168,7 +6191,7 @@ PIXI.WebGLFilterManager.prototype.applyFilterPass = function(filter, filterArea, filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height; // console.log(this.vertexArray[5]) } - + shader.syncUniforms(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); @@ -6238,7 +6261,7 @@ PIXI.WebGLFilterManager.prototype.initShaderBuffers = function() new Uint16Array([0, 1, 2, 1, 3, 2]), gl.STATIC_DRAW); }; - +/* PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject) { // time to get the width and height of the object! @@ -6356,7 +6379,7 @@ PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject) displayObject.filterArea.width = maxX - minX; displayObject.filterArea.height = maxY - minY; }; - +*/ PIXI.FilterTexture = function(gl, width, height) { // var gl = PIXI.gl; @@ -7407,8 +7430,13 @@ PIXI.Graphics.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 || this.isMask === true)return; + + renderSession.spriteBatch.stop(); + if(this._mask)renderSession.maskManager.pushMask(this.mask, renderSession); + if(this._filters)renderSession.filterManager.pushFilter(this._filterBlock); + // check blend mode if(this.blendMode !== renderSession.spriteBatch.currentBlendMode) { @@ -7416,9 +7444,13 @@ PIXI.Graphics.prototype._renderWebGL = function(renderSession) var blendModeWebGL = PIXI.blendModesWebGL[renderSession.spriteBatch.currentBlendMode]; this.spriteBatch.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); } - + PIXI.WebGLGraphics.renderGraphics(this, renderSession); + if(this._filters)renderSession.filterManager.popFilter(); + if(this._mask)renderSession.maskManager.popMask(renderSession); + + renderSession.spriteBatch.start(); }; @@ -7445,9 +7477,9 @@ PIXI.Graphics.prototype.getBounds = function() if(!this.bounds)this.updateBounds(); var w0 = this.bounds.x; - var w1 = this.bounds.y; + var w1 = this.bounds.width + this.bounds.x; - var h0 = this.bounds.width + this.bounds.x; + var h0 = this.bounds.y; var h1 = this.bounds.height + this.bounds.y; var worldTransform = this.worldTransform; @@ -7511,7 +7543,6 @@ PIXI.Graphics.prototype.getBounds = function() PIXI.Graphics.prototype.updateBounds = function() { - var minX = Infinity; var maxX = -Infinity; @@ -7560,7 +7591,6 @@ PIXI.Graphics.prototype.updateBounds = function() x = points[j]; y = points[j+1]; - minX = x-lineWidth < minX ? x-lineWidth : minX; maxX = x+lineWidth > maxX ? x+lineWidth : maxX; @@ -7571,8 +7601,6 @@ PIXI.Graphics.prototype.updateBounds = function() } this.bounds = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY); - -// console.log(this.bounds); }; // SOME TYPES: diff --git a/bin/pixi.js b/bin/pixi.js index b5ad6df..de9a698 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -9,8 +9,8 @@ * Pixi.JS is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php */ -(function(){function c(){return e.Matrix="undefined"!=typeof Float32Array?Float32Array:Array,e.Matrix}var d=this,e=e||{};e.WEBGL_RENDERER=0,e.CANVAS_RENDERER=1,e.Point=function(a,b){this.x=a||0,this.y=b||0},e.Point.prototype.clone=function(){return new e.Point(this.x,this.y)},e.Point.prototype.constructor=e.Point,e.Rectangle=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},e.Rectangle.prototype.clone=function(){return new e.Rectangle(this.x,this.y,this.width,this.height)},e.Rectangle.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=this.x;if(a>=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},e.Rectangle.prototype.constructor=e.Rectangle,e.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var b=[],c=0,d=a.length;d>c;c+=2)b.push(new e.Point(a[c],a[c+1]));a=b}this.points=a},e.Polygon.prototype.clone=function(){for(var a=[],b=0;bb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},e.Polygon.prototype.constructor=e.Polygon,e.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},e.Circle.prototype.clone=function(){return new e.Circle(this.x,this.y,this.radius)},e.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},e.Circle.prototype.constructor=e.Circle,e.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},e.Ellipse.prototype.clone=function(){return new e.Ellipse(this.x,this.y,this.width,this.height)},e.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width-.5,d=(b-this.y)/this.height-.5;return c*=c,d*=d,.25>c+d},e.Ellipse.prototype.getBounds=function(){return new e.Rectangle(this.x,this.y,this.width,this.height)},e.Ellipse.prototype.constructor=e.Ellipse,c(),e.mat3={},e.mat3.create=function(){var a=new e.Matrix(9);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},e.mat3.identity=function(a){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},e.mat4={},e.mat4.create=function(){var a=new e.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},e.mat3.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=b[0],n=b[1],o=b[2],p=b[3],q=b[4],r=b[5],s=b[6],t=b[7],u=b[8];return c[0]=m*d+n*g+o*j,c[1]=m*e+n*h+o*k,c[2]=m*f+n*i+o*l,c[3]=p*d+q*g+r*j,c[4]=p*e+q*h+r*k,c[5]=p*f+q*i+r*l,c[6]=s*d+t*g+u*j,c[7]=s*e+t*h+u*k,c[8]=s*f+t*i+u*l,c},e.mat3.clone=function(a){var b=new e.Matrix(9);return b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b},e.mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];return a[1]=a[3],a[2]=a[6],a[3]=c,a[5]=a[7],a[6]=d,a[7]=e,a}return b[0]=a[0],b[1]=a[3],b[2]=a[6],b[3]=a[1],b[4]=a[4],b[5]=a[7],b[6]=a[2],b[7]=a[5],b[8]=a[8],b},e.mat3.toMat4=function(a,b){return b||(b=e.mat4.create()),b[15]=1,b[14]=0,b[13]=0,b[12]=0,b[11]=0,b[10]=a[8],b[9]=a[7],b[8]=a[6],b[7]=0,b[6]=a[5],b[5]=a[4],b[4]=a[3],b[3]=0,b[2]=a[2],b[1]=a[1],b[0]=a[0],b},e.mat4.create=function(){var a=new e.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},e.mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],f=a[6],g=a[7],h=a[11];return a[1]=a[4],a[2]=a[8],a[3]=a[12],a[4]=c,a[6]=a[9],a[7]=a[13],a[8]=d,a[9]=f,a[11]=a[14],a[12]=e,a[13]=g,a[14]=h,a}return b[0]=a[0],b[1]=a[4],b[2]=a[8],b[3]=a[12],b[4]=a[1],b[5]=a[5],b[6]=a[9],b[7]=a[13],b[8]=a[2],b[9]=a[6],b[10]=a[10],b[11]=a[14],b[12]=a[3],b[13]=a[7],b[14]=a[11],b[15]=a[15],b},e.mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=a[9],n=a[10],o=a[11],p=a[12],q=a[13],r=a[14],s=a[15],t=b[0],u=b[1],v=b[2],w=b[3];return c[0]=t*d+u*h+v*l+w*p,c[1]=t*e+u*i+v*m+w*q,c[2]=t*f+u*j+v*n+w*r,c[3]=t*g+u*k+v*o+w*s,t=b[4],u=b[5],v=b[6],w=b[7],c[4]=t*d+u*h+v*l+w*p,c[5]=t*e+u*i+v*m+w*q,c[6]=t*f+u*j+v*n+w*r,c[7]=t*g+u*k+v*o+w*s,t=b[8],u=b[9],v=b[10],w=b[11],c[8]=t*d+u*h+v*l+w*p,c[9]=t*e+u*i+v*m+w*q,c[10]=t*f+u*j+v*n+w*r,c[11]=t*g+u*k+v*o+w*s,t=b[12],u=b[13],v=b[14],w=b[15],c[12]=t*d+u*h+v*l+w*p,c[13]=t*e+u*i+v*m+w*q,c[14]=t*f+u*j+v*n+w*r,c[15]=t*g+u*k+v*o+w*s,c},e.DisplayObject=function(){this.last=this,this.first=this,this.position=new e.Point,this.scale=new e.Point(1,1),this.pivot=new e.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=e.mat3.create(),this.localTransform=e.mat3.create(),this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=new e.Rectangle(0,0,1,1),this._bounds=new e.Rectangle(0,0,1,1),this._currentBounds=null},e.DisplayObject.prototype.constructor=e.DisplayObject,e.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(e.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(e.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask.isMask=!0}}),Object.defineProperty(e.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&this.setStageReference(this.stage)},e.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},e.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&aa;a++)this.children[a].updateTransform()}},e.DisplayObjectContainer.prototype.getBounds=function(){if(0===this.children.length)return e.EmptyRectangle;for(var a,b,c,d=1/0,f=1/0,g=-1/0,h=-1/0,i=0,j=this.children.length;j>i;i++){var k=this.children[i];k.visible&&(a=this.children[i].getBounds(),d=db?g:b,h=h>c?h:c)}var l=this._bounds;return l.x=d,l.y=f,l.width=g-d,l.height=h-f,l},e.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a;for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.interactive&&(this.stage.dirty=!0),d.setStageReference(a)}},e.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.interactive&&(this.stage.dirty=!0),c.removeStageReference(),c.stage=null}},e.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},e.blendModes={},e.blendModes.NORMAL=0,e.blendModes.ADD=1,e.blendModes.MULTIPLY=2,e.blendModes.SCREEN=3,e.Sprite=function(a){e.DisplayObjectContainer.call(this),this.anchor=new e.Point,this.texture=a,this.blendMode=e.blendModes.NORMAL,this._width=0,this._height=0,this.tint=16777215,this.blendMode=e.blendModes.NORMAL,a.baseTexture.hasLoaded?(this.updateFrame=!0,this.onTextureUpdate()):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},e.Sprite.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Sprite.prototype.constructor=e.Sprite,Object.defineProperty(e.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(e.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),e.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},e.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},e.Sprite.prototype.getBounds=function(){var a=this.texture.frame.width,b=this.texture.frame.height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g[0],i=g[3],j=g[1],k=g[4],l=g[2],m=g[5],n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},e.Sprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){this._mask&&a.maskManager.pushMask(this._mask,a.context);var b=this.texture.frame,c=a.context,d=this.texture;if(b&&b.width&&b.height&&d.baseTexture.source){c.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(c.setTransform(f[0],f[3],f[1],f[4],f[2],f[5]),this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=e.blendModesCanvas[a.currentBlendMode]),16777215!==this.tint)this.cachedTint!==this.tint&&(this.cachedTint=this.tint,this.tintedTexture=e.CanvasTinter.getTintedTexture(this,this.tint)),c.drawImage(this.tintedTexture,0,0,b.width,b.height,this.anchor.x*-b.width,this.anchor.y*-b.height,b.width,b.height);else if(d.trimmed){var g=d.trim;c.drawImage(this.texture.baseTexture.source,b.x,b.y,b.width,b.height,g.x-this.anchor.x*g.realWidth,g.y-this.anchor.y*g.realHeight,b.width,b.height)}else c.drawImage(this.texture.baseTexture.source,b.x,b.y,b.width,b.height,this.anchor.x*-b.width,this.anchor.y*-b.height,b.width,b.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},e.Sprite.fromFrame=function(a){var b=e.TextureCache[a];if(!b)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new e.Sprite(b)},e.Sprite.fromImage=function(a){var b=e.Texture.fromImage(a);return new e.Sprite(b)},e.MovieClip=function(a){e.Sprite.call(this,a[0]),this.textures=a,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.currentFrame=0,this.playing=!1},e.MovieClip.prototype=Object.create(e.Sprite.prototype),e.MovieClip.prototype.constructor=e.MovieClip,Object.defineProperty(e.MovieClip.prototype,"totalFrames",{get:function(){return this.textures.length}}),e.MovieClip.prototype.stop=function(){this.playing=!1},e.MovieClip.prototype.play=function(){this.playing=!0},e.MovieClip.prototype.gotoAndStop=function(a){this.playing=!1,this.currentFrame=a;var b=this.currentFrame+.5|0;this.setTexture(this.textures[b%this.textures.length])},e.MovieClip.prototype.gotoAndPlay=function(a){this.currentFrame=a,this.playing=!0},e.MovieClip.prototype.updateTransform=function(){if(e.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var a=this.currentFrame+.5|0;this.loop||a=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},e.FilterBlock=function(){this.visible=!0,this.renderable=!0},e.Text=function(a,b){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),e.Sprite.call(this,e.Texture.fromCanvas(this.canvas)),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},e.Text.prototype=Object.create(e.Sprite.prototype),e.Text.prototype.constructor=e.Text,e.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,this.style=a,this.dirty=!0},e.Text.prototype.setText=function(a){this.text=a.toString()||" ",this.dirty=!0},e.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.wordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}b+="\n"}return b},e.Text.prototype.destroy=function(a){a&&this.texture.destroy()},e.Text.heightCache={},e.BitmapText=function(a,b){e.DisplayObjectContainer.call(this),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},e.BitmapText.prototype=Object.create(e.DisplayObjectContainer.prototype),e.BitmapText.prototype.constructor=e.BitmapText,e.BitmapText.prototype.setText=function(a){this.text=a||" ",this.dirty=!0},e.BitmapText.prototype.setStyle=function(a){a=a||{},a.align=a.align||"left",this.style=a;var b=a.font.split(" ");this.fontName=b[b.length-1],this.fontSize=b.length>=2?parseInt(b[b.length-2],10):e.BitmapText.fonts[this.fontName].size,this.dirty=!0},e.BitmapText.prototype.updateText=function(){for(var a=e.BitmapText.fonts[this.fontName],b=new e.Point,c=null,d=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}for(j=0;j0;)this.removeChild(this.getChildAt(0));this.updateText(),this.dirty=!1}e.DisplayObjectContainer.prototype.updateTransform.call(this)},e.BitmapText.fonts={},e.InteractionManager=function(a){this.stage=a,this.mouse=new e.InteractionData,this.touchs={},this.tempPoint=new e.Point,this.mouseoverEnabled=!0,this.pool=[],this.interactiveItems=[],this.interactionDOMElement=null,this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.onMouseUp=this.onMouseUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.last=0},e.InteractionManager.prototype.constructor=e.InteractionManager,e.InteractionManager.prototype.collectInteractiveSprite=function(a,b){for(var c=a.children,d=c.length,e=d-1;e>=0;e--){var f=c[e];f.interactive?(b.interactiveChildren=!0,this.interactiveItems.push(f),f.children.length>0&&this.collectInteractiveSprite(f,f)):(f.__iParent=null,f.children.length>0&&this.collectInteractiveSprite(f,b))}},e.InteractionManager.prototype.setTarget=function(a){this.target=a,null===this.interactionDOMElement&&this.setTargetDomElement(a.view),document.body.addEventListener("mouseup",this.onMouseUp,!0)},e.InteractionManager.prototype.setTargetDomElement=function(a){null!==this.interactionDOMElement&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]="",this.interactionDOMElement.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0)),window.navigator.msPointerEnabled&&(a.style["-ms-content-zooming"]="none",a.style["-ms-touch-action"]="none"),this.interactionDOMElement=a,a.addEventListener("mousemove",this.onMouseMove,!0),a.addEventListener("mousedown",this.onMouseDown,!0),a.addEventListener("mouseout",this.onMouseOut,!0),a.addEventListener("touchstart",this.onTouchStart,!0),a.addEventListener("touchend",this.onTouchEnd,!0),a.addEventListener("touchmove",this.onTouchMove,!0)},e.InteractionManager.prototype.update=function(){if(this.target){var a=Date.now(),b=a-this.last;if(b=30*b/1e3,!(1>b)){this.last=a;var c=0;if(this.dirty){this.dirty=!1;var d=this.interactiveItems.length;for(c=0;d>c;c++)this.interactiveItems[c].interactiveChildren=!1;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}var e=this.interactiveItems.length;for(this.interactionDOMElement.style.cursor="inherit",c=0;e>c;c++){var f=this.interactiveItems[c];(f.mouseover||f.mouseout||f.buttonMode)&&(f.__hit=this.hitTest(f,this.mouse),this.mouse.target=f,f.__hit?(f.buttonMode&&(this.interactionDOMElement.style.cursor=f.defaultCursor),f.__isOver||(f.mouseover&&f.mouseover(this.mouse),f.__isOver=!0)):f.__isOver&&(f.mouseout&&f.mouseout(this.mouse),f.__isOver=!1))}}}},e.InteractionManager.prototype.onMouseMove=function(a){this.mouse.originalEvent=a||window.event;var b=this.interactionDOMElement.getBoundingClientRect();this.mouse.global.x=(a.clientX-b.left)*(this.target.width/b.width),this.mouse.global.y=(a.clientY-b.top)*(this.target.height/b.height);for(var c=this.interactiveItems.length,d=0;c>d;d++){var e=this.interactiveItems[d];e.mousemove&&e.mousemove(this.mouse)}},e.InteractionManager.prototype.onMouseDown=function(a){this.mouse.originalEvent=a||window.event;for(var b=this.interactiveItems.length,c=0;b>c;c++){var d=this.interactiveItems[c];if((d.mousedown||d.click)&&(d.__mouseIsDown=!0,d.__hit=this.hitTest(d,this.mouse),d.__hit&&(d.mousedown&&d.mousedown(this.mouse),d.__isDown=!0,!d.interactiveChildren)))break}},e.InteractionManager.prototype.onMouseOut=function(){var a=this.interactiveItems.length;this.interactionDOMElement.style.cursor="inherit";for(var b=0;a>b;b++){var c=this.interactiveItems[b];c.__isOver&&(this.mouse.target=c,c.mouseout&&c.mouseout(this.mouse),c.__isOver=!1)}},e.InteractionManager.prototype.onMouseUp=function(a){this.mouse.originalEvent=a||window.event;for(var b=this.interactiveItems.length,c=!1,d=0;b>d;d++){var e=this.interactiveItems[d];(e.mouseup||e.mouseupoutside||e.click)&&(e.__hit=this.hitTest(e,this.mouse),e.__hit&&!c?(e.mouseup&&e.mouseup(this.mouse),e.__isDown&&e.click&&e.click(this.mouse),e.interactiveChildren||(c=!0)):e.__isDown&&e.mouseupoutside&&e.mouseupoutside(this.mouse),e.__isDown=!1)}},e.InteractionManager.prototype.hitTest=function(a,b){var c=b.global;if(a.vcount!==e.visibleCount)return!1;var d=a instanceof e.Sprite,f=a.worldTransform,g=f[0],h=f[1],i=f[2],j=f[3],k=f[4],l=f[5],m=1/(g*k+h*-j),n=k*m*c.x+-h*m*c.y+(l*h-i*k)*m,o=g*m*c.y+-j*m*c.x+(-l*g+i*j)*m;if(b.target=a,a.hitArea&&a.hitArea.contains)return a.hitArea.contains(n,o)?(b.target=a,!0):!1;if(d){var p,q=a.texture.frame.width,r=a.texture.frame.height,s=-q*a.anchor.x;if(n>s&&s+q>n&&(p=-r*a.anchor.y,o>p&&p+r>o))return b.target=a,!0}for(var t=a.children.length,u=0;t>u;u++){var v=a.children[u],w=this.hitTest(v,b);if(w)return b.target=a,!0}return!1},e.InteractionManager.prototype.onTouchMove=function(a){var b,c=this.interactionDOMElement.getBoundingClientRect(),d=a.changedTouches,e=0;for(e=0;ee;e++){var h=this.interactiveItems[e];h.touchmove&&h.touchmove(b)}},e.InteractionManager.prototype.onTouchStart=function(a){for(var b=this.interactionDOMElement.getBoundingClientRect(),c=a.changedTouches,d=0;di;i++){var j=this.interactiveItems[i];if((j.touchstart||j.tap)&&(j.__hit=this.hitTest(j,g),j.__hit&&(j.touchstart&&j.touchstart(g),j.__isDown=!0,j.__touchData=g,!j.interactiveChildren)))break}}},e.InteractionManager.prototype.onTouchEnd=function(a){for(var b=this.interactionDOMElement.getBoundingClientRect(),c=a.changedTouches,d=0;di;i++){var j=this.interactiveItems[i],k=j.__touchData;j.__hit=this.hitTest(j,f),k===f&&(f.originalEvent=a||window.event,(j.touchend||j.tap)&&(j.__hit&&!g?(j.touchend&&j.touchend(f),j.__isDown&&j.tap&&j.tap(f),j.interactiveChildren||(g=!0)):j.__isDown&&j.touchendoutside&&j.touchendoutside(f),j.__isDown=!1),j.__touchData=null)}this.pool.push(f),this.touchs[e.identifier]=null}},e.InteractionData=function(){this.global=new e.Point,this.local=new e.Point,this.target=null,this.originalEvent=null},e.InteractionData.prototype.getLocalPosition=function(a){var b=a.worldTransform,c=this.global,d=b[0],f=b[1],g=b[2],h=b[3],i=b[4],j=b[5],k=1/(d*i+f*-h);return new e.Point(i*k*c.x+-f*k*c.y+(j*f-g*i)*k,d*k*c.y+-h*k*c.x+(-j*d+g*h)*k)},e.InteractionData.prototype.constructor=e.InteractionData,e.Stage=function(a){e.DisplayObjectContainer.call(this),this.worldTransform=e.mat3.create(),this.interactive=!0,this.interactionManager=new e.InteractionManager(this),this.dirty=!0,this.__childrenAdded=[],this.__childrenRemoved=[],this.stage=this,this.stage.hitArea=new e.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a),this.worldVisible=!0},e.Stage.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Stage.prototype.constructor=e.Stage,e.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},e.Stage.prototype.updateTransform=function(){this.worldAlpha=1,this.vcount=e.visibleCount;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},e.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=e.hex2rgb(this.backgroundColor);var b=this.backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},e.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var f=0,h=["ms","moz","webkit","o"],i=0;i>16&255)/255,(a>>8&255)/255,(255&a)/255]},e.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),e.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;bc;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},e.autoDetectRenderer=function(a,b,c,d,f){a||(a=800),b||(b=600);var g=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}();if(g){var h=-1!==navigator.userAgent.toLowerCase().indexOf("trident");g=!h}return g?new e.WebGLRenderer(a,b,c,d,f):new e.CanvasRenderer(a,b,c,d)},e.PolyK={},e.PolyK.Triangulate=function(a){var b=!0,c=a.length>>1;if(3>c)return[];for(var d=[],f=[],g=0;c>g;g++)f.push(g);g=0;for(var h=c;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(e.PolyK._convex(l,m,n,o,p,q,b)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&e.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)d.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!b)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(d=[],f=[],g=0;c>g;g++)f.push(g);g=0,h=c,b=!1}}return d.push(f[0],f[1],f[2]),d},e.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t; -return u>=0&&v>=0&&1>u+v},e.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},e.initDefaultShaders=function(){e.stripShader=new e.StripShader,e.stripShader.init()},e.CompileVertexShader=function(a,b){return e._CompileShader(a,b,a.VERTEX_SHADER)},e.CompileFragmentShader=function(a,b){return e._CompileShader(a,b,a.FRAGMENT_SHADER)},e._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},e.compileProgram=function(a,b,c){var d=e.CompileFragmentShader(a,c),f=e.CompileVertexShader(a,b),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,d),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},e.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.init()},e.PixiShader.prototype.init=function(){var a=this.gl,b=e.compileProgram(a,this.vertexSrc||e.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(b),this.uSampler=a.getUniformLocation(b,"uSampler"),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.dimensions=a.getUniformLocation(b,"dimensions"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.aTextureCoord=a.getAttribLocation(b,"aTextureCoord");for(var c in this.uniforms)this.uniforms[c].uniformLocation=a.getUniformLocation(b,c);this.initUniforms(),this.program=b},e.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},e.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTexture),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!1),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},e.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms)a=this.uniforms[c],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(b,a.uniformLocation,a.transpose,a.value):a.glFunc.call(b,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]||e.createWebGLTexture(a.value.baseTexture,b)),b.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},e.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],e.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","attribute vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},e.StripShader.prototype.init=function(){var a=e.gl,b=e.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(b),this.uSampler=a.getUniformLocation(b,"uSampler"),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(b,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(b,"translationMatrix"),this.alpha=a.getUniformLocation(b,"alpha"),this.program=b},e.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},e.PrimitiveShader.prototype.init=function(){var a=this.gl,b=e.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(b),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.tintColor=a.getUniformLocation(b,"tint"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.translationMatrix=a.getUniformLocation(b,"translationMatrix"),this.alpha=a.getUniformLocation(b,"alpha"),this.program=b},e.WebGLGraphics=function(){},e.WebGLGraphics.renderGraphics=function(a,b){var c=b.gl,d=b.projection,f=b.offset,g=b.shaderManager.primitiveShader;a._webGL||(a._webGL={points:[],indices:[],lastIndex:0,buffer:c.createBuffer(),indexBuffer:c.createBuffer()}),a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,a._webGL.lastIndex=0,a._webGL.points=[],a._webGL.indices=[]),e.WebGLGraphics.updateGraphics(a,c)),b.shaderManager.activatePrimitiveShader();var h=e.mat3.clone(a.worldTransform);e.mat3.transpose(h),c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA),c.uniformMatrix3fv(g.translationMatrix,!1,h),c.uniform2f(g.projectionVector,d.x,-d.y),c.uniform2f(g.offsetVector,-f.x,-f.y),c.uniform3fv(g.tintColor,e.hex2rgb(a.tint)),c.uniform1f(g.alpha,a.worldAlpha),c.uniform1f(g.alpha,a.worldAlpha),c.bindBuffer(c.ARRAY_BUFFER,a._webGL.buffer),c.vertexAttribPointer(g.aVertexPosition,2,c.FLOAT,!1,24,0),c.vertexAttribPointer(g.colorAttribute,4,c.FLOAT,!1,24,8),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),c.drawElements(c.TRIANGLE_STRIP,a._webGL.indices.length,c.UNSIGNED_SHORT,0),b.shaderManager.deactivatePrimitiveShader()},e.WebGLGraphics.updateGraphics=function(a,b){for(var c=a._webGL.lastIndex;c3&&e.WebGLGraphics.buildPoly(d,a._webGL),d.lineWidth>0&&e.WebGLGraphics.buildLine(d,a._webGL)):d.type===e.Graphics.RECT?e.WebGLGraphics.buildRectangle(d,a._webGL):(d.type===e.Graphics.CIRC||d.type===e.Graphics.ELIP)&&e.WebGLGraphics.buildCircle(d,a._webGL)}a._webGL.lastIndex=a.graphicsData.length,a._webGL.glPoints=new Float32Array(a._webGL.points),b.bindBuffer(b.ARRAY_BUFFER,a._webGL.buffer),b.bufferData(b.ARRAY_BUFFER,a._webGL.glPoints,b.STATIC_DRAW),a._webGL.glIndicies=new Uint16Array(a._webGL.indices),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,a._webGL.indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,a._webGL.glIndicies,b.STATIC_DRAW)},e.WebGLGraphics.buildRectangle=function(a,b){var c=a.points,d=c[0],f=c[1],g=c[2],h=c[3];if(a.fill){var i=e.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=b.points,o=b.indices,p=n.length/6;n.push(d,f),n.push(k,l,m,j),n.push(d+g,f),n.push(k,l,m,j),n.push(d,f+h),n.push(k,l,m,j),n.push(d+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}a.lineWidth&&(a.points=[d,f,d+g,f,d+g,f+h,d,f+h,d,f],e.WebGLGraphics.buildLine(a,b))},e.WebGLGraphics.buildCircle=function(a,b){var c=a.points,d=c[0],f=c[1],g=c[2],h=c[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=e.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=b.points,r=b.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(d,f,n,o,p,m),q.push(d+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){for(a.points=[],k=0;i+1>k;k++)a.points.push(d+Math.sin(j*k)*g,f+Math.cos(j*k)*h);e.WebGLGraphics.buildLine(a,b)}},e.WebGLGraphics.buildLine=function(a,b){var c=0,d=a.points;if(0!==d.length){if(a.lineWidth%2)for(c=0;cc;c++)l=d[2*(c-1)],m=d[2*(c-1)+1],n=d[2*c],o=d[2*c+1],p=d[2*(c+1)],q=d[2*(c+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=d[2*(I-2)],m=d[2*(I-2)+1],n=d[2*(I-1)],o=d[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),c=0;J>c;c++)H.push(K++);H.push(K-1)}},e.WebGLGraphics.buildPoly=function(a,b){var c=a.points;if(!(c.length<6)){var d=b.points,f=b.indices,g=c.length/2,h=e.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=e.PolyK.Triangulate(c),n=d.length/6,o=0;for(o=0;oo;o++)d.push(c[2*o],c[2*o+1],j,k,l,i)}},e._defaultFrame=new e.Rectangle(0,0,1,1),e.gl=null,e.WebGLRenderer=function(a,b,c,d,f){e.defaultRenderer||(e.defaultRenderer=this),this.type=e.WEBGL_RENDERER,this.transparent=!!d,this.width=a||800,this.height=b||600,this.view=c||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var g=this;this.view.addEventListener("webglcontextlost",function(a){g.handleContextLost(a)},!1),this.view.addEventListener("webglcontextrestored",function(a){g.handleContextRestored(a)},!1),this.batchs=[];var h={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!1,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",h)}catch(i){try{this.gl=this.view.getContext("webgl",h)}catch(j){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var k=this.gl;k.id=e.WebGLRenderer.glContextId++,e.blendModesWebGL||(e.blendModesWebGL=[],e.blendModesWebGL[e.blendModes.NORMAL]=[k.ONE,k.ONE_MINUS_SRC_ALPHA],e.blendModesWebGL[e.blendModes.ADD]=[k.SRC_ALPHA,k.DST_ALPHA],e.blendModesWebGL[e.blendModes.MULTIPLY]=[k.DST_COLOR,k.ONE_MINUS_SRC_ALPHA],e.blendModesWebGL[e.blendModes.SCREEN]=[k.SRC_ALPHA,k.ONE]),this.projection=new e.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new e.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new e.WebGLShaderManager(k),this.spriteBatch=new e.WebGLSpriteBatch(k),this.maskManager=new e.WebGLMaskManager(k),this.filterManager=new e.WebGLFilterManager(k,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,k.useProgram(this.shaderManager.defaultShader.program),e.WebGLRenderer.gl=k,k.disable(k.DEPTH_TEST),k.disable(k.CULL_FACE),k.enable(k.BLEND),k.colorMask(!0,!0,!0,this.transparent)},e.WebGLRenderer.prototype.constructor=e.WebGLRenderer,e.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(this.__stage=a),e.WebGLRenderer.updateTextures(),a.updateTransform();var b=this.gl;b.colorMask(!0,!0,!0,this.transparent),b.viewport(0,0,this.width,this.height),b.bindFramebuffer(b.FRAMEBUFFER,null),b.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],!this.transparent),b.clear(b.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)))}},e.WebGLRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,null),a._renderWebGL(this.renderSession),this.spriteBatch.end()},e.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;ad;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null},e.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},e.WebGLSpriteBatch.prototype.end=function(){this.flush()},e.WebGLSpriteBatch.prototype.render=function(a){(a.texture.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=a.texture.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var b=a._uvs||a.texture._uvs;if(b){var c,d,e,f,g=a.worldAlpha,h=a.tint,i=this.vertices,j=a.texture.frame.width,k=a.texture.frame.height,l=a.anchor.x,m=a.anchor.y;if(a.texture.trimmed){var n=a.texture.trim;d=n.x-l*n.realWidth,c=d+j,f=n.y-m*n.realHeight,e=f+k}else c=j*(1-l),d=j*-l,e=k*(1-m),f=k*-m;var o=4*this.currentBatchSize*this.vertSize,p=a.worldTransform,q=p[0],r=p[3],s=p[1],t=p[4],u=p[2],v=p[5];i[o++]=q*d+s*f+u,i[o++]=t*f+r*d+v,i[o++]=b[0],i[o++]=b[1],i[o++]=g,i[o++]=h,i[o++]=q*c+s*f+u,i[o++]=t*f+r*c+v,i[o++]=b[2],i[o++]=b[3],i[o++]=g,i[o++]=h,i[o++]=q*c+s*e+u,i[o++]=t*e+r*c+v,i[o++]=b[4],i[o++]=b[5],i[o++]=g,i[o++]=h,i[o++]=q*d+s*e+u,i[o++]=t*e+r*d+v,i[o++]=b[6],i[o++]=b[7],i[o++]=g,i[o++]=h,this.currentBatchSize++}},e.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new Float32Array(8));var c=a._uvs,d=a.tilePosition.x/b.baseTexture.width,e=a.tilePosition.y/b.baseTexture.height,f=a.width/b.baseTexture.width/a.tileScale.x,g=a.height/b.baseTexture.height/a.tileScale.y;c[0]=0-d,c[1]=0-e,c[2]=1*f-d,c[3]=0-e,c[4]=1*f-d,c[5]=1*g-e,c[6]=0-d,c[7]=1*g-e;var h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.width,l=a.height,m=a.anchor.x,n=a.anchor.y,o=k*(1-m),p=k*-m,q=l*(1-n),r=l*-n,s=4*this.currentBatchSize*this.vertSize,t=a.worldTransform,u=t[0],v=t[3],w=t[1],x=t[4],y=t[2],z=t[5];j[s++]=u*p+w*r+y,j[s++]=x*r+v*p+z,j[s++]=c[0],j[s++]=c[1],j[s++]=h,j[s++]=i,j[s++]=u*o+w*r+y,j[s++]=x*r+v*o+z,j[s++]=c[2],j[s++]=c[3],j[s++]=h,j[s++]=i,j[s++]=u*o+w*q+y,j[s++]=x*q+v*o+z,j[s++]=c[4],j[s++]=c[5],j[s++]=h,j[s++]=i,j[s++]=u*p+w*q+y,j[s++]=x*q+v*p+z,j[s++]=c[6],j[s++]=c[7],j[s++]=h,j[s++]=i,this.currentBatchSize++},e.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||e.createWebGLTexture(this.currentBaseTexture,a));var b=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,b),a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},e.WebGLSpriteBatch.prototype.stop=function(){this.flush()},e.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var b=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,b.x,b.y);var c=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,c,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,c,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,c,16),this.currentBlendMode!==e.blendModes.NORMAL&&this.setBlendMode(e.blendModes.NORMAL)},e.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var b=e.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(b[0],b[1])},e.WebGLFilterManager=function(a,b){this.gl=a,this.transparent=b,this.filterStack=[],this.texturePool=[],this.offsetX=0,this.offsetY=0,this.initShaderBuffers()},e.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},e.WebGLFilterManager.prototype.pushFilter=function(a){var b=this.gl,c=this.renderSession.projection,d=this.renderSession.offset;this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a.target.filterArea.x,this.offsetY+=a.target.filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new e.FilterTexture(this.gl,this.width,this.height),b.bindTexture(b.TEXTURE_2D,g.texture),this.getBounds(a.target),a.target.filterArea=a.target.getBounds();var h=a.target.filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),b.bindFramebuffer(b.FRAMEBUFFER,g.frameBuffer),b.viewport(0,0,h.width,h.height),c.x=h.width/2,c.y=-h.height/2,d.x=-h.x,d.y=-h.y,b.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),b.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),b.colorMask(!0,!0,!0,!0),b.clearColor(0,0,0,0),b.clear(b.COLOR_BUFFER_BIT),a._glFilterTexture=g},e.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,b=this.filterStack.pop(),c=b.target.filterArea,d=b._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(b.filterPasses.length>1){a.viewport(0,0,c.width,c.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=c.height,this.vertexArray[2]=c.width,this.vertexArray[3]=c.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=c.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=c.width/this.width,this.uvArray[5]=c.height/this.height,this.uvArray[6]=c.width/this.width,this.uvArray[7]=c.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var h=d,i=this.texturePool.pop();i||(i=new e.FilterTexture(this.gl,this.width,this.height)),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;js?s:E,E=E>t?t:E,E=E>u?u:E,E=E>v?v:E,F=F>w?w:F,F=F>x?x:F,F=F>y?y:F,F=F>z?z:F,C=s>C?s:C,C=t>C?t:C,C=u>C?u:C,C=v>C?v:C,D=w>D?w:D,D=x>D?x:D,D=y>D?y:D,D=z>D?z:D),l=!1,A=A._iNext}while(A!==B);a.filterArea.x=E,a.filterArea.y=F,a.filterArea.width=C-E,a.filterArea.height=D-F},e.FilterTexture=function(a,b,c){this.gl=a,this.frameBuffer=a.createFramebuffer(),this.texture=a.createTexture(),a.bindTexture(a.TEXTURE_2D,this.texture),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.bindFramebuffer(a.FRAMEBUFFER,this.framebuffer),a.bindFramebuffer(a.FRAMEBUFFER,this.frameBuffer),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.texture,0),this.resize(b,c)},e.FilterTexture.prototype.clear=function(){var a=this.gl;a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT)},e.FilterTexture.prototype.resize=function(a,b){if(this.width!==a||this.height!==b){this.width=a,this.height=b;var c=this.gl;c.bindTexture(c.TEXTURE_2D,this.texture),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,a,b,0,c.RGBA,c.UNSIGNED_BYTE,null)}},e.CanvasMaskManager=function(){},e.CanvasMaskManager.prototype.pushMask=function(a,b){b.save();var c=a.alpha,d=a.worldTransform;b.setTransform(d[0],d[3],d[1],d[4],d[2],d[5]),e.CanvasGraphics.renderGraphicsMask(a,b),b.clip(),a.worldAlpha=c},e.CanvasMaskManager.prototype.popMask=function(a){a.restore()},e.CanvasTinter=function(){},e.CanvasTinter.getTintedTexture=function(a,b){var c=a.texture;b=e.CanvasTinter.roundColor(b);var d="#"+("00000"+(0|b).toString(16)).substr(-6);if(c.tintCache=c.tintCache||{},c.tintCache[d])return c.tintCache[d];var f=e.CanvasTinter.canvas||document.createElement("canvas");if(e.CanvasTinter.tintMethod(c,b,f),e.CanvasTinter.convertTintToImage){var g=new Image;g.src=f.toDataURL(),c.tintCache[d]=g}else c.tintCache[d]=f,e.CanvasTinter.canvas=null;return f},e.CanvasTinter.tintWithMultiply=function(a,b,c){var d=c.getContext("2d"),e=a.frame; -c.width=e.width,c.height=e.height,d.fillStyle="#"+("00000"+(0|b).toString(16)).substr(-6),d.fillRect(0,0,e.width,e.height),d.globalCompositeOperation="multiply",d.drawImage(a.baseTexture.source,e.x,e.y,e.width,e.height,0,0,e.width,e.height),d.globalCompositeOperation="destination-atop",d.drawImage(a.baseTexture.source,e.x,e.y,e.width,e.height,0,0,e.width,e.height)},e.CanvasTinter.tintWithOverlay=function(a,b,c){var d=c.getContext("2d"),e=a.frame;c.width=e.width,c.height=e.height,d.globalCompositeOperation="copy",d.fillStyle="#"+("00000"+(0|b).toString(16)).substr(-6),d.fillRect(0,0,e.width,e.height),d.globalCompositeOperation="destination-atop",d.drawImage(a.baseTexture.source,e.x,e.y,e.width,e.height,0,0,e.width,e.height)},e.CanvasTinter.tintWithPerPixel=function(a,b,c){var d=c.getContext("2d"),f=a.frame;c.width=f.width,c.height=f.height,d.globalCompositeOperation="copy",d.drawImage(a.baseTexture.source,f.x,f.y,f.width,f.height,0,0,f.width,f.height);for(var g=e.hex2rgb(b),h=g[0],i=g[1],j=g[2],k=d.getImageData(0,0,f.width,f.height),l=k.data,m=0;m0&&(e.Texture.frameUpdates=[])},e.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},e.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},e.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},e.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},e.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},e.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},e.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},e.CanvasGraphics=function(){},e.CanvasGraphics.renderGraphics=function(a,b){for(var c=a.worldAlpha,d="",f=0;f1&&(c=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var d=0;1>d;d++){var f=a.graphicsData[d],g=f.points;if(f.type===e.Graphics.POLY){b.beginPath(),b.moveTo(g[0],g[1]);for(var h=1;hl?l:v,v=v>n?n:v,v=v>p?p:v,v=v>r?r:v,w=w>m?m:w,w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,t=l>t?l:t,t=n>t?n:t,t=p>t?p:t,t=r>t?r:t,u=m>u?m:u,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u;var x=this._bounds;return x.x=v,x.width=t-v,x.y=w,x.height=u-w,x},e.Graphics.prototype.updateBounds=function(){for(var a,b,c,d=1/0,f=-1/0,g=1/0,h=-1/0,i=0;ib?b:d,f=b+m>f?b+m:f,g=g>c?b:g,h=c+n>h?c+n:h}else if(k===e.Graphics.CIRC||k===e.Graphics.ELIP){b=a.x,c=a.y;var o=a.radius+l/2;d=d>b-o?b-o:d,f=b+o>f?b+o:f,g=g>c-o?c-o:g,h=c+o>h?c+o:h}else for(var p=0;pb-l?b-l:d,f=b+l>f?b+l:f,g=g>c-l?c-l:g,h=c+l>h?c+l:h}this.bounds=new e.Rectangle(d,g,f-d,h-g)},e.Graphics.POLY=0,e.Graphics.RECT=1,e.Graphics.CIRC=2,e.Graphics.ELIP=3,e.Strip=function(a,b,c){e.DisplayObjectContainer.call(this),this.texture=a,this.blendMode=e.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(d){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=b,this.height=c,a.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},e.Strip.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Strip.prototype.constructor=e.Strip,e.Strip.prototype.setTexture=function(a){this.texture=a,this.width=a.frame.width,this.height=a.frame.height,this.updateFrame=!0},e.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},e.Rope=function(a,b){e.Strip.call(this,a),this.points=b;try{this.verticies=new Float32Array(4*b.length),this.uvs=new Float32Array(4*b.length),this.colors=new Float32Array(2*b.length),this.indices=new Uint16Array(2*b.length)}catch(c){this.verticies=new Array(4*b.length),this.uvs=new Array(4*b.length),this.colors=new Array(2*b.length),this.indices=new Array(2*b.length)}this.refresh()},e.Rope.prototype=Object.create(e.Strip.prototype),e.Rope.prototype.constructor=e.Rope,e.Rope.prototype.refresh=function(){var a=this.points;if(!(a.length<1)){var b=this.uvs,c=a[0],d=this.indices,e=this.colors;this.count-=.2,b[0]=0,b[1]=1,b[2]=0,b[3]=1,e[0]=1,e[1]=1,d[0]=0,d[1]=1;for(var f,g,h,i=a.length,j=1;i>j;j++)f=a[j],g=4*j,h=j/(i-1),j%2?(b[g]=h,b[g+1]=0,b[g+2]=h,b[g+3]=1):(b[g]=h,b[g+1]=0,b[g+2]=h,b[g+3]=1),g=2*j,e[g]=1,e[g+1]=1,g=2*j,d[g]=g,d[g+1]=g+1,c=f}},e.Rope.prototype.updateTransform=function(){var a=this.points;if(!(a.length<1)){var b,c=a[0],d={x:0,y:0};this.count-=.2;var f=this.verticies;f[0]=c.x+d.x,f[1]=c.y+d.y,f[2]=c.x-d.x,f[3]=c.y-d.y;for(var g,h,i,j,k,l=a.length,m=1;l>m;m++)g=a[m],h=4*m,b=m1&&(i=1),j=Math.sqrt(d.x*d.x+d.y*d.y),k=this.texture.height/2,d.x/=j,d.y/=j,d.x*=k,d.y*=k,f[h]=g.x+d.x,f[h+1]=g.y+d.y,f[h+2]=g.x-d.x,f[h+3]=g.y-d.y,c=g;e.DisplayObjectContainer.prototype.updateTransform.call(this)}},e.Rope.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},e.TilingSprite=function(a,b,c){e.Sprite.call(this,a),this.width=b||100,this.height=c||100,a.baseTexture._powerOf2=!0,this.tileScale=new e.Point(1,1),this.tilePosition=new e.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=e.blendModes.NORMAL},e.TilingSprite.prototype=Object.create(e.Sprite.prototype),e.TilingSprite.prototype.constructor=e.TilingSprite,Object.defineProperty(e.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(e.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),e.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},e.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this.mask||this.filters){for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a.projection),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),a.spriteBatch.renderTilingSprite(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a.projection),a.spriteBatch.start()}else for(a.spriteBatch.renderTilingSprite(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var b=a.context;b.globalAlpha=this.worldAlpha,this.__tilePattern||(this.__tilePattern=b.createPattern(this.texture.baseTexture.source,"repeat")),this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,b.globalCompositeOperation=e.blendModesCanvas[a.currentBlendMode]),b.beginPath();var c=this.tilePosition,d=this.tileScale;b.scale(d.x,d.y),b.translate(c.x,c.y),b.fillStyle=this.__tilePattern,b.fillRect(-c.x,-c.y,this.width/d.x,this.height/d.y),b.scale(1/d.x,1/d.y),b.translate(-c.x,-c.y),b.closePath()}};var j={};j.BoneData=function(a,b){this.name=a,this.parent=b},j.BoneData.prototype={length:0,x:0,y:0,rotation:0,scaleX:1,scaleY:1},j.SlotData=function(a,b){this.name=a,this.boneData=b},j.SlotData.prototype={r:1,g:1,b:1,a:1,attachmentName:null},j.Bone=function(a,b){this.data=a,this.parent=b,this.setToSetupPose()},j.Bone.yDown=!1,j.Bone.prototype={x:0,y:0,rotation:0,scaleX:1,scaleY:1,m00:0,m01:0,worldX:0,m10:0,m11:0,worldY:0,worldRotation:0,worldScaleX:1,worldScaleY:1,updateWorldTransform:function(a,b){var c=this.parent;null!=c?(this.worldX=this.x*c.m00+this.y*c.m01+c.worldX,this.worldY=this.x*c.m10+this.y*c.m11+c.worldY,this.worldScaleX=c.worldScaleX*this.scaleX,this.worldScaleY=c.worldScaleY*this.scaleY,this.worldRotation=c.worldRotation+this.rotation):(this.worldX=this.x,this.worldY=this.y,this.worldScaleX=this.scaleX,this.worldScaleY=this.scaleY,this.worldRotation=this.rotation);var d=this.worldRotation*Math.PI/180,e=Math.cos(d),f=Math.sin(d);this.m00=e*this.worldScaleX,this.m10=f*this.worldScaleX,this.m01=-f*this.worldScaleY,this.m11=e*this.worldScaleY,a&&(this.m00=-this.m00,this.m01=-this.m01),b&&(this.m10=-this.m10,this.m11=-this.m11),j.Bone.yDown&&(this.m10=-this.m10,this.m11=-this.m11)},setToSetupPose:function(){var a=this.data;this.x=a.x,this.y=a.y,this.rotation=a.rotation,this.scaleX=a.scaleX,this.scaleY=a.scaleY}},j.Slot=function(a,b,c){this.data=a,this.skeleton=b,this.bone=c,this.setToSetupPose()},j.Slot.prototype={r:1,g:1,b:1,a:1,_attachmentTime:0,attachment:null,setAttachment:function(a){this.attachment=a,this._attachmentTime=this.skeleton.time},setAttachmentTime:function(a){this._attachmentTime=this.skeleton.time-a},getAttachmentTime:function(){return this.skeleton.time-this._attachmentTime},setToSetupPose:function(){var a=this.data;this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a;for(var b=this.skeleton.data.slots,c=0,d=b.length;d>c;c++)if(b[c]==a){this.setAttachment(a.attachmentName?this.skeleton.getAttachmentBySlotIndex(c,a.attachmentName):null);break}}},j.Skin=function(a){this.name=a,this.attachments={}},j.Skin.prototype={addAttachment:function(a,b,c){this.attachments[a+":"+b]=c},getAttachment:function(a,b){return this.attachments[a+":"+b]},_attachAll:function(a,b){for(var c in b.attachments){var d=c.indexOf(":"),e=parseInt(c.substring(0,d),10),f=c.substring(d+1),g=a.slots[e];if(g.attachment&&g.attachment.name==f){var h=this.getAttachment(e,f);h&&g.setAttachment(h)}}}},j.Animation=function(a,b,c){this.name=a,this.timelines=b,this.duration=c},j.Animation.prototype={apply:function(a,b,c){c&&this.duration&&(b%=this.duration);for(var d=this.timelines,e=0,f=d.length;f>e;e++)d[e].apply(a,b,1)},mix:function(a,b,c,d){c&&this.duration&&(b%=this.duration);for(var e=this.timelines,f=0,g=e.length;g>f;f++)e[f].apply(a,b,d)}},j.binarySearch=function(a,b,c){var d=0,e=Math.floor(a.length/c)-2;if(!e)return c;for(var f=e>>>1;;){if(a[(f+1)*c]<=b?d=f+1:e=f,d==e)return(d+1)*c;f=d+e>>>1}},j.linearSearch=function(a,b,c){for(var d=0,e=a.length-c;e>=d;d+=c)if(a[d]>b)return d;return-1},j.Curves=function(a){this.curves=[],this.curves.length=6*(a-1)},j.Curves.prototype={setLinear:function(a){this.curves[6*a]=0},setStepped:function(a){this.curves[6*a]=-1},setCurve:function(a,b,c,d,e){var f=.1,g=f*f,h=g*f,i=3*f,j=3*g,k=6*g,l=6*h,m=2*-b+d,n=2*-c+e,o=3*(b-d)+1,p=3*(c-e)+1,q=6*a,r=this.curves;r[q]=b*i+m*j+o*h,r[q+1]=c*i+n*j+p*h,r[q+2]=m*k+o*l,r[q+3]=n*k+p*l,r[q+4]=o*l,r[q+5]=p*l},getCurvePercent:function(a,b){b=0>b?0:b>1?1:b;var c=6*a,d=this.curves,e=d[c];if(!e)return b;if(-1==e)return 0;for(var f=d[c+1],g=d[c+2],h=d[c+3],i=d[c+4],j=d[c+5],k=e,l=f,m=8;;){if(k>=b){var n=k-e,o=l-f;return o+(l-o)*(b-n)/(k-n)}if(!m)break;m--,e+=g,f+=h,g+=i,h+=j,k+=e,l+=f}return l+(1-l)*(b-k)/(1-k)}},j.RotateTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=2*a},j.RotateTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/2},setFrame:function(a,b,c){a*=2,this.frames[a]=b,this.frames[a+1]=c},apply:function(a,b,c){var d,e=this.frames;if(!(b=e[e.length-2]){for(d=f.data.rotation+e[e.length-1]-f.rotation;d>180;)d-=360;for(;-180>d;)d+=360;return f.rotation+=d*c,void 0}var g=j.binarySearch(e,b,2),h=e[g-1],i=e[g],k=1-(b-i)/(e[g-2]-i);for(k=this.curves.getCurvePercent(g/2-1,k),d=e[g+1]-h;d>180;)d-=360;for(;-180>d;)d+=360;for(d=f.data.rotation+(h+d*k)-f.rotation;d>180;)d-=360;for(;-180>d;)d+=360;f.rotation+=d*c}}},j.TranslateTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=3*a},j.TranslateTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/3},setFrame:function(a,b,c,d){a*=3,this.frames[a]=b,this.frames[a+1]=c,this.frames[a+2]=d},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-3])return e.x+=(e.data.x+d[d.length-2]-e.x)*c,e.y+=(e.data.y+d[d.length-1]-e.y)*c,void 0;var f=j.binarySearch(d,b,3),g=d[f-2],h=d[f-1],i=d[f],k=1-(b-i)/(d[f+-3]-i);k=this.curves.getCurvePercent(f/3-1,k),e.x+=(e.data.x+g+(d[f+1]-g)*k-e.x)*c,e.y+=(e.data.y+h+(d[f+2]-h)*k-e.y)*c}}},j.ScaleTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=3*a},j.ScaleTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/3},setFrame:function(a,b,c,d){a*=3,this.frames[a]=b,this.frames[a+1]=c,this.frames[a+2]=d},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-3])return e.scaleX+=(e.data.scaleX-1+d[d.length-2]-e.scaleX)*c,e.scaleY+=(e.data.scaleY-1+d[d.length-1]-e.scaleY)*c,void 0;var f=j.binarySearch(d,b,3),g=d[f-2],h=d[f-1],i=d[f],k=1-(b-i)/(d[f+-3]-i);k=this.curves.getCurvePercent(f/3-1,k),e.scaleX+=(e.data.scaleX-1+g+(d[f+1]-g)*k-e.scaleX)*c,e.scaleY+=(e.data.scaleY-1+h+(d[f+2]-h)*k-e.scaleY)*c}}},j.ColorTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=5*a},j.ColorTimeline.prototype={slotIndex:0,getFrameCount:function(){return this.frames.length/2},setFrame:function(c,d){c*=5,this.frames[c]=d,this.frames[c+1]=r,this.frames[c+2]=g,this.frames[c+3]=b,this.frames[c+4]=a},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-5]){var f=d.length-1;return e.r=d[f-3],e.g=d[f-2],e.b=d[f-1],e.a=d[f],void 0}var g=j.binarySearch(d,b,5),h=d[g-4],i=d[g-3],k=d[g-2],l=d[g-1],m=d[g],n=1-(b-m)/(d[g-5]-m);n=this.curves.getCurvePercent(g/5-1,n);var o=h+(d[g+1]-h)*n,p=i+(d[g+2]-i)*n,q=k+(d[g+3]-k)*n,r=l+(d[g+4]-l)*n;1>c?(e.r+=(o-e.r)*c,e.g+=(p-e.g)*c,e.b+=(q-e.b)*c,e.a+=(r-e.a)*c):(e.r=o,e.g=p,e.b=q,e.a=r)}}},j.AttachmentTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=a,this.attachmentNames=[],this.attachmentNames.length=a},j.AttachmentTimeline.prototype={slotIndex:0,getFrameCount:function(){return this.frames.length},setFrame:function(a,b,c){this.frames[a]=b,this.attachmentNames[a]=c},apply:function(a,b){var c=this.frames;if(!(b=c[c.length-1]?c.length-1:j.binarySearch(c,b,1)-1;var e=this.attachmentNames[d];a.slots[this.slotIndex].setAttachment(e?a.getAttachmentBySlotIndex(this.slotIndex,e):null)}}},j.SkeletonData=function(){this.bones=[],this.slots=[],this.skins=[],this.animations=[]},j.SkeletonData.prototype={defaultSkin:null,findBone:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},findBoneIndex:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].name==a)return c;return-1},findSlot:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].name==a)return slot[c];return null},findSlotIndex:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].name==a)return c;return-1},findSkin:function(a){for(var b=this.skins,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},findAnimation:function(a){for(var b=this.animations,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null}},j.Skeleton=function(a){this.data=a,this.bones=[];for(var b=0,c=a.bones.length;c>b;b++){var d=a.bones[b],e=d.parent?this.bones[a.bones.indexOf(d.parent)]:null;this.bones.push(new j.Bone(d,e))}for(this.slots=[],this.drawOrder=[],b=0,c=a.slots.length;c>b;b++){var f=a.slots[b],g=this.bones[a.bones.indexOf(f.boneData)],h=new j.Slot(f,this,g);this.slots.push(h),this.drawOrder.push(h)}},j.Skeleton.prototype={x:0,y:0,skin:null,r:1,g:1,b:1,a:1,time:0,flipX:!1,flipY:!1,updateWorldTransform:function(){for(var a=this.flipX,b=this.flipY,c=this.bones,d=0,e=c.length;e>d;d++)c[d].updateWorldTransform(a,b)},setToSetupPose:function(){this.setBonesToSetupPose(),this.setSlotsToSetupPose()},setBonesToSetupPose:function(){for(var a=this.bones,b=0,c=a.length;c>b;b++)a[b].setToSetupPose()},setSlotsToSetupPose:function(){for(var a=this.slots,b=0,c=a.length;c>b;b++)a[b].setToSetupPose(b)},getRootBone:function(){return this.bones.length?this.bones[0]:null},findBone:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return b[c];return null},findBoneIndex:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return c;return-1},findSlot:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return b[c];return null},findSlotIndex:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return c;return-1},setSkinByName:function(a){var b=this.data.findSkin(a);if(!b)throw"Skin not found: "+a;this.setSkin(b)},setSkin:function(a){this.skin&&a&&a._attachAll(this,this.skin),this.skin=a},getAttachmentBySlotName:function(a,b){return this.getAttachmentBySlotIndex(this.data.findSlotIndex(a),b)},getAttachmentBySlotIndex:function(a,b){if(this.skin){var c=this.skin.getAttachment(a,b);if(c)return c}return this.data.defaultSkin?this.data.defaultSkin.getAttachment(a,b):null},setAttachment:function(a,b){for(var c=this.slots,d=0,e=c.size;e>d;d++){var f=c[d];if(f.data.name==a){var g=null;if(b&&(g=this.getAttachment(d,b),null==g))throw"Attachment not found: "+b+", for slot: "+a;return f.setAttachment(g),void 0}}throw"Slot not found: "+a},update:function(a){time+=a}},j.AttachmentType={region:0},j.RegionAttachment=function(){this.offset=[],this.offset.length=8,this.uvs=[],this.uvs.length=8},j.RegionAttachment.prototype={x:0,y:0,rotation:0,scaleX:1,scaleY:1,width:0,height:0,rendererObject:null,regionOffsetX:0,regionOffsetY:0,regionWidth:0,regionHeight:0,regionOriginalWidth:0,regionOriginalHeight:0,setUVs:function(a,b,c,d,e){var f=this.uvs;e?(f[2]=a,f[3]=d,f[4]=a,f[5]=b,f[6]=c,f[7]=b,f[0]=c,f[1]=d):(f[0]=a,f[1]=d,f[2]=a,f[3]=b,f[4]=c,f[5]=b,f[6]=c,f[7]=d)},updateOffset:function(){var a=this.width/this.regionOriginalWidth*this.scaleX,b=this.height/this.regionOriginalHeight*this.scaleY,c=-this.width/2*this.scaleX+this.regionOffsetX*a,d=-this.height/2*this.scaleY+this.regionOffsetY*b,e=c+this.regionWidth*a,f=d+this.regionHeight*b,g=this.rotation*Math.PI/180,h=Math.cos(g),i=Math.sin(g),j=c*h+this.x,k=c*i,l=d*h+this.y,m=d*i,n=e*h+this.x,o=e*i,p=f*h+this.y,q=f*i,r=this.offset;r[0]=j-m,r[1]=l+k,r[2]=j-q,r[3]=p+k,r[4]=n-q,r[5]=p+o,r[6]=n-m,r[7]=l+o},computeVertices:function(a,b,c,d){a+=c.worldX,b+=c.worldY;var e=c.m00,f=c.m01,g=c.m10,h=c.m11,i=this.offset;d[0]=i[0]*e+i[1]*f+a,d[1]=i[0]*g+i[1]*h+b,d[2]=i[2]*e+i[3]*f+a,d[3]=i[2]*g+i[3]*h+b,d[4]=i[4]*e+i[5]*f+a,d[5]=i[4]*g+i[5]*h+b,d[6]=i[6]*e+i[7]*f+a,d[7]=i[6]*g+i[7]*h+b}},j.AnimationStateData=function(a){this.skeletonData=a,this.animationToMixTime={}},j.AnimationStateData.prototype={defaultMix:0,setMixByName:function(a,b,c){var d=this.skeletonData.findAnimation(a);if(!d)throw"Animation not found: "+a;var e=this.skeletonData.findAnimation(b);if(!e)throw"Animation not found: "+b;this.setMix(d,e,c)},setMix:function(a,b,c){this.animationToMixTime[a.name+":"+b.name]=c},getMix:function(a,b){var c=this.animationToMixTime[a.name+":"+b.name];return c?c:this.defaultMix}},j.AnimationState=function(a){this.data=a,this.queue=[]},j.AnimationState.prototype={current:null,previous:null,currentTime:0,previousTime:0,currentLoop:!1,previousLoop:!1,mixTime:0,mixDuration:0,update:function(a){if(this.currentTime+=a,this.previousTime+=a,this.mixTime+=a,this.queue.length>0){var b=this.queue[0];this.currentTime>=b.delay&&(this._setAnimation(b.animation,b.loop),this.queue.shift())}},apply:function(a){if(this.current)if(this.previous){this.previous.apply(a,this.previousTime,this.previousLoop);var b=this.mixTime/this.mixDuration;b>=1&&(b=1,this.previous=null),this.current.mix(a,this.currentTime,this.currentLoop,b)}else this.current.apply(a,this.currentTime,this.currentLoop)},clearAnimation:function(){this.previous=null,this.current=null,this.queue.length=0},_setAnimation:function(a,b){this.previous=null,a&&this.current&&(this.mixDuration=this.data.getMix(this.current,a),this.mixDuration>0&&(this.mixTime=0,this.previous=this.current,this.previousTime=this.currentTime,this.previousLoop=this.currentLoop)),this.current=a,this.currentLoop=b,this.currentTime=0},setAnimationByName:function(a,b){var c=this.data.skeletonData.findAnimation(a);if(!c)throw"Animation not found: "+a;this.setAnimation(c,b)},setAnimation:function(a,b){this.queue.length=0,this._setAnimation(a,b)},addAnimationByName:function(a,b,c){var d=this.data.skeletonData.findAnimation(a);if(!d)throw"Animation not found: "+a;this.addAnimation(d,b,c)},addAnimation:function(a,b,c){var d={};if(d.animation=a,d.loop=b,!c||0>=c){var e=this.queue.length?this.queue[this.queue.length-1].animation:this.current;c=null!=e?e.duration-this.data.getMix(e,a)+(c||0):0}d.delay=c,this.queue.push(d)},isComplete:function(){return!this.current||this.currentTime>=this.current.duration}},j.SkeletonJson=function(a){this.attachmentLoader=a},j.SkeletonJson.prototype={scale:1,readSkeletonData:function(a){for(var b,c=new j.SkeletonData,d=a.bones,e=0,f=d.length;f>e;e++){var g=d[e],h=null;if(g.parent&&(h=c.findBone(g.parent),!h))throw"Parent bone not found: "+g.parent;b=new j.BoneData(g.name,h),b.length=(g.length||0)*this.scale,b.x=(g.x||0)*this.scale,b.y=(g.y||0)*this.scale,b.rotation=g.rotation||0,b.scaleX=g.scaleX||1,b.scaleY=g.scaleY||1,c.bones.push(b)}var i=a.slots;for(e=0,f=i.length;f>e;e++){var k=i[e];if(b=c.findBone(k.bone),!b)throw"Slot bone not found: "+k.bone;var l=new j.SlotData(k.name,b),m=k.color;m&&(l.r=j.SkeletonJson.toColor(m,0),l.g=j.SkeletonJson.toColor(m,1),l.b=j.SkeletonJson.toColor(m,2),l.a=j.SkeletonJson.toColor(m,3)),l.attachmentName=k.attachment,c.slots.push(l)}var n=a.skins;for(var o in n)if(n.hasOwnProperty(o)){var p=n[o],q=new j.Skin(o);for(var r in p)if(p.hasOwnProperty(r)){var s=c.findSlotIndex(r),t=p[r];for(var u in t)if(t.hasOwnProperty(u)){var v=this.readAttachment(q,u,t[u]);null!=v&&q.addAttachment(s,u,v)}}c.skins.push(q),"default"==q.name&&(c.defaultSkin=q)}var w=a.animations;for(var x in w)w.hasOwnProperty(x)&&this.readAnimation(x,w[x],c);return c},readAttachment:function(a,b,c){b=c.name||b;var d=j.AttachmentType[c.type||"region"];if(d==j.AttachmentType.region){var e=new j.RegionAttachment;return e.x=(c.x||0)*this.scale,e.y=(c.y||0)*this.scale,e.scaleX=c.scaleX||1,e.scaleY=c.scaleY||1,e.rotation=c.rotation||0,e.width=(c.width||32)*this.scale,e.height=(c.height||32)*this.scale,e.updateOffset(),e.rendererObject={},e.rendererObject.name=b,e.rendererObject.scale={},e.rendererObject.scale.x=e.scaleX,e.rendererObject.scale.y=e.scaleY,e.rendererObject.rotation=-e.rotation*Math.PI/180,e -}throw"Unknown attachment type: "+d},readAnimation:function(a,b,c){var d,e,f,g,h,i,k,l=[],m=0,n=b.bones;for(var o in n)if(n.hasOwnProperty(o)){var p=c.findBoneIndex(o);if(-1==p)throw"Bone not found: "+o;var q=n[o];for(f in q)if(q.hasOwnProperty(f))if(h=q[f],"rotate"==f){for(e=new j.RotateTimeline(h.length),e.boneIndex=p,d=0,i=0,k=h.length;k>i;i++)g=h[i],e.setFrame(d,g.time,g.angle),j.SkeletonJson.readCurve(e,d,g),d++;l.push(e),m=Math.max(m,e.frames[2*e.getFrameCount()-2])}else{if("translate"!=f&&"scale"!=f)throw"Invalid timeline type for a bone: "+f+" ("+o+")";var r=1;for("scale"==f?e=new j.ScaleTimeline(h.length):(e=new j.TranslateTimeline(h.length),r=this.scale),e.boneIndex=p,d=0,i=0,k=h.length;k>i;i++){g=h[i];var s=(g.x||0)*r,t=(g.y||0)*r;e.setFrame(d,g.time,s,t),j.SkeletonJson.readCurve(e,d,g),d++}l.push(e),m=Math.max(m,e.frames[3*e.getFrameCount()-3])}}var u=b.slots;for(var v in u)if(u.hasOwnProperty(v)){var w=u[v],x=c.findSlotIndex(v);for(f in w)if(w.hasOwnProperty(f))if(h=w[f],"color"==f){for(e=new j.ColorTimeline(h.length),e.slotIndex=x,d=0,i=0,k=h.length;k>i;i++){g=h[i];var y=g.color,z=j.SkeletonJson.toColor(y,0),A=j.SkeletonJson.toColor(y,1),B=j.SkeletonJson.toColor(y,2),C=j.SkeletonJson.toColor(y,3);e.setFrame(d,g.time,z,A,B,C),j.SkeletonJson.readCurve(e,d,g),d++}l.push(e),m=Math.max(m,e.frames[5*e.getFrameCount()-5])}else{if("attachment"!=f)throw"Invalid timeline type for a slot: "+f+" ("+v+")";for(e=new j.AttachmentTimeline(h.length),e.slotIndex=x,d=0,i=0,k=h.length;k>i;i++)g=h[i],e.setFrame(d++,g.time,g.name);l.push(e),m=Math.max(m,e.frames[e.getFrameCount()-1])}}c.animations.push(new j.Animation(a,l,m))}},j.SkeletonJson.readCurve=function(a,b,c){var d=c.curve;d&&("stepped"==d?a.curves.setStepped(b):d instanceof Array&&a.curves.setCurve(b,d[0],d[1],d[2],d[3]))},j.SkeletonJson.toColor=function(a,b){if(8!=a.length)throw"Color hexidecimal length must be 8, recieved: "+a;return parseInt(a.substring(2*b,2),16)/255},j.Atlas=function(a,b){this.textureLoader=b,this.pages=[],this.regions=[];var c=new j.AtlasReader(a),d=[];d.length=4;for(var e=null;;){var f=c.readLine();if(null==f)break;if(f=c.trim(f),f.length)if(e){var g=new j.AtlasRegion;g.name=f,g.page=e,g.rotate="true"==c.readValue(),c.readTuple(d);var h=parseInt(d[0],10),i=parseInt(d[1],10);c.readTuple(d);var k=parseInt(d[0],10),l=parseInt(d[1],10);g.u=h/e.width,g.v=i/e.height,g.rotate?(g.u2=(h+l)/e.width,g.v2=(i+k)/e.height):(g.u2=(h+k)/e.width,g.v2=(i+l)/e.height),g.x=h,g.y=i,g.width=Math.abs(k),g.height=Math.abs(l),4==c.readTuple(d)&&(g.splits=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)],4==c.readTuple(d)&&(g.pads=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)],c.readTuple(d))),g.originalWidth=parseInt(d[0],10),g.originalHeight=parseInt(d[1],10),c.readTuple(d),g.offsetX=parseInt(d[0],10),g.offsetY=parseInt(d[1],10),g.index=parseInt(c.readValue(),10),this.regions.push(g)}else{e=new j.AtlasPage,e.name=f,e.format=j.Atlas.Format[c.readValue()],c.readTuple(d),e.minFilter=j.Atlas.TextureFilter[d[0]],e.magFilter=j.Atlas.TextureFilter[d[1]];var m=c.readValue();e.uWrap=j.Atlas.TextureWrap.clampToEdge,e.vWrap=j.Atlas.TextureWrap.clampToEdge,"x"==m?e.uWrap=j.Atlas.TextureWrap.repeat:"y"==m?e.vWrap=j.Atlas.TextureWrap.repeat:"xy"==m&&(e.uWrap=e.vWrap=j.Atlas.TextureWrap.repeat),b.load(e,f),this.pages.push(e)}else e=null}},j.Atlas.prototype={findRegion:function(a){for(var b=this.regions,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},dispose:function(){for(var a=this.pages,b=0,c=a.length;c>b;b++)this.textureLoader.unload(a[b].rendererObject)},updateUVs:function(a){for(var b=this.regions,c=0,d=b.length;d>c;c++){var e=b[c];e.page==a&&(e.u=e.x/a.width,e.v=e.y/a.height,e.rotate?(e.u2=(e.x+e.height)/a.width,e.v2=(e.y+e.width)/a.height):(e.u2=(e.x+e.width)/a.width,e.v2=(e.y+e.height)/a.height))}}},j.Atlas.Format={alpha:0,intensity:1,luminanceAlpha:2,rgb565:3,rgba4444:4,rgb888:5,rgba8888:6},j.Atlas.TextureFilter={nearest:0,linear:1,mipMap:2,mipMapNearestNearest:3,mipMapLinearNearest:4,mipMapNearestLinear:5,mipMapLinearLinear:6},j.Atlas.TextureWrap={mirroredRepeat:0,clampToEdge:1,repeat:2},j.AtlasPage=function(){},j.AtlasPage.prototype={name:null,format:null,minFilter:null,magFilter:null,uWrap:null,vWrap:null,rendererObject:null,width:0,height:0},j.AtlasRegion=function(){},j.AtlasRegion.prototype={page:null,name:null,x:0,y:0,width:0,height:0,u:0,v:0,u2:0,v2:0,offsetX:0,offsetY:0,originalWidth:0,originalHeight:0,index:0,rotate:!1,splits:null,pads:null},j.AtlasReader=function(a){this.lines=a.split(/\r\n|\r|\n/)},j.AtlasReader.prototype={index:0,trim:function(a){return a.replace(/^\s+|\s+$/g,"")},readLine:function(){return this.index>=this.lines.length?null:this.lines[this.index++]},readValue:function(){var a=this.readLine(),b=a.indexOf(":");if(-1==b)throw"Invalid line: "+a;return this.trim(a.substring(b+1))},readTuple:function(a){var b=this.readLine(),c=b.indexOf(":");if(-1==c)throw"Invalid line: "+b;for(var d=0,e=c+1;3>d;d++){var f=b.indexOf(",",e);if(-1==f){if(!d)throw"Invalid line: "+b;break}a[d]=this.trim(b.substr(e,f-e)),e=f+1}return a[d]=this.trim(b.substring(e)),d+1}},j.AtlasAttachmentLoader=function(a){this.atlas=a},j.AtlasAttachmentLoader.prototype={newAttachment:function(a,b,c){switch(b){case j.AttachmentType.region:var d=this.atlas.findRegion(c);if(!d)throw"Region not found in atlas: "+c+" ("+b+")";var e=new j.RegionAttachment(c);return e.rendererObject=d,e.setUVs(d.u,d.v,d.u2,d.v2,d.rotate),e.regionOffsetX=d.offsetX,e.regionOffsetY=d.offsetY,e.regionWidth=d.width,e.regionHeight=d.height,e.regionOriginalWidth=d.originalWidth,e.regionOriginalHeight=d.originalHeight,e}throw"Unknown attachment type: "+b}},j.Bone.yDown=!0,e.AnimCache={},e.Spine=function(a){if(e.DisplayObjectContainer.call(this),this.spineData=e.AnimCache[a],!this.spineData)throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: "+a);this.skeleton=new j.Skeleton(this.spineData),this.skeleton.updateWorldTransform(),this.stateData=new j.AnimationStateData(this.spineData),this.state=new j.AnimationState(this.stateData),this.slotContainers=[];for(var b=0,c=this.skeleton.drawOrder.length;c>b;b++){var d=this.skeleton.drawOrder[b],f=d.attachment,g=new e.DisplayObjectContainer;if(this.slotContainers.push(g),this.addChild(g),f instanceof j.RegionAttachment){var h=f.rendererObject.name,i=this.createSprite(d,f.rendererObject);d.currentSprite=i,d.currentSpriteName=h,g.addChild(i)}}},e.Spine.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Spine.prototype.constructor=e.Spine,e.Spine.prototype.updateTransform=function(){this.lastTime=this.lastTime||Date.now();var a=.001*(Date.now()-this.lastTime);this.lastTime=Date.now(),this.state.update(a),this.state.apply(this.skeleton),this.skeleton.updateWorldTransform();for(var b=this.skeleton.drawOrder,c=0,d=b.length;d>c;c++){var f=b[c],g=f.attachment,h=this.slotContainers[c];if(g instanceof j.RegionAttachment){if(g.rendererObject&&(!f.currentSpriteName||f.currentSpriteName!=g.name)){var i=g.rendererObject.name;if(void 0!==f.currentSprite&&(f.currentSprite.visible=!1),f.sprites=f.sprites||{},void 0!==f.sprites[i])f.sprites[i].visible=!0;else{var k=this.createSprite(f,g.rendererObject);h.addChild(k)}f.currentSprite=f.sprites[i],f.currentSpriteName=i}h.visible=!0;var l=f.bone;h.position.x=l.worldX+g.x*l.m00+g.y*l.m01,h.position.y=l.worldY+g.x*l.m10+g.y*l.m11,h.scale.x=l.worldScaleX,h.scale.y=l.worldScaleY,h.rotation=-(f.bone.worldRotation*Math.PI/180)}else h.visible=!1}e.DisplayObjectContainer.prototype.updateTransform.call(this)},e.Spine.prototype.createSprite=function(a,b){var c=e.TextureCache[b.name]?b.name:b.name+".png",d=new e.Sprite(e.Texture.fromFrame(c));return d.scale=b.scale,d.rotation=b.rotation,d.anchor.x=d.anchor.y=.5,a.sprites=a.sprites||{},a.sprites[b.name]=d,d},e.BaseTextureCache={},e.texturesToUpdate=[],e.texturesToDestroy=[],e.BaseTexture=function(a,b){if(e.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=b||e.BaseTexture.SCALE_MODE.DEFAULT,this.hasLoaded=!1,this.source=a,a){if(this.source instanceof Image||this.source instanceof HTMLImageElement)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,e.texturesToUpdate.push(this);else{var c=this;this.source.onload=function(){c.hasLoaded=!0,c.width=c.source.width,c.height=c.source.height,e.texturesToUpdate.push(c),c.dispatchEvent({type:"loaded",content:c})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,e.texturesToUpdate.push(this);this.imageUrl=null,this._powerOf2=!1,this._glTextures=[]}},e.BaseTexture.prototype.constructor=e.BaseTexture,e.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.imageUrl in e.BaseTextureCache&&delete e.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,e.texturesToDestroy.push(this)},e.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},e.BaseTexture.fromImage=function(a,b,c){var d=e.BaseTextureCache[a];if(!d){var f=new Image;b&&(f.crossOrigin=""),f.src=a,d=new e.BaseTexture(f,c),d.imageUrl=a,e.BaseTextureCache[a]=d}return d},e.BaseTexture.SCALE_MODE={DEFAULT:0,LINEAR:0,NEAREST:1},e.TextureCache={},e.FrameCache={},e.Texture=function(a,b){if(e.EventTarget.call(this),b||(this.noFrame=!0,b=new e.Rectangle(0,0,1,1)),a instanceof e.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=b,this.trim=new e.Point,this.scope=this,a.hasLoaded)this.noFrame&&(b=new e.Rectangle(0,0,a.width,a.height)),this.setFrame(b);else{var c=this;a.addEventListener("loaded",function(){c.onBaseTextureLoaded()})}},e.Texture.prototype.constructor=e.Texture,e.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new e.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},e.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},e.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,e.Texture.frameUpdates.push(this)},e.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new Float32Array(8));var a=this.frame,b=this.baseTexture.width,c=this.baseTexture.height;this._uvs[0]=a.x/b,this._uvs[1]=a.y/c,this._uvs[2]=(a.x+a.width)/b,this._uvs[3]=a.y/c,this._uvs[4]=(a.x+a.width)/b,this._uvs[5]=(a.y+a.height)/c,this._uvs[6]=a.x/b,this._uvs[7]=(a.y+a.height)/c},e.Texture.fromImage=function(a,b,c){var d=e.TextureCache[a];return d||(d=new e.Texture(e.BaseTexture.fromImage(a,b,c)),e.TextureCache[a]=d),d},e.Texture.fromFrame=function(a){var b=e.TextureCache[a];if(!b)throw new Error('The frameId "'+a+'" does not exist in the texture cache '+this);return b},e.Texture.fromCanvas=function(a,b){var c=new e.BaseTexture(a,b);return new e.Texture(c)},e.Texture.addTextureToCache=function(a,b){e.TextureCache[b]=a},e.Texture.removeTextureFromCache=function(a){var b=e.TextureCache[a];return e.TextureCache[a]=null,b},e.Texture.frameUpdates=[],e.Texture.SCALE_MODE=e.BaseTexture.SCALE_MODE,e.RenderTexture=function(a,b,c){if(e.EventTarget.call(this),this.width=a||100,this.height=b||100,this.indetityMatrix=e.mat3.create(),this.frame=new e.Rectangle(0,0,this.width,this.height),this.baseTexture=new e.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.hasLoaded=!0,this.renderer=c||e.defaultRenderer,this.renderer.type===e.WEBGL_RENDERER){var d=this.renderer.gl;this.textureBuffer=new e.FilterTexture(d,this.width,this.height),this.baseTexture._glTextures[d.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new e.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new e.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;e.Texture.frameUpdates.push(this)},e.RenderTexture.prototype=Object.create(e.Texture.prototype),e.RenderTexture.prototype.constructor=e.RenderTexture,e.RenderTexture.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===e.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);e.Texture.frameUpdates.push(this)},e.RenderTexture.prototype.renderWebGL=function(a,b,c){var d=this.renderer.gl;d.colorMask(!0,!0,!0,!0),d.viewport(0,0,this.width,this.height),d.bindFramebuffer(d.FRAMEBUFFER,this.textureBuffer.frameBuffer),c&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=e.mat3.create(),a.worldTransform[4]=-1,a.worldTransform[5]=-2*this.projection.y,b&&(a.worldTransform[2]=b.x,a.worldTransform[5]-=b.y),e.visibleCount++,a.vcount=e.visibleCount;for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();this.renderer.renderDisplayObject(a,this.projection),a.worldTransform=g},e.RenderTexture.prototype.renderCanvas=function(a,b,c){var d=a.children;a.worldTransform=e.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=d.length;g>f;f++)d[f].updateTransform();c&&this.textureBuffer.clear();var h=this.textureBuffer.context;this.renderer.renderDisplayObject(a,h),h.setTransform(1,0,0,1,0,0)},e.AssetLoader=function(a,b){e.EventTarget.call(this),this.assetURLs=a,this.crossorigin=b,this.loadersByType={jpg:e.ImageLoader,jpeg:e.ImageLoader,png:e.ImageLoader,gif:e.ImageLoader,json:e.JsonLoader,atlas:e.AtlasLoader,anim:e.SpineLoader,xml:e.BitmapFontLoader,fnt:e.BitmapFontLoader}},e.AssetLoader.prototype.constructor=e.AssetLoader,e.AssetLoader.prototype._getDataType=function(a){var b="data:",c=a.slice(0,b.length).toLowerCase();if(c===b){var d=a.slice(b.length),e=d.indexOf(",");if(-1===e)return null;var f=d.slice(0,e).split(";")[0];return f&&"text/plain"!==f.toLowerCase()?f.split("/").pop().toLowerCase():"txt"}return null},e.AssetLoader.prototype.load=function(){function a(){b.onAssetLoaded()}var b=this;this.loadCount=this.assetURLs.length;for(var c=0;c0){if(f===g)this.atlas.meta.image.push(a[g]),c=this.atlas.meta.image.length-1,this.atlas.frames.push({}),b=-3;else if(b>0)if(b%7===1)null!=d&&(this.atlas.frames[c][d.name]=d),d={name:a[g],frame:{}};else{var j=a[g].split(" ");if(b%7===3)d.frame.x=Number(j[1].replace(",","")),d.frame.y=Number(j[2]);else if(b%7===4)d.frame.w=Number(j[1].replace(",","")),d.frame.h=Number(j[2]);else if(b%7===5){var k={x:0,y:0,w:Number(j[1].replace(",","")),h:Number(j[2])};k.w>d.frame.w||k.h>d.frame.h?(d.trimmed=!0,d.realSize=k):d.trimmed=!1}}b++}if(null!=d&&(this.atlas.frames[c][d.name]=d),this.atlas.meta.image.length>0){for(this.images=[],h=0;hthis.currentImageId?(this.currentImageId++,this.images[this.currentImageId].load()):(this.loaded=!0,this.dispatchEvent({type:"loaded",content:this}))},e.AtlasLoader.prototype.onError=function(){this.dispatchEvent({type:"error",content:this})},e.SpriteSheetLoader=function(a,b){e.EventTarget.call(this),this.url=a,this.crossorigin=b,this.baseUrl=a.replace(/[^\/]*$/,""),this.texture=null,this.frames={}},e.SpriteSheetLoader.prototype.constructor=e.SpriteSheetLoader,e.SpriteSheetLoader.prototype.load=function(){var a=this,b=new e.JsonLoader(this.url,this.crossorigin);b.addEventListener("loaded",function(b){a.json=b.content.json,a.onJSONLoaded()}),b.load()},e.SpriteSheetLoader.prototype.onJSONLoaded=function(){var a=this,b=this.baseUrl+this.json.meta.image,c=new e.ImageLoader(b,this.crossorigin),d=this.json.frames;this.texture=c.texture.baseTexture,c.addEventListener("loaded",function(){a.onLoaded()});for(var f in d){var g=d[f].frame;g&&(e.TextureCache[f]=new e.Texture(this.texture,{x:g.x,y:g.y,width:g.w,height:g.h}),d[f].trimmed&&(e.TextureCache[f].realSize=d[f].spriteSourceSize,e.TextureCache[f].trim.x=0))}c.load()},e.SpriteSheetLoader.prototype.onLoaded=function(){this.dispatchEvent({type:"loaded",content:this})},e.ImageLoader=function(a,b){e.EventTarget.call(this),this.texture=e.Texture.fromImage(a,b),this.frames=[]},e.ImageLoader.prototype.constructor=e.ImageLoader,e.ImageLoader.prototype.load=function(){if(this.texture.baseTexture.hasLoaded)this.onLoaded();else{var a=this;this.texture.baseTexture.addEventListener("loaded",function(){a.onLoaded()})}},e.ImageLoader.prototype.onLoaded=function(){this.dispatchEvent({type:"loaded",content:this})},e.ImageLoader.prototype.loadFramedSpriteSheet=function(a,b,c){this.frames=[];for(var d=Math.floor(this.texture.width/a),f=Math.floor(this.texture.height/b),g=0,h=0;f>h;h++)for(var i=0;d>i;i++,g++){var j=new e.Texture(this.texture,{x:i*a,y:h*b,width:a,height:b});this.frames.push(j),c&&(e.TextureCache[c+"-"+g]=j)}if(this.texture.baseTexture.hasLoaded)this.onLoaded();else{var k=this;this.texture.baseTexture.addEventListener("loaded",function(){k.onLoaded()})}},e.BitmapFontLoader=function(a,b){e.EventTarget.call(this),this.url=a,this.crossorigin=b,this.baseUrl=a.replace(/[^\/]*$/,""),this.texture=null},e.BitmapFontLoader.prototype.constructor=e.BitmapFontLoader,e.BitmapFontLoader.prototype.load=function(){this.ajaxRequest=new XMLHttpRequest;var a=this;this.ajaxRequest.onreadystatechange=function(){a.onXMLLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/xml"),this.ajaxRequest.send(null)},e.BitmapFontLoader.prototype.onXMLLoaded=function(){if(4===this.ajaxRequest.readyState&&(200===this.ajaxRequest.status||-1===window.location.protocol.indexOf("http"))){var a=this.baseUrl+this.ajaxRequest.responseXML.getElementsByTagName("page")[0].attributes.getNamedItem("file").nodeValue,b=new e.ImageLoader(a,this.crossorigin);this.texture=b.texture.baseTexture;var c={},d=this.ajaxRequest.responseXML.getElementsByTagName("info")[0],f=this.ajaxRequest.responseXML.getElementsByTagName("common")[0];c.font=d.attributes.getNamedItem("face").nodeValue,c.size=parseInt(d.attributes.getNamedItem("size").nodeValue,10),c.lineHeight=parseInt(f.attributes.getNamedItem("lineHeight").nodeValue,10),c.chars={};for(var g=this.ajaxRequest.responseXML.getElementsByTagName("char"),h=0;h=c&&a<=c+this.width){var d=this.y;if(b>=d&&b<=d+this.height)return!0}return!1},e.Rectangle.prototype.constructor=e.Rectangle,e.Polygon=function(a){if(a instanceof Array||(a=Array.prototype.slice.call(arguments)),"number"==typeof a[0]){for(var b=[],c=0,d=a.length;d>c;c+=2)b.push(new e.Point(a[c],a[c+1]));a=b}this.points=a},e.Polygon.prototype.clone=function(){for(var a=[],b=0;bb!=i>b&&(h-f)*(b-g)/(i-g)+f>a;j&&(c=!c)}return c},e.Polygon.prototype.constructor=e.Polygon,e.Circle=function(a,b,c){this.x=a||0,this.y=b||0,this.radius=c||0},e.Circle.prototype.clone=function(){return new e.Circle(this.x,this.y,this.radius)},e.Circle.prototype.contains=function(a,b){if(this.radius<=0)return!1;var c=this.x-a,d=this.y-b,e=this.radius*this.radius;return c*=c,d*=d,e>=c+d},e.Circle.prototype.constructor=e.Circle,e.Ellipse=function(a,b,c,d){this.x=a||0,this.y=b||0,this.width=c||0,this.height=d||0},e.Ellipse.prototype.clone=function(){return new e.Ellipse(this.x,this.y,this.width,this.height)},e.Ellipse.prototype.contains=function(a,b){if(this.width<=0||this.height<=0)return!1;var c=(a-this.x)/this.width-.5,d=(b-this.y)/this.height-.5;return c*=c,d*=d,.25>c+d},e.Ellipse.prototype.getBounds=function(){return new e.Rectangle(this.x,this.y,this.width,this.height)},e.Ellipse.prototype.constructor=e.Ellipse,c(),e.mat3={},e.mat3.create=function(){var a=new e.Matrix(9);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},e.mat3.identity=function(a){return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=1,a[5]=0,a[6]=0,a[7]=0,a[8]=1,a},e.mat4={},e.mat4.create=function(){var a=new e.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},e.mat3.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=b[0],n=b[1],o=b[2],p=b[3],q=b[4],r=b[5],s=b[6],t=b[7],u=b[8];return c[0]=m*d+n*g+o*j,c[1]=m*e+n*h+o*k,c[2]=m*f+n*i+o*l,c[3]=p*d+q*g+r*j,c[4]=p*e+q*h+r*k,c[5]=p*f+q*i+r*l,c[6]=s*d+t*g+u*j,c[7]=s*e+t*h+u*k,c[8]=s*f+t*i+u*l,c},e.mat3.clone=function(a){var b=new e.Matrix(9);return b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b},e.mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];return a[1]=a[3],a[2]=a[6],a[3]=c,a[5]=a[7],a[6]=d,a[7]=e,a}return b[0]=a[0],b[1]=a[3],b[2]=a[6],b[3]=a[1],b[4]=a[4],b[5]=a[7],b[6]=a[2],b[7]=a[5],b[8]=a[8],b},e.mat3.toMat4=function(a,b){return b||(b=e.mat4.create()),b[15]=1,b[14]=0,b[13]=0,b[12]=0,b[11]=0,b[10]=a[8],b[9]=a[7],b[8]=a[6],b[7]=0,b[6]=a[5],b[5]=a[4],b[4]=a[3],b[3]=0,b[2]=a[2],b[1]=a[1],b[0]=a[0],b},e.mat4.create=function(){var a=new e.Matrix(16);return a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=0,a[13]=0,a[14]=0,a[15]=1,a},e.mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],f=a[6],g=a[7],h=a[11];return a[1]=a[4],a[2]=a[8],a[3]=a[12],a[4]=c,a[6]=a[9],a[7]=a[13],a[8]=d,a[9]=f,a[11]=a[14],a[12]=e,a[13]=g,a[14]=h,a}return b[0]=a[0],b[1]=a[4],b[2]=a[8],b[3]=a[12],b[4]=a[1],b[5]=a[5],b[6]=a[9],b[7]=a[13],b[8]=a[2],b[9]=a[6],b[10]=a[10],b[11]=a[14],b[12]=a[3],b[13]=a[7],b[14]=a[11],b[15]=a[15],b},e.mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],f=a[2],g=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],m=a[9],n=a[10],o=a[11],p=a[12],q=a[13],r=a[14],s=a[15],t=b[0],u=b[1],v=b[2],w=b[3];return c[0]=t*d+u*h+v*l+w*p,c[1]=t*e+u*i+v*m+w*q,c[2]=t*f+u*j+v*n+w*r,c[3]=t*g+u*k+v*o+w*s,t=b[4],u=b[5],v=b[6],w=b[7],c[4]=t*d+u*h+v*l+w*p,c[5]=t*e+u*i+v*m+w*q,c[6]=t*f+u*j+v*n+w*r,c[7]=t*g+u*k+v*o+w*s,t=b[8],u=b[9],v=b[10],w=b[11],c[8]=t*d+u*h+v*l+w*p,c[9]=t*e+u*i+v*m+w*q,c[10]=t*f+u*j+v*n+w*r,c[11]=t*g+u*k+v*o+w*s,t=b[12],u=b[13],v=b[14],w=b[15],c[12]=t*d+u*h+v*l+w*p,c[13]=t*e+u*i+v*m+w*q,c[14]=t*f+u*j+v*n+w*r,c[15]=t*g+u*k+v*o+w*s,c},e.DisplayObject=function(){this.last=this,this.first=this,this.position=new e.Point,this.scale=new e.Point(1,1),this.pivot=new e.Point(0,0),this.rotation=0,this.alpha=1,this.visible=!0,this.hitArea=null,this.buttonMode=!1,this.renderable=!1,this.parent=null,this.stage=null,this.worldAlpha=1,this._interactive=!1,this.defaultCursor="pointer",this.worldTransform=e.mat3.create(),this.localTransform=e.mat3.create(),this.color=[],this.dynamic=!0,this._sr=0,this._cr=1,this.filterArea=new e.Rectangle(0,0,1,1),this._bounds=new e.Rectangle(0,0,1,1),this._currentBounds=null},e.DisplayObject.prototype.constructor=e.DisplayObject,e.DisplayObject.prototype.setInteractive=function(a){this.interactive=a},Object.defineProperty(e.DisplayObject.prototype,"interactive",{get:function(){return this._interactive},set:function(a){this._interactive=a,this.stage&&(this.stage.dirty=!0)}}),Object.defineProperty(e.DisplayObject.prototype,"mask",{get:function(){return this._mask},set:function(a){this._mask&&(this._mask.isMask=!1),this._mask=a,this._mask&&(this._mask.isMask=!0)}}),Object.defineProperty(e.DisplayObject.prototype,"filters",{get:function(){return this._filters},set:function(a){if(a){for(var b=[],c=0;c=0&&b<=this.children.length))throw new Error(a+" The index "+b+" supplied is out of bounds "+this.children.length);a.parent&&a.parent.removeChild(a),a.parent=this,this.children.splice(b,0,a),this.stage&&this.setStageReference(this.stage)},e.DisplayObjectContainer.prototype.swapChildren=function(a,b){if(a!==b){var c=this.children.indexOf(a),d=this.children.indexOf(b);if(0>c||0>d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");this.children[c]=b,this.children[d]=a}},e.DisplayObjectContainer.prototype.getChildAt=function(a){if(a>=0&&aa;a++)this.children[a].updateTransform()}},e.DisplayObjectContainer.prototype.getBounds=function(){if(0===this.children.length)return e.EmptyRectangle;for(var a,b,c,d=1/0,f=1/0,g=-1/0,h=-1/0,i=0,j=this.children.length;j>i;i++){var k=this.children[i];k.visible&&(a=this.children[i].getBounds(),d=db?g:b,h=h>c?h:c)}var l=this._bounds;return l.x=d,l.y=f,l.width=g-d,l.height=h-f,l},e.DisplayObjectContainer.prototype.setStageReference=function(a){this.stage=a;for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d.interactive&&(this.stage.dirty=!0),d.setStageReference(a)}},e.DisplayObjectContainer.prototype.removeStageReference=function(){for(var a=0,b=this.children.length;b>a;a++){var c=this.children[a];c.interactive&&(this.stage.dirty=!0),c.removeStageReference(),c.stage=null}},e.DisplayObjectContainer.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this._mask||this._filters){for(this._mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a),a.spriteBatch.start()),this._filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),a.spriteBatch.start()}else for(b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.DisplayObjectContainer.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){this._mask&&a.maskManager.pushMask(this._mask,a.context);for(var b=0,c=this.children.length;c>b;b++){var d=this.children[b];d._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},e.blendModes={},e.blendModes.NORMAL=0,e.blendModes.ADD=1,e.blendModes.MULTIPLY=2,e.blendModes.SCREEN=3,e.Sprite=function(a){e.DisplayObjectContainer.call(this),this.anchor=new e.Point,this.texture=a,this.blendMode=e.blendModes.NORMAL,this._width=0,this._height=0,this.tint=16777215,this.blendMode=e.blendModes.NORMAL,a.baseTexture.hasLoaded?(this.updateFrame=!0,this.onTextureUpdate()):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},e.Sprite.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Sprite.prototype.constructor=e.Sprite,Object.defineProperty(e.Sprite.prototype,"width",{get:function(){return this.scale.x*this.texture.frame.width},set:function(a){this.scale.x=a/this.texture.frame.width,this._width=a}}),Object.defineProperty(e.Sprite.prototype,"height",{get:function(){return this.scale.y*this.texture.frame.height},set:function(a){this.scale.y=a/this.texture.frame.height,this._height=a}}),e.Sprite.prototype.setTexture=function(a){this.texture.baseTexture!==a.baseTexture?(this.textureChange=!0,this.texture=a):this.texture=a,this.cachedTint=16777215,this.updateFrame=!0},e.Sprite.prototype.onTextureUpdate=function(){this._width&&(this.scale.x=this._width/this.texture.frame.width),this._height&&(this.scale.y=this._height/this.texture.frame.height),this.updateFrame=!0},e.Sprite.prototype.getBounds=function(){var a=this.texture.frame.width,b=this.texture.frame.height,c=a*(1-this.anchor.x),d=a*-this.anchor.x,e=b*(1-this.anchor.y),f=b*-this.anchor.y,g=this.worldTransform,h=g[0],i=g[3],j=g[1],k=g[4],l=g[2],m=g[5],n=h*d+j*f+l,o=k*f+i*d+m,p=h*c+j*f+l,q=k*f+i*c+m,r=h*c+j*e+l,s=k*e+i*c+m,t=h*d+j*e+l,u=k*e+i*d+m,v=-1/0,w=-1/0,x=1/0,y=1/0;x=x>n?n:x,x=x>p?p:x,x=x>r?r:x,x=x>t?t:x,y=y>o?o:y,y=y>q?q:y,y=y>s?s:y,y=y>u?u:y,v=n>v?n:v,v=p>v?p:v,v=r>v?r:v,v=t>v?t:v,w=o>w?o:w,w=q>w?q:w,w=s>w?s:w,w=u>w?u:w;var z=this._bounds;return z.x=x,z.width=v-x,z.y=y,z.height=w-y,this._currentBounds=z,z},e.Sprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this._mask||this._filters){var d=a.spriteBatch;for(this._mask&&(d.stop(),a.maskManager.pushMask(this.mask,a),d.start()),this._filters&&(d.flush(),a.filterManager.pushFilter(this._filterBlock)),d.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);d.stop(),this._filters&&a.filterManager.popFilter(),this._mask&&a.maskManager.popMask(a),d.start()}else for(a.spriteBatch.render(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.Sprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){this._mask&&a.maskManager.pushMask(this._mask,a.context);var b=this.texture.frame,c=a.context,d=this.texture;if(b&&b.width&&b.height&&d.baseTexture.source){c.globalAlpha=this.worldAlpha;var f=this.worldTransform;if(c.setTransform(f[0],f[3],f[1],f[4],f[2],f[5]),this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,c.globalCompositeOperation=e.blendModesCanvas[a.currentBlendMode]),16777215!==this.tint)this.cachedTint!==this.tint&&(this.cachedTint=this.tint,this.tintedTexture=e.CanvasTinter.getTintedTexture(this,this.tint)),c.drawImage(this.tintedTexture,0,0,b.width,b.height,this.anchor.x*-b.width,this.anchor.y*-b.height,b.width,b.height);else if(d.trimmed){var g=d.trim;c.drawImage(this.texture.baseTexture.source,b.x,b.y,b.width,b.height,g.x-this.anchor.x*g.realWidth,g.y-this.anchor.y*g.realHeight,b.width,b.height)}else c.drawImage(this.texture.baseTexture.source,b.x,b.y,b.width,b.height,this.anchor.x*-b.width,this.anchor.y*-b.height,b.width,b.height)}for(var h=0,i=this.children.length;i>h;h++){var j=this.children[h];j._renderCanvas(a)}this._mask&&a.maskManager.popMask(a.context)}},e.Sprite.fromFrame=function(a){var b=e.TextureCache[a];if(!b)throw new Error('The frameId "'+a+'" does not exist in the texture cache'+this);return new e.Sprite(b)},e.Sprite.fromImage=function(a){var b=e.Texture.fromImage(a);return new e.Sprite(b)},e.MovieClip=function(a){e.Sprite.call(this,a[0]),this.textures=a,this.animationSpeed=1,this.loop=!0,this.onComplete=null,this.currentFrame=0,this.playing=!1},e.MovieClip.prototype=Object.create(e.Sprite.prototype),e.MovieClip.prototype.constructor=e.MovieClip,Object.defineProperty(e.MovieClip.prototype,"totalFrames",{get:function(){return this.textures.length}}),e.MovieClip.prototype.stop=function(){this.playing=!1},e.MovieClip.prototype.play=function(){this.playing=!0},e.MovieClip.prototype.gotoAndStop=function(a){this.playing=!1,this.currentFrame=a;var b=this.currentFrame+.5|0;this.setTexture(this.textures[b%this.textures.length])},e.MovieClip.prototype.gotoAndPlay=function(a){this.currentFrame=a,this.playing=!0},e.MovieClip.prototype.updateTransform=function(){if(e.Sprite.prototype.updateTransform.call(this),this.playing){this.currentFrame+=this.animationSpeed;var a=this.currentFrame+.5|0;this.loop||a=this.textures.length&&(this.gotoAndStop(this.textures.length-1),this.onComplete&&this.onComplete())}},e.FilterBlock=function(){this.visible=!0,this.renderable=!0},e.Text=function(a,b){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),e.Sprite.call(this,e.Texture.fromCanvas(this.canvas)),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},e.Text.prototype=Object.create(e.Sprite.prototype),e.Text.prototype.constructor=e.Text,e.Text.prototype.setStyle=function(a){a=a||{},a.font=a.font||"bold 20pt Arial",a.fill=a.fill||"black",a.align=a.align||"left",a.stroke=a.stroke||"black",a.strokeThickness=a.strokeThickness||0,a.wordWrap=a.wordWrap||!1,a.wordWrapWidth=a.wordWrapWidth||100,this.style=a,this.dirty=!0},e.Text.prototype.setText=function(a){this.text=a.toString()||" ",this.dirty=!0},e.Text.prototype.updateText=function(){this.context.font=this.style.font;var a=this.text;this.style.wordWrap&&(a=this.wordWrap(this.text));for(var b=a.split(/(?:\r\n|\r|\n)/),c=[],d=0,f=0;fe?(g>0&&(b+="\n"),b+=f[g]+" ",e=this.style.wordWrapWidth-h):(e-=i,b+=f[g]+" ")}b+="\n"}return b},e.Text.prototype.destroy=function(a){a&&this.texture.destroy()},e.Text.heightCache={},e.BitmapText=function(a,b){e.DisplayObjectContainer.call(this),this.setText(a),this.setStyle(b),this.updateText(),this.dirty=!1},e.BitmapText.prototype=Object.create(e.DisplayObjectContainer.prototype),e.BitmapText.prototype.constructor=e.BitmapText,e.BitmapText.prototype.setText=function(a){this.text=a||" ",this.dirty=!0},e.BitmapText.prototype.setStyle=function(a){a=a||{},a.align=a.align||"left",this.style=a;var b=a.font.split(" ");this.fontName=b[b.length-1],this.fontSize=b.length>=2?parseInt(b[b.length-2],10):e.BitmapText.fonts[this.fontName].size,this.dirty=!0},e.BitmapText.prototype.updateText=function(){for(var a=e.BitmapText.fonts[this.fontName],b=new e.Point,c=null,d=[],f=0,g=[],h=0,i=this.fontSize/a.size,j=0;j=j;j++){var n=0;"right"===this.style.align?n=f-g[j]:"center"===this.style.align&&(n=(f-g[j])/2),m.push(n)}for(j=0;j0;)this.removeChild(this.getChildAt(0));this.updateText(),this.dirty=!1}e.DisplayObjectContainer.prototype.updateTransform.call(this)},e.BitmapText.fonts={},e.InteractionManager=function(a){this.stage=a,this.mouse=new e.InteractionData,this.touchs={},this.tempPoint=new e.Point,this.mouseoverEnabled=!0,this.pool=[],this.interactiveItems=[],this.interactionDOMElement=null,this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.onMouseUp=this.onMouseUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.last=0},e.InteractionManager.prototype.constructor=e.InteractionManager,e.InteractionManager.prototype.collectInteractiveSprite=function(a,b){for(var c=a.children,d=c.length,e=d-1;e>=0;e--){var f=c[e];f.interactive?(b.interactiveChildren=!0,this.interactiveItems.push(f),f.children.length>0&&this.collectInteractiveSprite(f,f)):(f.__iParent=null,f.children.length>0&&this.collectInteractiveSprite(f,b))}},e.InteractionManager.prototype.setTarget=function(a){this.target=a,null===this.interactionDOMElement&&this.setTargetDomElement(a.view),document.body.addEventListener("mouseup",this.onMouseUp,!0)},e.InteractionManager.prototype.setTargetDomElement=function(a){null!==this.interactionDOMElement&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]="",this.interactionDOMElement.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0)),window.navigator.msPointerEnabled&&(a.style["-ms-content-zooming"]="none",a.style["-ms-touch-action"]="none"),this.interactionDOMElement=a,a.addEventListener("mousemove",this.onMouseMove,!0),a.addEventListener("mousedown",this.onMouseDown,!0),a.addEventListener("mouseout",this.onMouseOut,!0),a.addEventListener("touchstart",this.onTouchStart,!0),a.addEventListener("touchend",this.onTouchEnd,!0),a.addEventListener("touchmove",this.onTouchMove,!0)},e.InteractionManager.prototype.update=function(){if(this.target){var a=Date.now(),b=a-this.last;if(b=30*b/1e3,!(1>b)){this.last=a;var c=0;if(this.dirty){this.dirty=!1;var d=this.interactiveItems.length;for(c=0;d>c;c++)this.interactiveItems[c].interactiveChildren=!1;this.interactiveItems=[],this.stage.interactive&&this.interactiveItems.push(this.stage),this.collectInteractiveSprite(this.stage,this.stage)}var e=this.interactiveItems.length;for(this.interactionDOMElement.style.cursor="inherit",c=0;e>c;c++){var f=this.interactiveItems[c];(f.mouseover||f.mouseout||f.buttonMode)&&(f.__hit=this.hitTest(f,this.mouse),this.mouse.target=f,f.__hit?(f.buttonMode&&(this.interactionDOMElement.style.cursor=f.defaultCursor),f.__isOver||(f.mouseover&&f.mouseover(this.mouse),f.__isOver=!0)):f.__isOver&&(f.mouseout&&f.mouseout(this.mouse),f.__isOver=!1))}}}},e.InteractionManager.prototype.onMouseMove=function(a){this.mouse.originalEvent=a||window.event;var b=this.interactionDOMElement.getBoundingClientRect();this.mouse.global.x=(a.clientX-b.left)*(this.target.width/b.width),this.mouse.global.y=(a.clientY-b.top)*(this.target.height/b.height);for(var c=this.interactiveItems.length,d=0;c>d;d++){var e=this.interactiveItems[d];e.mousemove&&e.mousemove(this.mouse)}},e.InteractionManager.prototype.onMouseDown=function(a){this.mouse.originalEvent=a||window.event;for(var b=this.interactiveItems.length,c=0;b>c;c++){var d=this.interactiveItems[c];if((d.mousedown||d.click)&&(d.__mouseIsDown=!0,d.__hit=this.hitTest(d,this.mouse),d.__hit&&(d.mousedown&&d.mousedown(this.mouse),d.__isDown=!0,!d.interactiveChildren)))break}},e.InteractionManager.prototype.onMouseOut=function(){var a=this.interactiveItems.length;this.interactionDOMElement.style.cursor="inherit";for(var b=0;a>b;b++){var c=this.interactiveItems[b];c.__isOver&&(this.mouse.target=c,c.mouseout&&c.mouseout(this.mouse),c.__isOver=!1)}},e.InteractionManager.prototype.onMouseUp=function(a){this.mouse.originalEvent=a||window.event;for(var b=this.interactiveItems.length,c=!1,d=0;b>d;d++){var e=this.interactiveItems[d];(e.mouseup||e.mouseupoutside||e.click)&&(e.__hit=this.hitTest(e,this.mouse),e.__hit&&!c?(e.mouseup&&e.mouseup(this.mouse),e.__isDown&&e.click&&e.click(this.mouse),e.interactiveChildren||(c=!0)):e.__isDown&&e.mouseupoutside&&e.mouseupoutside(this.mouse),e.__isDown=!1)}},e.InteractionManager.prototype.hitTest=function(a,b){var c=b.global;if(a.vcount!==e.visibleCount)return!1;var d=a instanceof e.Sprite,f=a.worldTransform,g=f[0],h=f[1],i=f[2],j=f[3],k=f[4],l=f[5],m=1/(g*k+h*-j),n=k*m*c.x+-h*m*c.y+(l*h-i*k)*m,o=g*m*c.y+-j*m*c.x+(-l*g+i*j)*m;if(b.target=a,a.hitArea&&a.hitArea.contains)return a.hitArea.contains(n,o)?(b.target=a,!0):!1;if(d){var p,q=a.texture.frame.width,r=a.texture.frame.height,s=-q*a.anchor.x;if(n>s&&s+q>n&&(p=-r*a.anchor.y,o>p&&p+r>o))return b.target=a,!0}for(var t=a.children.length,u=0;t>u;u++){var v=a.children[u],w=this.hitTest(v,b);if(w)return b.target=a,!0}return!1},e.InteractionManager.prototype.onTouchMove=function(a){var b,c=this.interactionDOMElement.getBoundingClientRect(),d=a.changedTouches,e=0;for(e=0;ee;e++){var h=this.interactiveItems[e];h.touchmove&&h.touchmove(b)}},e.InteractionManager.prototype.onTouchStart=function(a){for(var b=this.interactionDOMElement.getBoundingClientRect(),c=a.changedTouches,d=0;di;i++){var j=this.interactiveItems[i];if((j.touchstart||j.tap)&&(j.__hit=this.hitTest(j,g),j.__hit&&(j.touchstart&&j.touchstart(g),j.__isDown=!0,j.__touchData=g,!j.interactiveChildren)))break}}},e.InteractionManager.prototype.onTouchEnd=function(a){for(var b=this.interactionDOMElement.getBoundingClientRect(),c=a.changedTouches,d=0;di;i++){var j=this.interactiveItems[i],k=j.__touchData;j.__hit=this.hitTest(j,f),k===f&&(f.originalEvent=a||window.event,(j.touchend||j.tap)&&(j.__hit&&!g?(j.touchend&&j.touchend(f),j.__isDown&&j.tap&&j.tap(f),j.interactiveChildren||(g=!0)):j.__isDown&&j.touchendoutside&&j.touchendoutside(f),j.__isDown=!1),j.__touchData=null)}this.pool.push(f),this.touchs[e.identifier]=null}},e.InteractionData=function(){this.global=new e.Point,this.local=new e.Point,this.target=null,this.originalEvent=null},e.InteractionData.prototype.getLocalPosition=function(a){var b=a.worldTransform,c=this.global,d=b[0],f=b[1],g=b[2],h=b[3],i=b[4],j=b[5],k=1/(d*i+f*-h);return new e.Point(i*k*c.x+-f*k*c.y+(j*f-g*i)*k,d*k*c.y+-h*k*c.x+(-j*d+g*h)*k)},e.InteractionData.prototype.constructor=e.InteractionData,e.Stage=function(a){e.DisplayObjectContainer.call(this),this.worldTransform=e.mat3.create(),this.interactive=!0,this.interactionManager=new e.InteractionManager(this),this.dirty=!0,this.__childrenAdded=[],this.__childrenRemoved=[],this.stage=this,this.stage.hitArea=new e.Rectangle(0,0,1e5,1e5),this.setBackgroundColor(a),this.worldVisible=!0},e.Stage.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Stage.prototype.constructor=e.Stage,e.Stage.prototype.setInteractionDelegate=function(a){this.interactionManager.setTargetDomElement(a)},e.Stage.prototype.updateTransform=function(){this.worldAlpha=1,this.vcount=e.visibleCount;for(var a=0,b=this.children.length;b>a;a++)this.children[a].updateTransform();this.dirty&&(this.dirty=!1,this.interactionManager.dirty=!0),this.interactive&&this.interactionManager.update()},e.Stage.prototype.setBackgroundColor=function(a){this.backgroundColor=a||0,this.backgroundColorSplit=e.hex2rgb(this.backgroundColor);var b=this.backgroundColor.toString(16);b="000000".substr(0,6-b.length)+b,this.backgroundColorString="#"+b},e.Stage.prototype.getMousePosition=function(){return this.interactionManager.mouse.global};for(var f=0,h=["ms","moz","webkit","o"],i=0;i>16&255)/255,(a>>8&255)/255,(255&a)/255]},e.rgb2hex=function(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]},"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(b){function c(){var f=e.concat(a.call(arguments));d.apply(this instanceof c?this:b,f)}var d=this,e=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;return c.prototype=function f(a){return a&&(f.prototype=a),this instanceof f?void 0:new f}(d.prototype),c}}()),e.AjaxRequest=function(){var a=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];if(!window.ActiveXObject)return window.XMLHttpRequest?new window.XMLHttpRequest:!1;for(var b=0;b0&&0===(a&a-1))return a;for(var b=1;a>b;)b<<=1;return b},e.EventTarget=function(){var a={};this.addEventListener=this.on=function(b,c){void 0===a[b]&&(a[b]=[]),-1===a[b].indexOf(c)&&a[b].push(c)},this.dispatchEvent=this.emit=function(b){if(a[b.type]&&a[b.type].length)for(var c=0,d=a[b.type].length;d>c;c++)a[b.type][c](b)},this.removeEventListener=this.off=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)},this.removeAllEventListeners=function(b){var c=a[b];c&&(c.length=0)}},e.autoDetectRenderer=function(a,b,c,d,f){a||(a=800),b||(b=600);var g=function(){try{var a=document.createElement("canvas");return!!window.WebGLRenderingContext&&(a.getContext("webgl")||a.getContext("experimental-webgl"))}catch(b){return!1}}();if(g){var h=-1!==navigator.userAgent.toLowerCase().indexOf("trident");g=!h}return g?new e.WebGLRenderer(a,b,c,d,f):new e.CanvasRenderer(a,b,c,d)},e.PolyK={},e.PolyK.Triangulate=function(a){var b=!0,c=a.length>>1;if(3>c)return[];for(var d=[],f=[],g=0;c>g;g++)f.push(g);g=0;for(var h=c;h>3;){var i=f[(g+0)%h],j=f[(g+1)%h],k=f[(g+2)%h],l=a[2*i],m=a[2*i+1],n=a[2*j],o=a[2*j+1],p=a[2*k],q=a[2*k+1],r=!1;if(e.PolyK._convex(l,m,n,o,p,q,b)){r=!0;for(var s=0;h>s;s++){var t=f[s];if(t!==i&&t!==j&&t!==k&&e.PolyK._PointInTriangle(a[2*t],a[2*t+1],l,m,n,o,p,q)){r=!1;break}}}if(r)d.push(i,j,k),f.splice((g+1)%h,1),h--,g=0;else if(g++>3*h){if(!b)return window.console.log("PIXI Warning: shape too complex to fill"),[];for(d=[],f=[],g=0;c>g;g++)f.push(g); +g=0,h=c,b=!1}}return d.push(f[0],f[1],f[2]),d},e.PolyK._PointInTriangle=function(a,b,c,d,e,f,g,h){var i=g-c,j=h-d,k=e-c,l=f-d,m=a-c,n=b-d,o=i*i+j*j,p=i*k+j*l,q=i*m+j*n,r=k*k+l*l,s=k*m+l*n,t=1/(o*r-p*p),u=(r*q-p*s)*t,v=(o*s-p*q)*t;return u>=0&&v>=0&&1>u+v},e.PolyK._convex=function(a,b,c,d,e,f,g){return(b-d)*(e-c)+(c-a)*(f-d)>=0===g},e.initDefaultShaders=function(){e.stripShader=new e.StripShader,e.stripShader.init()},e.CompileVertexShader=function(a,b){return e._CompileShader(a,b,a.VERTEX_SHADER)},e.CompileFragmentShader=function(a,b){return e._CompileShader(a,b,a.FRAGMENT_SHADER)},e._CompileShader=function(a,b,c){var d=b.join("\n"),e=a.createShader(c);return a.shaderSource(e,d),a.compileShader(e),a.getShaderParameter(e,a.COMPILE_STATUS)?e:(window.console.log(a.getShaderInfoLog(e)),null)},e.compileProgram=function(a,b,c){var d=e.CompileFragmentShader(a,c),f=e.CompileVertexShader(a,b),g=a.createProgram();return a.attachShader(g,f),a.attachShader(g,d),a.linkProgram(g),a.getProgramParameter(g,a.LINK_STATUS)||window.console.log("Could not initialise shaders"),g},e.PixiShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"],this.textureCount=0,this.init()},e.PixiShader.prototype.init=function(){var a=this.gl,b=e.compileProgram(a,this.vertexSrc||e.PixiShader.defaultVertexSrc,this.fragmentSrc);a.useProgram(b),this.uSampler=a.getUniformLocation(b,"uSampler"),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.dimensions=a.getUniformLocation(b,"dimensions"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.aTextureCoord=a.getAttribLocation(b,"aTextureCoord");for(var c in this.uniforms)this.uniforms[c].uniformLocation=a.getUniformLocation(b,c);this.initUniforms(),this.program=b},e.PixiShader.prototype.initUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms){a=this.uniforms[c];var d=a.type;"sampler2D"===d?(a._init=!1,null!==a.value&&this.initSampler2D(a)):"mat2"===d||"mat3"===d||"mat4"===d?(a.glMatrix=!0,a.glValueLength=1,"mat2"===d?a.glFunc=b.uniformMatrix2fv:"mat3"===d?a.glFunc=b.uniformMatrix3fv:"mat4"===d&&(a.glFunc=b.uniformMatrix4fv)):(a.glFunc=b["uniform"+d],a.glValueLength="2f"===d||"2i"===d?2:"3f"===d||"3i"===d?3:"4f"===d||"4i"===d?4:1)}},e.PixiShader.prototype.initSampler2D=function(a){if(a.value&&a.value.baseTexture&&a.value.baseTexture.hasLoaded){var b=this.gl;if(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTexture),a.textureData){var c=a.textureData,d=c.magFilter?c.magFilter:b.LINEAR,e=c.minFilter?c.minFilter:b.LINEAR,f=c.wrapS?c.wrapS:b.CLAMP_TO_EDGE,g=c.wrapT?c.wrapT:b.CLAMP_TO_EDGE,h=c.luminance?b.LUMINANCE:b.RGBA;if(c.repeat&&(f=b.REPEAT,g=b.REPEAT),b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL,!1),c.width){var i=c.width?c.width:512,j=c.height?c.height:2,k=c.border?c.border:0;b.texImage2D(b.TEXTURE_2D,0,h,i,j,k,h,b.UNSIGNED_BYTE,null)}else b.texImage2D(b.TEXTURE_2D,0,h,b.RGBA,b.UNSIGNED_BYTE,a.value.baseTexture.source);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,d),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,e),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,f),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,g)}b.uniform1i(a.uniformLocation,this.textureCount),a._init=!0,this.textureCount++}},e.PixiShader.prototype.syncUniforms=function(){this.textureCount=1;var a,b=this.gl;for(var c in this.uniforms)a=this.uniforms[c],1===a.glValueLength?a.glMatrix===!0?a.glFunc.call(b,a.uniformLocation,a.transpose,a.value):a.glFunc.call(b,a.uniformLocation,a.value):2===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y):3===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y,a.value.z):4===a.glValueLength?a.glFunc.call(b,a.uniformLocation,a.value.x,a.value.y,a.value.z,a.value.w):"sampler2D"===a.type&&(a._init?(b.activeTexture(b["TEXTURE"+this.textureCount]),b.bindTexture(b.TEXTURE_2D,a.value.baseTexture._glTextures[b.id]||e.createWebGLTexture(a.value.baseTexture,b)),b.uniform1i(a.uniformLocation,this.textureCount),this.textureCount++):this.initSampler2D(a))},e.PixiShader.defaultVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec2 aColor;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","varying vec2 vTextureCoord;","varying vec4 vColor;","const vec2 center = vec2(-1.0, 1.0);","void main(void) {"," gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;"," vColor = vec4(color * aColor.x, aColor.x);","}"],e.StripShader=function(){this.program=null,this.fragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform float alpha;","uniform sampler2D uSampler;","void main(void) {"," gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));"," gl_FragColor = gl_FragColor * alpha;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","varying vec2 vTextureCoord;","attribute vec2 offsetVector;","varying float vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"]},e.StripShader.prototype.init=function(){var a=e.gl,b=e.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(b),this.uSampler=a.getUniformLocation(b,"uSampler"),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.aTextureCoord=a.getAttribLocation(b,"aTextureCoord"),this.translationMatrix=a.getUniformLocation(b,"translationMatrix"),this.alpha=a.getUniformLocation(b,"alpha"),this.program=b},e.PrimitiveShader=function(a){this.gl=a,this.program=null,this.fragmentSrc=["precision mediump float;","varying vec4 vColor;","void main(void) {"," gl_FragColor = vColor;","}"],this.vertexSrc=["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform vec2 projectionVector;","uniform vec2 offsetVector;","uniform float alpha;","uniform vec3 tint;","varying vec4 vColor;","void main(void) {"," vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);"," v -= offsetVector.xyx;"," gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"],this.init()},e.PrimitiveShader.prototype.init=function(){var a=this.gl,b=e.compileProgram(a,this.vertexSrc,this.fragmentSrc);a.useProgram(b),this.projectionVector=a.getUniformLocation(b,"projectionVector"),this.offsetVector=a.getUniformLocation(b,"offsetVector"),this.tintColor=a.getUniformLocation(b,"tint"),this.aVertexPosition=a.getAttribLocation(b,"aVertexPosition"),this.colorAttribute=a.getAttribLocation(b,"aColor"),this.translationMatrix=a.getUniformLocation(b,"translationMatrix"),this.alpha=a.getUniformLocation(b,"alpha"),this.program=b},e.WebGLGraphics=function(){},e.WebGLGraphics.renderGraphics=function(a,b){var c=b.gl,d=b.projection,f=b.offset,g=b.shaderManager.primitiveShader;a._webGL[c.id]||(a._webGL[c.id]={points:[],indices:[],lastIndex:0,buffer:c.createBuffer(),indexBuffer:c.createBuffer()});var h=a._webGL[c.id];a.dirty&&(a.dirty=!1,a.clearDirty&&(a.clearDirty=!1,h.lastIndex=0,h.points=[],h.indices=[]),e.WebGLGraphics.updateGraphics(a,c)),b.shaderManager.activatePrimitiveShader();var i=e.mat3.clone(a.worldTransform);e.mat3.transpose(i),c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA),c.uniformMatrix3fv(g.translationMatrix,!1,i),c.uniform2f(g.projectionVector,d.x,-d.y),c.uniform2f(g.offsetVector,-f.x,-f.y),c.uniform3fv(g.tintColor,e.hex2rgb(a.tint)),c.uniform1f(g.alpha,a.worldAlpha),c.bindBuffer(c.ARRAY_BUFFER,h.buffer),c.vertexAttribPointer(g.aVertexPosition,2,c.FLOAT,!1,24,0),c.vertexAttribPointer(g.colorAttribute,4,c.FLOAT,!1,24,8),c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,h.indexBuffer),c.drawElements(c.TRIANGLE_STRIP,h.indices.length,c.UNSIGNED_SHORT,0),b.shaderManager.deactivatePrimitiveShader()},e.WebGLGraphics.updateGraphics=function(a,b){for(var c=a._webGL[b.id],d=c.lastIndex;d3&&e.WebGLGraphics.buildPoly(f,c),f.lineWidth>0&&e.WebGLGraphics.buildLine(f,c)):f.type===e.Graphics.RECT?e.WebGLGraphics.buildRectangle(f,c):(f.type===e.Graphics.CIRC||f.type===e.Graphics.ELIP)&&e.WebGLGraphics.buildCircle(f,c)}c.lastIndex=a.graphicsData.length,c.glPoints=new Float32Array(c.points),b.bindBuffer(b.ARRAY_BUFFER,c.buffer),b.bufferData(b.ARRAY_BUFFER,c.glPoints,b.STATIC_DRAW),c.glIndicies=new Uint16Array(c.indices),b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,c.indexBuffer),b.bufferData(b.ELEMENT_ARRAY_BUFFER,c.glIndicies,b.STATIC_DRAW)},e.WebGLGraphics.buildRectangle=function(a,b){var c=a.points,d=c[0],f=c[1],g=c[2],h=c[3];if(a.fill){var i=e.hex2rgb(a.fillColor),j=a.fillAlpha,k=i[0]*j,l=i[1]*j,m=i[2]*j,n=b.points,o=b.indices,p=n.length/6;n.push(d,f),n.push(k,l,m,j),n.push(d+g,f),n.push(k,l,m,j),n.push(d,f+h),n.push(k,l,m,j),n.push(d+g,f+h),n.push(k,l,m,j),o.push(p,p,p+1,p+2,p+3,p+3)}a.lineWidth&&(a.points=[d,f,d+g,f,d+g,f+h,d,f+h,d,f],e.WebGLGraphics.buildLine(a,b))},e.WebGLGraphics.buildCircle=function(a,b){var c=a.points,d=c[0],f=c[1],g=c[2],h=c[3],i=40,j=2*Math.PI/i,k=0;if(a.fill){var l=e.hex2rgb(a.fillColor),m=a.fillAlpha,n=l[0]*m,o=l[1]*m,p=l[2]*m,q=b.points,r=b.indices,s=q.length/6;for(r.push(s),k=0;i+1>k;k++)q.push(d,f,n,o,p,m),q.push(d+Math.sin(j*k)*g,f+Math.cos(j*k)*h,n,o,p,m),r.push(s++,s++);r.push(s-1)}if(a.lineWidth){for(a.points=[],k=0;i+1>k;k++)a.points.push(d+Math.sin(j*k)*g,f+Math.cos(j*k)*h);e.WebGLGraphics.buildLine(a,b)}},e.WebGLGraphics.buildLine=function(a,b){var c=0,d=a.points;if(0!==d.length){if(a.lineWidth%2)for(c=0;cc;c++)l=d[2*(c-1)],m=d[2*(c-1)+1],n=d[2*c],o=d[2*c+1],p=d[2*(c+1)],q=d[2*(c+1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,t=-(o-q),u=n-p,F=Math.sqrt(t*t+u*u),t/=F,u/=F,t*=L,u*=L,x=-s+m-(-s+o),y=-r+n-(-r+l),z=(-r+l)*(-s+o)-(-r+n)*(-s+m),A=-u+q-(-u+o),B=-t+n-(-t+p),C=(-t+p)*(-u+o)-(-t+n)*(-u+q),D=x*B-A*y,Math.abs(D)<.1?(D+=10.1,G.push(n-r,o-s,O,P,Q,N),G.push(n+r,o+s,O,P,Q,N)):(j=(y*C-B*z)/D,k=(A*z-x*C)/D,E=(j-n)*(j-n)+(k-o)+(k-o),E>19600?(v=r-t,w=s-u,F=Math.sqrt(v*v+w*w),v/=F,w/=F,v*=L,w*=L,G.push(n-v,o-w),G.push(O,P,Q,N),G.push(n+v,o+w),G.push(O,P,Q,N),G.push(n-v,o-w),G.push(O,P,Q,N),J++):(G.push(j,k),G.push(O,P,Q,N),G.push(n-(j-n),o-(k-o)),G.push(O,P,Q,N)));for(l=d[2*(I-2)],m=d[2*(I-2)+1],n=d[2*(I-1)],o=d[2*(I-1)+1],r=-(m-o),s=l-n,F=Math.sqrt(r*r+s*s),r/=F,s/=F,r*=L,s*=L,G.push(n-r,o-s),G.push(O,P,Q,N),G.push(n+r,o+s),G.push(O,P,Q,N),H.push(K),c=0;J>c;c++)H.push(K++);H.push(K-1)}},e.WebGLGraphics.buildPoly=function(a,b){var c=a.points;if(!(c.length<6)){var d=b.points,f=b.indices,g=c.length/2,h=e.hex2rgb(a.fillColor),i=a.fillAlpha,j=h[0]*i,k=h[1]*i,l=h[2]*i,m=e.PolyK.Triangulate(c),n=d.length/6,o=0;for(o=0;oo;o++)d.push(c[2*o],c[2*o+1],j,k,l,i)}},e._defaultFrame=new e.Rectangle(0,0,1,1),e.gl=null,e.WebGLRenderer=function(a,b,c,d,f){e.defaultRenderer||(e.defaultRenderer=this),this.type=e.WEBGL_RENDERER,this.transparent=!!d,this.width=a||800,this.height=b||600,this.view=c||document.createElement("canvas"),this.view.width=this.width,this.view.height=this.height;var g=this;this.view.addEventListener("webglcontextlost",function(a){g.handleContextLost(a)},!1),this.view.addEventListener("webglcontextrestored",function(a){g.handleContextRestored(a)},!1),this.batchs=[],this.options={alpha:this.transparent,antialias:!!f,premultipliedAlpha:!1,stencil:!0};try{this.gl=this.view.getContext("experimental-webgl",this.options)}catch(h){try{this.gl=this.view.getContext("webgl",this.options)}catch(i){throw new Error(" This browser does not support webGL. Try using the canvas renderer"+this)}}var j=this.gl;this.glContextId=j.id=e.WebGLRenderer.glContextId++,e.blendModesWebGL||(e.blendModesWebGL=[],e.blendModesWebGL[e.blendModes.NORMAL]=[j.ONE,j.ONE_MINUS_SRC_ALPHA],e.blendModesWebGL[e.blendModes.ADD]=[j.SRC_ALPHA,j.DST_ALPHA],e.blendModesWebGL[e.blendModes.MULTIPLY]=[j.DST_COLOR,j.ONE_MINUS_SRC_ALPHA],e.blendModesWebGL[e.blendModes.SCREEN]=[j.SRC_ALPHA,j.ONE]),this.projection=new e.Point,this.projection.x=this.width/2,this.projection.y=-this.height/2,this.offset=new e.Point(0,0),this.resize(this.width,this.height),this.contextLost=!1,this.shaderManager=new e.WebGLShaderManager(j),this.spriteBatch=new e.WebGLSpriteBatch(j),this.maskManager=new e.WebGLMaskManager(j),this.filterManager=new e.WebGLFilterManager(j,this.transparent),this.renderSession={},this.renderSession.gl=this.gl,this.renderSession.shaderManager=this.shaderManager,this.renderSession.maskManager=this.maskManager,this.renderSession.filterManager=this.filterManager,this.renderSession.spriteBatch=this.spriteBatch,j.useProgram(this.shaderManager.defaultShader.program),e.WebGLRenderer.gl=j,j.disable(j.DEPTH_TEST),j.disable(j.CULL_FACE),j.enable(j.BLEND),j.colorMask(!0,!0,!0,this.transparent)},e.WebGLRenderer.prototype.constructor=e.WebGLRenderer,e.WebGLRenderer.prototype.render=function(a){if(!this.contextLost){this.__stage!==a&&(this.__stage=a),e.WebGLRenderer.updateTextures(),a.updateTransform();var b=this.gl;b.colorMask(!0,!0,!0,this.transparent),b.viewport(0,0,this.width,this.height),b.bindFramebuffer(b.FRAMEBUFFER,null),b.clearColor(a.backgroundColorSplit[0],a.backgroundColorSplit[1],a.backgroundColorSplit[2],!this.transparent),b.clear(b.COLOR_BUFFER_BIT),this.renderDisplayObject(a,this.projection),a.interactive&&(a._interactiveEventsAdded||(a._interactiveEventsAdded=!0,a.interactionManager.setTarget(this)))}},e.WebGLRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.drawCount=0,this.renderSession.currentBlendMode=9999,this.renderSession.projection=b,this.renderSession.offset=this.offset,this.spriteBatch.begin(this.renderSession),this.filterManager.begin(this.renderSession,null),a._renderWebGL(this.renderSession),this.spriteBatch.end()},e.WebGLRenderer.updateTextures=function(){var a=0;for(a=0;ad;d+=6,e+=4)this.indices[d+0]=e+0,this.indices[d+1]=e+1,this.indices[d+2]=e+2,this.indices[d+3]=e+0,this.indices[d+4]=e+2,this.indices[d+5]=e+3;this.drawing=!1,this.currentBatchSize=0,this.currentBaseTexture=null,this.setContext(a)},e.WebGLSpriteBatch.prototype.setContext=function(a){this.gl=a,this.vertexBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,this.indices,a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,this.vertices,a.DYNAMIC_DRAW),this.currentBlendMode=99999},e.WebGLSpriteBatch.prototype.begin=function(a){this.renderSession=a,this.shader=this.renderSession.shaderManager.defaultShader,this.start()},e.WebGLSpriteBatch.prototype.end=function(){this.flush()},e.WebGLSpriteBatch.prototype.render=function(a){(a.texture.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=a.texture.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode);var b=a._uvs||a.texture._uvs;if(b){var c,d,e,f,g=a.worldAlpha,h=a.tint,i=this.vertices,j=a.texture.frame.width,k=a.texture.frame.height,l=a.anchor.x,m=a.anchor.y;if(a.texture.trimmed){var n=a.texture.trim;d=n.x-l*n.realWidth,c=d+j,f=n.y-m*n.realHeight,e=f+k}else c=j*(1-l),d=j*-l,e=k*(1-m),f=k*-m;var o=4*this.currentBatchSize*this.vertSize,p=a.worldTransform,q=p[0],r=p[3],s=p[1],t=p[4],u=p[2],v=p[5];i[o++]=q*d+s*f+u,i[o++]=t*f+r*d+v,i[o++]=b[0],i[o++]=b[1],i[o++]=g,i[o++]=h,i[o++]=q*c+s*f+u,i[o++]=t*f+r*c+v,i[o++]=b[2],i[o++]=b[3],i[o++]=g,i[o++]=h,i[o++]=q*c+s*e+u,i[o++]=t*e+r*c+v,i[o++]=b[4],i[o++]=b[5],i[o++]=g,i[o++]=h,i[o++]=q*d+s*e+u,i[o++]=t*e+r*d+v,i[o++]=b[6],i[o++]=b[7],i[o++]=g,i[o++]=h,this.currentBatchSize++}},e.WebGLSpriteBatch.prototype.renderTilingSprite=function(a){var b=a.texture;(b.baseTexture!==this.currentBaseTexture||this.currentBatchSize>=this.size)&&(this.flush(),this.currentBaseTexture=b.baseTexture),a.blendMode!==this.currentBlendMode&&this.setBlendMode(a.blendMode),a._uvs||(a._uvs=new Float32Array(8));var c=a._uvs,d=a.tilePosition.x/b.baseTexture.width,e=a.tilePosition.y/b.baseTexture.height,f=a.width/b.baseTexture.width/a.tileScale.x,g=a.height/b.baseTexture.height/a.tileScale.y;c[0]=0-d,c[1]=0-e,c[2]=1*f-d,c[3]=0-e,c[4]=1*f-d,c[5]=1*g-e,c[6]=0-d,c[7]=1*g-e;var h=a.worldAlpha,i=a.tint,j=this.vertices,k=a.width,l=a.height,m=a.anchor.x,n=a.anchor.y,o=k*(1-m),p=k*-m,q=l*(1-n),r=l*-n,s=4*this.currentBatchSize*this.vertSize,t=a.worldTransform,u=t[0],v=t[3],w=t[1],x=t[4],y=t[2],z=t[5];j[s++]=u*p+w*r+y,j[s++]=x*r+v*p+z,j[s++]=c[0],j[s++]=c[1],j[s++]=h,j[s++]=i,j[s++]=u*o+w*r+y,j[s++]=x*r+v*o+z,j[s++]=c[2],j[s++]=c[3],j[s++]=h,j[s++]=i,j[s++]=u*o+w*q+y,j[s++]=x*q+v*o+z,j[s++]=c[4],j[s++]=c[5],j[s++]=h,j[s++]=i,j[s++]=u*p+w*q+y,j[s++]=x*q+v*p+z,j[s++]=c[6],j[s++]=c[7],j[s++]=h,j[s++]=i,this.currentBatchSize++},e.WebGLSpriteBatch.prototype.flush=function(){if(0!==this.currentBatchSize){var a=this.gl;a.bindTexture(a.TEXTURE_2D,this.currentBaseTexture._glTextures[a.id]||e.createWebGLTexture(this.currentBaseTexture,a));var b=this.vertices.subarray(0,4*this.currentBatchSize*this.vertSize);a.bufferSubData(a.ARRAY_BUFFER,0,b),a.drawElements(a.TRIANGLES,6*this.currentBatchSize,a.UNSIGNED_SHORT,0),this.currentBatchSize=0,this.renderSession.drawCount++}},e.WebGLSpriteBatch.prototype.stop=function(){this.flush()},e.WebGLSpriteBatch.prototype.start=function(){var a=this.gl;a.activeTexture(a.TEXTURE0),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var b=this.renderSession.projection;a.uniform2f(this.shader.projectionVector,b.x,b.y);var c=4*this.vertSize;a.vertexAttribPointer(this.shader.aVertexPosition,2,a.FLOAT,!1,c,0),a.vertexAttribPointer(this.shader.aTextureCoord,2,a.FLOAT,!1,c,8),a.vertexAttribPointer(this.shader.colorAttribute,2,a.FLOAT,!1,c,16),this.currentBlendMode!==e.blendModes.NORMAL&&this.setBlendMode(e.blendModes.NORMAL)},e.WebGLSpriteBatch.prototype.setBlendMode=function(a){this.flush(),this.currentBlendMode=a;var b=e.blendModesWebGL[this.currentBlendMode];this.gl.blendFunc(b[0],b[1])},e.WebGLFilterManager=function(a,b){this.transparent=b,this.filterStack=[],this.offsetX=0,this.offsetY=0,this.setContext(a)},e.WebGLFilterManager.prototype.setContext=function(a){this.gl=a,this.texturePool=[],this.initShaderBuffers()},e.WebGLFilterManager.prototype.begin=function(a,b){this.renderSession=a,this.defaultShader=a.shaderManager.defaultShader;var c=this.renderSession.projection;this.width=2*c.x,this.height=2*-c.y,this.buffer=b},e.WebGLFilterManager.prototype.pushFilter=function(a){var b=this.gl,c=this.renderSession.projection,d=this.renderSession.offset;this.filterStack.push(a);var f=a.filterPasses[0];this.offsetX+=a.target.filterArea.x,this.offsetY+=a.target.filterArea.y;var g=this.texturePool.pop();g?g.resize(this.width,this.height):g=new e.FilterTexture(this.gl,this.width,this.height),b.bindTexture(b.TEXTURE_2D,g.texture),a.target.filterArea=a.target.getBounds();var h=a.target.filterArea,i=f.padding;h.x-=i,h.y-=i,h.width+=2*i,h.height+=2*i,h.x<0&&(h.x=0),h.width>this.width&&(h.width=this.width),h.y<0&&(h.y=0),h.height>this.height&&(h.height=this.height),b.bindFramebuffer(b.FRAMEBUFFER,g.frameBuffer),b.viewport(0,0,h.width,h.height),c.x=h.width/2,c.y=-h.height/2,d.x=-h.x,d.y=-h.y,b.uniform2f(this.defaultShader.projectionVector,h.width/2,-h.height/2),b.uniform2f(this.defaultShader.offsetVector,-h.x,-h.y),b.colorMask(!0,!0,!0,!0),b.clearColor(0,0,0,0),b.clear(b.COLOR_BUFFER_BIT),a._glFilterTexture=g},e.WebGLFilterManager.prototype.popFilter=function(){var a=this.gl,b=this.filterStack.pop(),c=b.target.filterArea,d=b._glFilterTexture,f=this.renderSession.projection,g=this.renderSession.offset;if(b.filterPasses.length>1){a.viewport(0,0,c.width,c.height),a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),this.vertexArray[0]=0,this.vertexArray[1]=c.height,this.vertexArray[2]=c.width,this.vertexArray[3]=c.height,this.vertexArray[4]=0,this.vertexArray[5]=0,this.vertexArray[6]=c.width,this.vertexArray[7]=0,a.bufferSubData(a.ARRAY_BUFFER,0,this.vertexArray),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),this.uvArray[2]=c.width/this.width,this.uvArray[5]=c.height/this.height,this.uvArray[6]=c.width/this.width,this.uvArray[7]=c.height/this.height,a.bufferSubData(a.ARRAY_BUFFER,0,this.uvArray);var h=d,i=this.texturePool.pop();i||(i=new e.FilterTexture(this.gl,this.width,this.height)),a.bindFramebuffer(a.FRAMEBUFFER,i.frameBuffer),a.clear(a.COLOR_BUFFER_BIT),a.disable(a.BLEND);for(var j=0;j0&&(e.Texture.frameUpdates=[])},e.CanvasRenderer.prototype.resize=function(a,b){this.width=a,this.height=b,this.view.width=a,this.view.height=b},e.CanvasRenderer.prototype.renderDisplayObject=function(a,b){this.renderSession.context=b||this.context,a._renderCanvas(this.renderSession)},e.CanvasRenderer.prototype.renderStripFlat=function(a){var b=this.context,c=a.verticies,d=c.length/2;this.count++,b.beginPath();for(var e=1;d-2>e;e++){var f=2*e,g=c[f],h=c[f+2],i=c[f+4],j=c[f+1],k=c[f+3],l=c[f+5];b.moveTo(g,j),b.lineTo(h,k),b.lineTo(i,l)}b.fillStyle="#FF0000",b.fill(),b.closePath()},e.CanvasRenderer.prototype.renderStrip=function(a){var b=this.context,c=a.verticies,d=a.uvs,e=c.length/2;this.count++;for(var f=1;e-2>f;f++){var g=2*f,h=c[g],i=c[g+2],j=c[g+4],k=c[g+1],l=c[g+3],m=c[g+5],n=d[g]*a.texture.width,o=d[g+2]*a.texture.width,p=d[g+4]*a.texture.width,q=d[g+1]*a.texture.height,r=d[g+3]*a.texture.height,s=d[g+5]*a.texture.height;b.save(),b.beginPath(),b.moveTo(h,k),b.lineTo(i,l),b.lineTo(j,m),b.closePath(),b.clip();var t=n*r+q*p+o*s-r*p-q*o-n*s,u=h*r+q*j+i*s-r*j-q*i-h*s,v=n*i+h*p+o*j-i*p-h*o-n*j,w=n*r*j+q*i*p+h*o*s-h*r*p-q*o*j-n*i*s,x=k*r+q*m+l*s-r*m-q*l-k*s,y=n*l+k*p+o*m-l*p-k*o-n*m,z=n*r*m+q*l*p+k*o*s-k*r*p-q*o*m-n*l*s;b.transform(u/t,x/t,v/t,y/t,w/t,z/t),b.drawImage(a.texture.baseTexture.source,0,0),b.restore()}},e.CanvasBuffer=function(a,b){this.width=a,this.height=b,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=a,this.canvas.height=b},e.CanvasBuffer.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},e.CanvasBuffer.prototype.resize=function(a,b){this.width=this.canvas.width=a,this.height=this.canvas.height=b},e.CanvasGraphics=function(){},e.CanvasGraphics.renderGraphics=function(a,b){for(var c=a.worldAlpha,d="",f=0;f1&&(c=1,window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));for(var d=0;1>d;d++){var f=a.graphicsData[d],g=f.points;if(f.type===e.Graphics.POLY){b.beginPath(),b.moveTo(g[0],g[1]);for(var h=1;hl?l:v,v=v>n?n:v,v=v>p?p:v,v=v>r?r:v,w=w>m?m:w,w=w>o?o:w,w=w>q?q:w,w=w>s?s:w,t=l>t?l:t,t=n>t?n:t,t=p>t?p:t,t=r>t?r:t,u=m>u?m:u,u=o>u?o:u,u=q>u?q:u,u=s>u?s:u;var x=this._bounds;return x.x=v,x.width=t-v,x.y=w,x.height=u-w,x},e.Graphics.prototype.updateBounds=function(){for(var a,b,c,d=1/0,f=-1/0,g=1/0,h=-1/0,i=0;ib?b:d,f=b+m>f?b+m:f,g=g>c?b:g,h=c+n>h?c+n:h}else if(k===e.Graphics.CIRC||k===e.Graphics.ELIP){b=a.x,c=a.y;var o=a.radius+l/2;d=d>b-o?b-o:d,f=b+o>f?b+o:f,g=g>c-o?c-o:g,h=c+o>h?c+o:h}else for(var p=0;pb-l?b-l:d,f=b+l>f?b+l:f,g=g>c-l?c-l:g,h=c+l>h?c+l:h}this.bounds=new e.Rectangle(d,g,f-d,h-g)},e.Graphics.POLY=0,e.Graphics.RECT=1,e.Graphics.CIRC=2,e.Graphics.ELIP=3,e.Strip=function(a,b,c){e.DisplayObjectContainer.call(this),this.texture=a,this.blendMode=e.blendModes.NORMAL;try{this.uvs=new Float32Array([0,1,1,1,1,0,0,1]),this.verticies=new Float32Array([0,0,0,0,0,0,0,0,0]),this.colors=new Float32Array([1,1,1,1]),this.indices=new Uint16Array([0,1,2,3])}catch(d){this.uvs=[0,1,1,1,1,0,0,1],this.verticies=[0,0,0,0,0,0,0,0,0],this.colors=[1,1,1,1],this.indices=[0,1,2,3]}this.width=b,this.height=c,a.baseTexture.hasLoaded?(this.width=this.texture.frame.width,this.height=this.texture.frame.height,this.updateFrame=!0):(this.onTextureUpdateBind=this.onTextureUpdate.bind(this),this.texture.addEventListener("update",this.onTextureUpdateBind)),this.renderable=!0},e.Strip.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Strip.prototype.constructor=e.Strip,e.Strip.prototype.setTexture=function(a){this.texture=a,this.width=a.frame.width,this.height=a.frame.height,this.updateFrame=!0},e.Strip.prototype.onTextureUpdate=function(){this.updateFrame=!0},e.Rope=function(a,b){e.Strip.call(this,a),this.points=b;try{this.verticies=new Float32Array(4*b.length),this.uvs=new Float32Array(4*b.length),this.colors=new Float32Array(2*b.length),this.indices=new Uint16Array(2*b.length)}catch(c){this.verticies=new Array(4*b.length),this.uvs=new Array(4*b.length),this.colors=new Array(2*b.length),this.indices=new Array(2*b.length)}this.refresh()},e.Rope.prototype=Object.create(e.Strip.prototype),e.Rope.prototype.constructor=e.Rope,e.Rope.prototype.refresh=function(){var a=this.points;if(!(a.length<1)){var b=this.uvs,c=a[0],d=this.indices,e=this.colors;this.count-=.2,b[0]=0,b[1]=1,b[2]=0,b[3]=1,e[0]=1,e[1]=1,d[0]=0,d[1]=1;for(var f,g,h,i=a.length,j=1;i>j;j++)f=a[j],g=4*j,h=j/(i-1),j%2?(b[g]=h,b[g+1]=0,b[g+2]=h,b[g+3]=1):(b[g]=h,b[g+1]=0,b[g+2]=h,b[g+3]=1),g=2*j,e[g]=1,e[g+1]=1,g=2*j,d[g]=g,d[g+1]=g+1,c=f}},e.Rope.prototype.updateTransform=function(){var a=this.points;if(!(a.length<1)){var b,c=a[0],d={x:0,y:0};this.count-=.2;var f=this.verticies;f[0]=c.x+d.x,f[1]=c.y+d.y,f[2]=c.x-d.x,f[3]=c.y-d.y;for(var g,h,i,j,k,l=a.length,m=1;l>m;m++)g=a[m],h=4*m,b=m1&&(i=1),j=Math.sqrt(d.x*d.x+d.y*d.y),k=this.texture.height/2,d.x/=j,d.y/=j,d.x*=k,d.y*=k,f[h]=g.x+d.x,f[h+1]=g.y+d.y,f[h+2]=g.x-d.x,f[h+3]=g.y-d.y,c=g;e.DisplayObjectContainer.prototype.updateTransform.call(this)}},e.Rope.prototype.setTexture=function(a){this.texture=a,this.updateFrame=!0},e.TilingSprite=function(a,b,c){e.Sprite.call(this,a),this.width=b||100,this.height=c||100,a.baseTexture._powerOf2=!0,this.tileScale=new e.Point(1,1),this.tilePosition=new e.Point(0,0),this.renderable=!0,this.tint=16777215,this.blendMode=e.blendModes.NORMAL},e.TilingSprite.prototype=Object.create(e.Sprite.prototype),e.TilingSprite.prototype.constructor=e.TilingSprite,Object.defineProperty(e.TilingSprite.prototype,"width",{get:function(){return this._width},set:function(a){this._width=a}}),Object.defineProperty(e.TilingSprite.prototype,"height",{get:function(){return this._height},set:function(a){this._height=a}}),e.TilingSprite.prototype.onTextureUpdate=function(){this.updateFrame=!0},e.TilingSprite.prototype._renderWebGL=function(a){if(this.visible!==!1&&0!==this.alpha){var b,c;if(this.mask||this.filters){for(this.mask&&(a.spriteBatch.stop(),a.maskManager.pushMask(this.mask,a.projection),a.spriteBatch.start()),this.filters&&(a.spriteBatch.flush(),a.filterManager.pushFilter(this._filterBlock)),a.spriteBatch.renderTilingSprite(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a);a.spriteBatch.stop(),this.filters&&a.filterManager.popFilter(),this.mask&&a.maskManager.popMask(a.projection),a.spriteBatch.start()}else for(a.spriteBatch.renderTilingSprite(this),b=0,c=this.children.length;c>b;b++)this.children[b]._renderWebGL(a)}},e.TilingSprite.prototype._renderCanvas=function(a){if(this.visible!==!1&&0!==this.alpha){var b=a.context;b.globalAlpha=this.worldAlpha,this.__tilePattern||(this.__tilePattern=b.createPattern(this.texture.baseTexture.source,"repeat")),this.blendMode!==a.currentBlendMode&&(a.currentBlendMode=this.blendMode,b.globalCompositeOperation=e.blendModesCanvas[a.currentBlendMode]),b.beginPath();var c=this.tilePosition,d=this.tileScale;b.scale(d.x,d.y),b.translate(c.x,c.y),b.fillStyle=this.__tilePattern,b.fillRect(-c.x,-c.y,this.width/d.x,this.height/d.y),b.scale(1/d.x,1/d.y),b.translate(-c.x,-c.y),b.closePath()}};var j={};j.BoneData=function(a,b){this.name=a,this.parent=b},j.BoneData.prototype={length:0,x:0,y:0,rotation:0,scaleX:1,scaleY:1},j.SlotData=function(a,b){this.name=a,this.boneData=b},j.SlotData.prototype={r:1,g:1,b:1,a:1,attachmentName:null},j.Bone=function(a,b){this.data=a,this.parent=b,this.setToSetupPose()},j.Bone.yDown=!1,j.Bone.prototype={x:0,y:0,rotation:0,scaleX:1,scaleY:1,m00:0,m01:0,worldX:0,m10:0,m11:0,worldY:0,worldRotation:0,worldScaleX:1,worldScaleY:1,updateWorldTransform:function(a,b){var c=this.parent;null!=c?(this.worldX=this.x*c.m00+this.y*c.m01+c.worldX,this.worldY=this.x*c.m10+this.y*c.m11+c.worldY,this.worldScaleX=c.worldScaleX*this.scaleX,this.worldScaleY=c.worldScaleY*this.scaleY,this.worldRotation=c.worldRotation+this.rotation):(this.worldX=this.x,this.worldY=this.y,this.worldScaleX=this.scaleX,this.worldScaleY=this.scaleY,this.worldRotation=this.rotation);var d=this.worldRotation*Math.PI/180,e=Math.cos(d),f=Math.sin(d);this.m00=e*this.worldScaleX,this.m10=f*this.worldScaleX,this.m01=-f*this.worldScaleY,this.m11=e*this.worldScaleY,a&&(this.m00=-this.m00,this.m01=-this.m01),b&&(this.m10=-this.m10,this.m11=-this.m11),j.Bone.yDown&&(this.m10=-this.m10,this.m11=-this.m11)},setToSetupPose:function(){var a=this.data;this.x=a.x,this.y=a.y,this.rotation=a.rotation,this.scaleX=a.scaleX,this.scaleY=a.scaleY}},j.Slot=function(a,b,c){this.data=a,this.skeleton=b,this.bone=c,this.setToSetupPose()},j.Slot.prototype={r:1,g:1,b:1,a:1,_attachmentTime:0,attachment:null,setAttachment:function(a){this.attachment=a,this._attachmentTime=this.skeleton.time},setAttachmentTime:function(a){this._attachmentTime=this.skeleton.time-a},getAttachmentTime:function(){return this.skeleton.time-this._attachmentTime},setToSetupPose:function(){var a=this.data;this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a;for(var b=this.skeleton.data.slots,c=0,d=b.length;d>c;c++)if(b[c]==a){this.setAttachment(a.attachmentName?this.skeleton.getAttachmentBySlotIndex(c,a.attachmentName):null);break}}},j.Skin=function(a){this.name=a,this.attachments={}},j.Skin.prototype={addAttachment:function(a,b,c){this.attachments[a+":"+b]=c},getAttachment:function(a,b){return this.attachments[a+":"+b]},_attachAll:function(a,b){for(var c in b.attachments){var d=c.indexOf(":"),e=parseInt(c.substring(0,d),10),f=c.substring(d+1),g=a.slots[e];if(g.attachment&&g.attachment.name==f){var h=this.getAttachment(e,f);h&&g.setAttachment(h)}}}},j.Animation=function(a,b,c){this.name=a,this.timelines=b,this.duration=c},j.Animation.prototype={apply:function(a,b,c){c&&this.duration&&(b%=this.duration);for(var d=this.timelines,e=0,f=d.length;f>e;e++)d[e].apply(a,b,1)},mix:function(a,b,c,d){c&&this.duration&&(b%=this.duration);for(var e=this.timelines,f=0,g=e.length;g>f;f++)e[f].apply(a,b,d)}},j.binarySearch=function(a,b,c){var d=0,e=Math.floor(a.length/c)-2;if(!e)return c;for(var f=e>>>1;;){if(a[(f+1)*c]<=b?d=f+1:e=f,d==e)return(d+1)*c;f=d+e>>>1}},j.linearSearch=function(a,b,c){for(var d=0,e=a.length-c;e>=d;d+=c)if(a[d]>b)return d;return-1},j.Curves=function(a){this.curves=[],this.curves.length=6*(a-1)},j.Curves.prototype={setLinear:function(a){this.curves[6*a]=0},setStepped:function(a){this.curves[6*a]=-1},setCurve:function(a,b,c,d,e){var f=.1,g=f*f,h=g*f,i=3*f,j=3*g,k=6*g,l=6*h,m=2*-b+d,n=2*-c+e,o=3*(b-d)+1,p=3*(c-e)+1,q=6*a,r=this.curves;r[q]=b*i+m*j+o*h,r[q+1]=c*i+n*j+p*h,r[q+2]=m*k+o*l,r[q+3]=n*k+p*l,r[q+4]=o*l,r[q+5]=p*l},getCurvePercent:function(a,b){b=0>b?0:b>1?1:b;var c=6*a,d=this.curves,e=d[c];if(!e)return b;if(-1==e)return 0;for(var f=d[c+1],g=d[c+2],h=d[c+3],i=d[c+4],j=d[c+5],k=e,l=f,m=8;;){if(k>=b){var n=k-e,o=l-f;return o+(l-o)*(b-n)/(k-n)}if(!m)break;m--,e+=g,f+=h,g+=i,h+=j,k+=e,l+=f}return l+(1-l)*(b-k)/(1-k)}},j.RotateTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=2*a},j.RotateTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/2},setFrame:function(a,b,c){a*=2,this.frames[a]=b,this.frames[a+1]=c},apply:function(a,b,c){var d,e=this.frames;if(!(b=e[e.length-2]){for(d=f.data.rotation+e[e.length-1]-f.rotation;d>180;)d-=360;for(;-180>d;)d+=360;return f.rotation+=d*c,void 0}var g=j.binarySearch(e,b,2),h=e[g-1],i=e[g],k=1-(b-i)/(e[g-2]-i);for(k=this.curves.getCurvePercent(g/2-1,k),d=e[g+1]-h;d>180;)d-=360;for(;-180>d;)d+=360;for(d=f.data.rotation+(h+d*k)-f.rotation;d>180;)d-=360;for(;-180>d;)d+=360;f.rotation+=d*c}}},j.TranslateTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=3*a},j.TranslateTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/3},setFrame:function(a,b,c,d){a*=3,this.frames[a]=b,this.frames[a+1]=c,this.frames[a+2]=d},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-3])return e.x+=(e.data.x+d[d.length-2]-e.x)*c,e.y+=(e.data.y+d[d.length-1]-e.y)*c,void 0;var f=j.binarySearch(d,b,3),g=d[f-2],h=d[f-1],i=d[f],k=1-(b-i)/(d[f+-3]-i);k=this.curves.getCurvePercent(f/3-1,k),e.x+=(e.data.x+g+(d[f+1]-g)*k-e.x)*c,e.y+=(e.data.y+h+(d[f+2]-h)*k-e.y)*c}}},j.ScaleTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=3*a},j.ScaleTimeline.prototype={boneIndex:0,getFrameCount:function(){return this.frames.length/3},setFrame:function(a,b,c,d){a*=3,this.frames[a]=b,this.frames[a+1]=c,this.frames[a+2]=d},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-3])return e.scaleX+=(e.data.scaleX-1+d[d.length-2]-e.scaleX)*c,e.scaleY+=(e.data.scaleY-1+d[d.length-1]-e.scaleY)*c,void 0;var f=j.binarySearch(d,b,3),g=d[f-2],h=d[f-1],i=d[f],k=1-(b-i)/(d[f+-3]-i);k=this.curves.getCurvePercent(f/3-1,k),e.scaleX+=(e.data.scaleX-1+g+(d[f+1]-g)*k-e.scaleX)*c,e.scaleY+=(e.data.scaleY-1+h+(d[f+2]-h)*k-e.scaleY)*c}}},j.ColorTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=5*a},j.ColorTimeline.prototype={slotIndex:0,getFrameCount:function(){return this.frames.length/2},setFrame:function(c,d){c*=5,this.frames[c]=d,this.frames[c+1]=r,this.frames[c+2]=g,this.frames[c+3]=b,this.frames[c+4]=a},apply:function(a,b,c){var d=this.frames;if(!(b=d[d.length-5]){var f=d.length-1;return e.r=d[f-3],e.g=d[f-2],e.b=d[f-1],e.a=d[f],void 0}var g=j.binarySearch(d,b,5),h=d[g-4],i=d[g-3],k=d[g-2],l=d[g-1],m=d[g],n=1-(b-m)/(d[g-5]-m);n=this.curves.getCurvePercent(g/5-1,n);var o=h+(d[g+1]-h)*n,p=i+(d[g+2]-i)*n,q=k+(d[g+3]-k)*n,r=l+(d[g+4]-l)*n;1>c?(e.r+=(o-e.r)*c,e.g+=(p-e.g)*c,e.b+=(q-e.b)*c,e.a+=(r-e.a)*c):(e.r=o,e.g=p,e.b=q,e.a=r)}}},j.AttachmentTimeline=function(a){this.curves=new j.Curves(a),this.frames=[],this.frames.length=a,this.attachmentNames=[],this.attachmentNames.length=a},j.AttachmentTimeline.prototype={slotIndex:0,getFrameCount:function(){return this.frames.length},setFrame:function(a,b,c){this.frames[a]=b,this.attachmentNames[a]=c},apply:function(a,b){var c=this.frames;if(!(b=c[c.length-1]?c.length-1:j.binarySearch(c,b,1)-1;var e=this.attachmentNames[d];a.slots[this.slotIndex].setAttachment(e?a.getAttachmentBySlotIndex(this.slotIndex,e):null)}}},j.SkeletonData=function(){this.bones=[],this.slots=[],this.skins=[],this.animations=[]},j.SkeletonData.prototype={defaultSkin:null,findBone:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},findBoneIndex:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].name==a)return c;return-1},findSlot:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].name==a)return slot[c];return null},findSlotIndex:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].name==a)return c;return-1},findSkin:function(a){for(var b=this.skins,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},findAnimation:function(a){for(var b=this.animations,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null}},j.Skeleton=function(a){this.data=a,this.bones=[];for(var b=0,c=a.bones.length;c>b;b++){var d=a.bones[b],e=d.parent?this.bones[a.bones.indexOf(d.parent)]:null;this.bones.push(new j.Bone(d,e))}for(this.slots=[],this.drawOrder=[],b=0,c=a.slots.length;c>b;b++){var f=a.slots[b],g=this.bones[a.bones.indexOf(f.boneData)],h=new j.Slot(f,this,g);this.slots.push(h),this.drawOrder.push(h)}},j.Skeleton.prototype={x:0,y:0,skin:null,r:1,g:1,b:1,a:1,time:0,flipX:!1,flipY:!1,updateWorldTransform:function(){for(var a=this.flipX,b=this.flipY,c=this.bones,d=0,e=c.length;e>d;d++)c[d].updateWorldTransform(a,b)},setToSetupPose:function(){this.setBonesToSetupPose(),this.setSlotsToSetupPose()},setBonesToSetupPose:function(){for(var a=this.bones,b=0,c=a.length;c>b;b++)a[b].setToSetupPose()},setSlotsToSetupPose:function(){for(var a=this.slots,b=0,c=a.length;c>b;b++)a[b].setToSetupPose(b)},getRootBone:function(){return this.bones.length?this.bones[0]:null},findBone:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return b[c];return null},findBoneIndex:function(a){for(var b=this.bones,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return c;return-1},findSlot:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return b[c];return null},findSlotIndex:function(a){for(var b=this.slots,c=0,d=b.length;d>c;c++)if(b[c].data.name==a)return c;return-1},setSkinByName:function(a){var b=this.data.findSkin(a);if(!b)throw"Skin not found: "+a;this.setSkin(b)},setSkin:function(a){this.skin&&a&&a._attachAll(this,this.skin),this.skin=a},getAttachmentBySlotName:function(a,b){return this.getAttachmentBySlotIndex(this.data.findSlotIndex(a),b)},getAttachmentBySlotIndex:function(a,b){if(this.skin){var c=this.skin.getAttachment(a,b);if(c)return c}return this.data.defaultSkin?this.data.defaultSkin.getAttachment(a,b):null},setAttachment:function(a,b){for(var c=this.slots,d=0,e=c.size;e>d;d++){var f=c[d];if(f.data.name==a){var g=null;if(b&&(g=this.getAttachment(d,b),null==g))throw"Attachment not found: "+b+", for slot: "+a;return f.setAttachment(g),void 0}}throw"Slot not found: "+a},update:function(a){time+=a}},j.AttachmentType={region:0},j.RegionAttachment=function(){this.offset=[],this.offset.length=8,this.uvs=[],this.uvs.length=8},j.RegionAttachment.prototype={x:0,y:0,rotation:0,scaleX:1,scaleY:1,width:0,height:0,rendererObject:null,regionOffsetX:0,regionOffsetY:0,regionWidth:0,regionHeight:0,regionOriginalWidth:0,regionOriginalHeight:0,setUVs:function(a,b,c,d,e){var f=this.uvs;e?(f[2]=a,f[3]=d,f[4]=a,f[5]=b,f[6]=c,f[7]=b,f[0]=c,f[1]=d):(f[0]=a,f[1]=d,f[2]=a,f[3]=b,f[4]=c,f[5]=b,f[6]=c,f[7]=d)},updateOffset:function(){var a=this.width/this.regionOriginalWidth*this.scaleX,b=this.height/this.regionOriginalHeight*this.scaleY,c=-this.width/2*this.scaleX+this.regionOffsetX*a,d=-this.height/2*this.scaleY+this.regionOffsetY*b,e=c+this.regionWidth*a,f=d+this.regionHeight*b,g=this.rotation*Math.PI/180,h=Math.cos(g),i=Math.sin(g),j=c*h+this.x,k=c*i,l=d*h+this.y,m=d*i,n=e*h+this.x,o=e*i,p=f*h+this.y,q=f*i,r=this.offset;r[0]=j-m,r[1]=l+k,r[2]=j-q,r[3]=p+k,r[4]=n-q,r[5]=p+o,r[6]=n-m,r[7]=l+o},computeVertices:function(a,b,c,d){a+=c.worldX,b+=c.worldY;var e=c.m00,f=c.m01,g=c.m10,h=c.m11,i=this.offset;d[0]=i[0]*e+i[1]*f+a,d[1]=i[0]*g+i[1]*h+b,d[2]=i[2]*e+i[3]*f+a,d[3]=i[2]*g+i[3]*h+b,d[4]=i[4]*e+i[5]*f+a,d[5]=i[4]*g+i[5]*h+b,d[6]=i[6]*e+i[7]*f+a,d[7]=i[6]*g+i[7]*h+b}},j.AnimationStateData=function(a){this.skeletonData=a,this.animationToMixTime={}},j.AnimationStateData.prototype={defaultMix:0,setMixByName:function(a,b,c){var d=this.skeletonData.findAnimation(a);if(!d)throw"Animation not found: "+a;var e=this.skeletonData.findAnimation(b);if(!e)throw"Animation not found: "+b;this.setMix(d,e,c)},setMix:function(a,b,c){this.animationToMixTime[a.name+":"+b.name]=c},getMix:function(a,b){var c=this.animationToMixTime[a.name+":"+b.name];return c?c:this.defaultMix}},j.AnimationState=function(a){this.data=a,this.queue=[]},j.AnimationState.prototype={current:null,previous:null,currentTime:0,previousTime:0,currentLoop:!1,previousLoop:!1,mixTime:0,mixDuration:0,update:function(a){if(this.currentTime+=a,this.previousTime+=a,this.mixTime+=a,this.queue.length>0){var b=this.queue[0];this.currentTime>=b.delay&&(this._setAnimation(b.animation,b.loop),this.queue.shift())}},apply:function(a){if(this.current)if(this.previous){this.previous.apply(a,this.previousTime,this.previousLoop);var b=this.mixTime/this.mixDuration;b>=1&&(b=1,this.previous=null),this.current.mix(a,this.currentTime,this.currentLoop,b)}else this.current.apply(a,this.currentTime,this.currentLoop)},clearAnimation:function(){this.previous=null,this.current=null,this.queue.length=0},_setAnimation:function(a,b){this.previous=null,a&&this.current&&(this.mixDuration=this.data.getMix(this.current,a),this.mixDuration>0&&(this.mixTime=0,this.previous=this.current,this.previousTime=this.currentTime,this.previousLoop=this.currentLoop)),this.current=a,this.currentLoop=b,this.currentTime=0},setAnimationByName:function(a,b){var c=this.data.skeletonData.findAnimation(a);if(!c)throw"Animation not found: "+a;this.setAnimation(c,b)},setAnimation:function(a,b){this.queue.length=0,this._setAnimation(a,b)},addAnimationByName:function(a,b,c){var d=this.data.skeletonData.findAnimation(a);if(!d)throw"Animation not found: "+a;this.addAnimation(d,b,c)},addAnimation:function(a,b,c){var d={};if(d.animation=a,d.loop=b,!c||0>=c){var e=this.queue.length?this.queue[this.queue.length-1].animation:this.current;c=null!=e?e.duration-this.data.getMix(e,a)+(c||0):0}d.delay=c,this.queue.push(d)},isComplete:function(){return!this.current||this.currentTime>=this.current.duration}},j.SkeletonJson=function(a){this.attachmentLoader=a},j.SkeletonJson.prototype={scale:1,readSkeletonData:function(a){for(var b,c=new j.SkeletonData,d=a.bones,e=0,f=d.length;f>e;e++){var g=d[e],h=null;if(g.parent&&(h=c.findBone(g.parent),!h))throw"Parent bone not found: "+g.parent;b=new j.BoneData(g.name,h),b.length=(g.length||0)*this.scale,b.x=(g.x||0)*this.scale,b.y=(g.y||0)*this.scale,b.rotation=g.rotation||0,b.scaleX=g.scaleX||1,b.scaleY=g.scaleY||1,c.bones.push(b)}var i=a.slots;for(e=0,f=i.length;f>e;e++){var k=i[e];if(b=c.findBone(k.bone),!b)throw"Slot bone not found: "+k.bone;var l=new j.SlotData(k.name,b),m=k.color;m&&(l.r=j.SkeletonJson.toColor(m,0),l.g=j.SkeletonJson.toColor(m,1),l.b=j.SkeletonJson.toColor(m,2),l.a=j.SkeletonJson.toColor(m,3)),l.attachmentName=k.attachment,c.slots.push(l)}var n=a.skins;for(var o in n)if(n.hasOwnProperty(o)){var p=n[o],q=new j.Skin(o);for(var r in p)if(p.hasOwnProperty(r)){var s=c.findSlotIndex(r),t=p[r];for(var u in t)if(t.hasOwnProperty(u)){var v=this.readAttachment(q,u,t[u]);null!=v&&q.addAttachment(s,u,v)}}c.skins.push(q),"default"==q.name&&(c.defaultSkin=q)}var w=a.animations;for(var x in w)w.hasOwnProperty(x)&&this.readAnimation(x,w[x],c);return c},readAttachment:function(a,b,c){b=c.name||b;var d=j.AttachmentType[c.type||"region"];if(d==j.AttachmentType.region){var e=new j.RegionAttachment;return e.x=(c.x||0)*this.scale,e.y=(c.y||0)*this.scale,e.scaleX=c.scaleX||1,e.scaleY=c.scaleY||1,e.rotation=c.rotation||0,e.width=(c.width||32)*this.scale,e.height=(c.height||32)*this.scale,e.updateOffset(),e.rendererObject={},e.rendererObject.name=b,e.rendererObject.scale={},e.rendererObject.scale.x=e.scaleX,e.rendererObject.scale.y=e.scaleY,e.rendererObject.rotation=-e.rotation*Math.PI/180,e +}throw"Unknown attachment type: "+d},readAnimation:function(a,b,c){var d,e,f,g,h,i,k,l=[],m=0,n=b.bones;for(var o in n)if(n.hasOwnProperty(o)){var p=c.findBoneIndex(o);if(-1==p)throw"Bone not found: "+o;var q=n[o];for(f in q)if(q.hasOwnProperty(f))if(h=q[f],"rotate"==f){for(e=new j.RotateTimeline(h.length),e.boneIndex=p,d=0,i=0,k=h.length;k>i;i++)g=h[i],e.setFrame(d,g.time,g.angle),j.SkeletonJson.readCurve(e,d,g),d++;l.push(e),m=Math.max(m,e.frames[2*e.getFrameCount()-2])}else{if("translate"!=f&&"scale"!=f)throw"Invalid timeline type for a bone: "+f+" ("+o+")";var r=1;for("scale"==f?e=new j.ScaleTimeline(h.length):(e=new j.TranslateTimeline(h.length),r=this.scale),e.boneIndex=p,d=0,i=0,k=h.length;k>i;i++){g=h[i];var s=(g.x||0)*r,t=(g.y||0)*r;e.setFrame(d,g.time,s,t),j.SkeletonJson.readCurve(e,d,g),d++}l.push(e),m=Math.max(m,e.frames[3*e.getFrameCount()-3])}}var u=b.slots;for(var v in u)if(u.hasOwnProperty(v)){var w=u[v],x=c.findSlotIndex(v);for(f in w)if(w.hasOwnProperty(f))if(h=w[f],"color"==f){for(e=new j.ColorTimeline(h.length),e.slotIndex=x,d=0,i=0,k=h.length;k>i;i++){g=h[i];var y=g.color,z=j.SkeletonJson.toColor(y,0),A=j.SkeletonJson.toColor(y,1),B=j.SkeletonJson.toColor(y,2),C=j.SkeletonJson.toColor(y,3);e.setFrame(d,g.time,z,A,B,C),j.SkeletonJson.readCurve(e,d,g),d++}l.push(e),m=Math.max(m,e.frames[5*e.getFrameCount()-5])}else{if("attachment"!=f)throw"Invalid timeline type for a slot: "+f+" ("+v+")";for(e=new j.AttachmentTimeline(h.length),e.slotIndex=x,d=0,i=0,k=h.length;k>i;i++)g=h[i],e.setFrame(d++,g.time,g.name);l.push(e),m=Math.max(m,e.frames[e.getFrameCount()-1])}}c.animations.push(new j.Animation(a,l,m))}},j.SkeletonJson.readCurve=function(a,b,c){var d=c.curve;d&&("stepped"==d?a.curves.setStepped(b):d instanceof Array&&a.curves.setCurve(b,d[0],d[1],d[2],d[3]))},j.SkeletonJson.toColor=function(a,b){if(8!=a.length)throw"Color hexidecimal length must be 8, recieved: "+a;return parseInt(a.substring(2*b,2),16)/255},j.Atlas=function(a,b){this.textureLoader=b,this.pages=[],this.regions=[];var c=new j.AtlasReader(a),d=[];d.length=4;for(var e=null;;){var f=c.readLine();if(null==f)break;if(f=c.trim(f),f.length)if(e){var g=new j.AtlasRegion;g.name=f,g.page=e,g.rotate="true"==c.readValue(),c.readTuple(d);var h=parseInt(d[0],10),i=parseInt(d[1],10);c.readTuple(d);var k=parseInt(d[0],10),l=parseInt(d[1],10);g.u=h/e.width,g.v=i/e.height,g.rotate?(g.u2=(h+l)/e.width,g.v2=(i+k)/e.height):(g.u2=(h+k)/e.width,g.v2=(i+l)/e.height),g.x=h,g.y=i,g.width=Math.abs(k),g.height=Math.abs(l),4==c.readTuple(d)&&(g.splits=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)],4==c.readTuple(d)&&(g.pads=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)],c.readTuple(d))),g.originalWidth=parseInt(d[0],10),g.originalHeight=parseInt(d[1],10),c.readTuple(d),g.offsetX=parseInt(d[0],10),g.offsetY=parseInt(d[1],10),g.index=parseInt(c.readValue(),10),this.regions.push(g)}else{e=new j.AtlasPage,e.name=f,e.format=j.Atlas.Format[c.readValue()],c.readTuple(d),e.minFilter=j.Atlas.TextureFilter[d[0]],e.magFilter=j.Atlas.TextureFilter[d[1]];var m=c.readValue();e.uWrap=j.Atlas.TextureWrap.clampToEdge,e.vWrap=j.Atlas.TextureWrap.clampToEdge,"x"==m?e.uWrap=j.Atlas.TextureWrap.repeat:"y"==m?e.vWrap=j.Atlas.TextureWrap.repeat:"xy"==m&&(e.uWrap=e.vWrap=j.Atlas.TextureWrap.repeat),b.load(e,f),this.pages.push(e)}else e=null}},j.Atlas.prototype={findRegion:function(a){for(var b=this.regions,c=0,d=b.length;d>c;c++)if(b[c].name==a)return b[c];return null},dispose:function(){for(var a=this.pages,b=0,c=a.length;c>b;b++)this.textureLoader.unload(a[b].rendererObject)},updateUVs:function(a){for(var b=this.regions,c=0,d=b.length;d>c;c++){var e=b[c];e.page==a&&(e.u=e.x/a.width,e.v=e.y/a.height,e.rotate?(e.u2=(e.x+e.height)/a.width,e.v2=(e.y+e.width)/a.height):(e.u2=(e.x+e.width)/a.width,e.v2=(e.y+e.height)/a.height))}}},j.Atlas.Format={alpha:0,intensity:1,luminanceAlpha:2,rgb565:3,rgba4444:4,rgb888:5,rgba8888:6},j.Atlas.TextureFilter={nearest:0,linear:1,mipMap:2,mipMapNearestNearest:3,mipMapLinearNearest:4,mipMapNearestLinear:5,mipMapLinearLinear:6},j.Atlas.TextureWrap={mirroredRepeat:0,clampToEdge:1,repeat:2},j.AtlasPage=function(){},j.AtlasPage.prototype={name:null,format:null,minFilter:null,magFilter:null,uWrap:null,vWrap:null,rendererObject:null,width:0,height:0},j.AtlasRegion=function(){},j.AtlasRegion.prototype={page:null,name:null,x:0,y:0,width:0,height:0,u:0,v:0,u2:0,v2:0,offsetX:0,offsetY:0,originalWidth:0,originalHeight:0,index:0,rotate:!1,splits:null,pads:null},j.AtlasReader=function(a){this.lines=a.split(/\r\n|\r|\n/)},j.AtlasReader.prototype={index:0,trim:function(a){return a.replace(/^\s+|\s+$/g,"")},readLine:function(){return this.index>=this.lines.length?null:this.lines[this.index++]},readValue:function(){var a=this.readLine(),b=a.indexOf(":");if(-1==b)throw"Invalid line: "+a;return this.trim(a.substring(b+1))},readTuple:function(a){var b=this.readLine(),c=b.indexOf(":");if(-1==c)throw"Invalid line: "+b;for(var d=0,e=c+1;3>d;d++){var f=b.indexOf(",",e);if(-1==f){if(!d)throw"Invalid line: "+b;break}a[d]=this.trim(b.substr(e,f-e)),e=f+1}return a[d]=this.trim(b.substring(e)),d+1}},j.AtlasAttachmentLoader=function(a){this.atlas=a},j.AtlasAttachmentLoader.prototype={newAttachment:function(a,b,c){switch(b){case j.AttachmentType.region:var d=this.atlas.findRegion(c);if(!d)throw"Region not found in atlas: "+c+" ("+b+")";var e=new j.RegionAttachment(c);return e.rendererObject=d,e.setUVs(d.u,d.v,d.u2,d.v2,d.rotate),e.regionOffsetX=d.offsetX,e.regionOffsetY=d.offsetY,e.regionWidth=d.width,e.regionHeight=d.height,e.regionOriginalWidth=d.originalWidth,e.regionOriginalHeight=d.originalHeight,e}throw"Unknown attachment type: "+b}},j.Bone.yDown=!0,e.AnimCache={},e.Spine=function(a){if(e.DisplayObjectContainer.call(this),this.spineData=e.AnimCache[a],!this.spineData)throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: "+a);this.skeleton=new j.Skeleton(this.spineData),this.skeleton.updateWorldTransform(),this.stateData=new j.AnimationStateData(this.spineData),this.state=new j.AnimationState(this.stateData),this.slotContainers=[];for(var b=0,c=this.skeleton.drawOrder.length;c>b;b++){var d=this.skeleton.drawOrder[b],f=d.attachment,g=new e.DisplayObjectContainer;if(this.slotContainers.push(g),this.addChild(g),f instanceof j.RegionAttachment){var h=f.rendererObject.name,i=this.createSprite(d,f.rendererObject);d.currentSprite=i,d.currentSpriteName=h,g.addChild(i)}}},e.Spine.prototype=Object.create(e.DisplayObjectContainer.prototype),e.Spine.prototype.constructor=e.Spine,e.Spine.prototype.updateTransform=function(){this.lastTime=this.lastTime||Date.now();var a=.001*(Date.now()-this.lastTime);this.lastTime=Date.now(),this.state.update(a),this.state.apply(this.skeleton),this.skeleton.updateWorldTransform();for(var b=this.skeleton.drawOrder,c=0,d=b.length;d>c;c++){var f=b[c],g=f.attachment,h=this.slotContainers[c];if(g instanceof j.RegionAttachment){if(g.rendererObject&&(!f.currentSpriteName||f.currentSpriteName!=g.name)){var i=g.rendererObject.name;if(void 0!==f.currentSprite&&(f.currentSprite.visible=!1),f.sprites=f.sprites||{},void 0!==f.sprites[i])f.sprites[i].visible=!0;else{var k=this.createSprite(f,g.rendererObject);h.addChild(k)}f.currentSprite=f.sprites[i],f.currentSpriteName=i}h.visible=!0;var l=f.bone;h.position.x=l.worldX+g.x*l.m00+g.y*l.m01,h.position.y=l.worldY+g.x*l.m10+g.y*l.m11,h.scale.x=l.worldScaleX,h.scale.y=l.worldScaleY,h.rotation=-(f.bone.worldRotation*Math.PI/180)}else h.visible=!1}e.DisplayObjectContainer.prototype.updateTransform.call(this)},e.Spine.prototype.createSprite=function(a,b){var c=e.TextureCache[b.name]?b.name:b.name+".png",d=new e.Sprite(e.Texture.fromFrame(c));return d.scale=b.scale,d.rotation=b.rotation,d.anchor.x=d.anchor.y=.5,a.sprites=a.sprites||{},a.sprites[b.name]=d,d},e.BaseTextureCache={},e.texturesToUpdate=[],e.texturesToDestroy=[],e.BaseTexture=function(a,b){if(e.EventTarget.call(this),this.width=100,this.height=100,this.scaleMode=b||e.BaseTexture.SCALE_MODE.DEFAULT,this.hasLoaded=!1,this.source=a,a){if(this.source instanceof Image||this.source instanceof HTMLImageElement)if(this.source.complete)this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,e.texturesToUpdate.push(this);else{var c=this;this.source.onload=function(){c.hasLoaded=!0,c.width=c.source.width,c.height=c.source.height,e.texturesToUpdate.push(c),c.dispatchEvent({type:"loaded",content:c})}}else this.hasLoaded=!0,this.width=this.source.width,this.height=this.source.height,e.texturesToUpdate.push(this);this.imageUrl=null,this._powerOf2=!1,this._glTextures=[]}},e.BaseTexture.prototype.constructor=e.BaseTexture,e.BaseTexture.prototype.destroy=function(){this.source instanceof Image&&(this.imageUrl in e.BaseTextureCache&&delete e.BaseTextureCache[this.imageUrl],this.imageUrl=null,this.source.src=null),this.source=null,e.texturesToDestroy.push(this)},e.BaseTexture.prototype.updateSourceImage=function(a){this.hasLoaded=!1,this.source.src=null,this.source.src=a},e.BaseTexture.fromImage=function(a,b,c){var d=e.BaseTextureCache[a];if(!d){var f=new Image;b&&(f.crossOrigin=""),f.src=a,d=new e.BaseTexture(f,c),d.imageUrl=a,e.BaseTextureCache[a]=d}return d},e.BaseTexture.SCALE_MODE={DEFAULT:0,LINEAR:0,NEAREST:1},e.TextureCache={},e.FrameCache={},e.Texture=function(a,b){if(e.EventTarget.call(this),b||(this.noFrame=!0,b=new e.Rectangle(0,0,1,1)),a instanceof e.Texture&&(a=a.baseTexture),this.baseTexture=a,this.frame=b,this.trim=new e.Point,this.scope=this,a.hasLoaded)this.noFrame&&(b=new e.Rectangle(0,0,a.width,a.height)),this.setFrame(b);else{var c=this;a.addEventListener("loaded",function(){c.onBaseTextureLoaded()})}},e.Texture.prototype.constructor=e.Texture,e.Texture.prototype.onBaseTextureLoaded=function(){var a=this.baseTexture;a.removeEventListener("loaded",this.onLoaded),this.noFrame&&(this.frame=new e.Rectangle(0,0,a.width,a.height)),this.setFrame(this.frame),this.scope.dispatchEvent({type:"update",content:this})},e.Texture.prototype.destroy=function(a){a&&this.baseTexture.destroy()},e.Texture.prototype.setFrame=function(a){if(this.frame=a,this.width=a.width,this.height=a.height,a.x+a.width>this.baseTexture.width||a.y+a.height>this.baseTexture.height)throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.updateFrame=!0,e.Texture.frameUpdates.push(this)},e.Texture.prototype._updateWebGLuvs=function(){this._uvs||(this._uvs=new Float32Array(8));var a=this.frame,b=this.baseTexture.width,c=this.baseTexture.height;this._uvs[0]=a.x/b,this._uvs[1]=a.y/c,this._uvs[2]=(a.x+a.width)/b,this._uvs[3]=a.y/c,this._uvs[4]=(a.x+a.width)/b,this._uvs[5]=(a.y+a.height)/c,this._uvs[6]=a.x/b,this._uvs[7]=(a.y+a.height)/c},e.Texture.fromImage=function(a,b,c){var d=e.TextureCache[a];return d||(d=new e.Texture(e.BaseTexture.fromImage(a,b,c)),e.TextureCache[a]=d),d},e.Texture.fromFrame=function(a){var b=e.TextureCache[a];if(!b)throw new Error('The frameId "'+a+'" does not exist in the texture cache '+this);return b},e.Texture.fromCanvas=function(a,b){var c=new e.BaseTexture(a,b);return new e.Texture(c)},e.Texture.addTextureToCache=function(a,b){e.TextureCache[b]=a},e.Texture.removeTextureFromCache=function(a){var b=e.TextureCache[a];return e.TextureCache[a]=null,b},e.Texture.frameUpdates=[],e.Texture.SCALE_MODE=e.BaseTexture.SCALE_MODE,e.RenderTexture=function(a,b,c){if(e.EventTarget.call(this),this.width=a||100,this.height=b||100,this.indetityMatrix=e.mat3.create(),this.frame=new e.Rectangle(0,0,this.width,this.height),this.baseTexture=new e.BaseTexture,this.baseTexture.width=this.width,this.baseTexture.height=this.height,this.baseTexture._glTextures=[],this.baseTexture.hasLoaded=!0,this.renderer=c||e.defaultRenderer,this.renderer.type===e.WEBGL_RENDERER){var d=this.renderer.gl;this.textureBuffer=new e.FilterTexture(d,this.width,this.height),this.baseTexture._glTextures[d.id]=this.textureBuffer.texture,this.render=this.renderWebGL,this.projection=new e.Point(this.width/2,-this.height/2)}else this.render=this.renderCanvas,this.textureBuffer=new e.CanvasBuffer(this.width,this.height),this.baseTexture.source=this.textureBuffer.canvas;e.Texture.frameUpdates.push(this)},e.RenderTexture.prototype=Object.create(e.Texture.prototype),e.RenderTexture.prototype.constructor=e.RenderTexture,e.RenderTexture.prototype.resize=function(a,b){if(this.width=a,this.height=b,this.frame.width=this.width,this.frame.height=this.height,this.renderer.type===e.WEBGL_RENDERER){this.projection.x=this.width/2,this.projection.y=-this.height/2;var c=this.gl;c.bindTexture(c.TEXTURE_2D,this.baseTexture._glTextures[c.id]),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,this.width,this.height,0,c.RGBA,c.UNSIGNED_BYTE,null)}else this.textureBuffer.resize(this.width,this.height);e.Texture.frameUpdates.push(this)},e.RenderTexture.prototype.renderWebGL=function(a,b,c){var d=this.renderer.gl;d.colorMask(!0,!0,!0,!0),d.viewport(0,0,this.width,this.height),d.bindFramebuffer(d.FRAMEBUFFER,this.textureBuffer.frameBuffer),c&&this.textureBuffer.clear();var f=a.children,g=a.worldTransform;a.worldTransform=e.mat3.create(),a.worldTransform[4]=-1,a.worldTransform[5]=-2*this.projection.y,b&&(a.worldTransform[2]=b.x,a.worldTransform[5]-=b.y),e.visibleCount++,a.vcount=e.visibleCount;for(var h=0,i=f.length;i>h;h++)f[h].updateTransform();this.renderer.renderDisplayObject(a,this.projection),a.worldTransform=g},e.RenderTexture.prototype.renderCanvas=function(a,b,c){var d=a.children;a.worldTransform=e.mat3.create(),b&&(a.worldTransform[2]=b.x,a.worldTransform[5]=b.y);for(var f=0,g=d.length;g>f;f++)d[f].updateTransform();c&&this.textureBuffer.clear();var h=this.textureBuffer.context;this.renderer.renderDisplayObject(a,h),h.setTransform(1,0,0,1,0,0)},e.AssetLoader=function(a,b){e.EventTarget.call(this),this.assetURLs=a,this.crossorigin=b,this.loadersByType={jpg:e.ImageLoader,jpeg:e.ImageLoader,png:e.ImageLoader,gif:e.ImageLoader,json:e.JsonLoader,atlas:e.AtlasLoader,anim:e.SpineLoader,xml:e.BitmapFontLoader,fnt:e.BitmapFontLoader}},e.AssetLoader.prototype.constructor=e.AssetLoader,e.AssetLoader.prototype._getDataType=function(a){var b="data:",c=a.slice(0,b.length).toLowerCase();if(c===b){var d=a.slice(b.length),e=d.indexOf(",");if(-1===e)return null;var f=d.slice(0,e).split(";")[0];return f&&"text/plain"!==f.toLowerCase()?f.split("/").pop().toLowerCase():"txt"}return null},e.AssetLoader.prototype.load=function(){function a(){b.onAssetLoaded()}var b=this;this.loadCount=this.assetURLs.length;for(var c=0;c0){if(f===g)this.atlas.meta.image.push(a[g]),c=this.atlas.meta.image.length-1,this.atlas.frames.push({}),b=-3;else if(b>0)if(b%7===1)null!=d&&(this.atlas.frames[c][d.name]=d),d={name:a[g],frame:{}};else{var j=a[g].split(" ");if(b%7===3)d.frame.x=Number(j[1].replace(",","")),d.frame.y=Number(j[2]);else if(b%7===4)d.frame.w=Number(j[1].replace(",","")),d.frame.h=Number(j[2]);else if(b%7===5){var k={x:0,y:0,w:Number(j[1].replace(",","")),h:Number(j[2])};k.w>d.frame.w||k.h>d.frame.h?(d.trimmed=!0,d.realSize=k):d.trimmed=!1}}b++}if(null!=d&&(this.atlas.frames[c][d.name]=d),this.atlas.meta.image.length>0){for(this.images=[],h=0;hthis.currentImageId?(this.currentImageId++,this.images[this.currentImageId].load()):(this.loaded=!0,this.dispatchEvent({type:"loaded",content:this}))},e.AtlasLoader.prototype.onError=function(){this.dispatchEvent({type:"error",content:this})},e.SpriteSheetLoader=function(a,b){e.EventTarget.call(this),this.url=a,this.crossorigin=b,this.baseUrl=a.replace(/[^\/]*$/,""),this.texture=null,this.frames={}},e.SpriteSheetLoader.prototype.constructor=e.SpriteSheetLoader,e.SpriteSheetLoader.prototype.load=function(){var a=this,b=new e.JsonLoader(this.url,this.crossorigin);b.addEventListener("loaded",function(b){a.json=b.content.json,a.onJSONLoaded()}),b.load()},e.SpriteSheetLoader.prototype.onJSONLoaded=function(){var a=this,b=this.baseUrl+this.json.meta.image,c=new e.ImageLoader(b,this.crossorigin),d=this.json.frames;this.texture=c.texture.baseTexture,c.addEventListener("loaded",function(){a.onLoaded()});for(var f in d){var g=d[f].frame;g&&(e.TextureCache[f]=new e.Texture(this.texture,{x:g.x,y:g.y,width:g.w,height:g.h}),d[f].trimmed&&(e.TextureCache[f].realSize=d[f].spriteSourceSize,e.TextureCache[f].trim.x=0))}c.load()},e.SpriteSheetLoader.prototype.onLoaded=function(){this.dispatchEvent({type:"loaded",content:this})},e.ImageLoader=function(a,b){e.EventTarget.call(this),this.texture=e.Texture.fromImage(a,b),this.frames=[]},e.ImageLoader.prototype.constructor=e.ImageLoader,e.ImageLoader.prototype.load=function(){if(this.texture.baseTexture.hasLoaded)this.onLoaded();else{var a=this;this.texture.baseTexture.addEventListener("loaded",function(){a.onLoaded()})}},e.ImageLoader.prototype.onLoaded=function(){this.dispatchEvent({type:"loaded",content:this})},e.ImageLoader.prototype.loadFramedSpriteSheet=function(a,b,c){this.frames=[];for(var d=Math.floor(this.texture.width/a),f=Math.floor(this.texture.height/b),g=0,h=0;f>h;h++)for(var i=0;d>i;i++,g++){var j=new e.Texture(this.texture,{x:i*a,y:h*b,width:a,height:b});this.frames.push(j),c&&(e.TextureCache[c+"-"+g]=j)}if(this.texture.baseTexture.hasLoaded)this.onLoaded();else{var k=this;this.texture.baseTexture.addEventListener("loaded",function(){k.onLoaded()})}},e.BitmapFontLoader=function(a,b){e.EventTarget.call(this),this.url=a,this.crossorigin=b,this.baseUrl=a.replace(/[^\/]*$/,""),this.texture=null},e.BitmapFontLoader.prototype.constructor=e.BitmapFontLoader,e.BitmapFontLoader.prototype.load=function(){this.ajaxRequest=new XMLHttpRequest;var a=this;this.ajaxRequest.onreadystatechange=function(){a.onXMLLoaded()},this.ajaxRequest.open("GET",this.url,!0),this.ajaxRequest.overrideMimeType&&this.ajaxRequest.overrideMimeType("application/xml"),this.ajaxRequest.send(null)},e.BitmapFontLoader.prototype.onXMLLoaded=function(){if(4===this.ajaxRequest.readyState&&(200===this.ajaxRequest.status||-1===window.location.protocol.indexOf("http"))){var a=this.baseUrl+this.ajaxRequest.responseXML.getElementsByTagName("page")[0].attributes.getNamedItem("file").nodeValue,b=new e.ImageLoader(a,this.crossorigin);this.texture=b.texture.baseTexture;var c={},d=this.ajaxRequest.responseXML.getElementsByTagName("info")[0],f=this.ajaxRequest.responseXML.getElementsByTagName("common")[0];c.font=d.attributes.getNamedItem("face").nodeValue,c.size=parseInt(d.attributes.getNamedItem("size").nodeValue,10),c.lineHeight=parseInt(f.attributes.getNamedItem("lineHeight").nodeValue,10),c.chars={};for(var g=this.ajaxRequest.responseXML.getElementsByTagName("char"),h=0;h
- API Docs for: 1.3.0 + API Docs for: 1.4.0
@@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -213,7 +215,7 @@ If you want to make a custom filter this should be your base class.

  • - unifroms + uniforms
  • @@ -246,7 +248,7 @@ If you want to make a custom filter this should be your base class.

    - src/pixi/filters/AbstractFilter.js:6 + src/pixi/filters/AbstractFilter.js:5

    @@ -283,7 +285,7 @@ If you want to make a custom filter this should be your base class.

  • - unifroms + uniforms Object @@ -387,7 +389,7 @@ If you want to make a custom filter this should be your base class.

    - src/pixi/filters/AbstractFilter.js:16 + src/pixi/filters/AbstractFilter.js:15

    diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 49df281..846fece 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -19,7 +19,7 @@
  • - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -202,8 +204,8 @@

    A Class that loads a bunch of images / sprite sheet / bitmap font files. Once the assets have been loaded they are added to the PIXI Texture cache and can be accessed easily through PIXI.Texture.fromImage() and PIXI.Sprite.fromImage() -When all items have been loaded this class will dispatch a "onLoaded" event -As each individual item is loaded this class will dispatch a "onProgress" event

    +When all items have been loaded this class will dispatch a 'onLoaded' event +As each individual item is loaded this class will dispatch a 'onProgress' event

    @@ -288,9 +290,9 @@ As each individual item is loaded this class will dispatch a "onProgress&qu

    an array of image/sprite sheet urls that you would like loaded - supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported - sprite sheet data formats only include "JSON" at this time. Supported bitmap font - data formats include "xml" and "fnt".

    + supported. Supported image formats include 'jpeg', 'jpg', 'png', 'gif'. Supported + sprite sheet data formats only include 'JSON' at this time. Supported bitmap font + data formats include 'xml' and 'fnt'.

    @@ -464,7 +466,7 @@ As each individual item is loaded this class will dispatch a "onProgress&qu - src/pixi/loaders/AssetLoader.js:74 + src/pixi/loaders/AssetLoader.js:101

    @@ -521,7 +523,7 @@ As each individual item is loaded this class will dispatch a "onProgress&qu - src/pixi/loaders/AssetLoader.js:104 + src/pixi/loaders/AssetLoader.js:137

    @@ -720,7 +722,7 @@ As each individual item is loaded this class will dispatch a "onProgress&qu - src/pixi/loaders/AssetLoader.js:66 + src/pixi/loaders/AssetLoader.js:65

    @@ -764,7 +766,7 @@ As each individual item is loaded this class will dispatch a "onProgress&qu - src/pixi/loaders/AssetLoader.js:61 + src/pixi/loaders/AssetLoader.js:60

    diff --git a/docs/classes/AtlasLoader.html b/docs/classes/AtlasLoader.html new file mode 100644 index 0000000..d1969e5 --- /dev/null +++ b/docs/classes/AtlasLoader.html @@ -0,0 +1,367 @@ + + + + + AtlasLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    AtlasLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The atlas file loader is used to load in Atlas data and parsing it +When loaded this class will dispatch a 'loaded' event +If load failed this class will dispatch a 'error' event

    + +
    + + +
    +

    Constructor

    +
    +

    AtlasLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/AtlasLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      + +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 928fb1b..3143731 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -325,6 +327,13 @@ + + +
  • + destroy + + +
  • @@ -358,6 +367,13 @@ +
  • + +
  • + scaleMode + + +
  • @@ -420,7 +436,7 @@ - src/pixi/textures/BaseTexture.js:99 + src/pixi/textures/BaseTexture.js:113

    @@ -440,6 +456,60 @@ +
  • + + +
    +

    destroy

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:131 + +

    + + + + + +
    + +
    + +
    + + + + + +
    @@ -491,7 +561,7 @@ - src/pixi/textures/BaseTexture.js:114 + src/pixi/textures/BaseTexture.js:144

    @@ -582,7 +652,7 @@ If the image is not in the base texture cache it will be created and loaded

    - src/pixi/textures/BaseTexture.js:39 + src/pixi/textures/BaseTexture.js:47

    @@ -646,6 +716,53 @@ If the image is not in the base texture cache it will be created and loaded

    + + + +
    +

    scaleMode

    + PIXI.BaseTexture.SCALE_MODE + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/textures/BaseTexture.js:39 + +

    + + + + +
    + +
    +

    The scale mode to apply when scaling this texture

    + +
    + + +

    Default: PIXI.BaseTexture.SCALE_MODE.LINEAR

    + + + + +
    @@ -672,7 +789,7 @@ If the image is not in the base texture cache it will be created and loaded

    - src/pixi/textures/BaseTexture.js:48 + src/pixi/textures/BaseTexture.js:56

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 1043fc4..ac81380 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -199,10 +201,10 @@
    -

    The xml loader is used to load in XML bitmap font data ("xml" or "fnt") +

    The xml loader is used to load in XML bitmap font data ('xml' or 'fnt') To generate the data you can use http://www.angelcode.com/products/bmfont/ This loader will also load the image file as the data. -When loaded this class will dispatch a "loaded" event

    +When loaded this class will dispatch a 'loaded' event

    diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 022ac9e..e006905 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -194,7 +196,7 @@
    -

    A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" +

    A Text Object will create a line(s) of text using bitmap font. To split a line you can use '\n', '\r' or '\r\n' You can generate the fnt files using http://www.angelcode.com/products/bmfont/ for windows or http://www.bmglyph.com/ for mac.

    @@ -311,7 +313,7 @@ You can generate the fnt files using
    -

    The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously)

    +

    The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously)

    @@ -320,13 +322,13 @@ You can generate the fnt files using
  • - [align="left"] + [align='left'] String optional
    -

    An alignment of the multiline text ("left", "center" or "right")

    +

    An alignment of the multiline text ('left', 'center' or 'right')

    @@ -572,6 +574,13 @@ You can generate the fnt files using +
  • + +
  • + height + + +
  • @@ -656,6 +665,13 @@ You can generate the fnt files using +
  • + +
  • + width + + +
  • @@ -725,7 +741,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -817,7 +833,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -919,7 +935,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -1004,7 +1020,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1090,7 +1106,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1175,7 +1191,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1260,7 +1276,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1345,7 +1361,7 @@ You can generate the fnt files using - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1431,7 +1447,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1517,7 +1533,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1605,7 +1621,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1696,7 +1712,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/text/BitmapText.js:46 + src/pixi/text/BitmapText.js:45

    @@ -1740,7 +1756,7 @@ Instead of using this function you can now simply set the interactive property t
    -

    The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously)

    +

    The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously)

    @@ -1749,13 +1765,13 @@ Instead of using this function you can now simply set the interactive property t
  • - [align="left"] + [align='left'] String optional
    -

    An alignment of the multiline text ("left", "center" or "right")

    +

    An alignment of the multiline text ('left', 'center' or 'right')

    @@ -1818,7 +1834,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/text/BitmapText.js:34 + src/pixi/text/BitmapText.js:33

    @@ -1912,7 +1928,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -1942,7 +1958,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1957,7 +1973,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2012,7 +2028,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2098,7 +2114,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2183,7 +2199,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -2269,7 +2285,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2349,7 +2365,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/text/BitmapText.js:67 + src/pixi/text/BitmapText.js:66

    @@ -2406,7 +2422,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/text/BitmapText.js:142 + src/pixi/text/BitmapText.js:141

    @@ -2629,7 +2645,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2673,7 +2689,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2715,7 +2731,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2725,9 +2741,53 @@ for this callback to be fired, The touch must have started over the sprite

  • -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    + +
    + + + + + + +
    + + +
    +

    height

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:50 + +

    + + + + +
    + +
    +

    The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    @@ -2802,7 +2862,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -2848,7 +2908,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -2890,7 +2950,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -3247,6 +3307,48 @@ To remove a mask, set this property to null.

    +
    + + +
    +

    width

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:32 + +

    + + + + +
    + +
    +

    The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    @@ -3314,7 +3416,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/BlurFilter.html b/docs/classes/BlurFilter.html index d168b03..69b02d8 100644 --- a/docs/classes/BlurFilter.html +++ b/docs/classes/BlurFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -190,7 +192,7 @@
    -

    The BlurFilter applies a Gaussian blur to an object. +

    The BlurFilter applies a Gaussian blur to an object. The strength of the blur can be set for x- and y-axis separately (always relative to the stage).

    @@ -281,7 +283,7 @@ - src/pixi/filters/BlurFilter.js:24 + src/pixi/filters/BlurFilter.js:21

    @@ -328,7 +330,7 @@ - src/pixi/filters/BlurFilter.js:40 + src/pixi/filters/BlurFilter.js:37

    @@ -375,7 +377,7 @@ - src/pixi/filters/BlurFilter.js:56 + src/pixi/filters/BlurFilter.js:53

    diff --git a/docs/classes/CanvasGraphics.html b/docs/classes/CanvasGraphics.html index 252ac5e..d27a00f 100644 --- a/docs/classes/CanvasGraphics.html +++ b/docs/classes/CanvasGraphics.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -340,7 +342,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:204 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:207

    @@ -453,7 +455,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:272 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:276

    @@ -566,7 +568,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:463 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:486

    @@ -679,7 +681,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:139 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:143

    @@ -792,7 +794,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:15 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:15

    @@ -899,7 +901,7 @@ - src/pixi/renderers/webgl/WebGLGraphics.js:87 + src/pixi/renderers/webgl/utils/WebGLGraphics.js:89

    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index 4baa9ad..ace7aa5 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -258,7 +260,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:6 + src/pixi/renderers/canvas/CanvasRenderer.js:5

    @@ -404,13 +406,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - - -
  • - renderTilingSprite - - -
  • @@ -514,7 +509,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:66 + src/pixi/renderers/canvas/CanvasRenderer.js:111

    @@ -605,7 +600,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:129 + src/pixi/renderers/canvas/CanvasRenderer.js:172

    @@ -696,7 +691,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:320 + src/pixi/renderers/canvas/CanvasRenderer.js:223

    @@ -787,7 +782,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:250 + src/pixi/renderers/canvas/CanvasRenderer.js:189

    @@ -831,97 +826,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    -
  • - - -
    -

    renderTilingSprite

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/canvas/CanvasRenderer.js:287 - -

    - - - - - -
    - -
    -

    Renders a tiling sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - TilingSprite - - - - -
      -

      The tilingsprite to render

      - -
      - - -
    • - -
    -
    - - - - -
    @@ -973,7 +877,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:113 + src/pixi/renderers/canvas/CanvasRenderer.js:156

    @@ -1067,7 +971,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:47 + src/pixi/renderers/canvas/CanvasRenderer.js:71

    @@ -1112,7 +1016,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:30 + src/pixi/renderers/canvas/CanvasRenderer.js:54

    @@ -1159,7 +1063,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:39 + src/pixi/renderers/canvas/CanvasRenderer.js:63

    @@ -1204,7 +1108,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/canvas/CanvasRenderer.js:21 + src/pixi/renderers/canvas/CanvasRenderer.js:45

    diff --git a/docs/classes/Circle.html b/docs/classes/Circle.html index 5558388..f4d13c5 100644 --- a/docs/classes/Circle.html +++ b/docs/classes/Circle.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/ColorMatrixFilter.html b/docs/classes/ColorMatrixFilter.html index babe305..11148fe 100644 --- a/docs/classes/ColorMatrixFilter.html +++ b/docs/classes/ColorMatrixFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -190,8 +192,8 @@
    -

    The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA - color and alpha values of every pixel on your displayObject to produce a result +

    The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA + color and alpha values of every pixel on your displayObject to produce a result with a new set of RGBA color and alpha values. Its pretty powerful!

    diff --git a/docs/classes/ColorStepFilter.html b/docs/classes/ColorStepFilter.html new file mode 100644 index 0000000..4eb88d8 --- /dev/null +++ b/docs/classes/ColorStepFilter.html @@ -0,0 +1,317 @@ + + + + + ColorStepFilter - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    ColorStepFilter Class

    +
    + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    This turns your displayObjects to black and white.

    + +
    + + + +
    + + +
    +
    +

    Item Index

    + + + + +
    +

    Properties

    + +
      + +
    • + step + + + +
    • + +
    +
    + + + + + +
    + + + + +
    +

    Properties

    + + +
    +

    step

    + Unknown + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/filters/ColorStepFilter.js:40 + +

    + + + + +
    + +
    +

    The number of steps.

    + +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html deleted file mode 100644 index 5b50c47..0000000 --- a/docs/classes/CustomRenderable.html +++ /dev/null @@ -1,2648 +0,0 @@ - - - - - CustomRenderable - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    CustomRenderable Class

    -
    - - - -
    - Extends DisplayObject -
    - - - - - - - - - Module: PIXI - - - - -
    - - - -
    -

    This object is one that will allow you to specify custom rendering functions based on render type

    - -
    - - -
    -

    Constructor

    -
    -

    CustomRenderable

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/CustomRenderable.js:6 - -

    - - - - - -
    - -
    - -
    - - - - - - -
    - -
    - - -
    - - -
    -
    -

    Item Index

    - - -
    -

    Methods

    - - -
    - - - -
    -

    Properties

    - - -
    - - - - - -
    - - -
    -

    Methods

    - - -
    -

    click

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:174 - -

    - - - - - -
    - -
    -

    A callback that is used when the users clicks on the displayObject with their mouse

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    initWebGL

    - - -
    - (
      - -
    • - - renderer - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/CustomRenderable.js:35 - -

    - - - - - -
    - -
    -

    If this object is being rendered by a WebGLRenderer it will call this callback to initialize

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - renderer - WebGLRenderer - - - - -
      -

      The renderer instance

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mousedown

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:180 - -

    - - - - - -
    - -
    -

    A callback that is used when the user clicks the mouse down over the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseout

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:206 - -

    - - - - - -
    - -
    -

    A callback that is used when the users mouse leaves the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseover

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:200 - -

    - - - - - -
    - -
    -

    A callback that is used when the users mouse rolls over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseup

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:186 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the mouse that was over the displayObject -for this callback to be fired the mouse must have been pressed down over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseupoutside

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:193 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject -for this callback to be fired, The touch must have started over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderCanvas

    - - -
    - (
      - -
    • - - renderer - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/CustomRenderable.js:24 - -

    - - - - - -
    - -
    -

    If this object is being rendered by a CanvasRenderer it will call this callback

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - renderer - CanvasRenderer - - - - -
      -

      The renderer instance

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderWebGL

    - - -
    - (
      - -
    • - - renderer - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/CustomRenderable.js:46 - -

    - - - - - -
    - -
    -

    If this object is being rendered by a WebGLRenderer it will call this callback

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - renderer - WebGLRenderer - - - - -
      -

      The renderer instance

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    setInteractive

    - - -
    - (
      - -
    • - - interactive - -
    • - -
    ) -
    - - - - - - deprecated - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:247 - -

    - - - -

    Deprecated: Simply set the `interactive` property directly

    - - - -
    - -
    -

    [Deprecated] Indicates if the sprite will have touch and mouse interactivity. It is false by default -Instead of using this function you can now simply set the interactive property to true or false

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactive - Boolean - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    tap

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:217 - -

    - - - - - -
    - -
    -

    A callback that is used when the users taps on the sprite with their finger -basically a touch version of click

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchend

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:230 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases a touch over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchendoutside

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:236 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the touch that was over the displayObject -for this callback to be fired, The touch must have started over the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchstart

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:224 - -

    - - - - - -
    - -
    -

    A callback that is used when the user touch's over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    - - - -
    -

    Properties

    - - -
    -

    _interactive

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:115 - -

    - - - - -
    - -
    -

    [read-only] Whether or not the object is interactive, do not toggle directly! use the interactive property

    - -
    - - - - - - -
    - - -
    -

    alpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:47 - -

    - - - - -
    - -
    -

    The opacity of the object.

    - -
    - - - - - - -
    - - -
    -

    buttonMode

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:72 - -

    - - - - -
    - -
    -

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    - -
    - - - - - - -
    - - -
    -

    color

    - Array<> - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:145 - -

    - - - - -
    - -
    -

    [NYI] Unkown

    - -
    - - - - - - -
    - - -
    -

    dynamic

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:154 - -

    - - - - -
    - -
    -

    [NYI] Holds whether or not this object is dynamic, for rendering optimization

    - -
    - - - - - - -
    - - -
    -

    filters

    - Array An array of filters - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:318 - -

    - - - - -
    - -
    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    - -
    - - - - - - -
    - - -
    -

    hitArea

    - Rectangle | Circle | Ellipse | Polygon - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:63 - -

    - - - - -
    - -
    -

    This is the defined area that will pick up mouse / touch events. It is null by default. -Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    - -
    - - - - - - -
    - - -
    -

    interactive

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:260 - -

    - - - - -
    - -
    -

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    - -
    - - -

    Default: false

    - - - - - -
    - - -
    -

    localTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:135 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object locally

    - -
    - - - - - - -
    - - -
    -

    mask

    - Graphics - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:280 - -

    - - - - -
    - -
    -

    Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it. -In PIXI a regular mask must be a PIXI.Ggraphics object. This allows for much faster masking in canvas as it utilises shape clipping. -To remove a mask, set this property to null.

    - -
    - - - - - - -
    - - -
    -

    parent

    - DisplayObjectContainer - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:88 - -

    - - - - -
    - -
    -

    [read-only] The display object container that contains this display object.

    - -
    - - - - - - -
    - - -
    -

    pivot

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:31 - -

    - - - - -
    - -
    -

    The pivot point of the displayObject that it rotates around

    - -
    - - - - - - -
    - - -
    -

    position

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:15 - -

    - - - - -
    - -
    -

    The coordinate of the object relative to the local coordinates of the parent.

    - -
    - - - - - - -
    - - -
    -

    renderable

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:80 - -

    - - - - -
    - -
    -

    Can this object be rendered

    - -
    - - - - - - -
    - - -
    -

    rotation

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:39 - -

    - - - - -
    - -
    -

    The rotation of the object in radians.

    - -
    - - - - - - -
    - - -
    -

    scale

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:23 - -

    - - - - -
    - -
    -

    The scale factor of the object.

    - -
    - - - - - - -
    - - -
    -

    stage

    - Stage - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:97 - -

    - - - - -
    - -
    -

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    - -
    - - - - - - -
    - - -
    -

    visible

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:55 - -

    - - - - -
    - -
    -

    The visibility of the object.

    - -
    - - - - - - -
    - - -
    -

    worldAlpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:106 - -

    - - - - -
    - -
    -

    [read-only] The multiplied alpha of the displayobject

    - -
    - - - - - - -
    - - -
    -

    worldTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:125 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object based on world (parent) factors

    - -
    - - - - - - -
    - - -
    - - - - - -
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/classes/DisplacementFilter.html b/docs/classes/DisplacementFilter.html index 753b93b..89afcc3 100644 --- a/docs/classes/DisplacementFilter.html +++ b/docs/classes/DisplacementFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -190,7 +192,7 @@
    -

    The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object. +

    The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object. You can use this filter to apply all manor of crazy warping effects Currently the r property of the texture is used offset the x and the g propery of the texture is used to offset the y.

    @@ -282,7 +284,7 @@ - src/pixi/filters/DisplacementFilter.js:92 + src/pixi/filters/DisplacementFilter.js:86

    @@ -327,7 +329,7 @@ - src/pixi/filters/DisplacementFilter.js:122 + src/pixi/filters/DisplacementFilter.js:116

    @@ -372,7 +374,7 @@ - src/pixi/filters/DisplacementFilter.js:107 + src/pixi/filters/DisplacementFilter.js:101

    diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index adecad4..0c801ec 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -562,7 +564,7 @@ - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -650,7 +652,7 @@ - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -738,7 +740,7 @@ - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -826,7 +828,7 @@ - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -914,7 +916,7 @@ - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1003,7 +1005,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1094,7 +1096,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1185,7 +1187,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -1274,7 +1276,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -1362,7 +1364,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -1451,7 +1453,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -1667,7 +1669,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -1714,7 +1716,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -1759,7 +1761,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -1769,9 +1771,11 @@ for this callback to be fired, The touch must have started over the sprite

    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    @@ -1852,7 +1856,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -1901,7 +1905,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -1946,7 +1950,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -2400,7 +2404,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index 10e4c76..b0a9f66 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -453,6 +455,13 @@ It is the base class of all display objects that act as a container for other ob + + +
  • + height + + +
  • @@ -537,6 +546,13 @@ It is the base class of all display objects that act as a container for other ob +
  • + +
  • + width + + +
  • @@ -609,7 +625,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -704,7 +720,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -806,7 +822,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -894,7 +910,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -980,7 +996,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1065,7 +1081,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1150,7 +1166,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1235,7 +1251,7 @@ It is the base class of all display objects that act as a container for other ob - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1321,7 +1337,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1410,7 +1426,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1498,7 +1514,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1597,7 +1613,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -1697,7 +1713,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -1783,7 +1799,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -1868,7 +1884,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -1954,7 +1970,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2203,7 +2219,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2247,7 +2263,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2289,7 +2305,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2299,9 +2315,56 @@ for this callback to be fired, The touch must have started over the sprite

  • -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    + +
    + + + + + + + + + +
    +

    height

    + Number + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/display/DisplayObjectContainer.js:50 + +

    + + + + +
    + +
    +

    The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    @@ -2376,7 +2439,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -2422,7 +2485,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -2464,7 +2527,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -2821,6 +2884,51 @@ To remove a mask, set this property to null.

    +
    + + +
    +

    width

    + Number + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/display/DisplayObjectContainer.js:32 + +

    + + + + +
    + +
    +

    The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    @@ -2888,7 +2996,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/Ellipse.html b/docs/classes/Ellipse.html index 7fbc4b1..f3b146a 100644 --- a/docs/classes/Ellipse.html +++ b/docs/classes/Ellipse.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/EventTarget.html b/docs/classes/EventTarget.html index a25d62d..f94e5a3 100644 --- a/docs/classes/EventTarget.html +++ b/docs/classes/EventTarget.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/Graphics.html b/docs/classes/Graphics.html index 21894e6..a3f0b0c 100644 --- a/docs/classes/Graphics.html +++ b/docs/classes/Graphics.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -538,6 +540,13 @@ Complex polys will not be filled. Heres an example of a complex poly: + height + + +
  • @@ -636,6 +645,13 @@ Complex polys will not be filled. Heres an example of a complex poly: + width + + +
  • @@ -705,7 +721,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -797,7 +813,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -908,7 +924,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:123 + src/pixi/primitives/Graphics.js:129

    @@ -1004,7 +1020,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:211 + src/pixi/primitives/Graphics.js:220

    @@ -1066,7 +1082,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -1166,7 +1182,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:170 + src/pixi/primitives/Graphics.js:177

    @@ -1305,7 +1321,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:190 + src/pixi/primitives/Graphics.js:198

    @@ -1456,7 +1472,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:150 + src/pixi/primitives/Graphics.js:157

    @@ -1582,7 +1598,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:138 + src/pixi/primitives/Graphics.js:145

    @@ -1644,7 +1660,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1745,7 +1761,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:68 + src/pixi/primitives/Graphics.js:74

    @@ -1872,7 +1888,7 @@ Complex polys will not be filled. Heres an example of a complex poly: src/pixi/primitives/Graphics.js:109 + src/pixi/primitives/Graphics.js:115

    @@ -1975,7 +1991,7 @@ the current drawing position is then set to (x, y).

    - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -2060,7 +2076,7 @@ the current drawing position is then set to (x, y).

    - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -2145,7 +2161,7 @@ the current drawing position is then set to (x, y).

    - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -2230,7 +2246,7 @@ the current drawing position is then set to (x, y).

    - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -2316,7 +2332,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -2411,7 +2427,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/primitives/Graphics.js:90 + src/pixi/primitives/Graphics.js:96

    @@ -2513,7 +2529,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -2601,7 +2617,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -2697,7 +2713,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -2727,7 +2743,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2742,7 +2758,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2797,7 +2813,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2883,7 +2899,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2968,7 +2984,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -3054,7 +3070,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -3300,7 +3316,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -3347,7 +3363,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/primitives/Graphics.js:54 + src/pixi/primitives/Graphics.js:58

    @@ -3391,7 +3407,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -3478,7 +3494,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -3488,9 +3504,11 @@ for this callback to be fired, The touch must have started over the sprite

  • -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    @@ -3546,6 +3564,48 @@ To remove filters simply set this property to 'null'

    + + + +
    +

    height

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:50 + +

    + + + + +
    + +
    +

    The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    @@ -3612,7 +3672,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -3748,7 +3808,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -3790,7 +3850,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -4147,6 +4207,48 @@ To remove a mask, set this property to null.

    + + + +
    +

    width

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:32 + +

    + + + + +
    + +
    +

    The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    @@ -4214,7 +4316,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/GreyFilter.html b/docs/classes/GrayFilter.html similarity index 89% rename from docs/classes/GreyFilter.html rename to docs/classes/GrayFilter.html index 4f47931..d34239e 100644 --- a/docs/classes/GreyFilter.html +++ b/docs/classes/GrayFilter.html @@ -2,7 +2,7 @@ - GreyFilter - Pixi.JS + GrayFilter - Pixi.JS @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -166,7 +168,7 @@
    -

    GreyFilter Class

    +

    GrayFilter Class

    @@ -174,7 +176,7 @@ @@ -221,7 +223,7 @@
    • - grey + gray @@ -243,8 +245,8 @@

      Properties

      -
      -

      grey

      +
      +

      gray

      Unknown @@ -266,7 +268,7 @@ - src/pixi/filters/GreyFilter.js:40 + src/pixi/filters/GrayFilter.js:40

      @@ -276,7 +278,7 @@
      -

      The strength of the grey. 1 will make the object black and white, 0 will make the object its normal color

      +

      The strength of the gray. 1 will make the object black and white, 0 will make the object its normal color

      diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index d2ef76d..e05c328 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -19,7 +19,7 @@
      - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -199,7 +201,7 @@
    -

    The image loader class is responsible for loading images file formats ("jpeg", "jpg", "png" and "gif") +

    The image loader class is responsible for loading images file formats ('jpeg', 'jpg', 'png' and 'gif') Once the image has been loaded it is stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() When loaded this class will dispatch a 'loaded' event

    diff --git a/docs/classes/InvertFilter.html b/docs/classes/InvertFilter.html index d2184c7..a4d973b 100644 --- a/docs/classes/InvertFilter.html +++ b/docs/classes/InvertFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html index c5c510b..2f1ff37 100644 --- a/docs/classes/JsonLoader.html +++ b/docs/classes/JsonLoader.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -200,8 +202,8 @@

    The json file loader is used to load in JSON data and parsing it -When loaded this class will dispatch a "loaded" event -If load failed this class will dispatch a "error" event

    +When loaded this class will dispatch a 'loaded' event +If load failed this class will dispatch a 'error' event

    @@ -513,7 +515,7 @@ If load failed this class will dispatch a "error" event

    - src/pixi/loaders/JsonLoader.js:154 + src/pixi/loaders/JsonLoader.js:164

    @@ -627,7 +629,7 @@ If load failed this class will dispatch a "error" event

    - src/pixi/loaders/JsonLoader.js:140 + src/pixi/loaders/JsonLoader.js:150

    diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 90a28a9..a39c0a7 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -172,7 +174,7 @@
    - Extends Sprite + Extends Sprite
    @@ -315,34 +317,6 @@ @@ -481,74 +355,11 @@ @@ -740,371 +418,6 @@

    Methods

    -
    -

    addChild

    - - -
    - (
      - -
    • - - child - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:32 - -

    - - - - - -
    - -
    -

    Adds a child to the container.

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - child - DisplayObject - - - - -
      -

      The DisplayObject to add to the container

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    addChildAt

    - - -
    - (
      - -
    • - - child - -
    • - -
    • - - index - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:120 - -

    - - - - - -
    - -
    -

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - child - DisplayObject - - - - -
      -

      The child to add

      - -
      - - -
    • - -
    • - - index - Number - - - - -
      -

      The index to place the child in

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    click

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:174 - -

    - - - - - -
    - -
    -

    A callback that is used when the users clicks on the displayObject with their mouse

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    getChildAt

    - - -
    - (
      - -
    • - - index - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:256 - -

    - - - - - -
    - -
    -

    Returns the Child at the specified index

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - index - Number - - - - -
      -

      The index to get the child from

      - -
      - - -
    • - -
    -
    - - - - - -
    - -

    gotoAndPlay

    @@ -1280,520 +593,6 @@ -
    - - -
    -

    mousedown

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:180 - -

    - - - - - -
    - -
    -

    A callback that is used when the user clicks the mouse down over the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseout

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:206 - -

    - - - - - -
    - -
    -

    A callback that is used when the users mouse leaves the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseover

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:200 - -

    - - - - - -
    - -
    -

    A callback that is used when the users mouse rolls over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseup

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:186 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the mouse that was over the displayObject -for this callback to be fired the mouse must have been pressed down over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    mouseupoutside

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:193 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject -for this callback to be fired, The touch must have started over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    onTextureUpdate

    - - -
    - (
      - -
    • - - event - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:145 - -

    - - - - - -
    - -
    -

    When the texture is updated, this event will fire to update the scale and frame

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - event - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - -
    @@ -1849,268 +648,6 @@ for this callback to be fired, The touch must have started over the displayObjec -
    - - -
    -

    removeChild

    - - -
    - (
      - -
    • - - child - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:274 - -

    - - - - - -
    - -
    -

    Removes a child from the container.

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - child - DisplayObject - - - - -
      -

      The DisplayObject to remove

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    setInteractive

    - - -
    - (
      - -
    • - - interactive - -
    • - -
    ) -
    - - - - - - deprecated - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:247 - -

    - - - -

    Deprecated: Simply set the `interactive` property directly

    - - - -
    - -
    -

    [Deprecated] Indicates if the sprite will have touch and mouse interactivity. It is false by default -Instead of using this function you can now simply set the interactive property to true or false

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactive - Boolean - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    setTexture

    - - -
    - (
      - -
    • - - texture - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:118 - -

    - - - - - -
    - -
    -

    Sets the texture of the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - texture - Texture - - - - -
      -

      The PIXI texture that is displayed by the sprite

      - -
      - - -
    • - -
    -
    - - - - -
    @@ -2166,456 +703,6 @@ Instead of using this function you can now simply set the interactive property t -
    - - -
    -

    swapChildren

    - - -
    - (
      - -
    • - - child - -
    • - -
    • - - child2 - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:207 - -

    - - - - - -
    - -
    -

    [NYI] Swaps the depth of 2 displayObjects

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    -

    tap

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:217 - -

    - - - - - -
    - -
    -

    A callback that is used when the users taps on the sprite with their finger -basically a touch version of click

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchend

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:230 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases a touch over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchendoutside

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:236 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the touch that was over the displayObject -for this callback to be fired, The touch must have started over the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchstart

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:224 - -

    - - - - - -
    - -
    -

    A callback that is used when the user touch's over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - -
    @@ -2627,225 +714,6 @@ for this callback to be fired, The touch must have started over the sprite

    Properties

    -
    -

    _height

    - Number - - - - - private - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:60 - -

    - - - - -
    - -
    -

    The height of the sprite (this is initially set by the texture)

    - -
    - - - - - - -
    - - -
    -

    _interactive

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:115 - -

    - - - - -
    - -
    -

    [read-only] Whether or not the object is interactive, do not toggle directly! use the interactive property

    - -
    - - - - - - -
    - - -
    -

    _width

    - Number - - - - - private - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:51 - -

    - - - - -
    - -
    -

    The width of the sprite (this is initially set by the texture)

    - -
    - - - - - - -
    - - -
    -

    alpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:47 - -

    - - - - -
    - -
    -

    The opacity of the object.

    - -
    - - - - - - -
    - - -
    -

    anchor

    - Point - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:23 - -

    - - - - -
    - -
    -

    The anchor sets the origin point of the texture. -The default is 0,0 this means the textures origin is the top left -Setting than anchor to 0.5,0.5 means the textures origin is centered -Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    - -
    - - - - - - -
    - -

    animationSpeed

    Number @@ -2890,177 +758,6 @@ Setting the anchor to 1,1 would mean the textures origin points will be the bott -
    - - -
    -

    blendMode

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:42 - -

    - - - - -
    - -
    -

    The blend mode of sprite. -currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    - -
    - - - - - - -
    - - -
    -

    buttonMode

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:72 - -

    - - - - -
    - -
    -

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    - -
    - - - - - - -
    - - -
    -

    children

    - Array - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:18 - -

    - - - - -
    - -
    -

    [read-only] The of children of this container.

    - -
    - - - - - - -
    - - -
    -

    color

    - Array<> - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:145 - -

    - - - - -
    - -
    -

    [NYI] Unkown

    - -
    - - - - - -
    @@ -3108,267 +805,6 @@ currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    -
    - - -
    -

    dynamic

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:154 - -

    - - - - -
    - -
    -

    [NYI] Holds whether or not this object is dynamic, for rendering optimization

    - -
    - - - - - - -
    - - -
    -

    filters

    - Array An array of filters - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:318 - -

    - - - - -
    - -
    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    - -
    - - - - - - -
    - - -
    -

    height

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:102 - -

    - - - - -
    - -
    -

    The height of the sprite, setting this will actually modify the scale to acheive the value set

    - -
    - - - - - - -
    - - -
    -

    hitArea

    - Rectangle | Circle | Ellipse | Polygon - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:63 - -

    - - - - -
    - -
    -

    This is the defined area that will pick up mouse / touch events. It is null by default. -Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    - -
    - - - - - - -
    - - -
    -

    interactive

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:260 - -

    - - - - -
    - -
    -

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    - -
    - - -

    Default: false

    - - - - - -
    - - -
    -

    localTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:135 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object locally

    - -
    - - - - - -
    @@ -3416,50 +852,6 @@ Setting it is a neat way of optimising the hitTest function that the interaction - - - -
    -

    mask

    - Graphics - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:280 - -

    - - - - -
    - -
    -

    Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it. -In PIXI a regular mask must be a PIXI.Ggraphics object. This allows for much faster masking in canvas as it utilises shape clipping. -To remove a mask, set this property to null.

    - -
    - - - - - -
    @@ -3505,90 +897,6 @@ To remove a mask, set this property to null.

    - - - -
    -

    parent

    - DisplayObjectContainer - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:88 - -

    - - - - -
    - -
    -

    [read-only] The display object container that contains this display object.

    - -
    - - - - - - -
    - - -
    -

    pivot

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:31 - -

    - - - - -
    - -
    -

    The pivot point of the displayObject that it rotates around

    - -
    - - - - - -
    @@ -3634,258 +942,6 @@ To remove a mask, set this property to null.

    - - - -
    -

    position

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:15 - -

    - - - - -
    - -
    -

    The coordinate of the object relative to the local coordinates of the parent.

    - -
    - - - - - - -
    - - -
    -

    renderable

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:80 - -

    - - - - -
    - -
    -

    Can this object be rendered

    - -
    - - - - - - -
    - - -
    -

    rotation

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:39 - -

    - - - - -
    - -
    -

    The rotation of the object in radians.

    - -
    - - - - - - -
    - - -
    -

    scale

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:23 - -

    - - - - -
    - -
    -

    The scale factor of the object.

    - -
    - - - - - - -
    - - -
    -

    stage

    - Stage - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:97 - -

    - - - - -
    - -
    -

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    - -
    - - - - - - -
    - - -
    -

    texture

    - Texture - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:34 - -

    - - - - -
    - -
    -

    The texture that the sprite is using

    - -
    - - - - - -
    @@ -3979,176 +1035,6 @@ assigned to the MovieClip.

    - - - -
    -

    visible

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:55 - -

    - - - - -
    - -
    -

    The visibility of the object.

    - -
    - - - - - - -
    - - -
    -

    width

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:86 - -

    - - - - -
    - -
    -

    The width of the sprite, setting this will actually modify the scale to acheive the value set

    - -
    - - - - - - -
    - - -
    -

    worldAlpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:106 - -

    - - - - -
    - -
    -

    [read-only] The multiplied alpha of the displayobject

    - -
    - - - - - - -
    - - -
    -

    worldTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:125 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object based on world (parent) factors

    - -
    - - - - - -
    diff --git a/docs/classes/PIXI.PixiShader.html b/docs/classes/PIXI.PixiShader.html new file mode 100644 index 0000000..2ac47b3 --- /dev/null +++ b/docs/classes/PIXI.PixiShader.html @@ -0,0 +1,739 @@ + + + + + PIXI.PixiShader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    PIXI.PixiShader Class

    +
    + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    PIXI.PixiShader

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:6 + +

    + + + + + +
    + +
    + +
    + + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    PIXI.PixiShader#init

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:42 + +

    + + + + + +
    + +
    + +
    + + + + + + +
    + + +
    +

    PIXI.PixiShader#initSampler2D

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:150 + +

    + + + + + +
    + +
    +

    Initialises a Sampler2D uniform (which may only be available later on after initUniforms once the texture is has loaded)

    + +
    + + + + + + +
    + + +
    +

    PIXI.PixiShader#initUniforms

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:77 + +

    + + + + + +
    + +
    +

    Initialises the shader uniform values. +Uniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/ +http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf

    + +
    + + + + + + +
    + + +
    +

    PIXI.PixiShader#syncUniforms

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:225 + +

    + + + + + +
    + +
    +

    Updates the shader uniform values.

    + +
    + + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    fragmentSrc - The fragment shader.

    + Array + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:19 + +

    + + + + +
    + +
    + +
    + + + + + + +
    + + +
    +

    program - The WebGL program.

    + Any + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:14 + +

    + + + + +
    + +
    + +
    + + + + + + +
    + + +
    +

    textureCount - A local texture counter for multi-texture shaders.

    + Number + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/renderers/webgl/PixiShader.js:33 + +

    + + + + +
    + +
    + +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/PixelateFilter.html b/docs/classes/PixelateFilter.html index ba0d21d..a23d950 100644 --- a/docs/classes/PixelateFilter.html +++ b/docs/classes/PixelateFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -190,7 +192,7 @@
    -

    This filter applies a pixlate effect making display objects appear "blocky"

    +

    This filter applies a pixlate effect making display objects appear 'blocky'

    @@ -220,6 +222,41 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/PolyK.AjaxRequest.html b/docs/classes/PolyK.AjaxRequest.html index 508d79f..7ff4f61 100644 --- a/docs/classes/PolyK.AjaxRequest.html +++ b/docs/classes/PolyK.AjaxRequest.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -229,7 +231,7 @@ - src/pixi/utils/Utils.js:81 + src/pixi/utils/Utils.js:88

    @@ -290,7 +292,7 @@
  • - HEXtoRGB + hex2rgb @@ -351,7 +353,7 @@ - src/pixi/utils/Utils.js:53 + src/pixi/utils/Utils.js:60

    @@ -429,8 +431,8 @@
  • -
    -

    HEXtoRGB

    +
    +

    hex2rgb

    @@ -471,7 +473,7 @@ - src/pixi/utils/Utils.js:43 + src/pixi/utils/Utils.js:45

    diff --git a/docs/classes/PolyK.InteractionData.html b/docs/classes/PolyK.InteractionData.html index 2555156..fe90bab 100644 --- a/docs/classes/PolyK.InteractionData.html +++ b/docs/classes/PolyK.InteractionData.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -229,7 +231,7 @@ - src/pixi/InteractionManager.js:646 + src/pixi/InteractionManager.js:638

    @@ -375,7 +377,7 @@ - src/pixi/InteractionManager.js:682 + src/pixi/InteractionManager.js:674

    @@ -467,7 +469,7 @@ - src/pixi/InteractionManager.js:654 + src/pixi/InteractionManager.js:646

    @@ -512,7 +514,7 @@ - src/pixi/InteractionManager.js:673 + src/pixi/InteractionManager.js:665

    @@ -536,7 +538,7 @@

    target

    - Sprite + Sprite @@ -557,7 +559,7 @@ - src/pixi/InteractionManager.js:665 + src/pixi/InteractionManager.js:657

    diff --git a/docs/classes/PolyK.InteractionManager.html b/docs/classes/PolyK.InteractionManager.html index d24b54e..f270b0e 100644 --- a/docs/classes/PolyK.InteractionManager.html +++ b/docs/classes/PolyK.InteractionManager.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -484,7 +486,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:70 + src/pixi/InteractionManager.js:66

    @@ -596,7 +598,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:422 + src/pixi/InteractionManager.js:409

    @@ -703,7 +705,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:305 + src/pixi/InteractionManager.js:299

    @@ -794,7 +796,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:273 + src/pixi/InteractionManager.js:269

    @@ -885,7 +887,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:370 + src/pixi/InteractionManager.js:360

    @@ -976,7 +978,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:575 + src/pixi/InteractionManager.js:565

    @@ -1067,7 +1069,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:495 + src/pixi/InteractionManager.js:482

    @@ -1158,7 +1160,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:526 + src/pixi/InteractionManager.js:516

    @@ -1249,7 +1251,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:114 + src/pixi/InteractionManager.js:110

    @@ -1340,7 +1342,7 @@ This manager also supports multitouch.

    - src/pixi/InteractionManager.js:135 + src/pixi/InteractionManager.js:131

    @@ -1423,7 +1425,7 @@ to receive those events

    - src/pixi/InteractionManager.js:185 + src/pixi/InteractionManager.js:180

    diff --git a/docs/classes/PolyK._PointInTriangle.html b/docs/classes/PolyK._PointInTriangle.html index 3ea0a55..516bc32 100644 --- a/docs/classes/PolyK._PointInTriangle.html +++ b/docs/classes/PolyK._PointInTriangle.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ diff --git a/docs/classes/PolyK._convex.html b/docs/classes/PolyK._convex.html index 4a91a69..24df56b 100644 --- a/docs/classes/PolyK._convex.html +++ b/docs/classes/PolyK._convex.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html index 6dcfee8..dd999b8 100644 --- a/docs/classes/Polygon.html +++ b/docs/classes/Polygon.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index 142297c..b27c3d5 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 3e617dc..d26f2a0 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -195,20 +197,20 @@

    A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it.

    -

    Hint: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded. -Otherwise black rectangles will be drawn instead.

    +

    Hint: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded. +Otherwise black rectangles will be drawn instead.

    RenderTexture takes snapshot of DisplayObject passed to render method. If DisplayObject is passed to render method, position and rotation of it will be ignored. For example:

    -
    var renderTexture = new PIXI.RenderTexture(800, 600);
    -var sprite = PIXI.Sprite.fromImage("spinObj_01.png");
    -sprite.position.x = 800/2;
    -sprite.position.y = 600/2;
    -sprite.anchor.x = 0.5;
    -sprite.anchor.y = 0.5;
    -renderTexture.render(sprite);
    +

    var renderTexture = new PIXI.RenderTexture(800, 600); + var sprite = PIXI.Sprite.fromImage("spinObj_01.png"); + sprite.position.x = 800/2; + sprite.position.y = 600/2; + sprite.anchor.x = 0.5; + sprite.anchor.y = 0.5; + renderTexture.render(sprite);

    Sprite in this case will be rendered to 0,0 position. To render this sprite at center DisplayObjectContainer should be used:

    -
    var doc = new PIXI.DisplayObjectContainer();
    -doc.addChild(sprite);
    -renderTexture.render(doc);  // Renders to center of renderTexture
    +

    var doc = new PIXI.DisplayObjectContainer(); + doc.addChild(sprite); + renderTexture.render(doc); // Renders to center of renderTexture

    @@ -356,20 +358,6 @@ renderTexture.render(doc); // Renders to center of renderTexture - - -
  • - initCanvas - - - -
  • - -
  • - initWebGL - - -
  • @@ -484,7 +472,7 @@ renderTexture.render(doc); // Renders to center of renderTexture - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:91

    @@ -528,120 +516,6 @@ renderTexture.render(doc); // Renders to center of renderTexture -
  • - - -
    -

    initCanvas

    - - - () - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/textures/RenderTexture.js:125 - -

    - - - - - -
    - -
    -

    Initializes the canvas data for this texture

    - -
    - - - - - - -
    - - -
    -

    initWebGL

    - - - () - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/textures/RenderTexture.js:57 - -

    - - - - - -
    - -
    -

    Initializes the webgl data for this texture

    - -
    - - - - - -
    @@ -686,7 +560,7 @@ renderTexture.render(doc); // Renders to center of renderTexture - src/pixi/textures/Texture.js:73 + src/pixi/textures/Texture.js:72

    @@ -782,7 +656,7 @@ renderTexture.render(doc); // Renders to center of renderTexture - src/pixi/textures/RenderTexture.js:214 + src/pixi/textures/RenderTexture.js:154

    @@ -895,7 +769,7 @@ renderTexture.render(doc); // Renders to center of renderTexture - src/pixi/textures/RenderTexture.js:141 + src/pixi/textures/RenderTexture.js:102

    @@ -997,7 +871,7 @@ renderTexture.render(doc); // Renders to center of renderTexture - src/pixi/textures/Texture.js:104 + src/pixi/textures/Texture.js:102

    diff --git a/docs/classes/SepiaFilter.html b/docs/classes/SepiaFilter.html index 7911051..602c608 100644 --- a/docs/classes/SepiaFilter.html +++ b/docs/classes/SepiaFilter.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -266,7 +268,7 @@ - src/pixi/filters/SepiaFilter.js:44 + src/pixi/filters/SepiaFilter.js:42

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html index 2152e64..8b4b133 100644 --- a/docs/classes/Spine.html +++ b/docs/classes/Spine.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -528,6 +530,13 @@ When loaded this class will dispatch a "loaded" event

    + + +
  • + height + + +
  • @@ -626,6 +635,13 @@ When loaded this class will dispatch a "loaded" event

    +
  • + +
  • + width + + +
  • @@ -695,7 +711,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -787,7 +803,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -889,7 +905,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -974,7 +990,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1115,7 +1131,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1200,7 +1216,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1285,7 +1301,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1370,7 +1386,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1456,7 +1472,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1656,7 +1672,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1744,7 +1760,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1840,7 +1856,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -1870,7 +1886,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1885,7 +1901,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1940,7 +1956,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2026,7 +2042,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2111,7 +2127,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -2197,7 +2213,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2443,7 +2459,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2532,7 +2548,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2574,7 +2590,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2584,9 +2600,53 @@ for this callback to be fired, The touch must have started over the sprite

  • -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    + +
    + + + + + + + + + +
    +

    height

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:50 + +

    + + + + +
    + +
    +

    The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    @@ -2661,7 +2721,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -2752,7 +2812,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -2794,7 +2854,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -3196,6 +3256,48 @@ To remove a mask, set this property to null.

    +
    + + +
    +

    width

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:32 + +

    + + + + +
    + +
    +

    The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    @@ -3263,7 +3365,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index 824e84c..0219761 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -200,12 +202,12 @@

    The sprite sheet loader is used to load in JSON sprite sheet data -To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format +To generate the data you can use http://www.codeandweb.com/texturepacker and publish the 'JSON' format There is a free version so thats nice, although the paid version is great value for money. -It is highly recommended to use Sprite sheets (also know as texture atlas") as it means sprite"s can be batched and drawn together for highly increased rendering speed. +It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() This loader will also load the image file that the Spritesheet points to as well as the data. -When loaded this class will dispatch a "loaded" event

    +When loaded this class will dispatch a 'loaded' event

    @@ -460,7 +462,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:74 + src/pixi/loaders/SpriteSheetLoader.js:73

    @@ -517,7 +519,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:89 + src/pixi/loaders/SpriteSheetLoader.js:88

    @@ -628,7 +630,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:45 + src/pixi/loaders/SpriteSheetLoader.js:44

    @@ -673,7 +675,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:37 + src/pixi/loaders/SpriteSheetLoader.js:36

    @@ -718,7 +720,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:62 + src/pixi/loaders/SpriteSheetLoader.js:61

    @@ -763,7 +765,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:54 + src/pixi/loaders/SpriteSheetLoader.js:53

    @@ -808,7 +810,7 @@ When loaded this class will dispatch a "loaded" event

    - src/pixi/loaders/SpriteSheetLoader.js:29 + src/pixi/loaders/SpriteSheetLoader.js:28

    diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite™.html similarity index 92% rename from docs/classes/Sprite.html rename to docs/classes/Sprite™.html index 2916b16..09b9b52 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite™.html @@ -2,7 +2,7 @@ - Sprite - Pixi.JS + Sprite™ - Pixi.JS @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -166,7 +168,7 @@
    -

    Sprite Class

    +

    Sprite™ Class

    @@ -178,7 +180,7 @@ @@ -201,8 +203,8 @@

    Constructor

    -
    -

    Sprite

    +
    +

    Sprite™

    @@ -243,7 +245,7 @@ - src/pixi/display/Sprite.js:10 + src/pixi/display/Sprite.js:11

    @@ -548,7 +550,7 @@ -
  • +
  • height @@ -637,6 +639,13 @@ +
  • + +
  • + tint + + +
  • @@ -646,7 +655,7 @@
  • -
  • +
  • width @@ -720,7 +729,7 @@ - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -812,7 +821,7 @@ - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -914,7 +923,7 @@ - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -944,7 +953,7 @@
    - +
    @@ -979,7 +988,7 @@ - Sprite + Sprite @@ -1008,7 +1017,7 @@ - src/pixi/display/Sprite.js:165 + src/pixi/display/Sprite.js:416

    @@ -1057,7 +1066,7 @@
    - Sprite: + Sprite:

    A new Sprite using a texture from the texture cache matching the frameId

    @@ -1089,7 +1098,7 @@ - Sprite + Sprite @@ -1118,7 +1127,7 @@ - src/pixi/display/Sprite.js:182 + src/pixi/display/Sprite.js:433

    @@ -1167,7 +1176,7 @@
    - Sprite: + Sprite:

    A new Sprite using a texture from the texture cache matching the image id

    @@ -1219,7 +1228,7 @@ - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1305,7 +1314,7 @@ - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1335,7 +1344,7 @@
    - +
    @@ -1390,7 +1399,7 @@ - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1420,7 +1429,7 @@
    - +
    @@ -1475,7 +1484,7 @@ - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1505,7 +1514,7 @@
    - +
    @@ -1560,7 +1569,7 @@ - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1591,7 +1600,7 @@ for this callback to be fired the mouse must have been pressed down over the dis
    - +
    @@ -1646,7 +1655,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1677,7 +1686,7 @@ for this callback to be fired, The touch must have started over the displayObjec
    - +
    @@ -1737,7 +1746,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/Sprite.js:145 + src/pixi/display/Sprite.js:156

    @@ -1767,7 +1776,7 @@ for this callback to be fired, The touch must have started over the displayObjec
    - +
    @@ -1822,7 +1831,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1910,7 +1919,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1943,7 +1952,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2001,7 +2010,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/Sprite.js:118 + src/pixi/display/Sprite.js:133

    @@ -2095,7 +2104,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -2125,7 +2134,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2140,7 +2149,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2195,7 +2204,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2226,7 +2235,7 @@ basically a touch version of click

    - +
    @@ -2281,7 +2290,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2311,7 +2320,7 @@ basically a touch version of click

    - +
    @@ -2366,7 +2375,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -2397,7 +2406,7 @@ for this callback to be fired, The touch must have started over the sprite

    - +
    @@ -2452,7 +2461,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2482,7 +2491,7 @@ for this callback to be fired, The touch must have started over the sprite

    - +
    @@ -2531,7 +2540,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/Sprite.js:60 + src/pixi/display/Sprite.js:61

    @@ -2622,7 +2631,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/Sprite.js:51 + src/pixi/display/Sprite.js:52

    @@ -2709,7 +2718,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/Sprite.js:23 + src/pixi/display/Sprite.js:24

    @@ -2720,7 +2729,7 @@ for this callback to be fired, The touch must have started over the sprite

    The anchor sets the origin point of the texture. -The default is 0,0 this means the textures origin is the top left +The default is 0,0 this means the textures origin is the top left Setting than anchor to 0.5,0.5 means the textures origin is centered Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    @@ -2757,7 +2766,7 @@ Setting the anchor to 1,1 would mean the textures origin points will be the bott - src/pixi/display/Sprite.js:42 + src/pixi/display/Sprite.js:43

    @@ -2886,7 +2895,7 @@ currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2930,7 +2939,7 @@ currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2972,7 +2981,7 @@ currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2982,9 +2991,11 @@ currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    @@ -3010,16 +3021,16 @@ To remove filters simply set this property to 'null'

    +

    Inherited from + + DisplayObjectContainer + - -

    - - Defined in - + but overwritten in - src/pixi/display/Sprite.js:102 + src/pixi/display/Sprite.js:117

    @@ -3104,7 +3115,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -3150,7 +3161,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -3192,7 +3203,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -3533,7 +3544,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/Sprite.js:34 + src/pixi/display/Sprite.js:35

    @@ -3552,6 +3563,55 @@ To remove a mask, set this property to null.

    +
    + + +
    +

    tint

    + Number + + + + + private + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/display/Sprite.js:71 + +

    + + + + +
    + +
    +

    The tint applied to the sprite. This is a hex value

    + +
    + + +

    Default: 0xFFFFFF

    + + + + +
    @@ -3611,16 +3671,16 @@ To remove a mask, set this property to null.

    +

    Inherited from + + DisplayObjectContainer + - -

    - - Defined in - + but overwritten in - src/pixi/display/Sprite.js:86 + src/pixi/display/Sprite.js:101

    @@ -3706,7 +3766,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 84ad082..1e53e45 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -273,7 +275,7 @@

    the background color of the stage, easiest way to pass this in is in hex format - like: 0xFFFFFF for white

    + like: 0xFFFFFF for white

    @@ -518,20 +520,27 @@
  • - hitArea - - - -
  • - -
  • - interactive + height
  • + hitArea + + + +
  • + +
  • + interactive + + + +
  • + +
  • interactive @@ -606,6 +615,13 @@ +
  • + +
  • + width + + +
  • @@ -675,7 +691,7 @@ - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -767,7 +783,7 @@ - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -869,7 +885,7 @@ - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -899,7 +915,7 @@
    - +
    @@ -954,7 +970,7 @@ - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1037,7 +1053,7 @@ - src/pixi/display/Stage.js:125 + src/pixi/display/Stage.js:124

    @@ -1113,7 +1129,7 @@ - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1143,7 +1159,7 @@
    - +
    @@ -1198,7 +1214,7 @@ - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1228,7 +1244,7 @@
    - +
    @@ -1283,7 +1299,7 @@ - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1313,7 +1329,7 @@
    - +
    @@ -1368,7 +1384,7 @@ - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1399,7 +1415,7 @@ for this callback to be fired the mouse must have been pressed down over the dis
    - +
    @@ -1454,7 +1470,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1485,7 +1501,7 @@ for this callback to be fired, The touch must have started over the displayObjec
    - +
    @@ -1540,7 +1556,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1629,7 +1645,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/Stage.js:109 + src/pixi/display/Stage.js:108

    @@ -1660,7 +1676,7 @@ for this callback to be fired, The touch must have started over the displayObjec

    the color of the background, easiest way to pass this in is in hex format - like: 0xFFFFFF for white

    + like: 0xFFFFFF for white

    @@ -1808,7 +1824,7 @@ This is useful for when you have other DOM elements ontop of the Canvas element. - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1841,7 +1857,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1904,7 +1920,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -1934,7 +1950,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1949,7 +1965,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -2004,7 +2020,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2035,7 +2051,7 @@ basically a touch version of click

    - +
    @@ -2090,7 +2106,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2120,7 +2136,7 @@ basically a touch version of click

    - +
    @@ -2175,7 +2191,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -2206,7 +2222,7 @@ for this callback to be fired, The touch must have started over the sprite

    - +
    @@ -2261,7 +2277,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2291,7 +2307,7 @@ for this callback to be fired, The touch must have started over the sprite

    - +
    @@ -2507,7 +2523,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2598,7 +2614,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2640,7 +2656,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2650,9 +2666,53 @@ for this callback to be fired, The touch must have started over the sprite

  • -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    + +
    + + + + + + +
    + + +
    +

    height

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:50 + +

    + + + + +
    + +
    +

    The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    @@ -2704,51 +2764,6 @@ Setting it is a neat way of optimising the hitTest function that the interaction -
    - - -
    -

    interactive

    - InteractionManager - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/display/Stage.js:36 - -

    - - - - -
    - -
    -

    The interaction manage for this stage, manages all interactive activity on the stage

    - -
    - - - - - -
    @@ -2794,6 +2809,51 @@ Setting it is a neat way of optimising the hitTest function that the interaction +
    + + +
    +

    interactive

    + InteractionManager + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/display/Stage.js:36 + +

    + + + + +
    + +
    +

    The interaction manage for this stage, manages all interactive activity on the stage

    + +
    + + + + + +
    @@ -2819,7 +2879,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -2861,7 +2921,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -3218,6 +3278,48 @@ To remove a mask, set this property to null.

    +
    + + +
    +

    width

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/display/DisplayObjectContainer.js:32 + +

    + + + + +
    + +
    +

    The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set

    + +
    + + + + + +
    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index e9d556b..0ef4930 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -172,7 +174,7 @@
    - Extends Sprite + Extends Sprite
    @@ -194,7 +196,7 @@
    -

    A Text Object will create a line(s) of text to split a line you can use "\n"

    +

    A Text Object will create a line(s) of text to split a line you can use '\n'

    @@ -310,7 +312,7 @@
    -

    default "bold 20pt Arial" The style and size of the font

    +

    default 'bold 20pt Arial' The style and size of the font

    @@ -319,13 +321,13 @@
  • - [fill="black"] + [fill='black'] Object optional
    -

    A canvas fillstyle that will be used on the text eg "red", "#00FF00"

    +

    A canvas fillstyle that will be used on the text eg 'red', '#00FF00'

    @@ -334,13 +336,13 @@
  • - [align="left"] + [align='left'] String optional
    -

    An alignment of the multiline text ("left", "center" or "right")

    +

    An alignment of the multiline text ('left', 'center' or 'right')

    @@ -355,7 +357,7 @@
    -

    A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00"

    +

    A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00'

    @@ -431,8 +433,6 @@
  • Methods
  • -
  • Properties
  • - @@ -447,97 +447,11 @@
      -
    • - addChild - - - -
    • - -
    • - addChildAt - - - -
    • - -
    • - click - - - -
    • -
    • destroy -
    • - -
    • - getChildAt - - - -
    • - -
    • - mousedown - - - -
    • - -
    • - mouseout - - - -
    • - -
    • - mouseover - - - -
    • - -
    • - mouseup - - - -
    • - -
    • - mouseupoutside - - - -
    • - -
    • - onTextureUpdate - - - -
    • - -
    • - removeChild - - - -
    • - -
    • - setInteractive - - - - deprecated -
    • @@ -547,43 +461,8 @@
    • -
    • - setTexture - - - -
    • - -
    • - swapChildren - - - -
    • - -
    • - tap - - - -
    • - -
    • - touchend - - - -
    • - -
    • - touchendoutside - - - -
    • - -
    • - touchstart +
    • + setText @@ -622,210 +501,6 @@ -
      -

      Properties

      - - -
      - @@ -837,285 +512,6 @@

      Methods

      -
      -

      addChild

      - - -
      - (
        - -
      • - - child - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:32 - -

      - - - - - -
      - -
      -

      Adds a child to the container.

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - child - DisplayObject - - - - -
        -

        The DisplayObject to add to the container

        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      addChildAt

      - - -
      - (
        - -
      • - - child - -
      • - -
      • - - index - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:120 - -

      - - - - - -
      - -
      -

      Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - child - DisplayObject - - - - -
        -

        The child to add

        - -
        - - -
      • - -
      • - - index - Number - - - - -
        -

        The index to place the child in

        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      click

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:174 - -

      - - - - - -
      - -
      -

      A callback that is used when the users clicks on the displayObject with their mouse

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - -

      destroy

      @@ -1158,7 +554,7 @@ - src/pixi/text/Text.js:270 + src/pixi/text/Text.js:260

      @@ -1201,782 +597,6 @@ -
      - - -
      -

      getChildAt

      - - -
      - (
        - -
      • - - index - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:256 - -

      - - - - - -
      - -
      -

      Returns the Child at the specified index

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - index - Number - - - - -
        -

        The index to get the child from

        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      mousedown

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:180 - -

      - - - - - -
      - -
      -

      A callback that is used when the user clicks the mouse down over the sprite

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      mouseout

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:206 - -

      - - - - - -
      - -
      -

      A callback that is used when the users mouse leaves the displayObject

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      mouseover

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:200 - -

      - - - - - -
      - -
      -

      A callback that is used when the users mouse rolls over the displayObject

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      mouseup

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:186 - -

      - - - - - -
      - -
      -

      A callback that is used when the user releases the mouse that was over the displayObject -for this callback to be fired the mouse must have been pressed down over the displayObject

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      mouseupoutside

      - - -
      - (
        - -
      • - - interactionData - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:193 - -

      - - - - - -
      - -
      -

      A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject -for this callback to be fired, The touch must have started over the displayObject

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactionData - InteractionData - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      onTextureUpdate

      - - -
      - (
        - -
      • - - event - -
      • - -
      ) -
      - - - - - - - - private - - - - - - - - - - -
      - - -

      Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:145 - -

      - - - - - -
      - -
      -

      When the texture is updated, this event will fire to update the scale and frame

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - event - Object - - - - -
        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      removeChild

      - - -
      - (
        - -
      • - - child - -
      • - -
      ) -
      - - - - - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:274 - -

      - - - - - -
      - -
      -

      Removes a child from the container.

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - child - DisplayObject - - - - -
        -

        The DisplayObject to remove

        - -
        - - -
      • - -
      -
      - - - - - -
      - - -
      -

      setInteractive

      - - -
      - (
        - -
      • - - interactive - -
      • - -
      ) -
      - - - - - - deprecated - - - - - - - - - - - - -
      - - -

      Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:247 - -

      - - - -

      Deprecated: Simply set the `interactive` property directly

      - - - -
      - -
      -

      [Deprecated] Indicates if the sprite will have touch and mouse interactivity. It is false by default -Instead of using this function you can now simply set the interactive property to true or false

      - -
      - - -
      -

      Parameters:

      - -
        - -
      • - - interactive - Boolean - - - - -
        - -
        - - -
      • - -
      -
      - - - - -
      @@ -1995,7 +615,7 @@ Instead of using this function you can now simply set the interactive property t
    • - [style.font="bold + [style.font='bold
    • @@ -2068,13 +688,13 @@ Instead of using this function you can now simply set the interactive property t
    • - [fill="black"] + [fill='black'] Object optional
      -

      A canvas fillstyle that will be used on the text eg "red", "#00FF00"

      +

      A canvas fillstyle that will be used on the text eg 'red', '#00FF00'

      @@ -2083,13 +703,13 @@ Instead of using this function you can now simply set the interactive property t
    • - [align="left"] + [align='left'] String optional
      -

      An alignment of the multiline text ("left", "center" or "right")

      +

      An alignment of the multiline text ('left', 'center' or 'right')

      @@ -2098,13 +718,13 @@ Instead of using this function you can now simply set the interactive property t
    • - [stroke="black"] + [stroke='black'] String optional
      -

      A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00"

      +

      A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00'

      @@ -2162,14 +782,14 @@ Instead of using this function you can now simply set the interactive property t
    • - [style.font="bold + [style.font='bold String
      -

      20pt Arial"] The style and size of the font

      +

      20pt Arial'] The style and size of the font

      @@ -2186,8 +806,8 @@ Instead of using this function you can now simply set the interactive property t
    -
    -

    setTexture

    +
    +

    setText

    @@ -2195,7 +815,7 @@ Instead of using this function you can now simply set the interactive property t
  • - texture + text
  • @@ -2220,292 +840,15 @@ Instead of using this function you can now simply set the interactive property t
    -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:118 - -

    - - - - - -
    - -
    -

    Sets the texture of the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - texture - Texture - - - - -
      -

      The PIXI texture that is displayed by the sprite

      - -
      - - -
    • - -
    -
    - - - - - -
    - -
    -

    swapChildren

    - - -
    - (
      - -
    • - - child - -
    • - -
    • - - child2 - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:207 - -

    - - - - - -
    - -
    -

    [NYI] Swaps the depth of 2 displayObjects

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - +

    -

    -

    tap

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:217 - -

    - - - - - -
    - -
    -

    A callback that is used when the users taps on the sprite with their finger -basically a touch version of click

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - + Defined in -
    -

    touchend

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - src/pixi/display/DisplayObject.js:230 + src/pixi/text/Text.js:65

    @@ -2516,7 +859,7 @@ basically a touch version of click

    -

    A callback that is used when the user releases a touch over the displayObject

    +

    Set the copy for the text object. To split a line you can use '\n'

    @@ -2528,185 +871,15 @@ basically a touch version of click

  • - interactionData - InteractionData + text + String
    - -
    +

    The copy that you would like the text to display

    - -
  • - - -
    - - - - - -
    - - -
    -

    touchendoutside

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:236 - -

    - - - - - -
    - -
    -

    A callback that is used when the user releases the touch that was over the displayObject -for this callback to be fired, The touch must have started over the sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    touchstart

    - - -
    - (
      - -
    • - - interactionData - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:224 - -

    - - - - - -
    - -
    -

    A callback that is used when the user touch's over the displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - interactionData - InteractionData - - - - -
      -
      @@ -2948,7 +1121,8 @@ for this callback to be fired, The touch must have started over the sprite

    -

    A Text Object will apply wordwrap

    +

    Applies newlines to a string to have it optimally fit into the horizontal +bounds set by the Text object's wordWrapWidth property.

    @@ -2987,1213 +1161,6 @@ for this callback to be fired, The touch must have started over the sprite

    -
    -

    Properties

    - - -
    -

    _height

    - Number - - - - - private - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:60 - -

    - - - - -
    - -
    -

    The height of the sprite (this is initially set by the texture)

    - -
    - - - - - - -
    - - -
    -

    _interactive

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:115 - -

    - - - - -
    - -
    -

    [read-only] Whether or not the object is interactive, do not toggle directly! use the interactive property

    - -
    - - - - - - -
    - - -
    -

    _width

    - Number - - - - - private - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:51 - -

    - - - - -
    - -
    -

    The width of the sprite (this is initially set by the texture)

    - -
    - - - - - - -
    - - -
    -

    alpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:47 - -

    - - - - -
    - -
    -

    The opacity of the object.

    - -
    - - - - - - -
    - - -
    -

    anchor

    - Point - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:23 - -

    - - - - -
    - -
    -

    The anchor sets the origin point of the texture. -The default is 0,0 this means the textures origin is the top left -Setting than anchor to 0.5,0.5 means the textures origin is centered -Setting the anchor to 1,1 would mean the textures origin points will be the bottom right

    - -
    - - - - - - -
    - - -
    -

    blendMode

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:42 - -

    - - - - -
    - -
    -

    The blend mode of sprite. -currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN

    - -
    - - - - - - -
    - - -
    -

    buttonMode

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:72 - -

    - - - - -
    - -
    -

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    - -
    - - - - - - -
    - - -
    -

    children

    - Array - - - - - - - - - -
    - - -

    Inherited from - DisplayObjectContainer: - - - - src/pixi/display/DisplayObjectContainer.js:18 - -

    - - - - -
    - -
    -

    [read-only] The of children of this container.

    - -
    - - - - - - -
    - - -
    -

    color

    - Array<> - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:145 - -

    - - - - -
    - -
    -

    [NYI] Unkown

    - -
    - - - - - - -
    - - -
    -

    dynamic

    - Boolean - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:154 - -

    - - - - -
    - -
    -

    [NYI] Holds whether or not this object is dynamic, for rendering optimization

    - -
    - - - - - - -
    - - -
    -

    filters

    - Array An array of filters - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:318 - -

    - - - - -
    - -
    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    - -
    - - - - - - -
    - - -
    -

    height

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:102 - -

    - - - - -
    - -
    -

    The height of the sprite, setting this will actually modify the scale to acheive the value set

    - -
    - - - - - - -
    - - -
    -

    hitArea

    - Rectangle | Circle | Ellipse | Polygon - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:63 - -

    - - - - -
    - -
    -

    This is the defined area that will pick up mouse / touch events. It is null by default. -Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    - -
    - - - - - - -
    - - -
    -

    interactive

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:260 - -

    - - - - -
    - -
    -

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    - -
    - - -

    Default: false

    - - - - - -
    - - -
    -

    localTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:135 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object locally

    - -
    - - - - - - -
    - - -
    -

    mask

    - Graphics - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:280 - -

    - - - - -
    - -
    -

    Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it. -In PIXI a regular mask must be a PIXI.Ggraphics object. This allows for much faster masking in canvas as it utilises shape clipping. -To remove a mask, set this property to null.

    - -
    - - - - - - -
    - - -
    -

    parent

    - DisplayObjectContainer - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:88 - -

    - - - - -
    - -
    -

    [read-only] The display object container that contains this display object.

    - -
    - - - - - - -
    - - -
    -

    pivot

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:31 - -

    - - - - -
    - -
    -

    The pivot point of the displayObject that it rotates around

    - -
    - - - - - - -
    - - -
    -

    position

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:15 - -

    - - - - -
    - -
    -

    The coordinate of the object relative to the local coordinates of the parent.

    - -
    - - - - - - -
    - - -
    -

    renderable

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:80 - -

    - - - - -
    - -
    -

    Can this object be rendered

    - -
    - - - - - - -
    - - -
    -

    rotation

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:39 - -

    - - - - -
    - -
    -

    The rotation of the object in radians.

    - -
    - - - - - - -
    - - -
    -

    scale

    - Point - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:23 - -

    - - - - -
    - -
    -

    The scale factor of the object.

    - -
    - - - - - - -
    - - -
    -

    stage

    - Stage - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:97 - -

    - - - - -
    - -
    -

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    - -
    - - - - - - -
    - - -
    -

    texture

    - Texture - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:34 - -

    - - - - -
    - -
    -

    The texture that the sprite is using

    - -
    - - - - - - -
    - - -
    -

    visible

    - Boolean - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:55 - -

    - - - - -
    - -
    -

    The visibility of the object.

    - -
    - - - - - - -
    - - -
    -

    width

    - Number - - - - - - - - - -
    - - -

    Inherited from - Sprite: - - - - src/pixi/display/Sprite.js:86 - -

    - - - - -
    - -
    -

    The width of the sprite, setting this will actually modify the scale to acheive the value set

    - -
    - - - - - - -
    - - -
    -

    worldAlpha

    - Number - - - - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:106 - -

    - - - - -
    - -
    -

    [read-only] The multiplied alpha of the displayobject

    - -
    - - - - - - -
    - - -
    -

    worldTransform

    - Mat3 - - - - - private - - - - - - -
    - - -

    Inherited from - DisplayObject: - - - - src/pixi/display/DisplayObject.js:125 - -

    - - - - -
    - -
    -

    [read-only] Current transform of the object based on world (parent) factors

    - -
    - - - - - - -
    - - -
    - diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 8a39e11..6eabfed 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -504,7 +506,7 @@ to the display list directly. To do this use PIXI.Sprite. If no frame is provide - src/pixi/textures/Texture.js:182 + src/pixi/textures/Texture.js:201

    @@ -608,7 +610,7 @@ to the display list directly. To do this use PIXI.Sprite. If no frame is provide - src/pixi/textures/Texture.js:93 + src/pixi/textures/Texture.js:91

    @@ -703,7 +705,7 @@ to the display list directly. To do this use PIXI.Sprite. If no frame is provide - src/pixi/textures/Texture.js:166 + src/pixi/textures/Texture.js:185

    @@ -811,7 +813,7 @@ If the canvas is not in the texture cache it will be created and loaded

    - src/pixi/textures/Texture.js:150 + src/pixi/textures/Texture.js:169

    @@ -925,7 +927,7 @@ If the frame id is not in the texture cache an error will be thrown

    - src/pixi/textures/Texture.js:127 + src/pixi/textures/Texture.js:146

    @@ -1045,7 +1047,7 @@ If the image is not in the texture cache it will be created and loaded

    - src/pixi/textures/Texture.js:73 + src/pixi/textures/Texture.js:72

    @@ -1139,7 +1141,7 @@ If the image is not in the texture cache it will be created and loaded

    - src/pixi/textures/Texture.js:195 + src/pixi/textures/Texture.js:214

    @@ -1242,7 +1244,7 @@ If the image is not in the texture cache it will be created and loaded

    - src/pixi/textures/Texture.js:104 + src/pixi/textures/Texture.js:102

    diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index 9ed2238..db27990 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -420,13 +422,6 @@ - - -
  • - onTextureUpdate - - -
  • @@ -443,13 +438,6 @@ deprecated -
  • - -
  • - setTexture - - -
  • @@ -546,7 +534,7 @@
  • -
  • +
  • height @@ -628,13 +616,6 @@ -
  • - -
  • - texture - - -
  • @@ -658,7 +639,7 @@
  • -
  • +
  • width @@ -732,7 +713,7 @@ - src/pixi/display/DisplayObjectContainer.js:32 + src/pixi/display/DisplayObjectContainer.js:69

    @@ -824,7 +805,7 @@ - src/pixi/display/DisplayObjectContainer.js:120 + src/pixi/display/DisplayObjectContainer.js:94

    @@ -926,7 +907,7 @@ - src/pixi/display/DisplayObject.js:174 + src/pixi/display/DisplayObject.js:185

    @@ -1011,7 +992,7 @@ - src/pixi/display/DisplayObjectContainer.js:256 + src/pixi/display/DisplayObjectContainer.js:148

    @@ -1097,7 +1078,7 @@ - src/pixi/display/DisplayObject.js:180 + src/pixi/display/DisplayObject.js:191

    @@ -1182,7 +1163,7 @@ - src/pixi/display/DisplayObject.js:206 + src/pixi/display/DisplayObject.js:217

    @@ -1267,7 +1248,7 @@ - src/pixi/display/DisplayObject.js:200 + src/pixi/display/DisplayObject.js:211

    @@ -1352,7 +1333,7 @@ - src/pixi/display/DisplayObject.js:186 + src/pixi/display/DisplayObject.js:197

    @@ -1438,7 +1419,7 @@ for this callback to be fired the mouse must have been pressed down over the dis - src/pixi/display/DisplayObject.js:193 + src/pixi/display/DisplayObject.js:204

    @@ -1482,96 +1463,6 @@ for this callback to be fired, The touch must have started over the displayObjec -
  • - - -
    -

    onTextureUpdate

    - - -
    - (
      - -
    • - - event - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/TilingSprite.js:84 - -

    - - - - - -
    - -
    -

    When the texture is updated, this event will fire to update the frame

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - event - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - -
    @@ -1614,7 +1505,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObjectContainer.js:274 + src/pixi/display/DisplayObjectContainer.js:166

    @@ -1702,7 +1593,7 @@ for this callback to be fired, The touch must have started over the displayObjec - src/pixi/display/DisplayObject.js:247 + src/pixi/display/DisplayObject.js:258

    @@ -1748,95 +1639,6 @@ Instead of using this function you can now simply set the interactive property t -
    - - -
    -

    setTexture

    - - -
    - (
      - -
    • - - texture - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/TilingSprite.js:68 - -

    - - - - - -
    - -
    -

    Sets the texture of the tiling sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - texture - Texture - - - - -
      -

      The PIXI texture that is displayed by the sprite

      - -
      - - -
    • - -
    -
    - - - - -
    @@ -1887,7 +1689,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObjectContainer.js:207 + src/pixi/display/DisplayObjectContainer.js:122

    @@ -1917,7 +1719,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1932,7 +1734,7 @@ Instead of using this function you can now simply set the interactive property t
    - +
    @@ -1987,7 +1789,7 @@ Instead of using this function you can now simply set the interactive property t - src/pixi/display/DisplayObject.js:217 + src/pixi/display/DisplayObject.js:228

    @@ -2073,7 +1875,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:230 + src/pixi/display/DisplayObject.js:241

    @@ -2158,7 +1960,7 @@ basically a touch version of click

    - src/pixi/display/DisplayObject.js:236 + src/pixi/display/DisplayObject.js:247

    @@ -2244,7 +2046,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:224 + src/pixi/display/DisplayObject.js:235

    @@ -2490,7 +2292,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:145 + src/pixi/display/DisplayObject.js:147

    @@ -2534,7 +2336,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:154 + src/pixi/display/DisplayObject.js:156

    @@ -2576,7 +2378,7 @@ for this callback to be fired, The touch must have started over the sprite

    - src/pixi/display/DisplayObject.js:318 + src/pixi/display/DisplayObject.js:314

    @@ -2586,9 +2388,11 @@ for this callback to be fired, The touch must have started over the sprite

    -

    Sets the filters for the displayObject. -* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. -To remove filters simply set this property to 'null'

    +

    Sets the filters for the displayObject.

    +
      +
    • IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. +To remove filters simply set this property to 'null'
    • +
    @@ -2614,16 +2418,16 @@ To remove filters simply set this property to 'null'

    +

    Inherited from + + DisplayObjectContainer + - -

    - - Defined in - + but overwritten in - src/pixi/extras/TilingSprite.js:35 + src/pixi/extras/TilingSprite.js:67

    @@ -2633,7 +2437,7 @@ To remove filters simply set this property to 'null'

    -

    The height of the tiling sprite

    +

    The height of the TilingSprite, setting this will actually modify the scale to acheive the value set

    @@ -2708,7 +2512,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:260 + src/pixi/display/DisplayObject.js:271

    @@ -2754,7 +2558,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:135 + src/pixi/display/DisplayObject.js:137

    @@ -2796,7 +2600,7 @@ Setting it is a neat way of optimising the hitTest function that the interaction - src/pixi/display/DisplayObject.js:280 + src/pixi/display/DisplayObject.js:291

    @@ -3111,51 +2915,6 @@ To remove a mask, set this property to null.

    - - - -
    -

    texture

    - Texture - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/extras/TilingSprite.js:19 - -

    - - - - -
    - -
    -

    The texture that the sprite is using

    - -
    - - - - - -
    @@ -3182,7 +2941,7 @@ To remove a mask, set this property to null.

    - src/pixi/extras/TilingSprite.js:51 + src/pixi/extras/TilingSprite.js:32

    @@ -3227,7 +2986,7 @@ To remove a mask, set this property to null.

    - src/pixi/extras/TilingSprite.js:43 + src/pixi/extras/TilingSprite.js:24

    @@ -3305,16 +3064,16 @@ To remove a mask, set this property to null.

    +

    Inherited from + + DisplayObjectContainer + - -

    - - Defined in - + but overwritten in - src/pixi/extras/TilingSprite.js:27 + src/pixi/extras/TilingSprite.js:51

    @@ -3324,7 +3083,7 @@ To remove a mask, set this property to null.

    -

    The width of the tiling sprite

    +

    The width of the sprite, setting this will actually modify the scale to acheive the value set

    @@ -3400,7 +3159,7 @@ To remove a mask, set this property to null.

    - src/pixi/display/DisplayObject.js:125 + src/pixi/display/DisplayObject.js:127

    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html deleted file mode 100644 index 28c727b..0000000 --- a/docs/classes/WebGLBatch.html +++ /dev/null @@ -1,3151 +0,0 @@ - - - - - WebGLBatch - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    WebGLBatch Class

    -
    - - - - - - - - - - - Module: PIXI - - - - -
    - - - -
    -

    A WebGLBatch Enables a group of sprites to be drawn using the same settings. -if a group of sprites all have the same baseTexture and blendMode then they can be -grouped into a batch. All the sprites in a batch can then be drawn in one go by the -GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch -even if the batch only contains one sprite. Batching is handled automatically by the -webGL renderer. A good tip is: the smaller the number of batchs there are, the faster -the webGL renderer will run.

    - -
    - - -
    -

    Constructor

    -
    -

    WebGLBatch

    - - -
    - (
      - -
    • - - gl - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:5 - -

    - - - - - -
    - -
    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - gl - WebGLContext - - - - -
      -

      an instance of the webGL context

      - -
      - - -
    • - -
    -
    - - - - - -
    - -
    - - -
    - - -
    -
    -

    Item Index

    - - -
    -

    Methods

    - - -
    - - - - - - - -
    - - -
    -

    Methods

    - - -
    -

    addDisplayObjectAndChildren

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:430 - -

    - - - - - -
    - -
    -

    Adds a display object and children to the webgl context

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    -

    addFilterBlocks

    - - -
    - (
      - -
    • - - start - -
    • - -
    • - - end - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:376 - -

    - - - - - -
    - -
    -

    Adds filter blocks

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - start - FilterBlock - - - - -
      - -
      - - -
    • - -
    • - - end - FilterBlock - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    clean

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:71 - -

    - - - - - -
    - -
    -

    Cleans the batch so that is can be returned to an object pool and reused

    - -
    - - - - - - -
    - - -
    -

    growBatch

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:292 - -

    - - - - - -
    - -
    -

    Grows the size of the batch. As the elements in the batch cannot have a dynamic size this -function is used to increase the size of the batch. It also creates a little extra room so -that the batch does not need to be resized every time a sprite is added

    - -
    - - - - - - -
    - - -
    -

    init

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:105 - -

    - - - - - -
    - -
    -

    inits the batch's texture and blend mode based if the supplied sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - Sprite - - - - -
      -

      the first sprite to be added to the batch. Only sprites with - the same base texture and blend mode will be allowed to be added to this batch

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    initStrip

    - - -
    - (
      - -
    • - - strip - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:974 - -

    - - - - - -
    - -
    -

    Initializes a strip to be rendered

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - strip - Strip - - - - -
      -

      The strip to initialize

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    initTilingSprite

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:781 - -

    - - - - - -
    - -
    -

    Initializes a tiling sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - TilingSprite - - - - -
      -

      The tiling sprite to initialize

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    insertAfter

    - - -
    - (
      - -
    • - - item - -
    • - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:647 - -

    - - - - - -
    - -
    -

    Inserts a displayObject into the linked list

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - item - DisplayObject - - - - -
      - -
      - - -
    • - -
    • - - displayObject - DisplayObject - - - - -
      -

      The object to insert

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    insertAfter

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    • - - previousSprite - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:153 - -

    - - - - - -
    - -
    -

    inserts a sprite after the specified sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - Sprite - - - - -
      -

      the sprite to be added

      - -
      - - -
    • - -
    • - - previousSprite - Sprite - - - - -
      -

      the first sprite will be inserted after this sprite

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    insertBefore

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    • - - nextSprite - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:125 - -

    - - - - - -
    - -
    -

    inserts a sprite before the specified sprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - Sprite - - - - -
      -

      the sprite to be added

      - -
      - - -
    • - -
    • - - nextSprite - NextSprite - - - - -
      -

      the first sprite will be inserted before this sprite

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    insertObject

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    • - - previousObject - -
    • - -
    • - - nextObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:509 - -

    - - - - - -
    - -
    -

    Inserts a displayObject into the linked list

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    -

    merge

    - - -
    - (
      - -
    • - - batch - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:267 - -

    - - - - - -
    - -
    -

    Merges two batchs together

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - batch - WebGLBatch - - - - -
      -

      the batch that will be merged

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    refresh

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:347 - -

    - - - - - -
    - -
    -

    Refresh's all the data in the batch and sync's it with the webGL buffers

    - -
    - - - - - - -
    - - -
    -

    remove

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:182 - -

    - - - - - -
    - -
    -

    removes a sprite from the batch

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - Sprite - - - - -
      -

      the sprite to be removed

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    removeDisplayObjectAndChildren

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:487 - -

    - - - - - -
    - -
    -

    Removes a display object and children to the webgl context

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    -

    removeFilterBlocks

    - - -
    - (
      - -
    • - - start - -
    • - -
    • - - end - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:416 - -

    - - - - - -
    - -
    -

    Remove filter blocks

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - start - FilterBlock - - - - -
      - -
      - - -
    • - -
    • - - end - FilterBlock - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    removeObject

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:702 - -

    - - - - - -
    - -
    -

    Removes a displayObject from the linked list

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - displayObject - DisplayObject - - - - -
      -

      The object to remove

      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    render

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:508 - -

    - - - - - -
    - -
    -

    Draws the batch to the frame buffer

    - -
    - - - - - - -
    - - -
    -

    render

    - - -
    - (
      - -
    • - - projection - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:55 - -

    - - - - - -
    - -
    -

    Renders the stage to its webgl view

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - projection - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderSpecial

    - - -
    - (
      - -
    • - - renderable - -
    • - -
    • - - projection - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:251 - -

    - - - - - -
    - -
    -

    Renders a specific renderable

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - renderable - DisplayObject - - - - -
      - -
      - - -
    • - -
    • - - projection - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderSpecific

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    • - - projection - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:91 - -

    - - - - - -
    - -
    -

    Renders a specific displayObject

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - displayObject - DisplayObject - - - - -
      - -
      - - -
    • - -
    • - - projection - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderStrip

    - - -
    - (
      - -
    • - - strip - -
    • - -
    • - - projection - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:840 - -

    - - - - - -
    - -
    -

    Renders a Strip

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - strip - Strip - - - - -
      -

      The strip to render

      - -
      - - -
    • - -
    • - - projection - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    renderTilingSprite

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    • - - projectionMatrix - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:932 - -

    - - - - - -
    - -
    -

    Renders a TilingSprite

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - TilingSprite - - - - -
      -

      The tiling sprite to render

      - -
      - - -
    • - -
    • - - projectionMatrix - Object - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    restoreLostContext

    - - -
    - (
      - -
    • - - gl - -
    • - -
    ) -
    - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:90 - -

    - - - - - -
    - -
    -

    Recreates the buffers in the event of a context loss

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - gl - WebGLContext - - - - -
      - -
      - - -
    • - -
    -
    - - - - - -
    - - -
    -

    setRenderable

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:33 - -

    - - - - - -
    - -
    -

    Add a display object to the webgl renderer

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    -

    split

    - - -
    - (
      - -
    • - - sprite - -
    • - -
    ) -
    - - - - - WebGLBatch - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:226 - -

    - - - - - -
    - -
    -

    Splits the batch into two with the specified sprite being the start of the new batch.

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - sprite - Sprite - - - - -
      -

      the sprite that indicates where the batch should be split

      - -
      - - -
    • - -
    -
    - - - -
    -

    Returns:

    - -
    - - - WebGLBatch: - -

    the new batch

    - - -
    -
    - - - -
    - - -
    -

    update

    - - - () - - - - - - - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLBatch.js:403 - -

    - - - - - -
    - -
    -

    Updates all the relevant geometry and uploads the data to the GPU

    - -
    - - - - - - -
    - - -
    -

    updateTexture

    - - -
    - (
      - -
    • - - displayObject - -
    • - -
    ) -
    - - - - - - - - private - - - - - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js:334 - -

    - - - - - -
    - -
    -

    Updates a webgl texture

    - -
    - - -
    -

    Parameters:

    - - -
    - - - - - -
    - - -
    - - - - - - - -
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index c0a37b3..572e229 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -266,7 +268,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:11 + src/pixi/renderers/webgl/WebGLRenderer.js:13

    @@ -405,15 +407,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - - -
  • - getBatch - - - static - -
  • @@ -442,15 +435,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    -
  • - -
  • - returnBatch - - - static - -
  • @@ -531,7 +515,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:269 + src/pixi/renderers/webgl/WebGLRenderer.js:297

    @@ -575,81 +559,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    -
  • - - -
    -

    getBatch

    - - - () - - - - - WebGLBatch - - - - - - - private - - - - - - static - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderer.js:104 - -

    - - - - - -
    - -
    -

    Gets a new WebGLBatch from the pool

    - -
    - - - - -
    -

    Returns:

    - -
    - - - WebGLBatch: - - -
    -
    - - -
    @@ -697,7 +606,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:319 + src/pixi/renderers/webgl/WebGLRenderer.js:378

    @@ -787,7 +696,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:332 + src/pixi/renderers/webgl/WebGLRenderer.js:391

    @@ -875,7 +784,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:138 + src/pixi/renderers/webgl/WebGLRenderer.js:125

    @@ -970,7 +879,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:288 + src/pixi/renderers/webgl/WebGLRenderer.js:325

    @@ -1030,99 +939,6 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - - - -
    -

    returnBatch

    - - -
    - (
      - -
    • - - batch - -
    • - -
    ) -
    - - - - - - - - private - - - - - - static - - - - - - -
    - - - -

    - - Defined in - - - - - src/pixi/renderers/webgl/WebGLRenderer.js:124 - -

    - - - - - -
    - -
    -

    Puts a batch back into the pool

    - -
    - - -
    -

    Parameters:

    - -
      - -
    • - - batch - WebGLBatch - - - - -
      -

      The batch to return

      - -
      - - -
    • - -
    -
    - - - - -
    @@ -1172,7 +988,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:225 + src/pixi/renderers/webgl/WebGLRenderer.js:250

    @@ -1255,7 +1071,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - src/pixi/renderers/webgl/WebGLRenderer.js:209 + src/pixi/renderers/webgl/WebGLRenderer.js:223

    diff --git a/docs/data.json b/docs/data.json index fb8d8b0..cc4d2e2 100644 --- a/docs/data.json +++ b/docs/data.json @@ -2,7 +2,7 @@ "project": { "name": "Pixi.JS", "description": "Pixi.js is a fast lightweight 2D library that works across all devices.", - "version": "1.3.0", + "version": "1.4.0", "url": "http://goodboydigital.com/", "logo": "http://www.goodboydigital.com/pixijs/logo_small.png" }, @@ -83,7 +83,7 @@ "name": "src/pixi/display/Sprite.js", "modules": {}, "classes": { - "Sprite": 1 + "Sprite™": 1 }, "fors": {}, "namespaces": {} @@ -97,15 +97,6 @@ "fors": {}, "namespaces": {} }, - "src/pixi/extras/CustomRenderable.js": { - "name": "src/pixi/extras/CustomRenderable.js", - "modules": {}, - "classes": { - "CustomRenderable": 1 - }, - "fors": {}, - "namespaces": {} - }, "src/pixi/extras/Rope.js": { "name": "src/pixi/extras/Rope.js", "modules": {}, @@ -177,6 +168,22 @@ "fors": {}, "namespaces": {} }, + "src/pixi/filters/ColorStepFilter.js": { + "name": "src/pixi/filters/ColorStepFilter.js", + "modules": {}, + "classes": { + "ColorStepFilter": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/filters/CrossHatchFilter.js": { + "name": "src/pixi/filters/CrossHatchFilter.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/filters/DisplacementFilter.js": { "name": "src/pixi/filters/DisplacementFilter.js", "modules": {}, @@ -186,6 +193,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/filters/DotScreenFilter.js": { + "name": "src/pixi/filters/DotScreenFilter.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/filters/FilterBlock.js": { "name": "src/pixi/filters/FilterBlock.js", "modules": {}, @@ -193,11 +207,11 @@ "fors": {}, "namespaces": {} }, - "src/pixi/filters/GreyFilter.js": { - "name": "src/pixi/filters/GreyFilter.js", + "src/pixi/filters/GrayFilter.js": { + "name": "src/pixi/filters/GrayFilter.js", "modules": {}, "classes": { - "GreyFilter": 1 + "GrayFilter": 1 }, "fors": {}, "namespaces": {} @@ -214,9 +228,14 @@ "src/pixi/filters/PixelateFilter.js": { "name": "src/pixi/filters/PixelateFilter.js", "modules": {}, - "classes": { - "PixelateFilter": 1 - }, + "classes": {}, + "fors": {}, + "namespaces": {} + }, + "src/pixi/filters/RGBSplitFilter.js": { + "name": "src/pixi/filters/RGBSplitFilter.js", + "modules": {}, + "classes": {}, "fors": {}, "namespaces": {} }, @@ -236,6 +255,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/filters/TwistFilter.js": { + "name": "src/pixi/filters/TwistFilter.js", + "modules": {}, + "classes": { + "PixelateFilter": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/AssetLoader.js": { "name": "src/pixi/loaders/AssetLoader.js", "modules": {}, @@ -245,6 +273,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/AtlasLoader.js": { + "name": "src/pixi/loaders/AtlasLoader.js", + "modules": {}, + "classes": { + "AtlasLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/BitmapFontLoader.js": { "name": "src/pixi/loaders/BitmapFontLoader.js", "modules": {}, @@ -299,6 +336,20 @@ "fors": {}, "namespaces": {} }, + "src/pixi/renderers/canvas/utils/CanvasMaskManager.js": { + "name": "src/pixi/renderers/canvas/utils/CanvasMaskManager.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, + "src/pixi/renderers/canvas/utils/CanvasTinter.js": { + "name": "src/pixi/renderers/canvas/utils/CanvasTinter.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/renderers/canvas/CanvasGraphics.js": { "name": "src/pixi/renderers/canvas/CanvasGraphics.js", "modules": {}, @@ -315,10 +366,49 @@ "fors": {}, "namespaces": {} }, + "src/pixi/renderers/webgl/utils/WebGLFilterManager.js": { + "name": "src/pixi/renderers/webgl/utils/WebGLFilterManager.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, + "src/pixi/renderers/webgl/utils/WebGLGraphics.js": { + "name": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "modules": {}, + "classes": { + "CanvasGraphics": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/renderers/webgl/utils/WebGLMaskManager.js": { + "name": "src/pixi/renderers/webgl/utils/WebGLMaskManager.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, + "src/pixi/renderers/webgl/utils/WebGLShaderManager.js": { + "name": "src/pixi/renderers/webgl/utils/WebGLShaderManager.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, + "src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js": { + "name": "src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/renderers/webgl/PixiShader.js": { "name": "src/pixi/renderers/webgl/PixiShader.js", "modules": {}, - "classes": {}, + "classes": { + "PIXI.PixiShader": 1 + }, "fors": {}, "namespaces": {} }, @@ -336,38 +426,6 @@ "fors": {}, "namespaces": {} }, - "src/pixi/renderers/webgl/WebGLBatch.js": { - "name": "src/pixi/renderers/webgl/WebGLBatch.js", - "modules": {}, - "classes": {}, - "fors": {}, - "namespaces": {} - }, - "src/pixi/renderers/webgl/WebGLFilterManager.js": { - "name": "src/pixi/renderers/webgl/WebGLFilterManager.js", - "modules": {}, - "classes": {}, - "fors": {}, - "namespaces": {} - }, - "src/pixi/renderers/webgl/WebGLGraphics.js": { - "name": "src/pixi/renderers/webgl/WebGLGraphics.js", - "modules": {}, - "classes": { - "CanvasGraphics": 1 - }, - "fors": {}, - "namespaces": {} - }, - "src/pixi/renderers/webgl/WebGLRenderGroup.js": { - "name": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "modules": {}, - "classes": { - "WebGLBatch": 1 - }, - "fors": {}, - "namespaces": {} - }, "src/pixi/renderers/webgl/WebGLRenderer.js": { "name": "src/pixi/renderers/webgl/WebGLRenderer.js", "modules": {}, @@ -513,20 +571,21 @@ "DisplayObject": 1, "DisplayObjectContainer": 1, "MovieClip": 1, - "Sprite": 1, + "Sprite™": 1, "Stage": 1, - "CustomRenderable": 1, "Spine": 1, "TilingSprite": 1, "AbstractFilter": 1, "BlurFilter": 1, "ColorMatrixFilter": 1, + "ColorStepFilter": 1, "DisplacementFilter": 1, - "GreyFilter": 1, - "InvertFilter": 1, "PixelateFilter": 1, + "GrayFilter": 1, + "InvertFilter": 1, "SepiaFilter": 1, "AssetLoader": 1, + "AtlasLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, "JsonLoader": 1, @@ -534,7 +593,7 @@ "Graphics": 1, "CanvasGraphics": 1, "CanvasRenderer": 1, - "WebGLBatch": 1, + "PIXI.PixiShader": 1, "WebGLRenderer": 1, "BitmapText": 1, "Text": 1, @@ -552,7 +611,7 @@ "namespaces": {}, "tag": "module", "file": "src/pixi/InteractionManager.js", - "line": 646 + "line": 638 } }, "classes": { @@ -757,9 +816,9 @@ } ] }, - "Sprite": { - "name": "Sprite", - "shortname": "Sprite", + "Sprite™": { + "name": "Sprite™", + "shortname": "Sprite™", "classitems": [], "plugins": [], "extensions": [], @@ -767,7 +826,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/display/Sprite.js", - "line": 10, + "line": 11, "description": "The SPrite object is the base for all textured objects that are rendered to the screen", "extends": "DisplayObjectContainer", "is_constructor": 1, @@ -797,26 +856,11 @@ "params": [ { "name": "backgroundColor", - "description": "the background color of the stage, easiest way to pass this in is in hex format\n\t\tlike: 0xFFFFFF for white", + "description": "the background color of the stage, easiest way to pass this in is in hex format\n like: 0xFFFFFF for white", "type": "Number" } ] }, - "CustomRenderable": { - "name": "CustomRenderable", - "shortname": "CustomRenderable", - "classitems": [], - "plugins": [], - "extensions": [], - "plugin_for": [], - "extension_for": [], - "module": "PIXI", - "file": "src/pixi/extras/CustomRenderable.js", - "line": 6, - "description": "This object is one that will allow you to specify custom rendering functions based on render type", - "extends": "DisplayObject", - "is_constructor": 1 - }, "Spine": { "name": "Spine", "shortname": "Spine", @@ -884,7 +928,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/filters/AbstractFilter.js", - "line": 6, + "line": 5, "description": "This is the base class for creating a pixi.js filter. Currently only webGL supports filters.\nIf you want to make a custom filter this should be your base class.", "is_constructor": 1, "params": [ @@ -893,7 +937,7 @@ "description": "" }, { - "name": "unifroms", + "name": "uniforms", "description": "" } ] @@ -908,8 +952,8 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/filters/BlurFilter.js", - "line": 6, - "description": "The BlurFilter applies a Gaussian blur to an object. \n The strength of the blur can be set for x- and y-axis separately (always relative to the stage).", + "line": 5, + "description": "The BlurFilter applies a Gaussian blur to an object.\n The strength of the blur can be set for x- and y-axis separately (always relative to the stage).", "contructor": "" }, "ColorMatrixFilter": { @@ -923,7 +967,21 @@ "module": "PIXI", "file": "src/pixi/filters/ColorMatrixFilter.js", "line": 5, - "description": "The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA \n color and alpha values of every pixel on your displayObject to produce a result \n with a new set of RGBA color and alpha values. Its pretty powerful!", + "description": "The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA\n color and alpha values of every pixel on your displayObject to produce a result\n with a new set of RGBA color and alpha values. Its pretty powerful!", + "contructor": "" + }, + "ColorStepFilter": { + "name": "ColorStepFilter", + "shortname": "ColorStepFilter", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/filters/ColorStepFilter.js", + "line": 5, + "description": "This turns your displayObjects to black and white.", "contructor": "" }, "DisplacementFilter": { @@ -936,8 +994,8 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/filters/DisplacementFilter.js", - "line": 6, - "description": "The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object. \n You can use this filter to apply all manor of crazy warping effects\n Currently the r property of the texture is used offset the x and the g propery of the texture is used to offset the y.", + "line": 5, + "description": "The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object.\n You can use this filter to apply all manor of crazy warping effects\n Currently the r property of the texture is used offset the x and the g propery of the texture is used to offset the y.", "contructor": "", "params": [ { @@ -947,17 +1005,31 @@ } ] }, - "GreyFilter": { - "name": "GreyFilter", - "shortname": "GreyFilter", + "PixelateFilter": { + "name": "PixelateFilter", + "shortname": "PixelateFilter", "classitems": [], "plugins": [], "extensions": [], "plugin_for": [], "extension_for": [], "module": "PIXI", - "file": "src/pixi/filters/GreyFilter.js", - "line": 6, + "file": "src/pixi/filters/TwistFilter.js", + "line": 5, + "description": "This filter applies a pixlate effect making display objects appear 'blocky'", + "contructor": "" + }, + "GrayFilter": { + "name": "GrayFilter", + "shortname": "GrayFilter", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/filters/GrayFilter.js", + "line": 5, "description": "This turns your displayObjects to black and white.", "contructor": "" }, @@ -975,20 +1047,6 @@ "description": "This inverts your displayObjects colors.", "contructor": "" }, - "PixelateFilter": { - "name": "PixelateFilter", - "shortname": "PixelateFilter", - "classitems": [], - "plugins": [], - "extensions": [], - "plugin_for": [], - "extension_for": [], - "module": "PIXI", - "file": "src/pixi/filters/PixelateFilter.js", - "line": 5, - "description": "This filter applies a pixlate effect making display objects appear \"blocky\"", - "contructor": "" - }, "SepiaFilter": { "name": "SepiaFilter", "shortname": "SepiaFilter", @@ -999,7 +1057,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/filters/SepiaFilter.js", - "line": 7, + "line": 5, "description": "This applies a sepia effect to your displayObjects.", "contructor": "" }, @@ -1014,7 +1072,7 @@ "module": "PIXI", "file": "src/pixi/loaders/AssetLoader.js", "line": 5, - "description": "A Class that loads a bunch of images / sprite sheet / bitmap font files. Once the\nassets have been loaded they are added to the PIXI Texture cache and can be accessed\neasily through PIXI.Texture.fromImage() and PIXI.Sprite.fromImage()\nWhen all items have been loaded this class will dispatch a \"onLoaded\" event\nAs each individual item is loaded this class will dispatch a \"onProgress\" event", + "description": "A Class that loads a bunch of images / sprite sheet / bitmap font files. Once the\nassets have been loaded they are added to the PIXI Texture cache and can be accessed\neasily through PIXI.Texture.fromImage() and PIXI.Sprite.fromImage()\nWhen all items have been loaded this class will dispatch a 'onLoaded' event\nAs each individual item is loaded this class will dispatch a 'onProgress' event", "is_constructor": 1, "uses": [ "EventTarget" @@ -1022,7 +1080,7 @@ "params": [ { "name": "assetURLs", - "description": "an array of image/sprite sheet urls that you would like loaded\n supported. Supported image formats include \"jpeg\", \"jpg\", \"png\", \"gif\". Supported\n sprite sheet data formats only include \"JSON\" at this time. Supported bitmap font\n data formats include \"xml\" and \"fnt\".", + "description": "an array of image/sprite sheet urls that you would like loaded\n supported. Supported image formats include 'jpeg', 'jpg', 'png', 'gif'. Supported\n sprite sheet data formats only include 'JSON' at this time. Supported bitmap font\n data formats include 'xml' and 'fnt'.", "type": "Array" }, { @@ -1032,6 +1090,33 @@ } ] }, + "AtlasLoader": { + "name": "AtlasLoader", + "shortname": "AtlasLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 5, + "description": "The atlas file loader is used to load in Atlas data and parsing it\nWhen loaded this class will dispatch a 'loaded' event\nIf load failed this class will dispatch a 'error' event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "BitmapFontLoader": { "name": "BitmapFontLoader", "shortname": "BitmapFontLoader", @@ -1043,7 +1128,7 @@ "module": "PIXI", "file": "src/pixi/loaders/BitmapFontLoader.js", "line": 5, - "description": "The xml loader is used to load in XML bitmap font data (\"xml\" or \"fnt\")\nTo generate the data you can use http://www.angelcode.com/products/bmfont/\nThis loader will also load the image file as the data.\nWhen loaded this class will dispatch a \"loaded\" event", + "description": "The xml loader is used to load in XML bitmap font data ('xml' or 'fnt')\nTo generate the data you can use http://www.angelcode.com/products/bmfont/\nThis loader will also load the image file as the data.\nWhen loaded this class will dispatch a 'loaded' event", "uses": [ "EventTarget" ], @@ -1072,7 +1157,7 @@ "module": "PIXI", "file": "src/pixi/loaders/ImageLoader.js", "line": 5, - "description": "The image loader class is responsible for loading images file formats (\"jpeg\", \"jpg\", \"png\" and \"gif\")\nOnce the image has been loaded it is stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId()\nWhen loaded this class will dispatch a 'loaded' event", + "description": "The image loader class is responsible for loading images file formats ('jpeg', 'jpg', 'png' and 'gif')\nOnce the image has been loaded it is stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId()\nWhen loaded this class will dispatch a 'loaded' event", "uses": [ "EventTarget" ], @@ -1101,7 +1186,7 @@ "module": "PIXI", "file": "src/pixi/loaders/JsonLoader.js", "line": 5, - "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a 'loaded' event\nIf load failed this class will dispatch a 'error' event", "uses": [ "EventTarget" ], @@ -1130,7 +1215,7 @@ "module": "PIXI", "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 5, - "description": "The sprite sheet loader is used to load in JSON sprite sheet data\nTo generate the data you can use http://www.codeandweb.com/texturepacker and publish the \"JSON\" format\nThere is a free version so thats nice, although the paid version is great value for money.\nIt is highly recommended to use Sprite sheets (also know as texture atlas\") as it means sprite\"s can be batched and drawn together for highly increased rendering speed.\nOnce the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId()\nThis loader will also load the image file that the Spritesheet points to as well as the data.\nWhen loaded this class will dispatch a \"loaded\" event", + "description": "The sprite sheet loader is used to load in JSON sprite sheet data\nTo generate the data you can use http://www.codeandweb.com/texturepacker and publish the 'JSON' format\nThere is a free version so thats nice, although the paid version is great value for money.\nIt is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed.\nOnce the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId()\nThis loader will also load the image file that the Spritesheet points to as well as the data.\nWhen loaded this class will dispatch a 'loaded' event", "uses": [ "EventTarget" ], @@ -1172,7 +1257,7 @@ "plugin_for": [], "extension_for": [], "module": "PIXI", - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", "line": 5, "description": "A set of functions used by the webGL renderer to draw the primitive graphics data" }, @@ -1186,7 +1271,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 6, + "line": 5, "description": "the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL.\nDont forget to add the view to your DOM or you will not see anything :)", "is_constructor": 1, "params": [ @@ -1212,27 +1297,18 @@ } ] }, - "WebGLBatch": { - "name": "WebGLBatch", - "shortname": "WebGLBatch", + "PIXI.PixiShader": { + "name": "PIXI.PixiShader", + "shortname": "PIXI.PixiShader", "classitems": [], "plugins": [], "extensions": [], "plugin_for": [], "extension_for": [], "module": "PIXI", - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 5, - "description": "A WebGLBatch Enables a group of sprites to be drawn using the same settings.\nif a group of sprites all have the same baseTexture and blendMode then they can be\ngrouped into a batch. All the sprites in a batch can then be drawn in one go by the\nGPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch\neven if the batch only contains one sprite. Batching is handled automatically by the\nwebGL renderer. A good tip is: the smaller the number of batchs there are, the faster\nthe webGL renderer will run.", - "is_constructor": 1, - "params": [ - { - "name": "gl", - "description": "an instance of the webGL context", - "type": "WebGLContext" - } - ], - "contructor": "" + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 6, + "is_constructor": 1 }, "WebGLRenderer": { "name": "WebGLRenderer", @@ -1244,7 +1320,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 11, + "line": 13, "description": "the WebGLRenderer is draws the stage and all its content onto a webGL enabled canvas. This renderer\nshould be used for browsers support webGL. This Render works by automatically managing webGLBatchs.\nSo no need for Sprite Batch's or Sprite Cloud's\nDont forget to add the view to your DOM or you will not see anything :)", "is_constructor": 1, "params": [ @@ -1286,7 +1362,7 @@ "module": "PIXI", "file": "src/pixi/text/BitmapText.js", "line": 5, - "description": "A Text Object will create a line(s) of text using bitmap font. To split a line you can use \"\\n\", \"\\r\" or \"\\r\\n\"\nYou can generate the fnt files using\nhttp://www.angelcode.com/products/bmfont/ for windows or\nhttp://www.bmglyph.com/ for mac.", + "description": "A Text Object will create a line(s) of text using bitmap font. To split a line you can use '\\n', '\\r' or '\\r\\n'\nYou can generate the fnt files using\nhttp://www.angelcode.com/products/bmfont/ for windows or\nhttp://www.bmglyph.com/ for mac.", "extends": "DisplayObjectContainer", "is_constructor": 1, "params": [ @@ -1302,15 +1378,15 @@ "props": [ { "name": "font", - "description": "The size (optional) and bitmap font id (required) eq \"Arial\" or \"20px Arial\" (must have loaded previously)", + "description": "The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously)", "type": "String" }, { "name": "align", - "description": "An alignment of the multiline text (\"left\", \"center\" or \"right\")", + "description": "An alignment of the multiline text ('left', 'center' or 'right')", "type": "String", "optional": true, - "optdefault": "\"left\"" + "optdefault": "'left'" } ] } @@ -1327,7 +1403,7 @@ "module": "PIXI", "file": "src/pixi/text/Text.js", "line": 5, - "description": "A Text Object will create a line(s) of text to split a line you can use \"\\n\"", + "description": "A Text Object will create a line(s) of text to split a line you can use '\\n'", "extends": "Sprite", "is_constructor": 1, "params": [ @@ -1344,27 +1420,27 @@ "props": [ { "name": "font", - "description": "default \"bold 20pt Arial\" The style and size of the font", + "description": "default 'bold 20pt Arial' The style and size of the font", "type": "String", "optional": true }, { "name": "fill", - "description": "A canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\"", + "description": "A canvas fillstyle that will be used on the text eg 'red', '#00FF00'", "type": "Object", "optional": true, - "optdefault": "\"black\"" + "optdefault": "'black'" }, { "name": "align", - "description": "An alignment of the multiline text (\"left\", \"center\" or \"right\")", + "description": "An alignment of the multiline text ('left', 'center' or 'right')", "type": "String", "optional": true, - "optdefault": "\"left\"" + "optdefault": "'left'" }, { "name": "stroke", - "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", + "description": "A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00'", "type": "String", "optional": true }, @@ -1428,7 +1504,7 @@ "module": "PIXI", "file": "src/pixi/textures/RenderTexture.js", "line": 5, - "description": "A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it.\n\n__Hint__: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded. \nOtherwise black rectangles will be drawn instead. \n\nRenderTexture takes snapshot of DisplayObject passed to render method. If DisplayObject is passed to render method, position and rotation of it will be ignored. For example:\n\n\tvar renderTexture = new PIXI.RenderTexture(800, 600);\n\tvar sprite = PIXI.Sprite.fromImage(\"spinObj_01.png\");\n\tsprite.position.x = 800/2;\n\tsprite.position.y = 600/2;\n\tsprite.anchor.x = 0.5;\n\tsprite.anchor.y = 0.5;\n\trenderTexture.render(sprite);\n\nSprite in this case will be rendered to 0,0 position. To render this sprite at center DisplayObjectContainer should be used:\n\n\tvar doc = new PIXI.DisplayObjectContainer();\n\tdoc.addChild(sprite);\n\trenderTexture.render(doc); // Renders to center of renderTexture", + "description": "A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it.\n\n__Hint__: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded.\nOtherwise black rectangles will be drawn instead.\n\nRenderTexture takes snapshot of DisplayObject passed to render method. If DisplayObject is passed to render method, position and rotation of it will be ignored. For example:\n\n var renderTexture = new PIXI.RenderTexture(800, 600);\n var sprite = PIXI.Sprite.fromImage(\"spinObj_01.png\");\n sprite.position.x = 800/2;\n sprite.position.y = 600/2;\n sprite.anchor.x = 0.5;\n sprite.anchor.y = 0.5;\n renderTexture.render(sprite);\n\nSprite in this case will be rendered to 0,0 position. To render this sprite at center DisplayObjectContainer should be used:\n\n var doc = new PIXI.DisplayObjectContainer();\n doc.addChild(sprite);\n renderTexture.render(doc); // Renders to center of renderTexture", "extends": "Texture", "is_constructor": 1, "params": [ @@ -1495,7 +1571,7 @@ "line": 6, "description": "Adds event emitter functionality to a class", "example": [ - "\n\t\tfunction MyEmitter() {\n\t\t\tPIXI.EventTarget.call(this); //mixes in event target stuff\n\t\t}\n\n\t\tvar em = new MyEmitter();\n\t\tem.emit({ type: 'eventName', data: 'some data' });" + "\n function MyEmitter() {\n PIXI.EventTarget.call(this); //mixes in event target stuff\n }\n\n var em = new MyEmitter();\n em.emit({ type: 'eventName', data: 'some data' });" ] }, "PolyK._PointInTriangle": { @@ -1509,7 +1585,7 @@ "module": "PIXI", "namespace": "PolyK", "file": "src/pixi/utils/Polyk.js", - "line": 109, + "line": 116, "description": "Checks if a point is within a triangle", "access": "private", "tagname": "" @@ -1525,7 +1601,7 @@ "module": "PIXI", "namespace": "PolyK", "file": "src/pixi/utils/Polyk.js", - "line": 139, + "line": 146, "description": "Checks if a shape is convex", "access": "private", "tagname": "" @@ -1541,7 +1617,7 @@ "module": "PIXI", "namespace": "PolyK", "file": "src/pixi/utils/Utils.js", - "line": 81, + "line": 88, "description": "A wrapper for ajax requests to be handled cross browser", "is_constructor": 1 }, @@ -1578,7 +1654,7 @@ "module": "PIXI", "namespace": "PolyK", "file": "src/pixi/InteractionManager.js", - "line": 646, + "line": 638, "description": "Holds all information related to an Interaction event", "is_constructor": 1 } @@ -2018,7 +2094,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 125, + "line": 127, "description": "[read-only] Current transform of the object based on world (parent) factors", "itemtype": "property", "name": "worldTransform", @@ -2030,7 +2106,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 135, + "line": 137, "description": "[read-only] Current transform of the object locally", "itemtype": "property", "name": "localTransform", @@ -2042,7 +2118,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 145, + "line": 147, "description": "[NYI] Unkown", "itemtype": "property", "name": "color", @@ -2053,7 +2129,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 154, + "line": 156, "description": "[NYI] Holds whether or not this object is dynamic, for rendering optimization", "itemtype": "property", "name": "dynamic", @@ -2064,7 +2140,12 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 174, + "line": 173, + "class": "DisplayObject" + }, + { + "file": "src/pixi/display/DisplayObject.js", + "line": 185, "description": "A callback that is used when the users clicks on the displayObject with their mouse", "itemtype": "method", "name": "click", @@ -2079,7 +2160,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 180, + "line": 191, "description": "A callback that is used when the user clicks the mouse down over the sprite", "itemtype": "method", "name": "mousedown", @@ -2094,7 +2175,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 186, + "line": 197, "description": "A callback that is used when the user releases the mouse that was over the displayObject\nfor this callback to be fired the mouse must have been pressed down over the displayObject", "itemtype": "method", "name": "mouseup", @@ -2109,7 +2190,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 193, + "line": 204, "description": "A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject\nfor this callback to be fired, The touch must have started over the displayObject", "itemtype": "method", "name": "mouseupoutside", @@ -2124,7 +2205,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 200, + "line": 211, "description": "A callback that is used when the users mouse rolls over the displayObject", "itemtype": "method", "name": "mouseover", @@ -2139,7 +2220,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 206, + "line": 217, "description": "A callback that is used when the users mouse leaves the displayObject", "itemtype": "method", "name": "mouseout", @@ -2154,7 +2235,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 217, + "line": 228, "description": "A callback that is used when the users taps on the sprite with their finger\nbasically a touch version of click", "itemtype": "method", "name": "tap", @@ -2169,7 +2250,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 224, + "line": 235, "description": "A callback that is used when the user touch's over the displayObject", "itemtype": "method", "name": "touchstart", @@ -2184,7 +2265,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 230, + "line": 241, "description": "A callback that is used when the user releases a touch over the displayObject", "itemtype": "method", "name": "touchend", @@ -2199,7 +2280,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 236, + "line": 247, "description": "A callback that is used when the user releases the touch that was over the displayObject\nfor this callback to be fired, The touch must have started over the sprite", "itemtype": "method", "name": "touchendoutside", @@ -2214,7 +2295,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 247, + "line": 258, "description": "[Deprecated] Indicates if the sprite will have touch and mouse interactivity. It is false by default\nInstead of using this function you can now simply set the interactive property to true or false", "itemtype": "method", "name": "setInteractive", @@ -2231,7 +2312,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 260, + "line": 271, "description": "Indicates if the sprite will have touch and mouse interactivity. It is false by default", "itemtype": "property", "name": "interactive", @@ -2241,7 +2322,7 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 280, + "line": 291, "description": "Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it.\nIn PIXI a regular mask must be a PIXI.Ggraphics object. This allows for much faster masking in canvas as it utilises shape clipping.\nTo remove a mask, set this property to null.", "itemtype": "property", "name": "mask", @@ -2250,8 +2331,8 @@ }, { "file": "src/pixi/display/DisplayObject.js", - "line": 318, - "description": "Sets the filters for the displayObject. \n* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer.\nTo remove filters simply set this property to 'null'", + "line": 314, + "description": "Sets the filters for the displayObject.\n* IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer.\nTo remove filters simply set this property to 'null'", "itemtype": "property", "name": "filters", "type": "Array An array of filters", @@ -2276,6 +2357,24 @@ { "file": "src/pixi/display/DisplayObjectContainer.js", "line": 32, + "description": "The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set", + "itemtype": "property", + "name": "width", + "type": "Number", + "class": "DisplayObjectContainer" + }, + { + "file": "src/pixi/display/DisplayObjectContainer.js", + "line": 50, + "description": "The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set", + "itemtype": "property", + "name": "height", + "type": "Number", + "class": "DisplayObjectContainer" + }, + { + "file": "src/pixi/display/DisplayObjectContainer.js", + "line": 69, "description": "Adds a child to the container.", "itemtype": "method", "name": "addChild", @@ -2290,7 +2389,7 @@ }, { "file": "src/pixi/display/DisplayObjectContainer.js", - "line": 120, + "line": 94, "description": "Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown", "itemtype": "method", "name": "addChildAt", @@ -2310,7 +2409,7 @@ }, { "file": "src/pixi/display/DisplayObjectContainer.js", - "line": 207, + "line": 122, "description": "[NYI] Swaps the depth of 2 displayObjects", "itemtype": "method", "name": "swapChildren", @@ -2332,7 +2431,7 @@ }, { "file": "src/pixi/display/DisplayObjectContainer.js", - "line": 256, + "line": 148, "description": "Returns the Child at the specified index", "itemtype": "method", "name": "getChildAt", @@ -2347,7 +2446,7 @@ }, { "file": "src/pixi/display/DisplayObjectContainer.js", - "line": 274, + "line": 166, "description": "Removes a child from the container.", "itemtype": "method", "name": "removeChild", @@ -2486,78 +2585,90 @@ "file": "src/pixi/display/Sprite.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 23, - "description": "The anchor sets the origin point of the texture.\nThe default is 0,0 this means the textures origin is the top left \nSetting than anchor to 0.5,0.5 means the textures origin is centered\nSetting the anchor to 1,1 would mean the textures origin points will be the bottom right", + "line": 24, + "description": "The anchor sets the origin point of the texture.\nThe default is 0,0 this means the textures origin is the top left\nSetting than anchor to 0.5,0.5 means the textures origin is centered\nSetting the anchor to 1,1 would mean the textures origin points will be the bottom right", "itemtype": "property", "name": "anchor", "type": "Point", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 34, + "line": 35, "description": "The texture that the sprite is using", "itemtype": "property", "name": "texture", "type": "Texture", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 42, + "line": 43, "description": "The blend mode of sprite.\ncurrently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN", "itemtype": "property", "name": "blendMode", "type": "Number", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 51, + "line": 52, "description": "The width of the sprite (this is initially set by the texture)", "itemtype": "property", "name": "_width", "type": "Number", "access": "private", "tagname": "", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 60, + "line": 61, "description": "The height of the sprite (this is initially set by the texture)", "itemtype": "property", "name": "_height", "type": "Number", "access": "private", "tagname": "", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 86, + "line": 71, + "description": "The tint applied to the sprite. This is a hex value", + "itemtype": "property", + "name": "tint", + "type": "Number", + "default": "0xFFFFFF", + "access": "private", + "tagname": "", + "class": "Sprite™" + }, + { + "file": "src/pixi/display/Sprite.js", + "line": 101, "description": "The width of the sprite, setting this will actually modify the scale to acheive the value set", "itemtype": "property", "name": "width", "type": "Number", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 102, + "line": 117, "description": "The height of the sprite, setting this will actually modify the scale to acheive the value set", "itemtype": "property", "name": "height", "type": "Number", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 118, + "line": 133, "description": "Sets the texture of the sprite", "itemtype": "method", "name": "setTexture", @@ -2568,11 +2679,11 @@ "type": "Texture" } ], - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 145, + "line": 156, "description": "When the texture is updated, this event will fire to update the scale and frame", "itemtype": "method", "name": "onTextureUpdate", @@ -2584,11 +2695,11 @@ ], "access": "private", "tagname": "", - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 165, + "line": 416, "description": "Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId\n The frame ids are created when a Texture packer file has been loaded", "itemtype": "method", "name": "fromFrame", @@ -2604,11 +2715,11 @@ "description": "A new Sprite using a texture from the texture cache matching the frameId", "type": "Sprite" }, - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Sprite.js", - "line": 182, + "line": 433, "description": "Helper function that creates a sprite that will contain a texture based on an image url\n If the image is not in the texture cache it will be loaded", "itemtype": "method", "name": "fromImage", @@ -2624,7 +2735,7 @@ "description": "A new Sprite using a texture from the texture cache matching the image id", "type": "Sprite" }, - "class": "Sprite" + "class": "Sprite™" }, { "file": "src/pixi/display/Stage.js", @@ -2690,14 +2801,14 @@ }, { "file": "src/pixi/display/Stage.js", - "line": 109, + "line": 108, "description": "Sets the background color for the stage", "itemtype": "method", "name": "setBackgroundColor", "params": [ { "name": "backgroundColor", - "description": "the color of the background, easiest way to pass this in is in hex format\n\t\tlike: 0xFFFFFF for white", + "description": "the color of the background, easiest way to pass this in is in hex format\n like: 0xFFFFFF for white", "type": "Number" } ], @@ -2705,7 +2816,7 @@ }, { "file": "src/pixi/display/Stage.js", - "line": 125, + "line": 124, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2715,57 +2826,6 @@ }, "class": "Stage" }, - { - "file": "src/pixi/extras/CustomRenderable.js", - "line": 1, - "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "CustomRenderable" - }, - { - "file": "src/pixi/extras/CustomRenderable.js", - "line": 24, - "description": "If this object is being rendered by a CanvasRenderer it will call this callback", - "itemtype": "method", - "name": "renderCanvas", - "params": [ - { - "name": "renderer", - "description": "The renderer instance", - "type": "CanvasRenderer" - } - ], - "class": "CustomRenderable" - }, - { - "file": "src/pixi/extras/CustomRenderable.js", - "line": 35, - "description": "If this object is being rendered by a WebGLRenderer it will call this callback to initialize", - "itemtype": "method", - "name": "initWebGL", - "params": [ - { - "name": "renderer", - "description": "The renderer instance", - "type": "WebGLRenderer" - } - ], - "class": "CustomRenderable" - }, - { - "file": "src/pixi/extras/CustomRenderable.js", - "line": 46, - "description": "If this object is being rendered by a WebGLRenderer it will call this callback", - "itemtype": "method", - "name": "renderWebGL", - "params": [ - { - "name": "renderer", - "description": "The renderer instance", - "type": "WebGLRenderer" - } - ], - "class": "CustomRenderable" - }, { "file": "src/pixi/extras/Rope.js", "line": 1, @@ -2780,124 +2840,124 @@ }, { "file": "src/pixi/extras/Spine.js", - "line": 327, + "line": 211, "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 618, + "line": 504, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 625, + "line": 511, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 632, + "line": 518, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 640, + "line": 526, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 647, + "line": 533, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 654, + "line": 540, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 689, + "line": 575, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 697, + "line": 583, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 712, + "line": 598, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 716, + "line": 602, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 723, + "line": 609, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 730, + "line": 616, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 737, + "line": 623, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 749, + "line": 635, "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 756, + "line": 642, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 760, + "line": 646, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 769, + "line": 655, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 960, + "line": 846, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 966, + "line": 852, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 972, + "line": 858, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 978, + "line": 864, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 996, + "line": 882, "class": "Spine" }, { "file": "src/pixi/extras/Spine.js", - "line": 1415, + "line": 1307, "class": "Spine" }, { @@ -2914,34 +2974,7 @@ }, { "file": "src/pixi/extras/TilingSprite.js", - "line": 19, - "description": "The texture that the sprite is using", - "itemtype": "property", - "name": "texture", - "type": "Texture", - "class": "TilingSprite" - }, - { - "file": "src/pixi/extras/TilingSprite.js", - "line": 27, - "description": "The width of the tiling sprite", - "itemtype": "property", - "name": "width", - "type": "Number", - "class": "TilingSprite" - }, - { - "file": "src/pixi/extras/TilingSprite.js", - "line": 35, - "description": "The height of the tiling sprite", - "itemtype": "property", - "name": "height", - "type": "Number", - "class": "TilingSprite" - }, - { - "file": "src/pixi/extras/TilingSprite.js", - "line": 43, + "line": 24, "description": "The scaling of the image that is being tiled", "itemtype": "property", "name": "tileScale", @@ -2950,7 +2983,7 @@ }, { "file": "src/pixi/extras/TilingSprite.js", - "line": 51, + "line": 32, "description": "The offset position of the image that is being tiled", "itemtype": "property", "name": "tilePosition", @@ -2959,33 +2992,20 @@ }, { "file": "src/pixi/extras/TilingSprite.js", - "line": 68, - "description": "Sets the texture of the tiling sprite", - "itemtype": "method", - "name": "setTexture", - "params": [ - { - "name": "texture", - "description": "The PIXI texture that is displayed by the sprite", - "type": "Texture" - } - ], + "line": 51, + "description": "The width of the sprite, setting this will actually modify the scale to acheive the value set", + "itemtype": "property", + "name": "width", + "type": "Number", "class": "TilingSprite" }, { "file": "src/pixi/extras/TilingSprite.js", - "line": 84, - "description": "When the texture is updated, this event will fire to update the frame", - "itemtype": "method", - "name": "onTextureUpdate", - "params": [ - { - "name": "event", - "description": "" - } - ], - "access": "private", - "tagname": "", + "line": 67, + "description": "The height of the TilingSprite, setting this will actually modify the scale to acheive the value set", + "itemtype": "property", + "name": "height", + "type": "Number", "class": "TilingSprite" }, { @@ -2996,7 +3016,7 @@ }, { "file": "src/pixi/filters/AbstractFilter.js", - "line": 16, + "line": 15, "description": "An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion.\nFor example the blur filter has two passes blurX and blurY.", "itemtype": "property", "name": "passes", @@ -3022,7 +3042,7 @@ }, { "file": "src/pixi/filters/BlurFilter.js", - "line": 24, + "line": 21, "description": "Sets the strength of both the blurX and blurY properties simultaneously", "itemtype": "property", "name": "blur", @@ -3032,7 +3052,7 @@ }, { "file": "src/pixi/filters/BlurFilter.js", - "line": 40, + "line": 37, "description": "Sets the strength of the blurX property simultaneously", "itemtype": "property", "name": "blurX", @@ -3042,7 +3062,7 @@ }, { "file": "src/pixi/filters/BlurFilter.js", - "line": 56, + "line": 53, "description": "Sets the strength of the blurX property simultaneously", "itemtype": "property", "name": "blurY", @@ -3078,6 +3098,26 @@ "default": "[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]", "class": "ColorMatrixFilter" }, + { + "file": "src/pixi/filters/ColorStepFilter.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "ColorStepFilter" + }, + { + "file": "src/pixi/filters/ColorStepFilter.js", + "line": 40, + "description": "The number of steps.", + "itemtype": "property", + "name": "step", + "class": "ColorStepFilter" + }, + { + "file": "src/pixi/filters/CrossHatchFilter.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "DisplacementFilter" + }, { "file": "src/pixi/filters/DisplacementFilter.js", "line": 1, @@ -3086,7 +3126,7 @@ }, { "file": "src/pixi/filters/DisplacementFilter.js", - "line": 92, + "line": 86, "description": "The texture used for the displacemtent map * must be power of 2 texture at the moment", "itemtype": "property", "name": "map", @@ -3095,7 +3135,7 @@ }, { "file": "src/pixi/filters/DisplacementFilter.js", - "line": 107, + "line": 101, "description": "The multiplier used to scale the displacement result from the map calculation.", "itemtype": "property", "name": "scale", @@ -3104,32 +3144,56 @@ }, { "file": "src/pixi/filters/DisplacementFilter.js", - "line": 122, + "line": 116, "description": "The offset used to move the displacement map.", "itemtype": "property", "name": "offset", "type": "Point", "class": "DisplacementFilter" }, + { + "file": "src/pixi/filters/DotScreenFilter.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\noriginal filter: https://github.com/evanw/glfx.js/blob/master/src/filters/fun/dotscreen.js", + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/DotScreenFilter.js", + "line": 56, + "description": "This describes the the scale", + "itemtype": "property", + "name": "scale", + "type": "Number", + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/DotScreenFilter.js", + "line": 72, + "description": "This radius describes angle", + "itemtype": "property", + "name": "angle", + "type": "Number", + "class": "PixelateFilter" + }, { "file": "src/pixi/filters/FilterBlock.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "GreyFilter" + "class": "GrayFilter" }, { - "file": "src/pixi/filters/GreyFilter.js", + "file": "src/pixi/filters/GrayFilter.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "GreyFilter" + "class": "GrayFilter" }, { - "file": "src/pixi/filters/GreyFilter.js", + "file": "src/pixi/filters/GrayFilter.js", "line": 40, - "description": "The strength of the grey. 1 will make the object black and white, 0 will make the object its normal color", + "description": "The strength of the gray. 1 will make the object black and white, 0 will make the object its normal color", "itemtype": "property", - "name": "grey", - "class": "GreyFilter" + "name": "gray", + "class": "GrayFilter" }, { "file": "src/pixi/filters/InvertFilter.js", @@ -3153,7 +3217,7 @@ }, { "file": "src/pixi/filters/PixelateFilter.js", - "line": 50, + "line": 47, "description": "This a point that describes the size of the blocs. x is the width of the block and y is the the height", "itemtype": "property", "name": "size", @@ -3161,14 +3225,20 @@ "class": "PixelateFilter" }, { - "file": "src/pixi/filters/SepiaFilter.js", + "file": "src/pixi/filters/RGBSplitFilter.js", "line": 1, - "description": "/**\n * @author Mat Groves http://matgroves.com/ @Doormat23", + "author": "Mat Groves http://matgroves.com/ @Doormat23", "class": "SepiaFilter" }, { "file": "src/pixi/filters/SepiaFilter.js", - "line": 44, + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "SepiaFilter" + }, + { + "file": "src/pixi/filters/SepiaFilter.js", + "line": 42, "description": "The strength of the sepia. 1 will apply the full sepia effect, 0 will make the object its normal color", "itemtype": "property", "name": "sepia", @@ -3178,7 +3248,40 @@ "file": "src/pixi/filters/SmartBlurFilter.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "AssetLoader" + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/TwistFilter.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/TwistFilter.js", + "line": 55, + "description": "This point describes the the offset of the twist", + "itemtype": "property", + "name": "size", + "type": "Point", + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/TwistFilter.js", + "line": 71, + "description": "This radius describes size of the twist", + "itemtype": "property", + "name": "size", + "type": "Number", + "class": "PixelateFilter" + }, + { + "file": "src/pixi/filters/TwistFilter.js", + "line": 87, + "description": "This radius describes angle of the twist", + "itemtype": "property", + "name": "angle", + "type": "Number", + "class": "PixelateFilter" }, { "file": "src/pixi/loaders/AssetLoader.js", @@ -3215,7 +3318,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 61, + "line": 60, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -3223,7 +3326,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 66, + "line": 65, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -3231,7 +3334,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 74, + "line": 101, "description": "Starts loading the assets sequentially", "itemtype": "method", "name": "load", @@ -3239,7 +3342,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 104, + "line": 137, "description": "Invoked after each file is loaded", "itemtype": "method", "name": "onAssetLoaded", @@ -3247,6 +3350,42 @@ "tagname": "", "class": "AssetLoader" }, + { + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 1, + "author": "Martin Kelm http://mkelm.github.com", + "class": "AtlasLoader" + }, + { + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "AtlasLoader" + }, + { + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 40, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "AtlasLoader" + }, + { + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 158, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "AtlasLoader" + }, + { + "file": "src/pixi/loaders/AtlasLoader.js", + "line": 175, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "AtlasLoader" + }, { "file": "src/pixi/loaders/BitmapFontLoader.js", "line": 1, @@ -3446,7 +3585,7 @@ }, { "file": "src/pixi/loaders/JsonLoader.js", - "line": 140, + "line": 150, "description": "Invoke when json file loaded", "itemtype": "method", "name": "onLoaded", @@ -3456,7 +3595,7 @@ }, { "file": "src/pixi/loaders/JsonLoader.js", - "line": 154, + "line": 164, "description": "Invoke when error occured", "itemtype": "method", "name": "onError", @@ -3534,7 +3673,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 29, + "line": 28, "description": "The url of the bitmap font data", "itemtype": "property", "name": "url", @@ -3543,7 +3682,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 37, + "line": 36, "description": "Whether the requests should be treated as cross origin", "itemtype": "property", "name": "crossorigin", @@ -3552,7 +3691,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 45, + "line": 44, "description": "[read-only] The base url of the bitmap font data", "itemtype": "property", "name": "baseUrl", @@ -3562,7 +3701,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 54, + "line": 53, "description": "The texture being loaded", "itemtype": "property", "name": "texture", @@ -3571,7 +3710,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 62, + "line": 61, "description": "The frames of the sprite sheet", "itemtype": "property", "name": "frames", @@ -3580,7 +3719,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 74, + "line": 73, "description": "This will begin loading the JSON file", "itemtype": "method", "name": "load", @@ -3588,7 +3727,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 89, + "line": 88, "description": "Invoke when JSON file is loaded", "itemtype": "method", "name": "onJSONLoaded", @@ -3652,7 +3791,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 54, + "line": 58, "description": "Current path", "itemtype": "property", "name": "currentPath", @@ -3663,7 +3802,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 68, + "line": 74, "description": "Specifies a line style used for subsequent calls to Graphics methods such as the lineTo() method or the drawCircle() method.", "itemtype": "method", "name": "lineStyle", @@ -3688,7 +3827,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 90, + "line": 96, "description": "Moves the current drawing position to (x, y).", "itemtype": "method", "name": "moveTo", @@ -3708,7 +3847,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 109, + "line": 115, "description": "Draws a line using the current line style from the current drawing position to (x, y);\nthe current drawing position is then set to (x, y).", "itemtype": "method", "name": "lineTo", @@ -3728,7 +3867,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 123, + "line": 129, "description": "Specifies a simple one-color fill that subsequent calls to other Graphics methods\n(such as lineTo() or drawCircle()) use when drawing.", "itemtype": "method", "name": "beginFill", @@ -3748,7 +3887,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 138, + "line": 145, "description": "Applies a fill to the lines and shapes that were added since the last call to the beginFill() method.", "itemtype": "method", "name": "endFill", @@ -3756,7 +3895,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 150, + "line": 157, "itemtype": "method", "name": "drawRect", "params": [ @@ -3785,7 +3924,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 170, + "line": 177, "description": "Draws a circle.", "itemtype": "method", "name": "drawCircle", @@ -3810,7 +3949,7 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 190, + "line": 198, "description": "Draws an ellipse.", "itemtype": "method", "name": "drawEllipse", @@ -3840,12 +3979,24 @@ }, { "file": "src/pixi/primitives/Graphics.js", - "line": 211, + "line": 220, "description": "Clears the graphics that were drawn to this Graphics object, and resets fill and line style settings.", "itemtype": "method", "name": "clear", "class": "Graphics" }, + { + "file": "src/pixi/renderers/canvas/utils/CanvasMaskManager.js", + "line": 1, + "author": "Mat Groves", + "class": "CanvasGraphics" + }, + { + "file": "src/pixi/renderers/canvas/utils/CanvasTinter.js", + "line": 2, + "author": "Mat Groves", + "class": "CanvasGraphics" + }, { "file": "src/pixi/renderers/canvas/CanvasGraphics.js", "line": 1, @@ -3860,7 +4011,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 21, + "line": 45, "description": "The width of the canvas view", "itemtype": "property", "name": "width", @@ -3870,7 +4021,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 30, + "line": 54, "description": "The height of the canvas view", "itemtype": "property", "name": "height", @@ -3880,7 +4031,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 39, + "line": 63, "description": "The canvas element that the everything is drawn to", "itemtype": "property", "name": "view", @@ -3889,7 +4040,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 47, + "line": 71, "description": "The canvas context that the everything is drawn to", "itemtype": "property", "name": "context", @@ -3898,7 +4049,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 66, + "line": 111, "description": "Renders the stage to its canvas view", "itemtype": "method", "name": "render", @@ -3913,7 +4064,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 113, + "line": 156, "description": "resizes the canvas view to the specified width and height", "itemtype": "method", "name": "resize", @@ -3933,7 +4084,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 129, + "line": 172, "description": "Renders a display object", "itemtype": "method", "name": "renderDisplayObject", @@ -3950,7 +4101,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 250, + "line": 189, "description": "Renders a flat strip", "itemtype": "method", "name": "renderStripFlat", @@ -3967,24 +4118,7 @@ }, { "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 287, - "description": "Renders a tiling sprite", - "itemtype": "method", - "name": "renderTilingSprite", - "params": [ - { - "name": "sprite", - "description": "The tilingsprite to render", - "type": "TilingSprite" - } - ], - "access": "private", - "tagname": "", - "class": "CanvasRenderer" - }, - { - "file": "src/pixi/renderers/canvas/CanvasRenderer.js", - "line": 320, + "line": 223, "description": "Renders a strip", "itemtype": "method", "name": "renderStrip", @@ -4000,223 +4134,19 @@ "class": "CanvasRenderer" }, { - "file": "src/pixi/renderers/webgl/PixiShader.js", - "line": 1, - "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/PrimitiveShader.js", - "line": 1, - "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/StripShader.js", - "line": 1, - "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 1, - "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 7, - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 22, - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 31, - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 71, - "description": "Cleans the batch so that is can be returned to an object pool and reused", - "itemtype": "method", - "name": "clean", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 90, - "description": "Recreates the buffers in the event of a context loss", - "itemtype": "method", - "name": "restoreLostContext", - "params": [ - { - "name": "gl", - "description": "", - "type": "WebGLContext" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 105, - "description": "inits the batch's texture and blend mode based if the supplied sprite", - "itemtype": "method", - "name": "init", - "params": [ - { - "name": "sprite", - "description": "the first sprite to be added to the batch. Only sprites with\n\t\tthe same base texture and blend mode will be allowed to be added to this batch", - "type": "Sprite" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 125, - "description": "inserts a sprite before the specified sprite", - "itemtype": "method", - "name": "insertBefore", - "params": [ - { - "name": "sprite", - "description": "the sprite to be added", - "type": "Sprite" - }, - { - "name": "nextSprite", - "description": "the first sprite will be inserted before this sprite", - "type": "NextSprite" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 153, - "description": "inserts a sprite after the specified sprite", - "itemtype": "method", - "name": "insertAfter", - "params": [ - { - "name": "sprite", - "description": "the sprite to be added", - "type": "Sprite" - }, - { - "name": "previousSprite", - "description": "the first sprite will be inserted after this sprite", - "type": "Sprite" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 182, - "description": "removes a sprite from the batch", - "itemtype": "method", - "name": "remove", - "params": [ - { - "name": "sprite", - "description": "the sprite to be removed", - "type": "Sprite" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 226, - "description": "Splits the batch into two with the specified sprite being the start of the new batch.", - "itemtype": "method", - "name": "split", - "params": [ - { - "name": "sprite", - "description": "the sprite that indicates where the batch should be split", - "type": "Sprite" - } - ], - "return": { - "description": "the new batch", - "type": "WebGLBatch" - }, - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 267, - "description": "Merges two batchs together", - "itemtype": "method", - "name": "merge", - "params": [ - { - "name": "batch", - "description": "the batch that will be merged", - "type": "WebGLBatch" - } - ], - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 292, - "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this\nfunction is used to increase the size of the batch. It also creates a little extra room so\nthat the batch does not need to be resized every time a sprite is added", - "itemtype": "method", - "name": "growBatch", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 347, - "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", - "itemtype": "method", - "name": "refresh", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 403, - "description": "Updates all the relevant geometry and uploads the data to the GPU", - "itemtype": "method", - "name": "update", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLBatch.js", - "line": 508, - "description": "Draws the batch to the frame buffer", - "itemtype": "method", - "name": "render", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLFilterManager.js", + "file": "src/pixi/renderers/webgl/utils/WebGLFilterManager.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", "line": 15, "description": "Renders the graphics object", "static": 1, @@ -4239,8 +4169,8 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", - "line": 87, + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "line": 89, "description": "Updates the graphics object", "static": 1, "access": "private", @@ -4257,8 +4187,8 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", - "line": 139, + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "line": 143, "description": "Builds a rectangle to draw", "static": 1, "access": "private", @@ -4280,8 +4210,8 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", - "line": 204, + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "line": 207, "description": "Builds a circle to draw", "static": 1, "access": "private", @@ -4303,8 +4233,8 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", - "line": 272, + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "line": 276, "description": "Builds a line to draw", "static": 1, "access": "private", @@ -4326,8 +4256,8 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLGraphics.js", - "line": 463, + "file": "src/pixi/renderers/webgl/utils/WebGLGraphics.js", + "line": 486, "description": "Builds a polygon to draw", "static": 1, "access": "private", @@ -4349,325 +4279,95 @@ "class": "CanvasGraphics" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", + "file": "src/pixi/renderers/webgl/utils/WebGLMaskManager.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", - "class": "WebGLBatch" + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", + "file": "src/pixi/renderers/webgl/utils/WebGLShaderManager.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "PIXI.PixiShader" + }, + { + "file": "src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js", + "line": 1, + "author": "Mat Groves\n\nBig thanks to the very clever Matt DesLauriers https://github.com/mattdesl/\nfor creating the original pixi version!\n\nHeavily inspired by LibGDX's WebGLSpriteBatch:\nhttps://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/WebGLSpriteBatch.java", + "class": "PIXI.PixiShader" + }, + { + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 1, + "author": "Richard Davey http://www.photonstorm.com @photonstorm", + "class": "PIXI.PixiShader" + }, + { + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 14, + "itemtype": "property", + "name": "program - The WebGL program.", + "type": "Any", + "class": "PIXI.PixiShader" + }, + { + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 19, + "itemtype": "property", + "name": "fragmentSrc - The fragment shader.", + "type": "Array", + "class": "PIXI.PixiShader" + }, + { + "file": "src/pixi/renderers/webgl/PixiShader.js", "line": 33, - "description": "Add a display object to the webgl renderer", - "itemtype": "method", - "name": "setRenderable", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "itemtype": "property", + "name": "textureCount - A local texture counter for multi-texture shaders.", + "type": "Number", + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 55, - "description": "Renders the stage to its webgl view", + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 42, "itemtype": "method", - "name": "render", - "params": [ - { - "name": "projection", - "description": "", - "type": "Object" - } - ], - "class": "WebGLBatch" + "name": "PIXI.PixiShader#init", + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 91, - "description": "Renders a specific displayObject", + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 77, + "description": "Initialises the shader uniform values.\nUniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/\nhttp://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf", "itemtype": "method", - "name": "renderSpecific", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - }, - { - "name": "projection", - "description": "", - "type": "Object" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "name": "PIXI.PixiShader#initUniforms", + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 251, - "description": "Renders a specific renderable", + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 150, + "description": "Initialises a Sampler2D uniform (which may only be available later on after initUniforms once the texture is has loaded)", "itemtype": "method", - "name": "renderSpecial", - "params": [ - { - "name": "renderable", - "description": "", - "type": "DisplayObject" - }, - { - "name": "projection", - "description": "", - "type": "Object" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "name": "PIXI.PixiShader#initSampler2D", + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 334, - "description": "Updates a webgl texture", + "file": "src/pixi/renderers/webgl/PixiShader.js", + "line": 225, + "description": "Updates the shader uniform values.", "itemtype": "method", - "name": "updateTexture", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "name": "PIXI.PixiShader#syncUniforms", + "class": "PIXI.PixiShader" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 376, - "description": "Adds filter blocks", - "itemtype": "method", - "name": "addFilterBlocks", - "params": [ - { - "name": "start", - "description": "", - "type": "FilterBlock" - }, - { - "name": "end", - "description": "", - "type": "FilterBlock" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "file": "src/pixi/renderers/webgl/PrimitiveShader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "WebGLRenderer" }, { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 416, - "description": "Remove filter blocks", - "itemtype": "method", - "name": "removeFilterBlocks", - "params": [ - { - "name": "start", - "description": "", - "type": "FilterBlock" - }, - { - "name": "end", - "description": "", - "type": "FilterBlock" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 430, - "description": "Adds a display object and children to the webgl context", - "itemtype": "method", - "name": "addDisplayObjectAndChildren", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 487, - "description": "Removes a display object and children to the webgl context", - "itemtype": "method", - "name": "removeDisplayObjectAndChildren", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 509, - "description": "Inserts a displayObject into the linked list", - "itemtype": "method", - "name": "insertObject", - "params": [ - { - "name": "displayObject", - "description": "", - "type": "DisplayObject" - }, - { - "name": "previousObject", - "description": "", - "type": "DisplayObject" - }, - { - "name": "nextObject", - "description": "", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 647, - "description": "Inserts a displayObject into the linked list", - "itemtype": "method", - "name": "insertAfter", - "params": [ - { - "name": "item", - "description": "", - "type": "DisplayObject" - }, - { - "name": "displayObject", - "description": "The object to insert", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 702, - "description": "Removes a displayObject from the linked list", - "itemtype": "method", - "name": "removeObject", - "params": [ - { - "name": "displayObject", - "description": "The object to remove", - "type": "DisplayObject" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 781, - "description": "Initializes a tiling sprite", - "itemtype": "method", - "name": "initTilingSprite", - "params": [ - { - "name": "sprite", - "description": "The tiling sprite to initialize", - "type": "TilingSprite" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 840, - "description": "Renders a Strip", - "itemtype": "method", - "name": "renderStrip", - "params": [ - { - "name": "strip", - "description": "The strip to render", - "type": "Strip" - }, - { - "name": "projection", - "description": "", - "type": "Object" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 932, - "description": "Renders a TilingSprite", - "itemtype": "method", - "name": "renderTilingSprite", - "params": [ - { - "name": "sprite", - "description": "The tiling sprite to render", - "type": "TilingSprite" - }, - { - "name": "projectionMatrix", - "description": "", - "type": "Object" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderGroup.js", - "line": 974, - "description": "Initializes a strip to be rendered", - "itemtype": "method", - "name": "initStrip", - "params": [ - { - "name": "strip", - "description": "The strip to initialize", - "type": "Strip" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLBatch" + "file": "src/pixi/renderers/webgl/StripShader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "WebGLRenderer" }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", @@ -4677,40 +4377,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 104, - "description": "Gets a new WebGLBatch from the pool", - "static": 1, - "itemtype": "method", - "name": "getBatch", - "return": { - "description": "", - "type": "WebGLBatch" - }, - "access": "private", - "tagname": "", - "class": "WebGLRenderer" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 124, - "description": "Puts a batch back into the pool", - "static": 1, - "itemtype": "method", - "name": "returnBatch", - "params": [ - { - "name": "batch", - "description": "The batch to return", - "type": "WebGLBatch" - } - ], - "access": "private", - "tagname": "", - "class": "WebGLRenderer" - }, - { - "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 138, + "line": 125, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -4725,7 +4392,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 209, + "line": 223, "description": "Updates the textures loaded into this webgl renderer", "static": 1, "itemtype": "method", @@ -4736,7 +4403,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 225, + "line": 250, "description": "Updates a loaded webgl texture", "static": 1, "itemtype": "method", @@ -4754,7 +4421,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 269, + "line": 297, "description": "Destroys a loaded webgl texture", "itemtype": "method", "name": "destroyTexture", @@ -4771,7 +4438,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 288, + "line": 325, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -4791,7 +4458,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 319, + "line": 378, "description": "Handles a lost webgl context", "itemtype": "method", "name": "handleContextLost", @@ -4808,7 +4475,7 @@ }, { "file": "src/pixi/renderers/webgl/WebGLRenderer.js", - "line": 332, + "line": 391, "description": "Handles a restored webgl context", "itemtype": "method", "name": "handleContextRestored", @@ -4837,7 +4504,7 @@ }, { "file": "src/pixi/text/BitmapText.js", - "line": 34, + "line": 33, "description": "Set the copy for the text object", "itemtype": "method", "name": "setText", @@ -4852,7 +4519,7 @@ }, { "file": "src/pixi/text/BitmapText.js", - "line": 46, + "line": 45, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -4864,15 +4531,15 @@ "props": [ { "name": "font", - "description": "The size (optional) and bitmap font id (required) eq \"Arial\" or \"20px Arial\" (must have loaded previously)", + "description": "The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously)", "type": "String" }, { "name": "align", - "description": "An alignment of the multiline text (\"left\", \"center\" or \"right\")", + "description": "An alignment of the multiline text ('left', 'center' or 'right')", "type": "String", "optional": true, - "optdefault": "\"left\"" + "optdefault": "'left'" } ] } @@ -4881,7 +4548,7 @@ }, { "file": "src/pixi/text/BitmapText.js", - "line": 67, + "line": 66, "description": "Renders text", "itemtype": "method", "name": "updateText", @@ -4891,7 +4558,7 @@ }, { "file": "src/pixi/text/BitmapText.js", - "line": 142, + "line": 141, "description": "Updates the transfor of this object", "itemtype": "method", "name": "updateTransform", @@ -4920,24 +4587,24 @@ "props": [ { "name": "fill", - "description": "A canvas fillstyle that will be used on the text eg \"red\", \"#00FF00\"", + "description": "A canvas fillstyle that will be used on the text eg 'red', '#00FF00'", "type": "Object", "optional": true, - "optdefault": "\"black\"" + "optdefault": "'black'" }, { "name": "align", - "description": "An alignment of the multiline text (\"left\", \"center\" or \"right\")", + "description": "An alignment of the multiline text ('left', 'center' or 'right')", "type": "String", "optional": true, - "optdefault": "\"left\"" + "optdefault": "'left'" }, { "name": "stroke", - "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", + "description": "A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00'", "type": "String", "optional": true, - "optdefault": "\"black\"" + "optdefault": "'black'" }, { "name": "strokeThickness", @@ -4963,8 +4630,8 @@ ] }, { - "name": "[style.font=\"bold", - "description": "20pt Arial\"] The style and size of the font", + "name": "[style.font='bold", + "description": "20pt Arial'] The style and size of the font", "type": "String" } ], @@ -4973,8 +4640,9 @@ { "file": "src/pixi/text/Text.js", "line": 65, - "description": "Set the copy for the text object. To split a line you can use \"\\n\"", - "methos": "setText", + "description": "Set the copy for the text object. To split a line you can use '\\n'", + "itemtype": "method", + "name": "setText", "params": [ { "name": "text", @@ -5017,7 +4685,7 @@ { "file": "src/pixi/text/Text.js", "line": 216, - "description": "A Text Object will apply wordwrap", + "description": "Applies newlines to a string to have it optimally fit into the horizontal\nbounds set by the Text object's wordWrapWidth property.", "itemtype": "method", "name": "wordWrap", "params": [ @@ -5033,7 +4701,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 270, + "line": 260, "description": "Destroys this text object", "itemtype": "method", "name": "destroy", @@ -5075,6 +4743,16 @@ { "file": "src/pixi/textures/BaseTexture.js", "line": 39, + "description": "The scale mode to apply when scaling this texture", + "itemtype": "property", + "name": "scaleMode", + "type": "PIXI.BaseTexture.SCALE_MODE", + "default": "PIXI.BaseTexture.SCALE_MODE.LINEAR", + "class": "BaseTexture" + }, + { + "file": "src/pixi/textures/BaseTexture.js", + "line": 47, "description": "[read-only] Describes if the base texture has loaded or not", "itemtype": "property", "name": "hasLoaded", @@ -5084,7 +4762,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 48, + "line": 56, "description": "The source that is loaded to create the texture", "itemtype": "property", "name": "source", @@ -5093,7 +4771,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 99, + "line": 113, "description": "Destroys this base texture", "itemtype": "method", "name": "destroy", @@ -5101,7 +4779,14 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 114, + "line": 131, + "itemtype": "method", + "name": "destroy", + "class": "BaseTexture" + }, + { + "file": "src/pixi/textures/BaseTexture.js", + "line": 144, "description": "Helper function that returns a base texture based on an image url\nIf the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -5126,27 +4811,7 @@ }, { "file": "src/pixi/textures/RenderTexture.js", - "line": 57, - "description": "Initializes the webgl data for this texture", - "itemtype": "method", - "name": "initWebGL", - "access": "private", - "tagname": "", - "class": "RenderTexture" - }, - { - "file": "src/pixi/textures/RenderTexture.js", - "line": 125, - "description": "Initializes the canvas data for this texture", - "itemtype": "method", - "name": "initCanvas", - "access": "private", - "tagname": "", - "class": "RenderTexture" - }, - { - "file": "src/pixi/textures/RenderTexture.js", - "line": 141, + "line": 102, "description": "This function will draw the display object to the texture.", "itemtype": "method", "name": "renderWebGL", @@ -5168,7 +4833,7 @@ }, { "file": "src/pixi/textures/RenderTexture.js", - "line": 214, + "line": 154, "description": "This function will draw the display object to the texture.", "itemtype": "method", "name": "renderCanvas", @@ -5223,7 +4888,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 73, + "line": 72, "description": "Called when the base texture is loaded", "itemtype": "method", "name": "onBaseTextureLoaded", @@ -5239,7 +4904,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 93, + "line": 91, "description": "Destroys this texture", "itemtype": "method", "name": "destroy", @@ -5254,7 +4919,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 104, + "line": 102, "description": "Specifies the rectangle region of the baseTexture", "itemtype": "method", "name": "setFrame", @@ -5269,7 +4934,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 127, + "line": 146, "description": "Helper function that returns a texture based on an image url\nIf the image is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -5293,7 +4958,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 150, + "line": 169, "description": "Helper function that returns a texture based on a frame id\nIf the frame id is not in the texture cache an error will be thrown", "static": 1, "itemtype": "method", @@ -5312,7 +4977,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 166, + "line": 185, "description": "Helper function that returns a texture based on a canvas element\nIf the canvas is not in the texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -5331,7 +4996,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 182, + "line": 201, "description": "Adds a texture to the textureCache.", "static": 1, "itemtype": "method", @@ -5352,7 +5017,7 @@ }, { "file": "src/pixi/textures/Texture.js", - "line": 195, + "line": 214, "description": "Remove a texture from the textureCache.", "static": 1, "itemtype": "method", @@ -5448,10 +5113,10 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 43, + "line": 45, "description": "Converts a hex color number to an [R, G, B] array", "itemtype": "method", - "name": "HEXtoRGB", + "name": "hex2rgb", "params": [ { "name": "hex", @@ -5464,7 +5129,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 53, + "line": 60, "description": "A polyfill for Function.prototype.bind", "itemtype": "method", "name": "bind", @@ -5510,7 +5175,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 70, + "line": 66, "description": "Collects an interactive sprite recursively to have their interactions managed", "itemtype": "method", "name": "collectInteractiveSprite", @@ -5533,7 +5198,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 114, + "line": 110, "description": "Sets the target for event delegation", "itemtype": "method", "name": "setTarget", @@ -5551,7 +5216,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 135, + "line": 131, "description": "Sets the dom element which will receive mouse/touch events. This is useful for when you have other DOM\nelements ontop of the renderers Canvas element. With this you'll be able to delegate another dom element\nto receive those events", "itemtype": "method", "name": "setTargetDomElement", @@ -5569,7 +5234,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 185, + "line": 180, "description": "updates the state of interactive objects", "itemtype": "method", "name": "update", @@ -5580,7 +5245,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 273, + "line": 269, "description": "Is called when the mouse moves accross the renderer element", "itemtype": "method", "name": "onMouseMove", @@ -5598,7 +5263,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 305, + "line": 299, "description": "Is called when the mouse button is pressed down on the renderer element", "itemtype": "method", "name": "onMouseDown", @@ -5616,7 +5281,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 370, + "line": 360, "description": "Is called when the mouse button is released on the renderer element", "itemtype": "method", "name": "onMouseUp", @@ -5634,7 +5299,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 422, + "line": 409, "description": "Tests if the current mouse coords hit a sprite", "itemtype": "method", "name": "hitTest", @@ -5657,7 +5322,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 495, + "line": 482, "description": "Is called when a touch is moved accross the renderer element", "itemtype": "method", "name": "onTouchMove", @@ -5675,7 +5340,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 526, + "line": 516, "description": "Is called when a touch is started on the renderer element", "itemtype": "method", "name": "onTouchStart", @@ -5693,7 +5358,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 575, + "line": 565, "description": "Is called when a touch is ended on the renderer element", "itemtype": "method", "name": "onTouchEnd", @@ -5711,7 +5376,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 654, + "line": 646, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -5721,7 +5386,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 665, + "line": 657, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -5731,7 +5396,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 673, + "line": 665, "description": "When passed to an event handler, this will be the original DOM Event that was captured", "itemtype": "property", "name": "originalEvent", @@ -5741,7 +5406,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 682, + "line": 674, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -5784,7 +5449,7 @@ "warnings": [ { "message": "unknown tag: contructor", - "line": " src/pixi/filters/BlurFilter.js:6" + "line": " src/pixi/filters/BlurFilter.js:5" }, { "message": "unknown tag: contructor", @@ -5792,11 +5457,19 @@ }, { "message": "unknown tag: contructor", - "line": " src/pixi/filters/DisplacementFilter.js:6" + "line": " src/pixi/filters/ColorStepFilter.js:5" }, { "message": "unknown tag: contructor", - "line": " src/pixi/filters/GreyFilter.js:6" + "line": " src/pixi/filters/DisplacementFilter.js:5" + }, + { + "message": "unknown tag: contructor", + "line": " src/pixi/filters/DotScreenFilter.js:6" + }, + { + "message": "unknown tag: contructor", + "line": " src/pixi/filters/GrayFilter.js:5" }, { "message": "unknown tag: contructor", @@ -5808,15 +5481,11 @@ }, { "message": "unknown tag: contructor", - "line": " src/pixi/filters/SepiaFilter.js:7" + "line": " src/pixi/filters/SepiaFilter.js:5" }, { "message": "unknown tag: contructor", - "line": " src/pixi/renderers/webgl/WebGLRenderGroup.js:5" - }, - { - "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:65" + "line": " src/pixi/filters/TwistFilter.js:5" }, { "message": "Missing item type", @@ -5842,6 +5511,10 @@ "message": "Missing item type", "line": " src/pixi/display/DisplayObject.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/display/DisplayObject.js:173" + }, { "message": "Missing item type", "line": " src/pixi/display/DisplayObjectContainer.js:1" @@ -5858,10 +5531,6 @@ "message": "Missing item type", "line": " src/pixi/display/Stage.js:1" }, - { - "message": "Missing item type", - "line": " src/pixi/extras/CustomRenderable.js:1" - }, { "message": "Missing item type", "line": " src/pixi/extras/Rope.js:1" @@ -5872,99 +5541,99 @@ }, { "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", - "line": " src/pixi/extras/Spine.js:327" + "line": " src/pixi/extras/Spine.js:211" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:618" + "line": " src/pixi/extras/Spine.js:504" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:625" + "line": " src/pixi/extras/Spine.js:511" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:632" + "line": " src/pixi/extras/Spine.js:518" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:640" + "line": " src/pixi/extras/Spine.js:526" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:647" + "line": " src/pixi/extras/Spine.js:533" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:654" + "line": " src/pixi/extras/Spine.js:540" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:689" + "line": " src/pixi/extras/Spine.js:575" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:697" + "line": " src/pixi/extras/Spine.js:583" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:712" + "line": " src/pixi/extras/Spine.js:598" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:716" + "line": " src/pixi/extras/Spine.js:602" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:723" + "line": " src/pixi/extras/Spine.js:609" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:730" + "line": " src/pixi/extras/Spine.js:616" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:737" + "line": " src/pixi/extras/Spine.js:623" }, { "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", - "line": " src/pixi/extras/Spine.js:749" + "line": " src/pixi/extras/Spine.js:635" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:756" + "line": " src/pixi/extras/Spine.js:642" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:760" + "line": " src/pixi/extras/Spine.js:646" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:769" + "line": " src/pixi/extras/Spine.js:655" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:960" + "line": " src/pixi/extras/Spine.js:846" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:966" + "line": " src/pixi/extras/Spine.js:852" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:972" + "line": " src/pixi/extras/Spine.js:858" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:978" + "line": " src/pixi/extras/Spine.js:864" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:996" + "line": " src/pixi/extras/Spine.js:882" }, { "message": "Missing item type", - "line": " src/pixi/extras/Spine.js:1415" + "line": " src/pixi/extras/Spine.js:1307" }, { "message": "Missing item type", @@ -5994,17 +5663,29 @@ "message": "Missing item type", "line": " src/pixi/filters/ColorMatrixFilter.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/filters/ColorStepFilter.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/filters/CrossHatchFilter.js:1" + }, { "message": "Missing item type", "line": " src/pixi/filters/DisplacementFilter.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/filters/DotScreenFilter.js:1" + }, { "message": "Missing item type", "line": " src/pixi/filters/FilterBlock.js:1" }, { "message": "Missing item type", - "line": " src/pixi/filters/GreyFilter.js:1" + "line": " src/pixi/filters/GrayFilter.js:1" }, { "message": "Missing item type", @@ -6015,17 +5696,45 @@ "line": " src/pixi/filters/PixelateFilter.js:1" }, { - "message": "Missing item type\n/**\n * @author Mat Groves http://matgroves.com/ @Doormat23", + "message": "Missing item type", + "line": " src/pixi/filters/RGBSplitFilter.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/filters/SepiaFilter.js:1" }, { "message": "Missing item type", "line": " src/pixi/filters/SmartBlurFilter.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/filters/TwistFilter.js:1" + }, { "message": "Missing item type", "line": " src/pixi/loaders/AssetLoader.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/AtlasLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/AtlasLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/AtlasLoader.js:40" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/AtlasLoader.js:158" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/AtlasLoader.js:175" + }, { "message": "Missing item type", "line": " src/pixi/loaders/BitmapFontLoader.js:1" @@ -6054,6 +5763,14 @@ "message": "Missing item type", "line": " src/pixi/primitives/Graphics.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/canvas/utils/CanvasMaskManager.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/canvas/utils/CanvasTinter.js:2" + }, { "message": "Missing item type", "line": " src/pixi/renderers/canvas/CanvasGraphics.js:1" @@ -6062,6 +5779,26 @@ "message": "Missing item type", "line": " src/pixi/renderers/canvas/CanvasRenderer.js:1" }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/webgl/utils/WebGLFilterManager.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/webgl/utils/WebGLGraphics.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/webgl/utils/WebGLMaskManager.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/webgl/utils/WebGLShaderManager.js:1" + }, + { + "message": "Missing item type", + "line": " src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js:1" + }, { "message": "Missing item type", "line": " src/pixi/renderers/webgl/PixiShader.js:1" @@ -6074,34 +5811,6 @@ "message": "Missing item type", "line": " src/pixi/renderers/webgl/StripShader.js:1" }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLBatch.js:1" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLBatch.js:7" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLBatch.js:22" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLBatch.js:31" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLFilterManager.js:1" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLGraphics.js:1" - }, - { - "message": "Missing item type", - "line": " src/pixi/renderers/webgl/WebGLRenderGroup.js:1" - }, { "message": "Missing item type", "line": " src/pixi/renderers/webgl/WebGLRenderer.js:1" @@ -6118,10 +5827,6 @@ "message": "Missing item type", "line": " src/pixi/text/Text.js:1" }, - { - "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:65" - }, { "message": "Missing item type", "line": " src/pixi/textures/BaseTexture.js:1" @@ -6159,4 +5864,4 @@ "line": " src/pixi/Pixi.js:1" } ] -} +} \ No newline at end of file diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 224d190..21b7e87 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -173,7 +175,7 @@ /** * @author Mat Groves http://matgroves.com/ @Doormat23 */ - + /** * The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive * This manager also supports multitouch. @@ -184,57 +186,53 @@ */ PIXI.InteractionManager = function(stage) { - /** - * a refference to the stage - * - * @property stage - * @type Stage - */ - this.stage = stage; + /** + * a refference to the stage + * + * @property stage + * @type Stage + */ + this.stage = stage; - /** - * the mouse data - * - * @property mouse - * @type InteractionData - */ - this.mouse = new PIXI.InteractionData(); + /** + * the mouse data + * + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); - /** - * an object that stores current touches (InteractionData) by id reference - * - * @property touchs - * @type Object - */ - this.touchs = {}; + /** + * an object that stores current touches (InteractionData) by id reference + * + * @property touchs + * @type Object + */ + this.touchs = {}; + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); - - // helpers - this.tempPoint = new PIXI.Point(); - //this.tempMatrix = mat3.create(); + this.mouseoverEnabled = true; - this.mouseoverEnabled = true; + //tiny little interactiveData pool! + this.pool = []; - //tiny little interactiveData pool! - this.pool = []; + this.interactiveItems = []; + this.interactionDOMElement = null; - this.interactiveItems = []; - this.interactionDOMElement = null; + //this will make it so that you dont have to call bind all the time + this.onMouseMove = this.onMouseMove.bind( this ); + this.onMouseDown = this.onMouseDown.bind(this); + this.onMouseOut = this.onMouseOut.bind(this); + this.onMouseUp = this.onMouseUp.bind(this); - //this will make it so that you dont have to call bind all the time - this.onMouseMove = this.onMouseMove.bind( this ); - this.onMouseDown = this.onMouseDown.bind(this); - this.onMouseOut = this.onMouseOut.bind(this); - this.onMouseUp = this.onMouseUp.bind(this); - - this.onTouchStart = this.onTouchStart.bind(this); - this.onTouchEnd = this.onTouchEnd.bind(this); - this.onTouchMove = this.onTouchMove.bind(this); - - - this.last = 0; -} + this.onTouchStart = this.onTouchStart.bind(this); + this.onTouchEnd = this.onTouchEnd.bind(this); + this.onTouchMove = this.onTouchMove.bind(this); + this.last = 0; +}; // constructor PIXI.InteractionManager.prototype.constructor = PIXI.InteractionManager; @@ -249,39 +247,39 @@ PIXI.InteractionManager.prototype.constructor = PIXI.InteractionManager; */ PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) { - var children = displayObject.children; - var length = children.length; - - /// make an interaction tree... {item.__interactiveParent} - for (var i = length-1; i >= 0; i--) - { - var child = children[i]; - -// if(child.visible) { - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); + var children = displayObject.children; + var length = children.length; - if(child.children.length > 0) - { - this.collectInteractiveSprite(child, child); - } - } - else - { - child.__iParent = null; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; - if(child.children.length > 0) - { - this.collectInteractiveSprite(child, iParent); - } - } -// } - } -} +// if(child.visible) { + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } +// } + } +}; /** * Sets the target for event delegation @@ -292,16 +290,16 @@ PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObj */ PIXI.InteractionManager.prototype.setTarget = function(target) { - this.target = target; + this.target = target; - //check if the dom element has been set. If it has don't do anything - if( this.interactionDOMElement === null ) { + //check if the dom element has been set. If it has don't do anything + if( this.interactionDOMElement === null ) { - this.setTargetDomElement( target.view ); - } + this.setTargetDomElement( target.view ); + } - document.body.addEventListener('mouseup', this.onMouseUp, true); -} + document.body.addEventListener('mouseup', this.onMouseUp, true); +}; /** @@ -315,44 +313,43 @@ PIXI.InteractionManager.prototype.setTarget = function(target) */ PIXI.InteractionManager.prototype.setTargetDomElement = function(domElement) { - //remove previouse listeners - if( this.interactionDOMElement !== null ) - { - this.interactionDOMElement.style['-ms-content-zooming'] = ''; - this.interactionDOMElement.style['-ms-touch-action'] = ''; + //remove previouse listeners + if( this.interactionDOMElement !== null ) + { + this.interactionDOMElement.style['-ms-content-zooming'] = ''; + this.interactionDOMElement.style['-ms-touch-action'] = ''; - this.interactionDOMElement.removeEventListener('mousemove', this.onMouseMove, true); - this.interactionDOMElement.removeEventListener('mousedown', this.onMouseDown, true); - this.interactionDOMElement.removeEventListener('mouseout', this.onMouseOut, true); + this.interactionDOMElement.removeEventListener('mousemove', this.onMouseMove, true); + this.interactionDOMElement.removeEventListener('mousedown', this.onMouseDown, true); + this.interactionDOMElement.removeEventListener('mouseout', this.onMouseOut, true); - // aint no multi touch just yet! - this.interactionDOMElement.removeEventListener('touchstart', this.onTouchStart, true); - this.interactionDOMElement.removeEventListener('touchend', this.onTouchEnd, true); - this.interactionDOMElement.removeEventListener('touchmove', this.onTouchMove, true); - } + // aint no multi touch just yet! + this.interactionDOMElement.removeEventListener('touchstart', this.onTouchStart, true); + this.interactionDOMElement.removeEventListener('touchend', this.onTouchEnd, true); + this.interactionDOMElement.removeEventListener('touchmove', this.onTouchMove, true); + } - if (window.navigator.msPointerEnabled) - { - // time to remove some of that zoom in ja.. - domElement.style['-ms-content-zooming'] = 'none'; - domElement.style['-ms-touch-action'] = 'none'; - - // DO some window specific touch! - } + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + domElement.style['-ms-content-zooming'] = 'none'; + domElement.style['-ms-touch-action'] = 'none'; - this.interactionDOMElement = domElement; + // DO some window specific touch! + } - domElement.addEventListener('mousemove', this.onMouseMove, true); - domElement.addEventListener('mousedown', this.onMouseDown, true); - domElement.addEventListener('mouseout', this.onMouseOut, true); + this.interactionDOMElement = domElement; - // aint no multi touch just yet! - domElement.addEventListener('touchstart', this.onTouchStart, true); - domElement.addEventListener('touchend', this.onTouchEnd, true); - domElement.addEventListener('touchmove', this.onTouchMove, true); -} + domElement.addEventListener('mousemove', this.onMouseMove, true); + domElement.addEventListener('mousedown', this.onMouseDown, true); + domElement.addEventListener('mouseout', this.onMouseOut, true); + // aint no multi touch just yet! + domElement.addEventListener('touchstart', this.onTouchStart, true); + domElement.addEventListener('touchend', this.onTouchEnd, true); + domElement.addEventListener('touchmove', this.onTouchMove, true); +}; /** * updates the state of interactive objects @@ -362,85 +359,86 @@ PIXI.InteractionManager.prototype.setTargetDomElement = function(domElement) */ PIXI.InteractionManager.prototype.update = function() { - if(!this.target)return; - - // frequency of 30fps?? - var now = Date.now(); - var diff = now - this.last; - diff = (diff * 30) / 1000; - if(diff < 1)return; - this.last = now; - // - - // ok.. so mouse events?? - // yes for now :) - // OPTIMSE - how often to check?? - if(this.dirty) - { - this.dirty = false; - - var len = this.interactiveItems.length; - - for (var i=0; i < len; i++) { - this.interactiveItems[i].interactiveChildren = false; - } - - this.interactiveItems = []; - - if(this.stage.interactive)this.interactiveItems.push(this.stage); - // go through and collect all the objects that are interactive.. - this.collectInteractiveSprite(this.stage, this.stage); - } - - // loop through interactive objects! - var length = this.interactiveItems.length; - - this.interactionDOMElement.style.cursor = "default"; - - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - - - //if(!item.visible)continue; - - // OPTIMISATION - only calculate every time if the mousemove function exists.. - // OK so.. does the object have any other interactive functions? - // hit-test the clip! - - - if(item.mouseover || item.mouseout || item.buttonMode) - { - // ok so there are some functions so lets hit test it.. - item.__hit = this.hitTest(item, this.mouse); - this.mouse.target = item; - // ok so deal with interactions.. - // loks like there was a hit! - if(item.__hit) - { - if(item.buttonMode) this.interactionDOMElement.style.cursor = "pointer"; - - if(!item.__isOver) - { - - if(item.mouseover)item.mouseover(this.mouse); - item.__isOver = true; - } - } - else - { - if(item.__isOver) - { - // roll out! - if(item.mouseout)item.mouseout(this.mouse); - item.__isOver = false; - } - } - } - - // ---> - } -} + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + var i = 0; + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (i = 0; i < len; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.interactionDOMElement.style.cursor = 'inherit'; + + for (i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + + //if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + this.mouse.target = item; + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode) this.interactionDOMElement.style.cursor = item.defaultCursor; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + // ---> + } +}; /** * Is called when the mouse moves accross the renderer element @@ -451,28 +449,26 @@ PIXI.InteractionManager.prototype.update = function() */ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - this.mouse.originalEvent = event || window.event; //IE uses window.event - // TODO optimize by not check EVERY TIME! maybe half as often? // - var rect = this.interactionDOMElement.getBoundingClientRect(); - - this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); - this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); - - var length = this.interactiveItems.length; - var global = this.mouse.global; - - - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - - if(item.mousemove) - { - //call the function! - item.mousemove(this.mouse); - } - } -} + this.mouse.originalEvent = event || window.event; //IE uses window.event + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.interactionDOMElement.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +}; /** * Is called when the mouse button is pressed down on the renderer element @@ -483,61 +479,57 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) */ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - this.mouse.originalEvent = event || window.event; //IE uses window.event - - // loop through inteaction tree... - // hit test each item! -> - // get interactive items under point?? - //stage.__i - var length = this.interactiveItems.length; - var global = this.mouse.global; - - var index = 0; - var parent = this.stage; - - // while - // hit test - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - - if(item.mousedown || item.click) - { - item.__mouseIsDown = true; - item.__hit = this.hitTest(item, this.mouse); - - if(item.__hit) - { - //call the function! - if(item.mousedown)item.mousedown(this.mouse); - item.__isDown = true; - - // just the one! - if(!item.interactiveChildren)break; - } - } - } -} + this.mouse.originalEvent = event || window.event; //IE uses window.event + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +}; -PIXI.InteractionManager.prototype.onMouseOut = function(event) +PIXI.InteractionManager.prototype.onMouseOut = function() { - var length = this.interactiveItems.length; - - this.interactionDOMElement.style.cursor = "default"; - - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - - if(item.__isOver) - { - this.mouse.target = item; - if(item.mouseout)item.mouseout(this.mouse); - item.__isOver = false; - } - } -} + var length = this.interactiveItems.length; + + this.interactionDOMElement.style.cursor = 'inherit'; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.__isOver) + { + this.mouse.target = item; + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } +}; /** * Is called when the mouse button is released on the renderer element @@ -548,48 +540,45 @@ PIXI.InteractionManager.prototype.onMouseOut = function(event) */ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - this.mouse.originalEvent = event || window.event; //IE uses window.event - - var global = this.mouse.global; - - - var length = this.interactiveItems.length; - var up = false; - - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - - if(item.mouseup || item.mouseupoutside || item.click) - { - item.__hit = this.hitTest(item, this.mouse); - - if(item.__hit && !up) - { - //call the function! - if(item.mouseup) - { - item.mouseup(this.mouse); - } - if(item.__isDown) - { - if(item.click)item.click(this.mouse); - } - - if(!item.interactiveChildren)up = true; - } - else - { - if(item.__isDown) - { - if(item.mouseupoutside)item.mouseupoutside(this.mouse); - } - } - - item.__isDown = false; - } - } -} + this.mouse.originalEvent = event || window.event; //IE uses window.event + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +}; /** * Tests if the current mouse coords hit a sprite @@ -601,68 +590,68 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) */ PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) { - var global = interactionData.global; - - if(item.vcount !== PIXI.visibleCount)return false; + var global = interactionData.global; - var isSprite = (item instanceof PIXI.Sprite), - worldTransform = item.worldTransform, - a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10), - x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, - y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + if(item.vcount !== PIXI.visibleCount)return false; - interactionData.target = item; - - //a sprite or display object with a hit area defined - if(item.hitArea && item.hitArea.contains) { - if(item.hitArea.contains(x, y)) { - //if(isSprite) - interactionData.target = item; + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - return true; - } - - return false; - } - // a sprite with no hitarea defined - else if(isSprite) - { - var width = item.texture.frame.width, - height = item.texture.frame.height, - x1 = -width * item.anchor.x, - y1; - - if(x > x1 && x < x1 + width) - { - y1 = -height * item.anchor.y; - - if(y > y1 && y < y1 + height) - { - // set the target property if a hit is true! - interactionData.target = item - return true; - } - } - } + interactionData.target = item; - var length = item.children.length; - - for (var i = 0; i < length; i++) - { - var tempItem = item.children[i]; - var hit = this.hitTest(tempItem, interactionData); - if(hit) - { - // hmm.. TODO SET CORRECT TARGET? - interactionData.target = item - return true; - } - } + //a sprite or display object with a hit area defined + if(item.hitArea && item.hitArea.contains) { + if(item.hitArea.contains(x, y)) { + //if(isSprite) + interactionData.target = item; - return false; -} + return true; + } + + return false; + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; + + if(x > x1 && x < x1 + width) + { + y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item; + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit) + { + // hmm.. TODO SET CORRECT TARGET? + interactionData.target = item; + return true; + } + } + + return false; +}; /** * Is called when a touch is moved accross the renderer element @@ -673,27 +662,30 @@ PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) */ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - var rect = this.interactionDOMElement.getBoundingClientRect(); - var changedTouches = event.changedTouches; - - for (var i=0; i < changedTouches.length; i++) - { - var touchEvent = changedTouches[i]; - var touchData = this.touchs[touchEvent.identifier]; - touchData.originalEvent = event || window.event; - - // update the touch position - touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); - touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); - } - - var length = this.interactiveItems.length; - for (var i = 0; i < length; i++) - { - var item = this.interactiveItems[i]; - if(item.touchmove)item.touchmove(touchData); - } -} + var rect = this.interactionDOMElement.getBoundingClientRect(); + var changedTouches = event.changedTouches; + var touchData; + var i = 0; + + for (i = 0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + touchData = this.touchs[touchEvent.identifier]; + touchData.originalEvent = event || window.event; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove) + item.touchmove(touchData); + } +}; /** * Is called when a touch is started on the renderer element @@ -704,45 +696,45 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) */ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - var rect = this.interactionDOMElement.getBoundingClientRect(); - - var changedTouches = event.changedTouches; - for (var i=0; i < changedTouches.length; i++) - { - var touchEvent = changedTouches[i]; - - var touchData = this.pool.pop(); - if(!touchData)touchData = new PIXI.InteractionData(); - - touchData.originalEvent = event || window.event; - - this.touchs[touchEvent.identifier] = touchData; - touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); - touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); - - var length = this.interactiveItems.length; - - for (var j = 0; j < length; j++) - { - var item = this.interactiveItems[j]; - - if(item.touchstart || item.tap) - { - item.__hit = this.hitTest(item, touchData); - - if(item.__hit) - { - //call the function! - if(item.touchstart)item.touchstart(touchData); - item.__isDown = true; - item.__touchData = touchData; - - if(!item.interactiveChildren)break; - } - } - } - } -} + var rect = this.interactionDOMElement.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + touchData.originalEvent = event || window.event; + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } +}; /** * Is called when a touch is ended on the renderer element @@ -753,67 +745,69 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) */ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - //this.mouse.originalEvent = event || window.event; //IE uses window.event - var rect = this.interactionDOMElement.getBoundingClientRect(); - var changedTouches = event.changedTouches; - - for (var i=0; i < changedTouches.length; i++) - { - var touchEvent = changedTouches[i]; - var touchData = this.touchs[touchEvent.identifier]; - var up = false; - touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); - touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); - - var length = this.interactiveItems.length; - for (var j = 0; j < length; j++) - { - var item = this.interactiveItems[j]; - var itemTouchData = item.__touchData; // <-- Here! - item.__hit = this.hitTest(item, touchData); - - if(itemTouchData == touchData) - { - // so this one WAS down... - touchData.originalEvent = event || window.event; - // hitTest?? - - if(item.touchend || item.tap) - { - if(item.__hit && !up) - { - if(item.touchend)item.touchend(touchData); - if(item.__isDown) - { - if(item.tap)item.tap(touchData); - } - - if(!item.interactiveChildren)up = true; - } - else - { - if(item.__isDown) - { - if(item.touchendoutside)item.touchendoutside(touchData); - } - } - - item.__isDown = false; - } - - item.__touchData = null; - - } - else - { - - } - } - // remove the touch.. - this.pool.push(touchData); - this.touchs[touchEvent.identifier] = null; - } -} + //this.mouse.originalEvent = event || window.event; //IE uses window.event + var rect = this.interactionDOMElement.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData === touchData) + { + // so this one WAS down... + touchData.originalEvent = event || window.event; + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + /* + else + { + + } + */ + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +}; /** * Holds all information related to an Interaction event @@ -823,33 +817,33 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) */ PIXI.InteractionData = function() { - /** - * This point stores the global coords of where the touch/mouse event happened - * - * @property global - * @type Point - */ - this.global = new PIXI.Point(); - - // this is here for legacy... but will remove - this.local = new PIXI.Point(); + /** + * This point stores the global coords of where the touch/mouse event happened + * + * @property global + * @type Point + */ + this.global = new PIXI.Point(); - /** - * The target Sprite that was interacted with - * - * @property target - * @type Sprite - */ - this.target; + // this is here for legacy... but will remove + this.local = new PIXI.Point(); - /** - * When passed to an event handler, this will be the original DOM Event that was captured - * - * @property originalEvent - * @type Event - */ - this.originalEvent; -} + /** + * The target Sprite that was interacted with + * + * @property target + * @type Sprite + */ + this.target = null; + + /** + * When passed to an event handler, this will be the original DOM Event that was captured + * + * @property originalEvent + * @type Event + */ + this.originalEvent = null; +}; /** * This will return the local coords of the specified displayObject for this InteractionData @@ -860,17 +854,17 @@ PIXI.InteractionData = function() */ PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) { - var worldTransform = displayObject.worldTransform; - var global = this.global; - - // do a cheeky transform to get the mouse coords; - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], id = 1 / (a00 * a11 + a01 * -a10); - // set the mouse coords... - return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, - a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) -} + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id); +}; // constructor PIXI.InteractionData.prototype.constructor = PIXI.InteractionData; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index f44df3b..9d627e7 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -176,7 +178,7 @@ (function(){ - var root = this; + var root = this;
    diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index b8e33d6..d54ce08 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index 08affe9..a51bb00 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -179,6 +181,9 @@ */ var PIXI = PIXI || {}; +PIXI.WEBGL_RENDERER = 0; +PIXI.CANVAS_RENDERER = 1; +
    diff --git a/docs/files/src_pixi_core_Circle.js.html b/docs/files/src_pixi_core_Circle.js.html index 5eef8ec..2ead135 100644 --- a/docs/files/src_pixi_core_Circle.js.html +++ b/docs/files/src_pixi_core_Circle.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -205,7 +207,7 @@ PIXI.Circle = function(x, y, radius) * @default 0 */ this.radius = radius || 0; -} +}; /** * Creates a clone of this Circle instance @@ -216,7 +218,7 @@ PIXI.Circle = function(x, y, radius) PIXI.Circle.prototype.clone = function() { return new PIXI.Circle(this.x, this.y, this.radius); -} +}; /** * Checks if the x, and y coords passed to this function are contained within this circle @@ -239,7 +241,7 @@ PIXI.Circle.prototype.contains = function(x, y) dy *= dy; return (dx + dy <= r2); -} +}; // constructor PIXI.Circle.prototype.constructor = PIXI.Circle; diff --git a/docs/files/src_pixi_core_Ellipse.js.html b/docs/files/src_pixi_core_Ellipse.js.html index c6e13fa..77ea157 100644 --- a/docs/files/src_pixi_core_Ellipse.js.html +++ b/docs/files/src_pixi_core_Ellipse.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -213,7 +215,7 @@ PIXI.Ellipse = function(x, y, width, height) * @default 0 */ this.height = height || 0; -} +}; /** * Creates a clone of this Ellipse instance @@ -224,7 +226,7 @@ PIXI.Ellipse = function(x, y, width, height) PIXI.Ellipse.prototype.clone = function() { return new PIXI.Ellipse(this.x, this.y, this.width, this.height); -} +}; /** * Checks if the x, and y coords passed to this function are contained within this ellipse @@ -248,12 +250,12 @@ PIXI.Ellipse.prototype.contains = function(x, y) normy *= normy; return (normx + normy < 0.25); -} +}; -PIXI.Ellipse.getBounds = function() +PIXI.Ellipse.prototype.getBounds = function() { return new PIXI.Rectangle(this.x, this.y, this.width, this.height); -} +}; // constructor PIXI.Ellipse.prototype.constructor = PIXI.Ellipse; diff --git a/docs/files/src_pixi_core_Point.js.html b/docs/files/src_pixi_core_Point.js.html index 04e593d..8b0dc8e 100644 --- a/docs/files/src_pixi_core_Point.js.html +++ b/docs/files/src_pixi_core_Point.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -184,20 +186,20 @@ */ PIXI.Point = function(x, y) { - /** - * @property x - * @type Number - * @default 0 - */ - this.x = x || 0; + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; - /** - * @property y - * @type Number - * @default 0 - */ - this.y = y || 0; -} + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +}; /** * Creates a clone of this point @@ -207,8 +209,8 @@ PIXI.Point = function(x, y) */ PIXI.Point.prototype.clone = function() { - return new PIXI.Point(this.x, this.y); -} + return new PIXI.Point(this.x, this.y); +}; // constructor PIXI.Point.prototype.constructor = PIXI.Point; diff --git a/docs/files/src_pixi_core_Polygon.js.html b/docs/files/src_pixi_core_Polygon.js.html index 2ba82b6..5eb8e26 100644 --- a/docs/files/src_pixi_core_Polygon.js.html +++ b/docs/files/src_pixi_core_Polygon.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -201,8 +203,8 @@ PIXI.Polygon = function(points) points = p; } - this.points = points; -} + this.points = points; +}; /** * Creates a clone of this polygon @@ -212,13 +214,13 @@ PIXI.Polygon = function(points) */ PIXI.Polygon.prototype.clone = function() { - var points = []; - for (var i=0; i<this.points.length; i++) { - points.push(this.points[i].clone()); - } + var points = []; + for (var i=0; i<this.points.length; i++) { + points.push(this.points[i].clone()); + } - return new PIXI.Polygon(points); -} + return new PIXI.Polygon(points); +}; /** * Checks if the x, and y coords passed to this function are contained within this polygon @@ -237,13 +239,13 @@ PIXI.Polygon.prototype.contains = function(x, y) for(var i = 0, j = this.points.length - 1; i < this.points.length; j = i++) { var xi = this.points[i].x, yi = this.points[i].y, xj = this.points[j].x, yj = this.points[j].y, - intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); if(intersect) inside = !inside; } return inside; -} +}; // constructor PIXI.Polygon.prototype.constructor = PIXI.Polygon; diff --git a/docs/files/src_pixi_core_Rectangle.js.html b/docs/files/src_pixi_core_Rectangle.js.html index ff73bde..03a59a2 100644 --- a/docs/files/src_pixi_core_Rectangle.js.html +++ b/docs/files/src_pixi_core_Rectangle.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -186,34 +188,34 @@ */ PIXI.Rectangle = function(x, y, width, height) { - /** - * @property x - * @type Number - * @default 0 - */ - this.x = x || 0; + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; - /** - * @property y - * @type Number - * @default 0 - */ - this.y = y || 0; + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; - /** - * @property width - * @type Number - * @default 0 - */ - this.width = width || 0; + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; - /** - * @property height - * @type Number - * @default 0 - */ - this.height = height || 0; -} + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +}; /** * Creates a clone of this Rectangle @@ -223,8 +225,8 @@ PIXI.Rectangle = function(x, y, width, height) */ PIXI.Rectangle.prototype.clone = function() { - return new PIXI.Rectangle(this.x, this.y, this.width, this.height); -} + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +}; /** * Checks if the x, and y coords passed to this function are contained within this Rectangle @@ -239,19 +241,19 @@ PIXI.Rectangle.prototype.contains = function(x, y) if(this.width <= 0 || this.height <= 0) return false; - var x1 = this.x; - if(x >= x1 && x <= x1 + this.width) - { - var y1 = this.y; + var x1 = this.x; + if(x >= x1 && x <= x1 + this.width) + { + var y1 = this.y; - if(y >= y1 && y <= y1 + this.height) - { - return true; - } - } + if(y >= y1 && y <= y1 + this.height) + { + return true; + } + } - return false; -} + return false; +}; // constructor PIXI.Rectangle.prototype.constructor = PIXI.Rectangle; diff --git a/docs/files/src_pixi_display_DisplayObject.js.html b/docs/files/src_pixi_display_DisplayObject.js.html index 57725eb..e325116 100644 --- a/docs/files/src_pixi_display_DisplayObject.js.html +++ b/docs/files/src_pixi_display_DisplayObject.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -182,236 +184,247 @@ */ PIXI.DisplayObject = function() { - this.last = this; - this.first = this; - /** - * The coordinate of the object relative to the local coordinates of the parent. - * - * @property position - * @type Point - */ - this.position = new PIXI.Point(); + this.last = this; + this.first = this; + /** + * The coordinate of the object relative to the local coordinates of the parent. + * + * @property position + * @type Point + */ + this.position = new PIXI.Point(); - /** - * The scale factor of the object. - * - * @property scale - * @type Point - */ - this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + /** + * The scale factor of the object. + * + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; - /** - * The pivot point of the displayObject that it rotates around - * - * @property pivot - * @type Point - */ - this.pivot = new PIXI.Point(0,0); + /** + * The pivot point of the displayObject that it rotates around + * + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); - /** - * The rotation of the object in radians. - * - * @property rotation - * @type Number - */ - this.rotation = 0; + /** + * The rotation of the object in radians. + * + * @property rotation + * @type Number + */ + this.rotation = 0; - /** - * The opacity of the object. - * - * @property alpha - * @type Number - */ - this.alpha = 1; + /** + * The opacity of the object. + * + * @property alpha + * @type Number + */ + this.alpha = 1; - /** - * The visibility of the object. - * - * @property visible - * @type Boolean - */ - this.visible = true; + /** + * The visibility of the object. + * + * @property visible + * @type Boolean + */ + this.visible = true; - /** - * This is the defined area that will pick up mouse / touch events. It is null by default. - * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) - * - * @property hitArea - * @type Rectangle|Circle|Ellipse|Polygon - */ - this.hitArea = null; + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * + * @property hitArea + * @type Rectangle|Circle|Ellipse|Polygon + */ + this.hitArea = null; - /** - * This is used to indicate if the displayObject should display a mouse hand cursor on rollover - * - * @property buttonMode - * @type Boolean - */ - this.buttonMode = false; + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; - /** - * Can this object be rendered - * - * @property renderable - * @type Boolean - */ - this.renderable = false; + /** + * Can this object be rendered + * + * @property renderable + * @type Boolean + */ + this.renderable = false; - /** - * [read-only] The display object container that contains this display object. - * - * @property parent - * @type DisplayObjectContainer - * @readOnly - */ - this.parent = null; + /** + * [read-only] The display object container that contains this display object. + * + * @property parent + * @type DisplayObjectContainer + * @readOnly + */ + this.parent = null; - /** - * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. - * - * @property stage - * @type Stage - * @readOnly - */ - this.stage = null; + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * + * @property stage + * @type Stage + * @readOnly + */ + this.stage = null; - /** - * [read-only] The multiplied alpha of the displayobject - * - * @property worldAlpha - * @type Number - * @readOnly - */ - this.worldAlpha = 1; + /** + * [read-only] The multiplied alpha of the displayobject + * + * @property worldAlpha + * @type Number + * @readOnly + */ + this.worldAlpha = 1; - /** - * [read-only] Whether or not the object is interactive, do not toggle directly! use the `interactive` property - * - * @property _interactive - * @type Boolean - * @readOnly - * @private - */ - this._interactive = false; + /** + * [read-only] Whether or not the object is interactive, do not toggle directly! use the `interactive` property + * + * @property _interactive + * @type Boolean + * @readOnly + * @private + */ + this._interactive = false; - /** - * [read-only] Current transform of the object based on world (parent) factors - * - * @property worldTransform - * @type Mat3 - * @readOnly - * @private - */ - this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.defaultCursor = 'pointer'; - /** - * [read-only] Current transform of the object locally - * - * @property localTransform - * @type Mat3 - * @readOnly - * @private - */ - this.localTransform = PIXI.mat3.create()//mat3.identity(); + /** + * [read-only] Current transform of the object based on world (parent) factors + * + * @property worldTransform + * @type Mat3 + * @readOnly + * @private + */ + this.worldTransform = PIXI.mat3.create(); //mat3.identity(); - /** - * [NYI] Unkown - * - * @property color - * @type Array<> - * @private - */ - this.color = []; + /** + * [read-only] Current transform of the object locally + * + * @property localTransform + * @type Mat3 + * @readOnly + * @private + */ + this.localTransform = PIXI.mat3.create(); //mat3.identity(); - /** - * [NYI] Holds whether or not this object is dynamic, for rendering optimization - * - * @property dynamic - * @type Boolean - * @private - */ - this.dynamic = true; + /** + * [NYI] Unkown + * + * @property color + * @type Array<> + * @private + */ + this.color = []; - // chach that puppy! - this._sr = 0; - this._cr = 1; + /** + * [NYI] Holds whether or not this object is dynamic, for rendering optimization + * + * @property dynamic + * @type Boolean + * @private + */ + this.dynamic = true; + + // chach that puppy! + this._sr = 0; + this._cr = 1; - this.filterArea = new PIXI.Rectangle(0,0,1,1); - - /* - * MOUSE Callbacks - */ - - /** - * A callback that is used when the users clicks on the displayObject with their mouse - * @method click - * @param interactionData {InteractionData} - */ - - /** - * A callback that is used when the user clicks the mouse down over the sprite - * @method mousedown - * @param interactionData {InteractionData} - */ - - /** - * A callback that is used when the user releases the mouse that was over the displayObject - * for this callback to be fired the mouse must have been pressed down over the displayObject - * @method mouseup - * @param interactionData {InteractionData} - */ - - /** - * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject - * for this callback to be fired, The touch must have started over the displayObject - * @method mouseupoutside - * @param interactionData {InteractionData} - */ - - /** - * A callback that is used when the users mouse rolls over the displayObject - * @method mouseover - * @param interactionData {InteractionData} - */ - - /** - * A callback that is used when the users mouse leaves the displayObject - * @method mouseout - * @param interactionData {InteractionData} - */ + this.filterArea = new PIXI.Rectangle(0,0,1,1); - /* - * TOUCH Callbacks - */ + /** + * + * + * + */ + this._bounds = new PIXI.Rectangle(0, 0, 1, 1); + this._currentBounds = null; - /** - * A callback that is used when the users taps on the sprite with their finger - * basically a touch version of click - * @method tap - * @param interactionData {InteractionData} - */ + /* + * MOUSE Callbacks + */ - /** - * A callback that is used when the user touch's over the displayObject - * @method touchstart - * @param interactionData {InteractionData} - */ + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ - /** - * A callback that is used when the user releases a touch over the displayObject - * @method touchend - * @param interactionData {InteractionData} - */ + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ - /** - * A callback that is used when the user releases the touch that was over the displayObject - * for this callback to be fired, The touch must have started over the sprite - * @method touchendoutside - * @param interactionData {InteractionData} - */ -} + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +}; // constructor PIXI.DisplayObject.prototype.constructor = PIXI.DisplayObject; @@ -426,8 +439,8 @@ PIXI.DisplayObject.prototype.constructor = PIXI.DisplayObject; */ PIXI.DisplayObject.prototype.setInteractive = function(interactive) { - this.interactive = interactive; -} + this.interactive = interactive; +}; /** * Indicates if the sprite will have touch and mouse interactivity. It is false by default @@ -441,11 +454,11 @@ Object.defineProperty(PIXI.DisplayObject.prototype, 'interactive', { return this._interactive; }, set: function(value) { - this._interactive = value; - - // TODO more to be done here.. - // need to sort out a re-crawl! - if(this.stage)this.stage.dirty = true; + this._interactive = value; + + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; } }); @@ -458,37 +471,22 @@ Object.defineProperty(PIXI.DisplayObject.prototype, 'interactive', { * @type Graphics */ Object.defineProperty(PIXI.DisplayObject.prototype, 'mask', { + get: function() { + return this._mask; + }, set: function(value) { - - - if(value) - { - if(this._mask) - { - value.start = this._mask.start; - value.end = this._mask.end; - } - else - { - this.addFilter(value); - value.renderable = false; - } - } - else - { - this.removeFilter(this._mask); - this._mask.renderable = true; - } - + + if(this._mask)this._mask.isMask = false; this._mask = value; + if(this._mask)this._mask.isMask = true; } }); /** - * Sets the filters for the displayObject. + * Sets the filters for the displayObject. * * IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer. * To remove filters simply set this property to 'null' * @property filters @@ -499,193 +497,30 @@ Object.defineProperty(PIXI.DisplayObject.prototype, 'filters', { return this._filters; }, set: function(value) { - + if(value) { - if(this._filters)this.removeFilter(this._filters); - this.addFilter(value); + // now put all the passes in one place.. + var passes = []; + for (var i = 0; i < value.length; i++) + { + var filterPasses = value[i].passes; + for (var j = 0; j < filterPasses.length; j++) + { + passes.push(filterPasses[j]); + } + } - // now put all the passes in one place.. - var passes = []; - for (var i = 0; i < value.length; i++) - { - var filterPasses = value[i].passes; - for (var j = 0; j < filterPasses.length; j++) - { - passes.push(filterPasses[j]); - }; - }; + // TODO change this as it is legacy + this._filterBlock = {target:this, filterPasses:passes}; + + + } - value.start.filterPasses = passes; - } - else - { - if(this._filters)this.removeFilter(this._filters); - } - this._filters = value; - - - - } }); -/* - * Adds a filter to this displayObject - * - * @method addFilter - * @param mask {Graphics} the graphics object to use as a filter - * @private - */ -PIXI.DisplayObject.prototype.addFilter = function(data) -{ - //if(this.filter)return; - //this.filter = true; -// data[0].target = this; - - - // insert a filter block.. - // TODO Onject pool thease bad boys.. - var start = new PIXI.FilterBlock(); - var end = new PIXI.FilterBlock(); - - data.start = start; - data.end = end; - - start.data = data; - end.data = data; - - start.first = start.last = this; - end.first = end.last = this; - - start.open = true; - - start.target = this; - - /* - * insert start - */ - - var childFirst = start - var childLast = start - var nextObject; - var previousObject; - - previousObject = this.first._iPrev; - - if(previousObject) - { - nextObject = previousObject._iNext; - childFirst._iPrev = previousObject; - previousObject._iNext = childFirst; - } - else - { - nextObject = this; - } - - if(nextObject) - { - nextObject._iPrev = childLast; - childLast._iNext = nextObject; - } - - - // now insert the end filter block.. - - /* - * insert end filter - */ - var childFirst = end - var childLast = end - var nextObject = null; - var previousObject = null; - - previousObject = this.last; - nextObject = previousObject._iNext; - - if(nextObject) - { - nextObject._iPrev = childLast; - childLast._iNext = nextObject; - } - - childFirst._iPrev = previousObject; - previousObject._iNext = childFirst; - - var updateLast = this; - - var prevLast = this.last; - while(updateLast) - { - if(updateLast.last == prevLast) - { - updateLast.last = end; - } - updateLast = updateLast.parent; - } - - this.first = start; - - // if webGL... - if(this.__renderGroup) - { - this.__renderGroup.addFilterBlocks(start, end); - } - -} - -/* - * Removes the filter to this displayObject - * - * @method removeFilter - * @private - */ -PIXI.DisplayObject.prototype.removeFilter = function(data) -{ - //if(!this.filter)return; - //this.filter = false; - console.log("YUOIO") - // modify the list.. - var startBlock = data.start; - - - var nextObject = startBlock._iNext; - var previousObject = startBlock._iPrev; - - if(nextObject)nextObject._iPrev = previousObject; - if(previousObject)previousObject._iNext = nextObject; - - this.first = startBlock._iNext; - - // remove the end filter - var lastBlock = data.end; - - var nextObject = lastBlock._iNext; - var previousObject = lastBlock._iPrev; - - if(nextObject)nextObject._iPrev = previousObject; - previousObject._iNext = nextObject; - - // this is always true too! - var tempLast = lastBlock._iPrev; - // need to make sure the parents last is updated too - var updateLast = this; - while(updateLast.last == lastBlock) - { - updateLast.last = tempLast; - updateLast = updateLast.parent; - if(!updateLast)break; - } - - // if webGL... - if(this.__renderGroup) - { - this.__renderGroup.removeFilterBlocks(startBlock, lastBlock); - } -} - /* * Updates the object transform for rendering * @@ -694,28 +529,28 @@ PIXI.DisplayObject.prototype.removeFilter = function(data) */ PIXI.DisplayObject.prototype.updateTransform = function() { - // TODO OPTIMIZE THIS!! with dirty - if(this.rotation !== this.rotationCache) - { - this.rotationCache = this.rotation; - this._sr = Math.sin(this.rotation); - this._cr = Math.cos(this.rotation); - } - - var localTransform = this.localTransform; - var parentTransform = this.parent.worldTransform; - var worldTransform = this.worldTransform; - //console.log(localTransform) - localTransform[0] = this._cr * this.scale.x; - localTransform[1] = -this._sr * this.scale.y - localTransform[3] = this._sr * this.scale.x; - localTransform[4] = this._cr * this.scale.y; - - // TODO --> do we even need a local matrix??? - - var px = this.pivot.x; - var py = this.pivot.y; - + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation !== this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y; + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + // TODO --> do we even need a local matrix??? + + var px = this.pivot.x; + var py = this.pivot.y; + // Cache the matrix values (makes for huge speed increases!) var a00 = localTransform[0], a01 = localTransform[1], a02 = this.position.x - localTransform[0] * px - py * localTransform[1], a10 = localTransform[3], a11 = localTransform[4], a12 = this.position.y - localTransform[4] * py - px * localTransform[3], @@ -723,9 +558,9 @@ PIXI.DisplayObject.prototype.updateTransform = function() b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; - localTransform[2] = a02 - localTransform[5] = a12 - + localTransform[2] = a02; + localTransform[5] = a12; + worldTransform[0] = b00 * a00 + b01 * a10; worldTransform[1] = b00 * a01 + b01 * a11; worldTransform[2] = b00 * a02 + b01 * a12 + b02; @@ -734,13 +569,35 @@ PIXI.DisplayObject.prototype.updateTransform = function() worldTransform[4] = b10 * a01 + b11 * a11; worldTransform[5] = b10 * a02 + b11 * a12 + b12; - // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! - // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); - this.worldAlpha = this.alpha * this.parent.worldAlpha; - - this.vcount = PIXI.visibleCount; + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; -} + this.vcount = PIXI.visibleCount; +}; + + +PIXI.DisplayObject.prototype.getBounds = function() +{ + return PIXI.EmptyRectangle; +}; + + +PIXI.DisplayObject.prototype._renderWebGL = function(renderSession) +{ + // OVERWRITE; + // this line is just here to pass jshinting :) + renderSession = renderSession; +}; + +PIXI.DisplayObject.prototype._renderCanvas = function(renderSession) +{ + // OVERWRITE; + // this line is just here to pass jshinting :) + renderSession = renderSession; +}; + +PIXI.EmptyRectangle = new PIXI.Rectangle(0,0,0,0); PIXI.visibleCount = 0; diff --git a/docs/files/src_pixi_display_DisplayObjectContainer.js.html b/docs/files/src_pixi_display_DisplayObjectContainer.js.html index f44463c..5abfcd1 100644 --- a/docs/files/src_pixi_display_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_display_DisplayObjectContainer.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -179,28 +181,65 @@ * A DisplayObjectContainer represents a collection of display objects. * It is the base class of all display objects that act as a container for other objects. * - * @class DisplayObjectContainer + * @class DisplayObjectContainer * @extends DisplayObject * @constructor */ PIXI.DisplayObjectContainer = function() { - PIXI.DisplayObject.call( this ); - - /** - * [read-only] The of children of this container. - * - * @property children - * @type Array<DisplayObject> - * @readOnly - */ - this.children = []; -} + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * + * @property children + * @type Array<DisplayObject> + * @readOnly + */ + this.children = []; +}; // constructor PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); PIXI.DisplayObjectContainer.prototype.constructor = PIXI.DisplayObjectContainer; +/** + * The width of the displayObjectContainer, setting this will actually modify the scale to acheive the value set + * + * @property width + * @type Number + */ + +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'width', { + get: function() { + return this.scale.x * this.getBounds().width; + }, + set: function(value) { + this.scale.x = value / (this.getBounds().width/this.scale.x); + this._width = value; + } +}); +*/ +/** + * The height of the displayObjectContainer, setting this will actually modify the scale to acheive the value set + * + * @property height + * @type Number + */ + + /* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'height', { + get: function() { + return this.scale.y * this.getBounds().height; + }, + set: function(value) { + this.scale.y = value / (this.getBounds().height/this.scale.y); + this._height = value; + } +}); +*/ + /** * Adds a child to the container. * @@ -209,85 +248,22 @@ PIXI.DisplayObjectContainer.prototype.constructor = PIXI.DisplayObjectContainer; */ PIXI.DisplayObjectContainer.prototype.addChild = function(child) { - if(child.parent != undefined) - { - - //// COULD BE THIS??? - child.parent.removeChild(child); - // return; - } + if(child.parent) + { + //// COULD BE THIS??? + child.parent.removeChild(child); + // return; + } - child.parent = this; - - this.children.push(child); - - // update the stage refference.. - - if(this.stage) - { - var tmpChild = child; - do - { - if(tmpChild.interactive)this.stage.dirty = true; - tmpChild.stage = this.stage; - tmpChild = tmpChild._iNext; - } - while(tmpChild) - } - - // LINKED LIST // - - // modify the list.. - var childFirst = child.first - var childLast = child.last; - var nextObject; - var previousObject; - - // this could be wrong if there is a filter?? - if(this._filters || this._mask) - { - previousObject = this.last._iPrev; - } - else - { - previousObject = this.last; - } + child.parent = this; - nextObject = previousObject._iNext; - - // always true in this case - // need to make sure the parents last is updated too - var updateLast = this; - var prevLast = previousObject; - - while(updateLast) - { - if(updateLast.last == prevLast) - { - updateLast.last = child.last; - } - updateLast = updateLast.parent; - } - - if(nextObject) - { - nextObject._iPrev = childLast; - childLast._iNext = nextObject; - } - - childFirst._iPrev = previousObject; - previousObject._iNext = childFirst; + this.children.push(child); - // need to remove any render groups.. - if(this.__renderGroup) - { - // being used by a renderTexture.. if it exists then it must be from a render texture; - if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); - // add them to the new render group.. - this.__renderGroup.addDisplayObjectAndChildren(child); - } - -} + // update the stage refference.. + + if(this.stage)this.setStageReference(this.stage); + +}; /** * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown @@ -298,83 +274,24 @@ PIXI.DisplayObjectContainer.prototype.addChild = function(child) */ PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) { - if(index >= 0 && index <= this.children.length) - { - if(child.parent != undefined) - { - child.parent.removeChild(child); - } - child.parent = this; - - if(this.stage) - { - var tmpChild = child; - do - { - if(tmpChild.interactive)this.stage.dirty = true; - tmpChild.stage = this.stage; - tmpChild = tmpChild._iNext; - } - while(tmpChild) - } - - // modify the list.. - var childFirst = child.first; - var childLast = child.last; - var nextObject; - var previousObject; - - if(index == this.children.length) - { - previousObject = this.last; - var updateLast = this; - var prevLast = this.last; - while(updateLast) - { - if(updateLast.last == prevLast) - { - updateLast.last = child.last; - } - updateLast = updateLast.parent; - } - } - else if(index == 0) - { - previousObject = this; - } - else - { - previousObject = this.children[index-1].last; - } - - nextObject = previousObject._iNext; - - // always true in this case - if(nextObject) - { - nextObject._iPrev = childLast; - childLast._iNext = nextObject; - } - - childFirst._iPrev = previousObject; - previousObject._iNext = childFirst; + if(index >= 0 && index <= this.children.length) + { + if(child.parent) + { + child.parent.removeChild(child); + } - this.children.splice(index, 0, child); - // need to remove any render groups.. - if(this.__renderGroup) - { - // being used by a renderTexture.. if it exists then it must be from a render texture; - if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); - // add them to the new render group.. - this.__renderGroup.addDisplayObjectAndChildren(child); - } - - } - else - { - throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); - } -} + child.parent = this; + + this.children.splice(index, 0, child); + + if(this.stage)this.setStageReference(this.stage); + } + else + { + throw new Error(child + ' The index '+ index +' supplied is out of bounds ' + this.children.length); + } +}; /** * [NYI] Swaps the depth of 2 displayObjects @@ -386,44 +303,21 @@ PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) */ PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) { - /* - * this funtion needs to be recoded.. - * can be done a lot faster.. - */ - return; - - // need to fix this function :/ - /* - // TODO I already know this?? - var index = this.children.indexOf( child ); - var index2 = this.children.indexOf( child2 ); - - if ( index !== -1 && index2 !== -1 ) - { - // cool - - /* - if(this.stage) - { - // this is to satisfy the webGL batching.. - // TODO sure there is a nicer way to achieve this! - this.stage.__removeChild(child); - this.stage.__removeChild(child2); - - this.stage.__addChild(child); - this.stage.__addChild(child2); - } - - // swap the positions.. - this.children[index] = child2; - this.children[index2] = child; - - } - else - { - throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); - }*/ -} + if(child === child2) { + return; + } + + var index1 = this.children.indexOf(child); + var index2 = this.children.indexOf(child2); + + if(index1 < 0 || index2 < 0) { + throw new Error('swapChildren: Both the supplied DisplayObjects must be a child of the caller.'); + } + + this.children[index1] = child2; + this.children[index2] = child; + +}; /** * Returns the Child at the specified index @@ -433,15 +327,15 @@ PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) */ PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) { - if(index >= 0 && index < this.children.length) - { - return this.children[index]; - } - else - { - throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); - } -} + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error('Both the supplied DisplayObjects must be a child of the caller ' + this); + } +}; /** * Removes a child from the container. @@ -451,63 +345,20 @@ PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) */ PIXI.DisplayObjectContainer.prototype.removeChild = function(child) { - var index = this.children.indexOf( child ); - if ( index !== -1 ) - { - // unlink // - // modify the list.. - var childFirst = child.first; - var childLast = child.last; - - var nextObject = childLast._iNext; - var previousObject = childFirst._iPrev; - - if(nextObject)nextObject._iPrev = previousObject; - previousObject._iNext = nextObject; - - if(this.last == childLast) - { - var tempLast = childFirst._iPrev; - // need to make sure the parents last is updated too - var updateLast = this; - while(updateLast.last == childLast.last) - { - updateLast.last = tempLast; - updateLast = updateLast.parent; - if(!updateLast)break; - } - } - - childLast._iNext = null; - childFirst._iPrev = null; - - // update the stage reference.. - if(this.stage) - { - var tmpChild = child; - do - { - if(tmpChild.interactive)this.stage.dirty = true; - tmpChild.stage = null; - tmpChild = tmpChild._iNext; - } - while(tmpChild) - } - - // webGL trim - if(child.__renderGroup) - { - child.__renderGroup.removeDisplayObjectAndChildren(child); - } - - child.parent = undefined; - this.children.splice( index, 1 ); - } - else - { - throw new Error(child + " The supplied DisplayObject must be a child of the caller " + this); - } -} + var index = this.children.indexOf( child ); + if ( index !== -1 ) + { + // update the stage reference.. + if(this.stage)this.removeStageReference(); + + child.parent = undefined; + this.children.splice( index, 1 ); + } + else + { + throw new Error(child + ' The supplied DisplayObject must be a child of the caller ' + this); + } +}; /* * Updates the container's children's transform for rendering @@ -517,15 +368,154 @@ PIXI.DisplayObjectContainer.prototype.removeChild = function(child) */ PIXI.DisplayObjectContainer.prototype.updateTransform = function() { - if(!this.visible)return; - - PIXI.DisplayObject.prototype.updateTransform.call( this ); - - for(var i=0,j=this.children.length; i<j; i++) - { - this.children[i].updateTransform(); - } -} + //this._currentBounds = null; + + if(!this.visible)return; + + PIXI.DisplayObject.prototype.updateTransform.call( this ); + + for(var i=0,j=this.children.length; i<j; i++) + { + this.children[i].updateTransform(); + } +}; + +PIXI.DisplayObjectContainer.prototype.getBounds = function() +{ + if(this.children.length === 0)return PIXI.EmptyRectangle; + + // TODO the bounds have already been calculated this render session so return what we have + + + var minX = Infinity; + var minY = Infinity; + + var maxX = -Infinity; + var maxY = -Infinity; + + var childBounds; + var childMaxX; + var childMaxY; + + for(var i=0,j=this.children.length; i<j; i++) + { + var child = this.children[i]; + + if(!child.visible)continue; + + childBounds = this.children[i].getBounds(); + + minX = minX < childBounds.x ? minX : childBounds.x; + minY = minY < childBounds.y ? minY : childBounds.y; + + childMaxX = childBounds.width + childBounds.x; + childMaxY = childBounds.height + childBounds.y; + + maxX = maxX > childMaxX ? maxX : childMaxX; + maxY = maxY > childMaxY ? maxY : childMaxY; + } + + var bounds = this._bounds; + + bounds.x = minX; + bounds.y = minY; + bounds.width = maxX - minX; + bounds.height = maxY - minY; + + // TODO: store a refferance so that if this function gets called again in the render cycle we do not have to recacalculate + //this._currentBounds = bounds; + + return bounds; +}; + +PIXI.DisplayObjectContainer.prototype.setStageReference = function(stage) +{ + this.stage = stage; + + for(var i=0,j=this.children.length; i<j; i++) + { + var child = this.children[i]; + if(child.interactive)this.stage.dirty = true; + child.setStageReference(stage); + } +}; + +PIXI.DisplayObjectContainer.prototype.removeStageReference = function() +{ + for(var i=0,j=this.children.length; i<j; i++) + { + var child = this.children[i]; + if(child.interactive)this.stage.dirty = true; + child.removeStageReference(); + child.stage = null; + } +}; + +PIXI.DisplayObjectContainer.prototype._renderWebGL = function(renderSession) +{ + if(this.visible === false || this.alpha === 0)return; + + var i,j; + + if(this._mask || this._filters) + { + if(this._mask) + { + renderSession.spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession); + renderSession.spriteBatch.start(); + } + + if(this._filters) + { + renderSession.spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + } + + // simple render children! + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + + renderSession.spriteBatch.stop(); + + if(this._filters)renderSession.filterManager.popFilter(); + if(this._mask)renderSession.maskManager.popMask(renderSession); + + renderSession.spriteBatch.start(); + } + else + { + // simple render children! + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + } +}; + +PIXI.DisplayObjectContainer.prototype._renderCanvas = function(renderSession) +{ + if(this.visible === false || this.alpha === 0)return; + + if(this._mask) + { + renderSession.maskManager.pushMask(this._mask, renderSession.context); + } + + for(var i=0,j=this.children.length; i<j; i++) + { + var child = this.children[i]; + child._renderCanvas(renderSession); + } + + if(this._mask) + { + renderSession.maskManager.popMask(renderSession.context); + } +}; +
    diff --git a/docs/files/src_pixi_display_MovieClip.js.html b/docs/files/src_pixi_display_MovieClip.js.html index 600d7f1..fc15d93 100644 --- a/docs/files/src_pixi_display_MovieClip.js.html +++ b/docs/files/src_pixi_display_MovieClip.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -184,61 +186,61 @@ */ PIXI.MovieClip = function(textures) { - PIXI.Sprite.call(this, textures[0]); + PIXI.Sprite.call(this, textures[0]); - /** - * The array of textures that make up the animation - * - * @property textures - * @type Array - */ - this.textures = textures; + /** + * The array of textures that make up the animation + * + * @property textures + * @type Array + */ + this.textures = textures; - /** - * The speed that the MovieClip will play at. Higher is faster, lower is slower - * - * @property animationSpeed - * @type Number - * @default 1 - */ - this.animationSpeed = 1; + /** + * The speed that the MovieClip will play at. Higher is faster, lower is slower + * + * @property animationSpeed + * @type Number + * @default 1 + */ + this.animationSpeed = 1; - /** - * Whether or not the movie clip repeats after playing. - * - * @property loop - * @type Boolean - * @default true - */ - this.loop = true; + /** + * Whether or not the movie clip repeats after playing. + * + * @property loop + * @type Boolean + * @default true + */ + this.loop = true; - /** - * Function to call when a MovieClip finishes playing - * - * @property onComplete - * @type Function - */ - this.onComplete = null; + /** + * Function to call when a MovieClip finishes playing + * + * @property onComplete + * @type Function + */ + this.onComplete = null; - /** - * [read-only] The index MovieClips current frame (this may not have to be a whole number) - * - * @property currentFrame - * @type Number - * @default 0 - * @readOnly - */ - this.currentFrame = 0; + /** + * [read-only] The index MovieClips current frame (this may not have to be a whole number) + * + * @property currentFrame + * @type Number + * @default 0 + * @readOnly + */ + this.currentFrame = 0; - /** - * [read-only] Indicates if the MovieClip is currently playing - * - * @property playing - * @type Boolean - * @readOnly - */ - this.playing = false; -} + /** + * [read-only] Indicates if the MovieClip is currently playing + * + * @property playing + * @type Boolean + * @readOnly + */ + this.playing = false; +}; // constructor PIXI.MovieClip.prototype = Object.create( PIXI.Sprite.prototype ); @@ -268,8 +270,8 @@ Object.defineProperty( PIXI.MovieClip.prototype, 'totalFrames', { */ PIXI.MovieClip.prototype.stop = function() { - this.playing = false; -} + this.playing = false; +}; /** * Plays the MovieClip @@ -278,8 +280,8 @@ PIXI.MovieClip.prototype.stop = function() */ PIXI.MovieClip.prototype.play = function() { - this.playing = true; -} + this.playing = true; +}; /** * Stops the MovieClip and goes to a specific frame @@ -289,11 +291,11 @@ PIXI.MovieClip.prototype.play = function() */ PIXI.MovieClip.prototype.gotoAndStop = function(frameNumber) { - this.playing = false; - this.currentFrame = frameNumber; - var round = (this.currentFrame + 0.5) | 0; - this.setTexture(this.textures[round % this.textures.length]); -} + this.playing = false; + this.currentFrame = frameNumber; + var round = (this.currentFrame + 0.5) | 0; + this.setTexture(this.textures[round % this.textures.length]); +}; /** * Goes to a specific frame and begins playing the MovieClip @@ -303,9 +305,9 @@ PIXI.MovieClip.prototype.gotoAndStop = function(frameNumber) */ PIXI.MovieClip.prototype.gotoAndPlay = function(frameNumber) { - this.currentFrame = frameNumber; - this.playing = true; -} + this.currentFrame = frameNumber; + this.playing = true; +}; /* * Updates the object transform for rendering @@ -315,27 +317,28 @@ PIXI.MovieClip.prototype.gotoAndPlay = function(frameNumber) */ PIXI.MovieClip.prototype.updateTransform = function() { - PIXI.Sprite.prototype.updateTransform.call(this); + PIXI.Sprite.prototype.updateTransform.call(this); - if(!this.playing)return; + if(!this.playing)return; - this.currentFrame += this.animationSpeed; + this.currentFrame += this.animationSpeed; - var round = (this.currentFrame + 0.5) | 0; + var round = (this.currentFrame + 0.5) | 0; + + if(this.loop || round < this.textures.length) + { + this.setTexture(this.textures[round % this.textures.length]); + } + else if(round >= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +}; - if(this.loop || round < this.textures.length) - { - this.setTexture(this.textures[round % this.textures.length]); - } - else if(round >= this.textures.length) - { - this.gotoAndStop(this.textures.length - 1); - if(this.onComplete) - { - this.onComplete(); - } - } -}
    diff --git a/docs/files/src_pixi_display_Sprite.js.html b/docs/files/src_pixi_display_Sprite.js.html index 84f1dce..dd4246c 100644 --- a/docs/files/src_pixi_display_Sprite.js.html +++ b/docs/files/src_pixi_display_Sprite.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,14 +177,15 @@ */ PIXI.blendModes = {}; -PIXI.blendModes.NORMAL = 0; -PIXI.blendModes.SCREEN = 1; - +PIXI.blendModes.NORMAL = 0; +PIXI.blendModes.ADD = 1; +PIXI.blendModes.MULTIPLY = 2; +PIXI.blendModes.SCREEN = 3; /** * The SPrite object is the base for all textured objects that are rendered to the screen * - * @class Sprite + * @class Sprite™ * @extends DisplayObjectContainer * @constructor * @param texture {Texture} The texture for this sprite @@ -190,66 +193,80 @@ PIXI.blendModes.SCREEN = 1; */ PIXI.Sprite = function(texture) { - PIXI.DisplayObjectContainer.call( this ); + PIXI.DisplayObjectContainer.call( this ); - /** - * The anchor sets the origin point of the texture. - * The default is 0,0 this means the textures origin is the top left - * Setting than anchor to 0.5,0.5 means the textures origin is centered - * Setting the anchor to 1,1 would mean the textures origin points will be the bottom right - * + /** + * The anchor sets the origin point of the texture. + * The default is 0,0 this means the textures origin is the top left + * Setting than anchor to 0.5,0.5 means the textures origin is centered + * Setting the anchor to 1,1 would mean the textures origin points will be the bottom right + * * @property anchor * @type Point */ - this.anchor = new PIXI.Point(); + this.anchor = new PIXI.Point(); - /** - * The texture that the sprite is using - * - * @property texture - * @type Texture - */ - this.texture = texture; + /** + * The texture that the sprite is using + * + * @property texture + * @type Texture + */ + this.texture = texture; - /** - * The blend mode of sprite. - * currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN - * - * @property blendMode - * @type Number - */ - this.blendMode = PIXI.blendModes.NORMAL; + /** + * The blend mode of sprite. + * currently supports PIXI.blendModes.NORMAL and PIXI.blendModes.SCREEN + * + * @property blendMode + * @type Number + */ + this.blendMode = PIXI.blendModes.NORMAL; - /** - * The width of the sprite (this is initially set by the texture) - * - * @property _width - * @type Number - * @private - */ - this._width = 0; + /** + * The width of the sprite (this is initially set by the texture) + * + * @property _width + * @type Number + * @private + */ + this._width = 0; - /** - * The height of the sprite (this is initially set by the texture) - * - * @property _height - * @type Number - * @private - */ - this._height = 0; + /** + * The height of the sprite (this is initially set by the texture) + * + * @property _height + * @type Number + * @private + */ + this._height = 0; - if(texture.baseTexture.hasLoaded) - { - this.updateFrame = true; - } - else - { - this.onTextureUpdateBind = this.onTextureUpdate.bind(this); - this.texture.addEventListener( 'update', this.onTextureUpdateBind ); - } - this.renderable = true; -} + /** + * The tint applied to the sprite. This is a hex value + * + * @property tint + * @type Number + * @default 0xFFFFFF + * @private + */ + this.tint = 0xFFFFFF;// * Math.random(); + + this.blendMode = PIXI.blendModes.NORMAL; + + if(texture.baseTexture.hasLoaded) + { + this.updateFrame = true; + this.onTextureUpdate(); + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +}; // constructor PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); @@ -266,7 +283,7 @@ Object.defineProperty(PIXI.Sprite.prototype, 'width', { return this.scale.x * this.texture.frame.width; }, set: function(value) { - this.scale.x = value / this.texture.frame.width + this.scale.x = value / this.texture.frame.width; this._width = value; } }); @@ -282,7 +299,7 @@ Object.defineProperty(PIXI.Sprite.prototype, 'height', { return this.scale.y * this.texture.frame.height; }, set: function(value) { - this.scale.y = value / this.texture.frame.height + this.scale.y = value / this.texture.frame.height; this._height = value; } }); @@ -295,24 +312,20 @@ Object.defineProperty(PIXI.Sprite.prototype, 'height', { */ PIXI.Sprite.prototype.setTexture = function(texture) { - // stop current texture; - if(this.texture.baseTexture != texture.baseTexture) - { - this.textureChange = true; - this.texture = texture; - - if(this.__renderGroup) - { - this.__renderGroup.updateTexture(this); - } - } - else - { - this.texture = texture; - } - - this.updateFrame = true; -} + // stop current texture; + if(this.texture.baseTexture !== texture.baseTexture) + { + this.textureChange = true; + this.texture = texture; + } + else + { + this.texture = texture; + } + + this.cachedTint = 0xFFFFFF; + this.updateFrame = true; +}; /** * When the texture is updated, this event will fire to update the scale and frame @@ -321,21 +334,261 @@ PIXI.Sprite.prototype.setTexture = function(texture) * @param event * @private */ -PIXI.Sprite.prototype.onTextureUpdate = function(event) +PIXI.Sprite.prototype.onTextureUpdate = function() { - //this.texture.removeEventListener( 'update', this.onTextureUpdateBind ); - - // so if _width is 0 then width was not set.. - if(this._width)this.scale.x = this._width / this.texture.frame.width; - if(this._height)this.scale.y = this._height / this.texture.frame.height; - - this.updateFrame = true; -} + // so if _width is 0 then width was not set.. + if(this._width)this.scale.x = this._width / this.texture.frame.width; + if(this._height)this.scale.y = this._height / this.texture.frame.height; + + + this.updateFrame = true; +}; + +PIXI.Sprite.prototype.getBounds = function() +{ + + var width = this.texture.frame.width; + var height = this.texture.frame.height; + + var w0 = width * (1-this.anchor.x); + var w1 = width * -this.anchor.x; + + var h0 = height * (1-this.anchor.y); + var h1 = height * -this.anchor.y; + + var worldTransform = this.worldTransform; + + var a = worldTransform[0]; + var b = worldTransform[3]; + var c = worldTransform[1]; + var d = worldTransform[4]; + var tx = worldTransform[2]; + var ty = worldTransform[5]; + + var x1 = a * w1 + c * h1 + tx; + var y1 = d * h1 + b * w1 + ty; + + var x2 = a * w0 + c * h1 + tx; + var y2 = d * h1 + b * w0 + ty; + + var x3 = a * w0 + c * h0 + tx; + var y3 = d * h0 + b * w0 + ty; + + var x4 = a * w1 + c * h0 + tx; + var y4 = d * h0 + b * w1 + ty; + + var maxX = -Infinity; + var maxY = -Infinity; + + var minX = Infinity; + var minY = Infinity; + + minX = x1 < minX ? x1 : minX; + minX = x2 < minX ? x2 : minX; + minX = x3 < minX ? x3 : minX; + minX = x4 < minX ? x4 : minX; + + minY = y1 < minY ? y1 : minY; + minY = y2 < minY ? y2 : minY; + minY = y3 < minY ? y3 : minY; + minY = y4 < minY ? y4 : minY; + + maxX = x1 > maxX ? x1 : maxX; + maxX = x2 > maxX ? x2 : maxX; + maxX = x3 > maxX ? x3 : maxX; + maxX = x4 > maxX ? x4 : maxX; + + maxY = y1 > maxY ? y1 : maxY; + maxY = y2 > maxY ? y2 : maxY; + maxY = y3 > maxY ? y3 : maxY; + maxY = y4 > maxY ? y4 : maxY; + + var bounds = this._bounds; + + bounds.x = minX; + bounds.width = maxX - minX; + + bounds.y = minY; + bounds.height = maxY - minY; + + // store a refferance so that if this function gets called again in the render cycle we do not have to recacalculate + this._currentBounds = bounds; + + return bounds; +}; + + +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; + + var i,j; + + // 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) + { + spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession); + spriteBatch.start(); + } + + if(this._filters) + { + spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + } + + // add this sprite to the batch + spriteBatch.render(this); + + // now loop through the children and make sure they get rendered + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + + // time to stop the sprite batch as either a mask element or a filter draw will happen next + spriteBatch.stop(); + + if(this._filters)renderSession.filterManager.popFilter(); + if(this._mask)renderSession.maskManager.popMask(renderSession); + + spriteBatch.start(); + } + else + { + renderSession.spriteBatch.render(this); + + // simple render children! + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + } + + + //TODO check culling +}; + +PIXI.Sprite.prototype._renderCanvas = 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; + + if(this._mask) + { + renderSession.maskManager.pushMask(this._mask, renderSession.context); + } + + var frame = this.texture.frame; + var context = renderSession.context; + var texture = this.texture; + + //ignore null sources + if(frame && frame.width && frame.height && texture.baseTexture.source) + { + context.globalAlpha = this.worldAlpha; + + var transform = this.worldTransform; + + // alow for trimming + + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + // check blend mode + if(this.blendMode !== renderSession.currentBlendMode) + { + renderSession.currentBlendMode = this.blendMode; + context.globalCompositeOperation = PIXI.blendModesCanvas[renderSession.currentBlendMode]; + } + + + //if smoothingEnabled is supported and we need to change the smoothing property for this texture + // if(this.smoothProperty && this.scaleMode !== displayObject.texture.baseTexture.scaleMode) { + // this.scaleMode = displayObject.texture.baseTexture.scaleMode; + // context[this.smoothProperty] = (this.scaleMode === PIXI.BaseTexture.SCALE_MODE.LINEAR); + //} + + + if(this.tint !== 0xFFFFFF) + { + if(this.cachedTint !== this.tint) + { + this.cachedTint = this.tint; + + //TODO clean up cacheing - how to clean up the caches? + this.tintedTexture = PIXI.CanvasTinter.getTintedTexture(this, this.tint); + + } + + context.drawImage(this.tintedTexture, + 0, + 0, + frame.width, + frame.height, + (this.anchor.x) * -frame.width, + (this.anchor.y) * -frame.height, + frame.width, + frame.height); + } + else + { + + + + if(texture.trimmed) + { + var trim = texture.trim; + + context.drawImage(this.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + trim.x - this.anchor.x * trim.realWidth, + trim.y - this.anchor.y * trim.realHeight, + frame.width, + frame.height); + } + else + { + + context.drawImage(this.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (this.anchor.x) * -frame.width, + (this.anchor.y) * -frame.height, + frame.width, + frame.height); + } + + } + } + + // OVERWRITE + for(var i=0,j=this.children.length; i<j; i++) + { + var child = this.children[i]; + child._renderCanvas(renderSession); + } + + if(this._mask) + { + renderSession.maskManager.popMask(renderSession.context); + } +}; // some helper functions.. /** - * + * * Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId * The frame ids are created when a Texture packer file has been loaded * @@ -346,13 +599,13 @@ PIXI.Sprite.prototype.onTextureUpdate = function(event) */ PIXI.Sprite.fromFrame = function(frameId) { - var texture = PIXI.TextureCache[frameId]; - if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache" + this); - return new PIXI.Sprite(texture); -} + var texture = PIXI.TextureCache[frameId]; + if(!texture) throw new Error('The frameId "' + frameId + '" does not exist in the texture cache' + this); + return new PIXI.Sprite(texture); +}; /** - * + * * Helper function that creates a sprite that will contain a texture based on an image url * If the image is not in the texture cache it will be loaded * @@ -363,9 +616,9 @@ PIXI.Sprite.fromFrame = function(frameId) */ PIXI.Sprite.fromImage = function(imageId) { - var texture = PIXI.Texture.fromImage(imageId); - return new PIXI.Sprite(texture); -} + var texture = PIXI.Texture.fromImage(imageId); + return new PIXI.Sprite(texture); +};
    diff --git a/docs/files/src_pixi_display_Stage.js.html b/docs/files/src_pixi_display_Stage.js.html index 7c8bc2b..9664f55 100644 --- a/docs/files/src_pixi_display_Stage.js.html +++ b/docs/files/src_pixi_display_Stage.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -181,59 +183,59 @@ * @extends DisplayObjectContainer * @constructor * @param backgroundColor {Number} the background color of the stage, easiest way to pass this in is in hex format - * like: 0xFFFFFF for white + * like: 0xFFFFFF for white */ PIXI.Stage = function(backgroundColor) { - PIXI.DisplayObjectContainer.call( this ); + PIXI.DisplayObjectContainer.call( this ); - /** - * [read-only] Current transform of the object based on world (parent) factors - * - * @property worldTransform - * @type Mat3 - * @readOnly - * @private - */ - this.worldTransform = PIXI.mat3.create(); + /** + * [read-only] Current transform of the object based on world (parent) factors + * + * @property worldTransform + * @type Mat3 + * @readOnly + * @private + */ + this.worldTransform = PIXI.mat3.create(); - /** - * Whether or not the stage is interactive - * - * @property interactive - * @type Boolean - */ - this.interactive = true; + /** + * Whether or not the stage is interactive + * + * @property interactive + * @type Boolean + */ + this.interactive = true; - /** - * The interaction manage for this stage, manages all interactive activity on the stage - * - * @property interactive - * @type InteractionManager - */ - this.interactionManager = new PIXI.InteractionManager(this); + /** + * The interaction manage for this stage, manages all interactive activity on the stage + * + * @property interactive + * @type InteractionManager + */ + this.interactionManager = new PIXI.InteractionManager(this); - /** - * Whether the stage is dirty and needs to have interactions updated - * - * @property dirty - * @type Boolean - * @private - */ - this.dirty = true; + /** + * Whether the stage is dirty and needs to have interactions updated + * + * @property dirty + * @type Boolean + * @private + */ + this.dirty = true; - this.__childrenAdded = []; - this.__childrenRemoved = []; + this.__childrenAdded = []; + this.__childrenRemoved = []; - //the stage is it's own stage - this.stage = this; + //the stage is it's own stage + this.stage = this; - //optimize hit detection a bit - this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + //optimize hit detection a bit + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); - this.setBackgroundColor(backgroundColor); - this.worldVisible = true; -} + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; +}; // constructor PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); @@ -248,8 +250,8 @@ PIXI.Stage.prototype.constructor = PIXI.Stage; */ PIXI.Stage.prototype.setInteractionDelegate = function(domElement) { - this.interactionManager.setTargetDomElement( domElement ); -} + this.interactionManager.setTargetDomElement( domElement ); +}; /* * Updates the object transform for rendering @@ -259,40 +261,39 @@ PIXI.Stage.prototype.setInteractionDelegate = function(domElement) */ PIXI.Stage.prototype.updateTransform = function() { - this.worldAlpha = 1; - this.vcount = PIXI.visibleCount; - - for(var i=0,j=this.children.length; i<j; i++) - { - this.children[i].updateTransform(); - } - - if(this.dirty) - { - this.dirty = false; - // update interactive! - this.interactionManager.dirty = true; - } - - - if(this.interactive)this.interactionManager.update(); -} + this.worldAlpha = 1; + this.vcount = PIXI.visibleCount; + + for(var i=0,j=this.children.length; i<j; i++) + { + this.children[i].updateTransform(); + } + + if(this.dirty) + { + this.dirty = false; + // update interactive! + this.interactionManager.dirty = true; + } + + if(this.interactive)this.interactionManager.update(); +}; /** * Sets the background color for the stage * * @method setBackgroundColor * @param backgroundColor {Number} the color of the background, easiest way to pass this in is in hex format - * like: 0xFFFFFF for white + * like: 0xFFFFFF for white */ PIXI.Stage.prototype.setBackgroundColor = function(backgroundColor) { - this.backgroundColor = backgroundColor || 0x000000; - this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - var hex = this.backgroundColor.toString(16); - hex = "000000".substr(0, 6 - hex.length) + hex; - this.backgroundColorString = "#" + hex; -} + this.backgroundColor = backgroundColor || 0x000000; + this.backgroundColorSplit = PIXI.hex2rgb(this.backgroundColor); + var hex = this.backgroundColor.toString(16); + hex = '000000'.substr(0, 6 - hex.length) + hex; + this.backgroundColorString = '#' + hex; +}; /** * This will return the point containing global coords of the mouse. @@ -302,8 +303,8 @@ PIXI.Stage.prototype.setBackgroundColor = function(backgroundColor) */ PIXI.Stage.prototype.getMousePosition = function() { - return this.interactionManager.mouse.global; -} + return this.interactionManager.mouse.global; +};
    diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 34c0cf3..6aaadfc 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,30 +176,28 @@ * @author Mat Groves http://matgroves.com/ */ - PIXI.Rope = function(texture, points) { - PIXI.Strip.call( this, texture ); - this.points = points; + PIXI.Strip.call( this, texture ); + this.points = points; - try - { - this.verticies = new Float32Array( points.length * 4); - this.uvs = new Float32Array( points.length * 4); - this.colors = new Float32Array( points.length * 2); - this.indices = new Uint16Array( points.length * 2); - } - catch(error) - { - this.verticies = verticies + try + { + this.verticies = new Float32Array(points.length * 4); + this.uvs = new Float32Array(points.length * 4); + this.colors = new Float32Array(points.length * 2); + this.indices = new Uint16Array(points.length * 2); + } + catch(error) + { + this.verticies = new Array(points.length * 4); + this.uvs = new Array(points.length * 4); + this.colors = new Array(points.length * 2); + this.indices = new Array(points.length * 2); + } - this.uvs = uvs - this.colors = colors - this.indices = indices - } - - this.refresh(); -} + this.refresh(); +}; // constructor @@ -206,145 +206,138 @@ PIXI.Rope.prototype.constructor = PIXI.Rope; PIXI.Rope.prototype.refresh = function() { - var points = this.points; - if(points.length < 1)return; + var points = this.points; + if(points.length < 1) return; - var uvs = this.uvs - var indices = this.indices; - var colors = this.colors; + var uvs = this.uvs; - var lastPoint = points[0]; - var nextPoint; - var perp = {x:0, y:0}; - var point = points[0]; + var lastPoint = points[0]; + var indices = this.indices; + var colors = this.colors; - this.count-=0.2; + this.count-=0.2; - uvs[0] = 0 - uvs[1] = 1 - uvs[2] = 0 - uvs[3] = 1 + uvs[0] = 0; + uvs[1] = 1; + uvs[2] = 0; + uvs[3] = 1; - colors[0] = 1; - colors[1] = 1; + colors[0] = 1; + colors[1] = 1; - indices[0] = 0; - indices[1] = 1; + indices[0] = 0; + indices[1] = 1; - var total = points.length; + var total = points.length, + point, index, amount; - for (var i = 1; i < total; i++) - { + for (var i = 1; i < total; i++) + { - var point = points[i]; - var index = i * 4; - // time to do some smart drawing! - var amount = i/(total-1) + point = points[i]; + index = i * 4; + // time to do some smart drawing! + amount = i / (total-1); - if(i%2) - { - uvs[index] = amount; - uvs[index+1] = 0; + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; - uvs[index+2] = amount - uvs[index+3] = 1 + uvs[index+2] = amount; + uvs[index+3] = 1; - } - else - { - uvs[index] = amount - uvs[index+1] = 0 + } + else + { + uvs[index] = amount; + uvs[index+1] = 0; - uvs[index+2] = amount - uvs[index+3] = 1 - } + uvs[index+2] = amount; + uvs[index+3] = 1; + } - index = i * 2; - colors[index] = 1; - colors[index+1] = 1; + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; - index = i * 2; - indices[index] = index; - indices[index + 1] = index + 1; + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; - lastPoint = point; - } -} + lastPoint = point; + } +}; PIXI.Rope.prototype.updateTransform = function() { - var points = this.points; - if(points.length < 1)return; + var points = this.points; + if(points.length < 1)return; - var verticies = this.verticies + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; - var lastPoint = points[0]; - var nextPoint; - var perp = {x:0, y:0}; - var point = points[0]; + this.count-=0.2; - this.count-=0.2; + var verticies = this.verticies; + verticies[0] = lastPoint.x + perp.x; + verticies[1] = lastPoint.y + perp.y; //+ 200 + verticies[2] = lastPoint.x - perp.x; + verticies[3] = lastPoint.y - perp.y;//+200 + // time to do some smart drawing! - verticies[0] = point.x + perp.x - verticies[1] = point.y + perp.y //+ 200 - verticies[2] = point.x - perp.x - verticies[3] = point.y - perp.y//+200 - // time to do some smart drawing! + var total = points.length, + point, index, ratio, perpLength, num; - var total = points.length; + for (var i = 1; i < total; i++) + { + point = points[i]; + index = i * 4; - for (var i = 1; i < total; i++) - { + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point; + } - var point = points[i]; - var index = i * 4; + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; - if(i < points.length-1) - { - nextPoint = points[i+1]; - } - else - { - nextPoint = point - } + ratio = (1 - (i / (total-1))) * 10; - perp.y = -(nextPoint.x - lastPoint.x); - perp.x = nextPoint.y - lastPoint.y; + if(ratio > 1) ratio = 1; - var ratio = (1 - (i / (total-1))) * 10; - if(ratio > 1)ratio = 1; + perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + num = this.texture.height / 2; //(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; - var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); - var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; - perp.x /= perpLength; - perp.y /= perpLength; + perp.x *= num; + perp.y *= num; - perp.x *= num; - perp.y *= num; + verticies[index] = point.x + perp.x; + verticies[index+1] = point.y + perp.y; + verticies[index+2] = point.x - perp.x; + verticies[index+3] = point.y - perp.y; - verticies[index] = point.x + perp.x - verticies[index+1] = point.y + perp.y - verticies[index+2] = point.x - perp.x - verticies[index+3] = point.y - perp.y + lastPoint = point; + } - lastPoint = point; - } - - PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); -} + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +}; PIXI.Rope.prototype.setTexture = function(texture) { - // stop current texture - this.texture = texture; - this.updateFrame = true; -} - - - - + // stop current texture + this.texture = texture; + this.updateFrame = true; +};
    diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html index b1df202..97d84de 100644 --- a/docs/files/src_pixi_extras_Spine.js.html +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -179,6 +181,1350 @@ * */ +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon), 10); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (!high) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (!i) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames, + amount; + + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length ? this.bones[0] : null; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + defaultMix: 0, + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : this.defaultMix; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length ? this.queue[this.queue.length - 1].animation : this.current; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + /*jshint -W069*/ + var skeletonData = new spine.SkeletonData(), + boneData; + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + /*jshint -W069*/ + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + if (type == spine.AttachmentType.region) { + var attachment = new spine.RegionAttachment(); + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + + attachment.rendererObject = {}; + attachment.rendererObject.name = name; + attachment.rendererObject.scale = {}; + attachment.rendererObject.scale.x = attachment.scaleX; + attachment.rendererObject.scale.y = attachment.scaleY; + attachment.rendererObject.rotation = -attachment.rotation * Math.PI / 180; + return attachment; + } + + throw "Unknown attachment type: " + type; + }, + + readAnimation: function (name, map, skeletonData) { + /*jshint -W069*/ + var timelines = []; + var duration = 0; + var frameIndex, timeline, timelineName, valueMap, values, + i, n; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + values = boneMap[timelineName]; + if (timelineName == "rotate") { + timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + frameIndex = 0; + for (i = 0, n = values.length; i < n; i++) { + valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + frameIndex = 0; + for (i = 0, n = values.length; i < n; i++) { + valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + values = slotMap[timelineName]; + if (timelineName == "color") { + timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + frameIndex = 0; + for (i = 0, n = values.length; i < n; i++) { + valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + frameIndex = 0; + for (i = 0, n = values.length; i < n; i++) { + valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + /*jshint -W069*/ + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (!line.length) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0], 10); + var y = parseInt(tuple[1], 10); + + reader.readTuple(tuple); + var width = parseInt(tuple[0], 10); + var height = parseInt(tuple[1], 10); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0], 10), parseInt(tuple[1], 10), parseInt(tuple[2], 10), parseInt(tuple[3], 10)]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0], 10), parseInt(tuple[1], 10), parseInt(tuple[2], 10), parseInt(tuple[3], 10)]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0], 10); + region.originalHeight = parseInt(tuple[1], 10); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0], 10); + region.offsetY = parseInt(tuple[1], 10); + + region.index = parseInt(reader.readValue(), 10); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (!i) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +spine.Bone.yDown = true; +PIXI.AnimCache = {}; + /** * A class that enables the you to import and run your spine animations in pixi. * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class @@ -190,37 +1536,37 @@ * @param url {String} The url of the spine anim file to be used */ PIXI.Spine = function (url) { - PIXI.DisplayObjectContainer.call(this); + PIXI.DisplayObjectContainer.call(this); - this.spineData = PIXI.AnimCache[url]; + this.spineData = PIXI.AnimCache[url]; - if (!this.spineData) { - throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); - } + if (!this.spineData) { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + } - this.skeleton = new spine.Skeleton(this.spineData); - this.skeleton.updateWorldTransform(); + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); - this.stateData = new spine.AnimationStateData(this.spineData); - this.state = new spine.AnimationState(this.stateData); + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); - this.slotContainers = []; + this.slotContainers = []; - for (var i = 0, n = this.skeleton.drawOrder.length; i < n; i++) { - var slot = this.skeleton.drawOrder[i]; - var attachment = slot.attachment; - var slotContainer = new PIXI.DisplayObjectContainer(); - this.slotContainers.push(slotContainer); - this.addChild(slotContainer); - if (!(attachment instanceof spine.RegionAttachment)) { - continue; - } - var spriteName = attachment.rendererObject.name; - var sprite = this.createSprite(slot, attachment.rendererObject); - slot.currentSprite = sprite; - slot.currentSpriteName = spriteName; - slotContainer.addChild(sprite); - } + for (var i = 0, n = this.skeleton.drawOrder.length; i < n; i++) { + var slot = this.skeleton.drawOrder[i]; + var attachment = slot.attachment; + var slotContainer = new PIXI.DisplayObjectContainer(); + this.slotContainers.push(slotContainer); + this.addChild(slotContainer); + if (!(attachment instanceof spine.RegionAttachment)) { + continue; + } + var spriteName = attachment.rendererObject.name; + var sprite = this.createSprite(slot, attachment.rendererObject); + slot.currentSprite = sprite; + slot.currentSpriteName = spriteName; + slotContainer.addChild(sprite); + } }; PIXI.Spine.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); @@ -233,1404 +1579,68 @@ PIXI.Spine.prototype.constructor = PIXI.Spine; * @private */ PIXI.Spine.prototype.updateTransform = function () { - this.lastTime = this.lastTime || Date.now(); - var timeDelta = (Date.now() - this.lastTime) * 0.001; - this.lastTime = Date.now(); - this.state.update(timeDelta); - this.state.apply(this.skeleton); - this.skeleton.updateWorldTransform(); + this.lastTime = this.lastTime || Date.now(); + var timeDelta = (Date.now() - this.lastTime) * 0.001; + this.lastTime = Date.now(); + this.state.update(timeDelta); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); - var drawOrder = this.skeleton.drawOrder; - for (var i = 0, n = drawOrder.length; i < n; i++) { - var slot = drawOrder[i]; - var attachment = slot.attachment; - var slotContainer = this.slotContainers[i]; - if (!(attachment instanceof spine.RegionAttachment)) { - slotContainer.visible = false; - continue; - } + var drawOrder = this.skeleton.drawOrder; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + var attachment = slot.attachment; + var slotContainer = this.slotContainers[i]; + if (!(attachment instanceof spine.RegionAttachment)) { + slotContainer.visible = false; + continue; + } - if (attachment.rendererObject) { - if (!slot.currentSpriteName || slot.currentSpriteName != attachment.name) { - var spriteName = attachment.rendererObject.name; - if (slot.currentSprite !== undefined) { - slot.currentSprite.visible = false; - } - slot.sprites = slot.sprites || {}; - if (slot.sprites[spriteName] !== undefined) { - slot.sprites[spriteName].visible = true; - } else { - var sprite = this.createSprite(slot, attachment.rendererObject); - slotContainer.addChild(sprite); - } - slot.currentSprite = slot.sprites[spriteName]; - slot.currentSpriteName = spriteName; - } - } - slotContainer.visible = true; + if (attachment.rendererObject) { + if (!slot.currentSpriteName || slot.currentSpriteName != attachment.name) { + var spriteName = attachment.rendererObject.name; + if (slot.currentSprite !== undefined) { + slot.currentSprite.visible = false; + } + slot.sprites = slot.sprites || {}; + if (slot.sprites[spriteName] !== undefined) { + slot.sprites[spriteName].visible = true; + } else { + var sprite = this.createSprite(slot, attachment.rendererObject); + slotContainer.addChild(sprite); + } + slot.currentSprite = slot.sprites[spriteName]; + slot.currentSpriteName = spriteName; + } + } + slotContainer.visible = true; - var bone = slot.bone; + var bone = slot.bone; - slotContainer.position.x = bone.worldX + attachment.x * bone.m00 + attachment.y * bone.m01; - slotContainer.position.y = bone.worldY + attachment.x * bone.m10 + attachment.y * bone.m11; - slotContainer.scale.x = bone.worldScaleX; - slotContainer.scale.y = bone.worldScaleY; + slotContainer.position.x = bone.worldX + attachment.x * bone.m00 + attachment.y * bone.m01; + slotContainer.position.y = bone.worldY + attachment.x * bone.m10 + attachment.y * bone.m11; + slotContainer.scale.x = bone.worldScaleX; + slotContainer.scale.y = bone.worldScaleY; - slotContainer.rotation = -(slot.bone.worldRotation * Math.PI / 180); - } + slotContainer.rotation = -(slot.bone.worldRotation * Math.PI / 180); + } - PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); }; PIXI.Spine.prototype.createSprite = function (slot, descriptor) { - var name = PIXI.TextureCache[descriptor.name] ? descriptor.name : descriptor.name + ".png"; - var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(name)); - sprite.scale = descriptor.scale; - sprite.rotation = descriptor.rotation; - sprite.anchor.x = sprite.anchor.y = 0.5; + var name = PIXI.TextureCache[descriptor.name] ? descriptor.name : descriptor.name + ".png"; + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(name)); + sprite.scale = descriptor.scale; + sprite.rotation = descriptor.rotation; + sprite.anchor.x = sprite.anchor.y = 0.5; - slot.sprites = slot.sprites || {}; - slot.sprites[descriptor.name] = sprite; - return sprite; + slot.sprites = slot.sprites || {}; + slot.sprites[descriptor.name] = sprite; + return sprite; }; -/* - * Awesome JS run time provided by EsotericSoftware - * - * https://github.com/EsotericSoftware/spine-runtimes - * - */ - -var spine = {}; - -spine.BoneData = function (name, parent) { - this.name = name; - this.parent = parent; -}; -spine.BoneData.prototype = { - length: 0, - x: 0, y: 0, - rotation: 0, - scaleX: 1, scaleY: 1 -}; - -spine.SlotData = function (name, boneData) { - this.name = name; - this.boneData = boneData; -}; -spine.SlotData.prototype = { - r: 1, g: 1, b: 1, a: 1, - attachmentName: null -}; - -spine.Bone = function (boneData, parent) { - this.data = boneData; - this.parent = parent; - this.setToSetupPose(); -}; -spine.Bone.yDown = false; -spine.Bone.prototype = { - x: 0, y: 0, - rotation: 0, - scaleX: 1, scaleY: 1, - m00: 0, m01: 0, worldX: 0, // a b x - m10: 0, m11: 0, worldY: 0, // c d y - worldRotation: 0, - worldScaleX: 1, worldScaleY: 1, - updateWorldTransform: function (flipX, flipY) { - var parent = this.parent; - if (parent != null) { - this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; - this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; - this.worldScaleX = parent.worldScaleX * this.scaleX; - this.worldScaleY = parent.worldScaleY * this.scaleY; - this.worldRotation = parent.worldRotation + this.rotation; - } else { - this.worldX = this.x; - this.worldY = this.y; - this.worldScaleX = this.scaleX; - this.worldScaleY = this.scaleY; - this.worldRotation = this.rotation; - } - var radians = this.worldRotation * Math.PI / 180; - var cos = Math.cos(radians); - var sin = Math.sin(radians); - this.m00 = cos * this.worldScaleX; - this.m10 = sin * this.worldScaleX; - this.m01 = -sin * this.worldScaleY; - this.m11 = cos * this.worldScaleY; - if (flipX) { - this.m00 = -this.m00; - this.m01 = -this.m01; - } - if (flipY) { - this.m10 = -this.m10; - this.m11 = -this.m11; - } - if (spine.Bone.yDown) { - this.m10 = -this.m10; - this.m11 = -this.m11; - } - }, - setToSetupPose: function () { - var data = this.data; - this.x = data.x; - this.y = data.y; - this.rotation = data.rotation; - this.scaleX = data.scaleX; - this.scaleY = data.scaleY; - } -}; - -spine.Slot = function (slotData, skeleton, bone) { - this.data = slotData; - this.skeleton = skeleton; - this.bone = bone; - this.setToSetupPose(); -}; -spine.Slot.prototype = { - r: 1, g: 1, b: 1, a: 1, - _attachmentTime: 0, - attachment: null, - setAttachment: function (attachment) { - this.attachment = attachment; - this._attachmentTime = this.skeleton.time; - }, - setAttachmentTime: function (time) { - this._attachmentTime = this.skeleton.time - time; - }, - getAttachmentTime: function () { - return this.skeleton.time - this._attachmentTime; - }, - setToSetupPose: function () { - var data = this.data; - this.r = data.r; - this.g = data.g; - this.b = data.b; - this.a = data.a; - - var slotDatas = this.skeleton.data.slots; - for (var i = 0, n = slotDatas.length; i < n; i++) { - if (slotDatas[i] == data) { - this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); - break; - } - } - } -}; - -spine.Skin = function (name) { - this.name = name; - this.attachments = {}; -}; -spine.Skin.prototype = { - addAttachment: function (slotIndex, name, attachment) { - this.attachments[slotIndex + ":" + name] = attachment; - }, - getAttachment: function (slotIndex, name) { - return this.attachments[slotIndex + ":" + name]; - }, - _attachAll: function (skeleton, oldSkin) { - for (var key in oldSkin.attachments) { - var colon = key.indexOf(":"); - var slotIndex = parseInt(key.substring(0, colon)); - var name = key.substring(colon + 1); - var slot = skeleton.slots[slotIndex]; - if (slot.attachment && slot.attachment.name == name) { - var attachment = this.getAttachment(slotIndex, name); - if (attachment) slot.setAttachment(attachment); - } - } - } -}; - -spine.Animation = function (name, timelines, duration) { - this.name = name; - this.timelines = timelines; - this.duration = duration; -}; -spine.Animation.prototype = { - apply: function (skeleton, time, loop) { - if (loop && this.duration != 0) time %= this.duration; - var timelines = this.timelines; - for (var i = 0, n = timelines.length; i < n; i++) - timelines[i].apply(skeleton, time, 1); - }, - mix: function (skeleton, time, loop, alpha) { - if (loop && this.duration != 0) time %= this.duration; - var timelines = this.timelines; - for (var i = 0, n = timelines.length; i < n; i++) - timelines[i].apply(skeleton, time, alpha); - } -}; - -spine.binarySearch = function (values, target, step) { - var low = 0; - var high = Math.floor(values.length / step) - 2; - if (high == 0) return step; - var current = high >>> 1; - while (true) { - if (values[(current + 1) * step] <= target) - low = current + 1; - else - high = current; - if (low == high) return (low + 1) * step; - current = (low + high) >>> 1; - } -}; -spine.linearSearch = function (values, target, step) { - for (var i = 0, last = values.length - step; i <= last; i += step) - if (values[i] > target) return i; - return -1; -}; - -spine.Curves = function (frameCount) { - this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... - this.curves.length = (frameCount - 1) * 6; -}; -spine.Curves.prototype = { - setLinear: function (frameIndex) { - this.curves[frameIndex * 6] = 0/*LINEAR*/; - }, - setStepped: function (frameIndex) { - this.curves[frameIndex * 6] = -1/*STEPPED*/; - }, - /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. - * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of - * the difference between the keyframe's values. */ - setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { - var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; - var subdiv_step2 = subdiv_step * subdiv_step; - var subdiv_step3 = subdiv_step2 * subdiv_step; - var pre1 = 3 * subdiv_step; - var pre2 = 3 * subdiv_step2; - var pre4 = 6 * subdiv_step2; - var pre5 = 6 * subdiv_step3; - var tmp1x = -cx1 * 2 + cx2; - var tmp1y = -cy1 * 2 + cy2; - var tmp2x = (cx1 - cx2) * 3 + 1; - var tmp2y = (cy1 - cy2) * 3 + 1; - var i = frameIndex * 6; - var curves = this.curves; - curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; - curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; - curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; - curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; - curves[i + 4] = tmp2x * pre5; - curves[i + 5] = tmp2y * pre5; - }, - getCurvePercent: function (frameIndex, percent) { - percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); - var curveIndex = frameIndex * 6; - var curves = this.curves; - var dfx = curves[curveIndex]; - if (!dfx/*LINEAR*/) return percent; - if (dfx == -1/*STEPPED*/) return 0; - var dfy = curves[curveIndex + 1]; - var ddfx = curves[curveIndex + 2]; - var ddfy = curves[curveIndex + 3]; - var dddfx = curves[curveIndex + 4]; - var dddfy = curves[curveIndex + 5]; - var x = dfx, y = dfy; - var i = 10/*BEZIER_SEGMENTS*/ - 2; - while (true) { - if (x >= percent) { - var lastX = x - dfx; - var lastY = y - dfy; - return lastY + (y - lastY) * (percent - lastX) / (x - lastX); - } - if (i == 0) break; - i--; - dfx += ddfx; - dfy += ddfy; - ddfx += dddfx; - ddfy += dddfy; - x += dfx; - y += dfy; - } - return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. - } -}; - -spine.RotateTimeline = function (frameCount) { - this.curves = new spine.Curves(frameCount); - this.frames = []; // time, angle, ... - this.frames.length = frameCount * 2; -}; -spine.RotateTimeline.prototype = { - boneIndex: 0, - getFrameCount: function () { - return this.frames.length / 2; - }, - setFrame: function (frameIndex, time, angle) { - frameIndex *= 2; - this.frames[frameIndex] = time; - this.frames[frameIndex + 1] = angle; - }, - apply: function (skeleton, time, alpha) { - var frames = this.frames; - if (time < frames[0]) return; // Time is before first frame. - - var bone = skeleton.bones[this.boneIndex]; - - if (time >= frames[frames.length - 2]) { // Time is after last frame. - var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; - while (amount > 180) - amount -= 360; - while (amount < -180) - amount += 360; - bone.rotation += amount * alpha; - return; - } - - // Interpolate between the last frame and the current frame. - var frameIndex = spine.binarySearch(frames, time, 2); - var lastFrameValue = frames[frameIndex - 1]; - var frameTime = frames[frameIndex]; - var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); - percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); - - var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; - while (amount > 180) - amount -= 360; - while (amount < -180) - amount += 360; - amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; - while (amount > 180) - amount -= 360; - while (amount < -180) - amount += 360; - bone.rotation += amount * alpha; - } -}; - -spine.TranslateTimeline = function (frameCount) { - this.curves = new spine.Curves(frameCount); - this.frames = []; // time, x, y, ... - this.frames.length = frameCount * 3; -}; -spine.TranslateTimeline.prototype = { - boneIndex: 0, - getFrameCount: function () { - return this.frames.length / 3; - }, - setFrame: function (frameIndex, time, x, y) { - frameIndex *= 3; - this.frames[frameIndex] = time; - this.frames[frameIndex + 1] = x; - this.frames[frameIndex + 2] = y; - }, - apply: function (skeleton, time, alpha) { - var frames = this.frames; - if (time < frames[0]) return; // Time is before first frame. - - var bone = skeleton.bones[this.boneIndex]; - - if (time >= frames[frames.length - 3]) { // Time is after last frame. - bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; - bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; - return; - } - - // Interpolate between the last frame and the current frame. - var frameIndex = spine.binarySearch(frames, time, 3); - var lastFrameX = frames[frameIndex - 2]; - var lastFrameY = frames[frameIndex - 1]; - var frameTime = frames[frameIndex]; - var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); - percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); - - bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; - bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; - } -}; - -spine.ScaleTimeline = function (frameCount) { - this.curves = new spine.Curves(frameCount); - this.frames = []; // time, x, y, ... - this.frames.length = frameCount * 3; -}; -spine.ScaleTimeline.prototype = { - boneIndex: 0, - getFrameCount: function () { - return this.frames.length / 3; - }, - setFrame: function (frameIndex, time, x, y) { - frameIndex *= 3; - this.frames[frameIndex] = time; - this.frames[frameIndex + 1] = x; - this.frames[frameIndex + 2] = y; - }, - apply: function (skeleton, time, alpha) { - var frames = this.frames; - if (time < frames[0]) return; // Time is before first frame. - - var bone = skeleton.bones[this.boneIndex]; - - if (time >= frames[frames.length - 3]) { // Time is after last frame. - bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; - return; - } - - // Interpolate between the last frame and the current frame. - var frameIndex = spine.binarySearch(frames, time, 3); - var lastFrameX = frames[frameIndex - 2]; - var lastFrameY = frames[frameIndex - 1]; - var frameTime = frames[frameIndex]; - var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); - percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); - - bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; - } -}; - -spine.ColorTimeline = function (frameCount) { - this.curves = new spine.Curves(frameCount); - this.frames = []; // time, r, g, b, a, ... - this.frames.length = frameCount * 5; -}; -spine.ColorTimeline.prototype = { - slotIndex: 0, - getFrameCount: function () { - return this.frames.length / 2; - }, - setFrame: function (frameIndex, time, x, y) { - frameIndex *= 5; - this.frames[frameIndex] = time; - this.frames[frameIndex + 1] = r; - this.frames[frameIndex + 2] = g; - this.frames[frameIndex + 3] = b; - this.frames[frameIndex + 4] = a; - }, - apply: function (skeleton, time, alpha) { - var frames = this.frames; - if (time < frames[0]) return; // Time is before first frame. - - var slot = skeleton.slots[this.slotIndex]; - - if (time >= frames[frames.length - 5]) { // Time is after last frame. - var i = frames.length - 1; - slot.r = frames[i - 3]; - slot.g = frames[i - 2]; - slot.b = frames[i - 1]; - slot.a = frames[i]; - return; - } - - // Interpolate between the last frame and the current frame. - var frameIndex = spine.binarySearch(frames, time, 5); - var lastFrameR = frames[frameIndex - 4]; - var lastFrameG = frames[frameIndex - 3]; - var lastFrameB = frames[frameIndex - 2]; - var lastFrameA = frames[frameIndex - 1]; - var frameTime = frames[frameIndex]; - var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); - percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); - - var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; - var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; - var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; - var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; - if (alpha < 1) { - slot.r += (r - slot.r) * alpha; - slot.g += (g - slot.g) * alpha; - slot.b += (b - slot.b) * alpha; - slot.a += (a - slot.a) * alpha; - } else { - slot.r = r; - slot.g = g; - slot.b = b; - slot.a = a; - } - } -}; - -spine.AttachmentTimeline = function (frameCount) { - this.curves = new spine.Curves(frameCount); - this.frames = []; // time, ... - this.frames.length = frameCount; - this.attachmentNames = []; // time, ... - this.attachmentNames.length = frameCount; -}; -spine.AttachmentTimeline.prototype = { - slotIndex: 0, - getFrameCount: function () { - return this.frames.length; - }, - setFrame: function (frameIndex, time, attachmentName) { - this.frames[frameIndex] = time; - this.attachmentNames[frameIndex] = attachmentName; - }, - apply: function (skeleton, time, alpha) { - var frames = this.frames; - if (time < frames[0]) return; // Time is before first frame. - - var frameIndex; - if (time >= frames[frames.length - 1]) // Time is after last frame. - frameIndex = frames.length - 1; - else - frameIndex = spine.binarySearch(frames, time, 1) - 1; - - var attachmentName = this.attachmentNames[frameIndex]; - skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); - } -}; - -spine.SkeletonData = function () { - this.bones = []; - this.slots = []; - this.skins = []; - this.animations = []; -}; -spine.SkeletonData.prototype = { - defaultSkin: null, - /** @return May be null. */ - findBone: function (boneName) { - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - if (bones[i].name == boneName) return bones[i]; - return null; - }, - /** @return -1 if the bone was not found. */ - findBoneIndex: function (boneName) { - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - if (bones[i].name == boneName) return i; - return -1; - }, - /** @return May be null. */ - findSlot: function (slotName) { - var slots = this.slots; - for (var i = 0, n = slots.length; i < n; i++) { - if (slots[i].name == slotName) return slot[i]; - } - return null; - }, - /** @return -1 if the bone was not found. */ - findSlotIndex: function (slotName) { - var slots = this.slots; - for (var i = 0, n = slots.length; i < n; i++) - if (slots[i].name == slotName) return i; - return -1; - }, - /** @return May be null. */ - findSkin: function (skinName) { - var skins = this.skins; - for (var i = 0, n = skins.length; i < n; i++) - if (skins[i].name == skinName) return skins[i]; - return null; - }, - /** @return May be null. */ - findAnimation: function (animationName) { - var animations = this.animations; - for (var i = 0, n = animations.length; i < n; i++) - if (animations[i].name == animationName) return animations[i]; - return null; - } -}; - -spine.Skeleton = function (skeletonData) { - this.data = skeletonData; - - this.bones = []; - for (var i = 0, n = skeletonData.bones.length; i < n; i++) { - var boneData = skeletonData.bones[i]; - var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; - this.bones.push(new spine.Bone(boneData, parent)); - } - - this.slots = []; - this.drawOrder = []; - for (var i = 0, n = skeletonData.slots.length; i < n; i++) { - var slotData = skeletonData.slots[i]; - var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; - var slot = new spine.Slot(slotData, this, bone); - this.slots.push(slot); - this.drawOrder.push(slot); - } -}; -spine.Skeleton.prototype = { - x: 0, y: 0, - skin: null, - r: 1, g: 1, b: 1, a: 1, - time: 0, - flipX: false, flipY: false, - /** Updates the world transform for each bone. */ - updateWorldTransform: function () { - var flipX = this.flipX; - var flipY = this.flipY; - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - bones[i].updateWorldTransform(flipX, flipY); - }, - /** Sets the bones and slots to their setup pose values. */ - setToSetupPose: function () { - this.setBonesToSetupPose(); - this.setSlotsToSetupPose(); - }, - setBonesToSetupPose: function () { - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - bones[i].setToSetupPose(); - }, - setSlotsToSetupPose: function () { - var slots = this.slots; - for (var i = 0, n = slots.length; i < n; i++) - slots[i].setToSetupPose(i); - }, - /** @return May return null. */ - getRootBone: function () { - return this.bones.length == 0 ? null : this.bones[0]; - }, - /** @return May be null. */ - findBone: function (boneName) { - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - if (bones[i].data.name == boneName) return bones[i]; - return null; - }, - /** @return -1 if the bone was not found. */ - findBoneIndex: function (boneName) { - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) - if (bones[i].data.name == boneName) return i; - return -1; - }, - /** @return May be null. */ - findSlot: function (slotName) { - var slots = this.slots; - for (var i = 0, n = slots.length; i < n; i++) - if (slots[i].data.name == slotName) return slots[i]; - return null; - }, - /** @return -1 if the bone was not found. */ - findSlotIndex: function (slotName) { - var slots = this.slots; - for (var i = 0, n = slots.length; i < n; i++) - if (slots[i].data.name == slotName) return i; - return -1; - }, - setSkinByName: function (skinName) { - var skin = this.data.findSkin(skinName); - if (!skin) throw "Skin not found: " + skinName; - this.setSkin(skin); - }, - /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments - * from the new skin are attached if the corresponding attachment from the old skin was attached. - * @param newSkin May be null. */ - setSkin: function (newSkin) { - if (this.skin && newSkin) newSkin._attachAll(this, this.skin); - this.skin = newSkin; - }, - /** @return May be null. */ - getAttachmentBySlotName: function (slotName, attachmentName) { - return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); - }, - /** @return May be null. */ - getAttachmentBySlotIndex: function (slotIndex, attachmentName) { - if (this.skin) { - var attachment = this.skin.getAttachment(slotIndex, attachmentName); - if (attachment) return attachment; - } - if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); - return null; - }, - /** @param attachmentName May be null. */ - setAttachment: function (slotName, attachmentName) { - var slots = this.slots; - for (var i = 0, n = slots.size; i < n; i++) { - var slot = slots[i]; - if (slot.data.name == slotName) { - var attachment = null; - if (attachmentName) { - attachment = this.getAttachment(i, attachmentName); - if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; - } - slot.setAttachment(attachment); - return; - } - } - throw "Slot not found: " + slotName; - }, - update: function (delta) { - time += delta; - } -}; - -spine.AttachmentType = { - region: 0 -}; - -spine.RegionAttachment = function () { - this.offset = []; - this.offset.length = 8; - this.uvs = []; - this.uvs.length = 8; -}; -spine.RegionAttachment.prototype = { - x: 0, y: 0, - rotation: 0, - scaleX: 1, scaleY: 1, - width: 0, height: 0, - rendererObject: null, - regionOffsetX: 0, regionOffsetY: 0, - regionWidth: 0, regionHeight: 0, - regionOriginalWidth: 0, regionOriginalHeight: 0, - setUVs: function (u, v, u2, v2, rotate) { - var uvs = this.uvs; - if (rotate) { - uvs[2/*X2*/] = u; - uvs[3/*Y2*/] = v2; - uvs[4/*X3*/] = u; - uvs[5/*Y3*/] = v; - uvs[6/*X4*/] = u2; - uvs[7/*Y4*/] = v; - uvs[0/*X1*/] = u2; - uvs[1/*Y1*/] = v2; - } else { - uvs[0/*X1*/] = u; - uvs[1/*Y1*/] = v2; - uvs[2/*X2*/] = u; - uvs[3/*Y2*/] = v; - uvs[4/*X3*/] = u2; - uvs[5/*Y3*/] = v; - uvs[6/*X4*/] = u2; - uvs[7/*Y4*/] = v2; - } - }, - updateOffset: function () { - var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; - var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; - var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; - var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; - var localX2 = localX + this.regionWidth * regionScaleX; - var localY2 = localY + this.regionHeight * regionScaleY; - var radians = this.rotation * Math.PI / 180; - var cos = Math.cos(radians); - var sin = Math.sin(radians); - var localXCos = localX * cos + this.x; - var localXSin = localX * sin; - var localYCos = localY * cos + this.y; - var localYSin = localY * sin; - var localX2Cos = localX2 * cos + this.x; - var localX2Sin = localX2 * sin; - var localY2Cos = localY2 * cos + this.y; - var localY2Sin = localY2 * sin; - var offset = this.offset; - offset[0/*X1*/] = localXCos - localYSin; - offset[1/*Y1*/] = localYCos + localXSin; - offset[2/*X2*/] = localXCos - localY2Sin; - offset[3/*Y2*/] = localY2Cos + localXSin; - offset[4/*X3*/] = localX2Cos - localY2Sin; - offset[5/*Y3*/] = localY2Cos + localX2Sin; - offset[6/*X4*/] = localX2Cos - localYSin; - offset[7/*Y4*/] = localYCos + localX2Sin; - }, - computeVertices: function (x, y, bone, vertices) { - x += bone.worldX; - y += bone.worldY; - var m00 = bone.m00; - var m01 = bone.m01; - var m10 = bone.m10; - var m11 = bone.m11; - var offset = this.offset; - vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; - vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; - vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; - vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; - vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; - vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; - vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; - vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; - } -} - -spine.AnimationStateData = function (skeletonData) { - this.skeletonData = skeletonData; - this.animationToMixTime = {}; -}; -spine.AnimationStateData.prototype = { - defaultMix: 0, - setMixByName: function (fromName, toName, duration) { - var from = this.skeletonData.findAnimation(fromName); - if (!from) throw "Animation not found: " + fromName; - var to = this.skeletonData.findAnimation(toName); - if (!to) throw "Animation not found: " + toName; - this.setMix(from, to, duration); - }, - setMix: function (from, to, duration) { - this.animationToMixTime[from.name + ":" + to.name] = duration; - }, - getMix: function (from, to) { - var time = this.animationToMixTime[from.name + ":" + to.name]; - return time ? time : this.defaultMix; - } -}; - -spine.AnimationState = function (stateData) { - this.data = stateData; - this.queue = []; -}; -spine.AnimationState.prototype = { - current: null, - previous: null, - currentTime: 0, - previousTime: 0, - currentLoop: false, - previousLoop: false, - mixTime: 0, - mixDuration: 0, - update: function (delta) { - this.currentTime += delta; - this.previousTime += delta; - this.mixTime += delta; - - if (this.queue.length > 0) { - var entry = this.queue[0]; - if (this.currentTime >= entry.delay) { - this._setAnimation(entry.animation, entry.loop); - this.queue.shift(); - } - } - }, - apply: function (skeleton) { - if (!this.current) return; - if (this.previous) { - this.previous.apply(skeleton, this.previousTime, this.previousLoop); - var alpha = this.mixTime / this.mixDuration; - if (alpha >= 1) { - alpha = 1; - this.previous = null; - } - this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); - } else - this.current.apply(skeleton, this.currentTime, this.currentLoop); - }, - clearAnimation: function () { - this.previous = null; - this.current = null; - this.queue.length = 0; - }, - _setAnimation: function (animation, loop) { - this.previous = null; - if (animation && this.current) { - this.mixDuration = this.data.getMix(this.current, animation); - if (this.mixDuration > 0) { - this.mixTime = 0; - this.previous = this.current; - this.previousTime = this.currentTime; - this.previousLoop = this.currentLoop; - } - } - this.current = animation; - this.currentLoop = loop; - this.currentTime = 0; - }, - /** @see #setAnimation(Animation, Boolean) */ - setAnimationByName: function (animationName, loop) { - var animation = this.data.skeletonData.findAnimation(animationName); - if (!animation) throw "Animation not found: " + animationName; - this.setAnimation(animation, loop); - }, - /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. - * @param animation May be null. */ - setAnimation: function (animation, loop) { - this.queue.length = 0; - this._setAnimation(animation, loop); - }, - /** @see #addAnimation(Animation, Boolean, Number) */ - addAnimationByName: function (animationName, loop, delay) { - var animation = this.data.skeletonData.findAnimation(animationName); - if (!animation) throw "Animation not found: " + animationName; - this.addAnimation(animation, loop, delay); - }, - /** Adds an animation to be played delay seconds after the current or last queued animation. - * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ - addAnimation: function (animation, loop, delay) { - var entry = {}; - entry.animation = animation; - entry.loop = loop; - - if (!delay || delay <= 0) { - var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; - if (previousAnimation != null) - delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); - else - delay = 0; - } - entry.delay = delay; - - this.queue.push(entry); - }, - /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ - isComplete: function () { - return !this.current || this.currentTime >= this.current.duration; - } -}; - -spine.SkeletonJson = function (attachmentLoader) { - this.attachmentLoader = attachmentLoader; -}; -spine.SkeletonJson.prototype = { - scale: 1, - readSkeletonData: function (root) { - var skeletonData = new spine.SkeletonData(); - - // Bones. - var bones = root["bones"]; - for (var i = 0, n = bones.length; i < n; i++) { - var boneMap = bones[i]; - var parent = null; - if (boneMap["parent"]) { - parent = skeletonData.findBone(boneMap["parent"]); - if (!parent) throw "Parent bone not found: " + boneMap["parent"]; - } - var boneData = new spine.BoneData(boneMap["name"], parent); - boneData.length = (boneMap["length"] || 0) * this.scale; - boneData.x = (boneMap["x"] || 0) * this.scale; - boneData.y = (boneMap["y"] || 0) * this.scale; - boneData.rotation = (boneMap["rotation"] || 0); - boneData.scaleX = boneMap["scaleX"] || 1; - boneData.scaleY = boneMap["scaleY"] || 1; - skeletonData.bones.push(boneData); - } - - // Slots. - var slots = root["slots"]; - for (var i = 0, n = slots.length; i < n; i++) { - var slotMap = slots[i]; - var boneData = skeletonData.findBone(slotMap["bone"]); - if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; - var slotData = new spine.SlotData(slotMap["name"], boneData); - - var color = slotMap["color"]; - if (color) { - slotData.r = spine.SkeletonJson.toColor(color, 0); - slotData.g = spine.SkeletonJson.toColor(color, 1); - slotData.b = spine.SkeletonJson.toColor(color, 2); - slotData.a = spine.SkeletonJson.toColor(color, 3); - } - - slotData.attachmentName = slotMap["attachment"]; - - skeletonData.slots.push(slotData); - } - - // Skins. - var skins = root["skins"]; - for (var skinName in skins) { - if (!skins.hasOwnProperty(skinName)) continue; - var skinMap = skins[skinName]; - var skin = new spine.Skin(skinName); - for (var slotName in skinMap) { - if (!skinMap.hasOwnProperty(slotName)) continue; - var slotIndex = skeletonData.findSlotIndex(slotName); - var slotEntry = skinMap[slotName]; - for (var attachmentName in slotEntry) { - if (!slotEntry.hasOwnProperty(attachmentName)) continue; - var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); - if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); - } - } - skeletonData.skins.push(skin); - if (skin.name == "default") skeletonData.defaultSkin = skin; - } - - // Animations. - var animations = root["animations"]; - for (var animationName in animations) { - if (!animations.hasOwnProperty(animationName)) continue; - this.readAnimation(animationName, animations[animationName], skeletonData); - } - - return skeletonData; - }, - readAttachment: function (skin, name, map) { - name = map["name"] || name; - - var type = spine.AttachmentType[map["type"] || "region"]; - - if (type == spine.AttachmentType.region) { - var attachment = new spine.RegionAttachment(); - attachment.x = (map["x"] || 0) * this.scale; - attachment.y = (map["y"] || 0) * this.scale; - attachment.scaleX = map["scaleX"] || 1; - attachment.scaleY = map["scaleY"] || 1; - attachment.rotation = map["rotation"] || 0; - attachment.width = (map["width"] || 32) * this.scale; - attachment.height = (map["height"] || 32) * this.scale; - attachment.updateOffset(); - - attachment.rendererObject = {}; - attachment.rendererObject.name = name; - attachment.rendererObject.scale = {}; - attachment.rendererObject.scale.x = attachment.scaleX; - attachment.rendererObject.scale.y = attachment.scaleY; - attachment.rendererObject.rotation = -attachment.rotation * Math.PI / 180; - return attachment; - } - - throw "Unknown attachment type: " + type; - }, - - readAnimation: function (name, map, skeletonData) { - var timelines = []; - var duration = 0; - - var bones = map["bones"]; - for (var boneName in bones) { - if (!bones.hasOwnProperty(boneName)) continue; - var boneIndex = skeletonData.findBoneIndex(boneName); - if (boneIndex == -1) throw "Bone not found: " + boneName; - var boneMap = bones[boneName]; - - for (var timelineName in boneMap) { - if (!boneMap.hasOwnProperty(timelineName)) continue; - var values = boneMap[timelineName]; - if (timelineName == "rotate") { - var timeline = new spine.RotateTimeline(values.length); - timeline.boneIndex = boneIndex; - - var frameIndex = 0; - for (var i = 0, n = values.length; i < n; i++) { - var valueMap = values[i]; - timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); - spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); - frameIndex++; - } - timelines.push(timeline); - duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); - - } else if (timelineName == "translate" || timelineName == "scale") { - var timeline; - var timelineScale = 1; - if (timelineName == "scale") - timeline = new spine.ScaleTimeline(values.length); - else { - timeline = new spine.TranslateTimeline(values.length); - timelineScale = this.scale; - } - timeline.boneIndex = boneIndex; - - var frameIndex = 0; - for (var i = 0, n = values.length; i < n; i++) { - var valueMap = values[i]; - var x = (valueMap["x"] || 0) * timelineScale; - var y = (valueMap["y"] || 0) * timelineScale; - timeline.setFrame(frameIndex, valueMap["time"], x, y); - spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); - frameIndex++; - } - timelines.push(timeline); - duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); - - } else - throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; - } - } - var slots = map["slots"]; - for (var slotName in slots) { - if (!slots.hasOwnProperty(slotName)) continue; - var slotMap = slots[slotName]; - var slotIndex = skeletonData.findSlotIndex(slotName); - - for (var timelineName in slotMap) { - if (!slotMap.hasOwnProperty(timelineName)) continue; - var values = slotMap[timelineName]; - if (timelineName == "color") { - var timeline = new spine.ColorTimeline(values.length); - timeline.slotIndex = slotIndex; - - var frameIndex = 0; - for (var i = 0, n = values.length; i < n; i++) { - var valueMap = values[i]; - var color = valueMap["color"]; - var r = spine.SkeletonJson.toColor(color, 0); - var g = spine.SkeletonJson.toColor(color, 1); - var b = spine.SkeletonJson.toColor(color, 2); - var a = spine.SkeletonJson.toColor(color, 3); - timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); - spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); - frameIndex++; - } - timelines.push(timeline); - duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); - - } else if (timelineName == "attachment") { - var timeline = new spine.AttachmentTimeline(values.length); - timeline.slotIndex = slotIndex; - - var frameIndex = 0; - for (var i = 0, n = values.length; i < n; i++) { - var valueMap = values[i]; - timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); - } - timelines.push(timeline); - duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); - - } else - throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; - } - } - skeletonData.animations.push(new spine.Animation(name, timelines, duration)); - } -}; -spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { - var curve = valueMap["curve"]; - if (!curve) return; - if (curve == "stepped") - timeline.curves.setStepped(frameIndex); - else if (curve instanceof Array) - timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); -}; -spine.SkeletonJson.toColor = function (hexString, colorIndex) { - if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; - return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; -}; - -spine.Atlas = function (atlasText, textureLoader) { - this.textureLoader = textureLoader; - this.pages = []; - this.regions = []; - - var reader = new spine.AtlasReader(atlasText); - var tuple = []; - tuple.length = 4; - var page = null; - while (true) { - var line = reader.readLine(); - if (line == null) break; - line = reader.trim(line); - if (line.length == 0) - page = null; - else if (!page) { - page = new spine.AtlasPage(); - page.name = line; - - page.format = spine.Atlas.Format[reader.readValue()]; - - reader.readTuple(tuple); - page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; - page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; - - var direction = reader.readValue(); - page.uWrap = spine.Atlas.TextureWrap.clampToEdge; - page.vWrap = spine.Atlas.TextureWrap.clampToEdge; - if (direction == "x") - page.uWrap = spine.Atlas.TextureWrap.repeat; - else if (direction == "y") - page.vWrap = spine.Atlas.TextureWrap.repeat; - else if (direction == "xy") - page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; - - textureLoader.load(page, line); - - this.pages.push(page); - - } else { - var region = new spine.AtlasRegion(); - region.name = line; - region.page = page; - - region.rotate = reader.readValue() == "true"; - - reader.readTuple(tuple); - var x = parseInt(tuple[0]); - var y = parseInt(tuple[1]); - - reader.readTuple(tuple); - var width = parseInt(tuple[0]); - var height = parseInt(tuple[1]); - - region.u = x / page.width; - region.v = y / page.height; - if (region.rotate) { - region.u2 = (x + height) / page.width; - region.v2 = (y + width) / page.height; - } else { - region.u2 = (x + width) / page.width; - region.v2 = (y + height) / page.height; - } - region.x = x; - region.y = y; - region.width = Math.abs(width); - region.height = Math.abs(height); - - if (reader.readTuple(tuple) == 4) { // split is optional - region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; - - if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits - region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; - - reader.readTuple(tuple); - } - } - - region.originalWidth = parseInt(tuple[0]); - region.originalHeight = parseInt(tuple[1]); - - reader.readTuple(tuple); - region.offsetX = parseInt(tuple[0]); - region.offsetY = parseInt(tuple[1]); - - region.index = parseInt(reader.readValue()); - - this.regions.push(region); - } - } -}; -spine.Atlas.prototype = { - findRegion: function (name) { - var regions = this.regions; - for (var i = 0, n = regions.length; i < n; i++) - if (regions[i].name == name) return regions[i]; - return null; - }, - dispose: function () { - var pages = this.pages; - for (var i = 0, n = pages.length; i < n; i++) - this.textureLoader.unload(pages[i].rendererObject); - }, - updateUVs: function (page) { - var regions = this.regions; - for (var i = 0, n = regions.length; i < n; i++) { - var region = regions[i]; - if (region.page != page) continue; - region.u = region.x / page.width; - region.v = region.y / page.height; - if (region.rotate) { - region.u2 = (region.x + region.height) / page.width; - region.v2 = (region.y + region.width) / page.height; - } else { - region.u2 = (region.x + region.width) / page.width; - region.v2 = (region.y + region.height) / page.height; - } - } - } -}; - -spine.Atlas.Format = { - alpha: 0, - intensity: 1, - luminanceAlpha: 2, - rgb565: 3, - rgba4444: 4, - rgb888: 5, - rgba8888: 6 -}; - -spine.Atlas.TextureFilter = { - nearest: 0, - linear: 1, - mipMap: 2, - mipMapNearestNearest: 3, - mipMapLinearNearest: 4, - mipMapNearestLinear: 5, - mipMapLinearLinear: 6 -}; - -spine.Atlas.TextureWrap = { - mirroredRepeat: 0, - clampToEdge: 1, - repeat: 2 -}; - -spine.AtlasPage = function () {}; -spine.AtlasPage.prototype = { - name: null, - format: null, - minFilter: null, - magFilter: null, - uWrap: null, - vWrap: null, - rendererObject: null, - width: 0, - height: 0 -}; - -spine.AtlasRegion = function () {}; -spine.AtlasRegion.prototype = { - page: null, - name: null, - x: 0, y: 0, - width: 0, height: 0, - u: 0, v: 0, u2: 0, v2: 0, - offsetX: 0, offsetY: 0, - originalWidth: 0, originalHeight: 0, - index: 0, - rotate: false, - splits: null, - pads: null, -}; - -spine.AtlasReader = function (text) { - this.lines = text.split(/\r\n|\r|\n/); -}; -spine.AtlasReader.prototype = { - index: 0, - trim: function (value) { - return value.replace(/^\s+|\s+$/g, ""); - }, - readLine: function () { - if (this.index >= this.lines.length) return null; - return this.lines[this.index++]; - }, - readValue: function () { - var line = this.readLine(); - var colon = line.indexOf(":"); - if (colon == -1) throw "Invalid line: " + line; - return this.trim(line.substring(colon + 1)); - }, - /** Returns the number of tuple values read (2 or 4). */ - readTuple: function (tuple) { - var line = this.readLine(); - var colon = line.indexOf(":"); - if (colon == -1) throw "Invalid line: " + line; - var i = 0, lastMatch= colon + 1; - for (; i < 3; i++) { - var comma = line.indexOf(",", lastMatch); - if (comma == -1) { - if (i == 0) throw "Invalid line: " + line; - break; - } - tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); - lastMatch = comma + 1; - } - tuple[i] = this.trim(line.substring(lastMatch)); - return i + 1; - } -} - -spine.AtlasAttachmentLoader = function (atlas) { - this.atlas = atlas; -} -spine.AtlasAttachmentLoader.prototype = { - newAttachment: function (skin, type, name) { - switch (type) { - case spine.AttachmentType.region: - var region = this.atlas.findRegion(name); - if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; - var attachment = new spine.RegionAttachment(name); - attachment.rendererObject = region; - attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); - attachment.regionOffsetX = region.offsetX; - attachment.regionOffsetY = region.offsetY; - attachment.regionWidth = region.width; - attachment.regionHeight = region.height; - attachment.regionOriginalWidth = region.originalWidth; - attachment.regionOriginalHeight = region.originalHeight; - return attachment; - } - throw "Unknown attachment type: " + type; - } -} - -PIXI.AnimCache = {}; -spine.Bone.yDown = true; -
    diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 797626b..2e3c647 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -176,66 +178,66 @@ PIXI.Strip = function(texture, width, height) { - PIXI.DisplayObjectContainer.call( this ); - this.texture = texture; - this.blendMode = PIXI.blendModes.NORMAL; + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; - try - { - this.uvs = new Float32Array([0, 1, - 1, 1, - 1, 0, 0,1]); + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); - this.verticies = new Float32Array([0, 0, - 0,0, - 0,0, 0, - 0, 0]); + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); - this.colors = new Float32Array([1, 1, 1, 1]); + this.colors = new Float32Array([1, 1, 1, 1]); - this.indices = new Uint16Array([0, 1, 2, 3]); - } - catch(error) - { - this.uvs = [0, 1, - 1, 1, - 1, 0, 0,1]; + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; - this.verticies = [0, 0, - 0,0, - 0,0, 0, - 0, 0]; + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; - this.colors = [1, 1, 1, 1]; + this.colors = [1, 1, 1, 1]; - this.indices = [0, 1, 2, 3]; - } + this.indices = [0, 1, 2, 3]; + } - /* - this.uvs = new Float32Array() - this.verticies = new Float32Array() - this.colors = new Float32Array() - this.indices = new Uint16Array() -*/ - this.width = width; - this.height = height; + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() + */ + this.width = width; + this.height = height; - // load the texture! - if(texture.baseTexture.hasLoaded) - { - this.width = this.texture.frame.width; - this.height = this.texture.frame.height; - this.updateFrame = true; - } - else - { - this.onTextureUpdateBind = this.onTextureUpdate.bind(this); - this.texture.addEventListener( 'update', this.onTextureUpdateBind ); - } + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } - this.renderable = true; -} + this.renderable = true; +}; // constructor PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); @@ -243,23 +245,22 @@ PIXI.Strip.prototype.constructor = PIXI.Strip; PIXI.Strip.prototype.setTexture = function(texture) { - //TODO SET THE TEXTURES - //TODO VISIBILITY + //TODO SET THE TEXTURES + //TODO VISIBILITY - // stop current texture - this.texture = texture; - this.width = texture.frame.width; - this.height = texture.frame.height; - this.updateFrame = true; -} + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +}; -PIXI.Strip.prototype.onTextureUpdate = function(event) +PIXI.Strip.prototype.onTextureUpdate = function() { - this.updateFrame = true; -} + this.updateFrame = true; +}; // some helper functions.. -
    diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 29d6e4c..40a34ca 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -186,85 +188,165 @@ */ PIXI.TilingSprite = function(texture, width, height) { - PIXI.DisplayObjectContainer.call( this ); + PIXI.Sprite.call( this, texture); - /** - * The texture that the sprite is using - * - * @property texture - * @type Texture - */ - this.texture = texture; + this.width = width || 100; + this.height = height || 100; - /** - * The width of the tiling sprite - * - * @property width - * @type Number - */ - this.width = width; + texture.baseTexture._powerOf2 = true; - /** - * The height of the tiling sprite - * - * @property height - * @type Number - */ - this.height = height; + /** + * The scaling of the image that is being tiled + * + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); - /** - * The scaling of the image that is being tiled - * - * @property tileScale - * @type Point - */ - this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); - /** - * The offset position of the image that is being tiled - * - * @property tilePosition - * @type Point - */ - this.tilePosition = new PIXI.Point(0,0); + this.renderable = true; - this.renderable = true; - - this.blendMode = PIXI.blendModes.NORMAL -} + this.tint = 0xFFFFFF; + this.blendMode = PIXI.blendModes.NORMAL; +}; // constructor -PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.TilingSprite.prototype = Object.create( PIXI.Sprite.prototype ); PIXI.TilingSprite.prototype.constructor = PIXI.TilingSprite; -/** - * Sets the texture of the tiling sprite - * - * @method setTexture - * @param texture {Texture} The PIXI texture that is displayed by the sprite - */ -PIXI.TilingSprite.prototype.setTexture = function(texture) -{ - //TODO SET THE TEXTURES - //TODO VISIBILITY - - // stop current texture - this.texture = texture; - this.updateFrame = true; -} /** - * When the texture is updated, this event will fire to update the frame + * The width of the sprite, setting this will actually modify the scale to acheive the value set * - * @method onTextureUpdate - * @param event - * @private + * @property width + * @type Number */ -PIXI.TilingSprite.prototype.onTextureUpdate = function(event) -{ - this.updateFrame = true; -} +Object.defineProperty(PIXI.TilingSprite.prototype, 'width', { + get: function() { + return this._width; + }, + set: function(value) { + + this._width = value; + } +}); +/** + * The height of the TilingSprite, setting this will actually modify the scale to acheive the value set + * + * @property height + * @type Number + */ +Object.defineProperty(PIXI.TilingSprite.prototype, 'height', { + get: function() { + return this._height; + }, + set: function(value) { + this._height = value; + } +}); + +PIXI.TilingSprite.prototype.onTextureUpdate = function() +{ + // so if _width is 0 then width was not set.. + //if(this._width)this.scale.x = this._width / this.texture.frame.width; + //if(this._height)this.scale.y = this._height / this.texture.frame.height; + // alert(this._width) + this.updateFrame = true; +}; + +PIXI.TilingSprite.prototype._renderWebGL = function(renderSession) +{ + + if(this.visible === false || this.alpha === 0)return; + + var i,j; + + if(this.mask || this.filters) + { + if(this.mask) + { + renderSession.spriteBatch.stop(); + renderSession.maskManager.pushMask(this.mask, renderSession.projection); + renderSession.spriteBatch.start(); + } + + if(this.filters) + { + renderSession.spriteBatch.flush(); + renderSession.filterManager.pushFilter(this._filterBlock); + } + + + renderSession.spriteBatch.renderTilingSprite(this); + + // simple render children! + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + + renderSession.spriteBatch.stop(); + + if(this.filters)renderSession.filterManager.popFilter(); + if(this.mask)renderSession.maskManager.popMask(renderSession.projection); + + renderSession.spriteBatch.start(); + } + else + { + renderSession.spriteBatch.renderTilingSprite(this); + + // simple render children! + for(i=0,j=this.children.length; i<j; i++) + { + this.children[i]._renderWebGL(renderSession); + } + } +}; + +PIXI.TilingSprite.prototype._renderCanvas = function(renderSession) +{ + if(this.visible === false || this.alpha === 0)return; + + var context = renderSession.context; + + context.globalAlpha = this.worldAlpha; + + if(!this.__tilePattern) + this.__tilePattern = context.createPattern(this.texture.baseTexture.source, 'repeat'); + + // check blend mode + if(this.blendMode !== renderSession.currentBlendMode) + { + renderSession.currentBlendMode = this.blendMode; + context.globalCompositeOperation = PIXI.blendModesCanvas[renderSession.currentBlendMode]; + } + + context.beginPath(); + + var tilePosition = this.tilePosition; + var tileScale = this.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = this.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,this.width / tileScale.x, this.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +};
    diff --git a/docs/files/src_pixi_filters_AbstractFilter.js.html b/docs/files/src_pixi_filters_AbstractFilter.js.html index df61c41..4b3588a 100644 --- a/docs/files/src_pixi_filters_AbstractFilter.js.html +++ b/docs/files/src_pixi_filters_AbstractFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,39 +176,38 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - /** * This is the base class for creating a pixi.js filter. Currently only webGL supports filters. * If you want to make a custom filter this should be your base class. * @class AbstractFilter * @constructor * @param fragmentSrc - * @param unifroms + * @param uniforms */ -PIXI.AbstractFilter = function(fragmentSrc, unifroms) +PIXI.AbstractFilter = function(fragmentSrc, uniforms) { - /** - * An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion. - * For example the blur filter has two passes blurX and blurY. - * @property passes - * @type Array an array of filter objects - * @private - */ - this.passes = [this]; + /** + * An array of passes - some filters contain a few steps this array simply stores the steps in a liniear fashion. + * For example the blur filter has two passes blurX and blurY. + * @property passes + * @type Array an array of filter objects + * @private + */ + this.passes = [this]; + this.shaders = []; + + this.dirty = true; + this.padding = 0; - this.dirty = true; - this.padding = 0; - - /** - @property uniforms - @private - */ - this.uniforms = unifroms || {}; - - this.fragmentSrc = fragmentSrc || []; -} + /** + @property uniforms + @private + */ + this.uniforms = uniforms || {}; + this.fragmentSrc = fragmentSrc || []; +};
    diff --git a/docs/files/src_pixi_filters_BlurFilter.js.html b/docs/files/src_pixi_filters_BlurFilter.js.html index d0ce50e..74538b8 100644 --- a/docs/files/src_pixi_filters_BlurFilter.js.html +++ b/docs/files/src_pixi_filters_BlurFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,10 +176,9 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - /** - * - * The BlurFilter applies a Gaussian blur to an object. + * + * The BlurFilter applies a Gaussian blur to an object. * The strength of the blur can be set for x- and y-axis separately (always relative to the stage). * * @class BlurFilter @@ -185,13 +186,11 @@ */ PIXI.BlurFilter = function() { - - this.blurXFilter = new PIXI.BlurXFilter(); - this.blurYFilter = new PIXI.BlurYFilter(); + this.blurXFilter = new PIXI.BlurXFilter(); + this.blurYFilter = new PIXI.BlurYFilter(); - this.passes =[this.blurXFilter, this.blurYFilter]; - -} + this.passes =[this.blurXFilter, this.blurYFilter]; +}; /** * Sets the strength of both the blurX and blurY properties simultaneously @@ -202,10 +201,10 @@ PIXI.BlurFilter = function() */ Object.defineProperty(PIXI.BlurFilter.prototype, 'blur', { get: function() { - return this.blurX.blur; + return this.blurXFilter.blur; }, set: function(value) { - this.blurXFilter.blur = this.blurYFilter.blur = value; + this.blurXFilter.blur = this.blurYFilter.blur = value; } }); @@ -221,7 +220,7 @@ Object.defineProperty(PIXI.BlurFilter.prototype, 'blurX', { return this.blurXFilter.blur; }, set: function(value) { - this.blurXFilter.blur = value; + this.blurXFilter.blur = value; } }); @@ -237,7 +236,7 @@ Object.defineProperty(PIXI.BlurFilter.prototype, 'blurY', { return this.blurYFilter.blur; }, set: function(value) { - this.blurYFilter.blur = value; + this.blurYFilter.blur = value; } }); diff --git a/docs/files/src_pixi_filters_BlurXFilter.js.html b/docs/files/src_pixi_filters_BlurXFilter.js.html index 52ea9a5..17ac461 100644 --- a/docs/files/src_pixi_filters_BlurXFilter.js.html +++ b/docs/files/src_pixi_filters_BlurXFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,56 +176,53 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - - PIXI.BlurXFilter = function() { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - - // set the uniforms - this.uniforms = { - blur: {type: 'f', value: 1/512}, - }; - - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform float blur;", - "uniform sampler2D uSampler;", - "void main(void) {", - "vec4 sum = vec4(0.0);", + PIXI.AbstractFilter.call( this ); - "sum += texture2D(uSampler, vec2(vTextureCoord.x - 4.0*blur, vTextureCoord.y)) * 0.05;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x - 3.0*blur, vTextureCoord.y)) * 0.09;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x - 2.0*blur, vTextureCoord.y)) * 0.12;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x - blur, vTextureCoord.y)) * 0.15;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x + blur, vTextureCoord.y)) * 0.15;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x + 2.0*blur, vTextureCoord.y)) * 0.12;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x + 3.0*blur, vTextureCoord.y)) * 0.09;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x + 4.0*blur, vTextureCoord.y)) * 0.05;", - - "gl_FragColor = sum;", + this.passes = [this]; - "}" - ]; -} + // set the uniforms + this.uniforms = { + blur: {type: '1f', value: 1/512}, + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform float blur;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' vec4 sum = vec4(0.0);', + + ' sum += texture2D(uSampler, vec2(vTextureCoord.x - 4.0*blur, vTextureCoord.y)) * 0.05;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x - 3.0*blur, vTextureCoord.y)) * 0.09;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x - 2.0*blur, vTextureCoord.y)) * 0.12;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x - blur, vTextureCoord.y)) * 0.15;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x + blur, vTextureCoord.y)) * 0.15;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x + 2.0*blur, vTextureCoord.y)) * 0.12;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x + 3.0*blur, vTextureCoord.y)) * 0.09;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x + 4.0*blur, vTextureCoord.y)) * 0.05;', + + ' gl_FragColor = sum;', + '}' + ]; +}; PIXI.BlurXFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.BlurXFilter.prototype.constructor = PIXI.BlurXFilter; - Object.defineProperty(PIXI.BlurXFilter.prototype, 'blur', { get: function() { return this.uniforms.blur.value / (1/7000); }, set: function(value) { - - this.dirty = true; - this.uniforms.blur.value = (1/7000) * value; + + this.dirty = true; + this.uniforms.blur.value = (1/7000) * value; } }); diff --git a/docs/files/src_pixi_filters_BlurYFilter.js.html b/docs/files/src_pixi_filters_BlurYFilter.js.html index 3d09e8c..b94ab32 100644 --- a/docs/files/src_pixi_filters_BlurYFilter.js.html +++ b/docs/files/src_pixi_filters_BlurYFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,43 +176,41 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - - PIXI.BlurYFilter = function() { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - - // set the uniforms - this.uniforms = { - blur: {type: 'f', value: 1/512}, - }; - - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform float blur;", - "uniform sampler2D uSampler;", - "void main(void) {", - "vec4 sum = vec4(0.0);", + PIXI.AbstractFilter.call( this ); - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09;", - "sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05;", - - "gl_FragColor = sum;", + this.passes = [this]; - "}" - ]; -} + // set the uniforms + this.uniforms = { + blur: {type: '1f', value: 1/512}, + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform float blur;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' vec4 sum = vec4(0.0);', + + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09;', + ' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05;', + + ' gl_FragColor = sum;', + '}' + ]; +}; PIXI.BlurYFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.BlurYFilter.prototype.constructor = PIXI.BlurYFilter; @@ -220,8 +220,8 @@ Object.defineProperty(PIXI.BlurYFilter.prototype, 'blur', { return this.uniforms.blur.value / (1/7000); }, set: function(value) { - //this.padding = value; - this.uniforms.blur.value = (1/7000) * value; + //this.padding = value; + this.uniforms.blur.value = (1/7000) * value; } }); diff --git a/docs/files/src_pixi_filters_ColorMatrixFilter.js.html b/docs/files/src_pixi_filters_ColorMatrixFilter.js.html index 8156285..49f0e2c 100644 --- a/docs/files/src_pixi_filters_ColorMatrixFilter.js.html +++ b/docs/files/src_pixi_filters_ColorMatrixFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,41 +177,41 @@ */ /** - * - * The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA - * color and alpha values of every pixel on your displayObject to produce a result + * + * The ColorMatrixFilter class lets you apply a 4x4 matrix transformation on the RGBA + * color and alpha values of every pixel on your displayObject to produce a result * with a new set of RGBA color and alpha values. Its pretty powerful! * @class ColorMatrixFilter * @contructor */ PIXI.ColorMatrixFilter = function() { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - - // set the uniforms - this.uniforms = { - matrix: {type: 'mat4', value: [1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,1]}, - }; - - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform float invert;", - "uniform mat4 matrix;", - "uniform sampler2D uSampler;", - "void main(void) {", - "gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;", - "gl_FragColor = gl_FragColor * vColor;", - "}" - ]; - -} + PIXI.AbstractFilter.call( this ); + + this.passes = [this]; + + // set the uniforms + this.uniforms = { + matrix: {type: 'mat4', value: [1,0,0,0, + 0,1,0,0, + 0,0,1,0, + 0,0,0,1]}, + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform float invert;', + 'uniform mat4 matrix;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;', + // ' gl_FragColor = gl_FragColor;', + '}' + ]; +}; PIXI.ColorMatrixFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.ColorMatrixFilter.prototype.constructor = PIXI.ColorMatrixFilter; @@ -226,7 +228,7 @@ Object.defineProperty(PIXI.ColorMatrixFilter.prototype, 'matrix', { return this.uniforms.matrix.value; }, set: function(value) { - this.uniforms.matrix.value = value; + this.uniforms.matrix.value = value; } }); diff --git a/docs/files/src_pixi_filters_GreyFilter.js.html b/docs/files/src_pixi_filters_ColorStepFilter.js.html similarity index 81% rename from docs/files/src_pixi_filters_GreyFilter.js.html rename to docs/files/src_pixi_filters_ColorStepFilter.js.html index 45eae1e..fda48e8 100644 --- a/docs/files/src_pixi_filters_GreyFilter.js.html +++ b/docs/files/src_pixi_filters_ColorStepFilter.js.html @@ -2,7 +2,7 @@ - src/pixi/filters/GreyFilter.js - Pixi.JS + src/pixi/filters/ColorStepFilter.js - Pixi.JS @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -166,7 +168,7 @@
    -

    File: src/pixi/filters/GreyFilter.js

    +

    File: src/pixi/filters/ColorStepFilter.js

    @@ -174,51 +176,51 @@
      * @author Mat Groves http://matgroves.com/ @Doormat23
      */
     
    -
     /**
    - * 
    + *
      * This turns your displayObjects to black and white.
    - * @class GreyFilter
    + * @class ColorStepFilter
      * @contructor
      */
    -PIXI.GreyFilter = function()
    +PIXI.ColorStepFilter = function()
     {
    -	PIXI.AbstractFilter.call( this );
    -	
    -	this.passes = [this];
    -	
    -	// set the uniforms
    -	this.uniforms = {
    -		grey: {type: 'f', value: 1},
    -	};
    -	
    -	this.fragmentSrc = [
    -	  "precision mediump float;",
    -	  "varying vec2 vTextureCoord;",
    -	  "varying float vColor;",
    -	  "uniform sampler2D uSampler;",
    -	  "uniform float grey;",
    -	  "void main(void) {",
    -	    "gl_FragColor = texture2D(uSampler, vTextureCoord);",
    -		"gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(0.2126*gl_FragColor.r + 0.7152*gl_FragColor.g + 0.0722*gl_FragColor.b), grey);",
    -	    "gl_FragColor = gl_FragColor * vColor;",
    -	  "}"
    -	];
    -}
    +    PIXI.AbstractFilter.call( this );
     
    -PIXI.GreyFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    -PIXI.GreyFilter.prototype.constructor = PIXI.GreyFilter;
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        step: {type: '1f', value: 5},
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform sampler2D uSampler;',
    +        'uniform float step;',
    +
    +        'void main(void) {',
    +        '   vec4 color = texture2D(uSampler, vTextureCoord);',
    +        '   color = floor(color * step) / step;',
    +        '   gl_FragColor = color;',
    +        '}'
    +    ];
    +};
    +
    +PIXI.ColorStepFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    +PIXI.ColorStepFilter.prototype.constructor = PIXI.ColorStepFilter;
     
     /**
    -The strength of the grey. 1 will make the object black and white, 0 will make the object its normal color
    -@property grey
    +The number of steps.
    +@property step
     */
    -Object.defineProperty(PIXI.GreyFilter.prototype, 'grey', {
    +Object.defineProperty(PIXI.ColorStepFilter.prototype, 'step', {
         get: function() {
    -        return this.uniforms.grey.value;
    +        return this.uniforms.step.value;
         },
         set: function(value) {
    -    	this.uniforms.grey.value = value;
    +        this.uniforms.step.value = value;
         }
     });
     
    diff --git a/docs/files/src_pixi_filters_CrossHatchFilter.js.html b/docs/files/src_pixi_filters_CrossHatchFilter.js.html
    new file mode 100644
    index 0000000..3c19965
    --- /dev/null
    +++ b/docs/files/src_pixi_filters_CrossHatchFilter.js.html
    @@ -0,0 +1,260 @@
    +
    +
    +
    +    
    +    src/pixi/filters/CrossHatchFilter.js - Pixi.JS
    +    
    +    
    +    
    +    
    +    
    +
    +
    +
    +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/filters/CrossHatchFilter.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +PIXI.CrossHatchFilter = function()
    +{
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        blur: {type: '1f', value: 1 / 512},
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform float blur;',
    +        'uniform sampler2D uSampler;',
    +
    +        'void main(void) {',
    +        '    float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);',
    +
    +        '    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);',
    +
    +        '    if (lum < 1.00) {',
    +        '        if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {',
    +        '            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);',
    +        '        }',
    +        '    }',
    +
    +        '    if (lum < 0.75) {',
    +        '        if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {',
    +        '            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);',
    +        '        }',
    +        '    }',
    +
    +        '    if (lum < 0.50) {',
    +        '        if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {',
    +        '            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);',
    +        '        }',
    +        '    }',
    +
    +        '    if (lum < 0.3) {',
    +        '        if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {',
    +        '            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);',
    +        '        }',
    +        '    }',
    +        '}'
    +    ];
    +};
    +
    +PIXI.CrossHatchFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    +PIXI.CrossHatchFilter.prototype.constructor = PIXI.BlurYFilter;
    +
    +Object.defineProperty(PIXI.CrossHatchFilter.prototype, 'blur', {
    +    get: function() {
    +        return this.uniforms.blur.value / (1/7000);
    +    },
    +    set: function(value) {
    +        //this.padding = value;
    +        this.uniforms.blur.value = (1/7000) * value;
    +    }
    +});
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_filters_DisplacementFilter.js.html b/docs/files/src_pixi_filters_DisplacementFilter.js.html index 91d269c..23cbab6 100644 --- a/docs/files/src_pixi_filters_DisplacementFilter.js.html +++ b/docs/files/src_pixi_filters_DisplacementFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,10 +176,9 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - /** - * - * The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object. + * + * The DisplacementFilter class uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object. * You can use this filter to apply all manor of crazy warping effects * Currently the r property of the texture is used offset the x and the g propery of the texture is used to offset the y. * @class DisplacementFilter @@ -186,80 +187,75 @@ */ PIXI.DisplacementFilter = function(texture) { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - texture.baseTexture._powerOf2 = true; + PIXI.AbstractFilter.call( this ); - // set the uniforms - //console.log() - this.uniforms = { - displacementMap: {type: 'sampler2D', value:texture}, - scale: {type: 'f2', value:{x:30, y:30}}, - offset: {type: 'f2', value:{x:0, y:0}}, - mapDimensions: {type: 'f2', value:{x:1, y:5112}}, - dimensions: {type: 'f4', value:[0,0,0,0]} - }; - + this.passes = [this]; + texture.baseTexture._powerOf2 = true; - if(texture.baseTexture.hasLoaded) - { - this.uniforms.mapDimensions.value.x = texture.width; - this.uniforms.mapDimensions.value.y = texture.height; - } - else - { - this.boundLoadedFunction = this.onTextureLoaded.bind(this); + // set the uniforms + //console.log() + this.uniforms = { + displacementMap: {type: 'sampler2D', value:texture}, + scale: {type: '2f', value:{x:30, y:30}}, + offset: {type: '2f', value:{x:0, y:0}}, + mapDimensions: {type: '2f', value:{x:1, y:5112}}, + dimensions: {type: '4fv', value:[0,0,0,0]} + }; - texture.baseTexture.on("loaded", this.boundLoadedFunction); - } + if(texture.baseTexture.hasLoaded) + { + this.uniforms.mapDimensions.value.x = texture.width; + this.uniforms.mapDimensions.value.y = texture.height; + } + else + { + this.boundLoadedFunction = this.onTextureLoaded.bind(this); - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform sampler2D displacementMap;", - "uniform sampler2D uSampler;", - "uniform vec2 scale;", - "uniform vec2 offset;", - "uniform vec4 dimensions;", - "uniform vec2 mapDimensions;",// = vec2(256.0, 256.0);", - // "const vec2 textureDimensions = vec2(750.0, 750.0);", - - "void main(void) {", - "vec2 mapCords = vTextureCoord.xy;", -// "mapCords -= ;", - "mapCords += (dimensions.zw + offset)/ dimensions.xy ;", - "mapCords.y *= -1.0;", - "mapCords.y += 1.0;", - "vec2 matSample = texture2D(displacementMap, mapCords).xy;", - "matSample -= 0.5;", - "matSample *= scale;", - "matSample /= mapDimensions;", - "gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + matSample.x, vTextureCoord.y + matSample.y));", - "gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb, 1.0);", - "vec2 cord = vTextureCoord;", - - //"gl_FragColor = texture2D(displacementMap, cord);", - "gl_FragColor = gl_FragColor * vColor;", - - "}" - ]; - -} + texture.baseTexture.on('loaded', this.boundLoadedFunction); + } + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform sampler2D displacementMap;', + 'uniform sampler2D uSampler;', + 'uniform vec2 scale;', + 'uniform vec2 offset;', + 'uniform vec4 dimensions;', + 'uniform vec2 mapDimensions;',// = vec2(256.0, 256.0);', + // 'const vec2 textureDimensions = vec2(750.0, 750.0);', + + 'void main(void) {', + ' vec2 mapCords = vTextureCoord.xy;', + //' mapCords -= ;', + ' mapCords += (dimensions.zw + offset)/ dimensions.xy ;', + ' mapCords.y *= -1.0;', + ' mapCords.y += 1.0;', + ' vec2 matSample = texture2D(displacementMap, mapCords).xy;', + ' matSample -= 0.5;', + ' matSample *= scale;', + ' matSample /= mapDimensions;', + ' gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + matSample.x, vTextureCoord.y + matSample.y));', + ' gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb, 1.0);', + ' vec2 cord = vTextureCoord;', + + //' gl_FragColor = texture2D(displacementMap, cord);', + // ' gl_FragColor = gl_FragColor;', + '}' + ]; +}; PIXI.DisplacementFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.DisplacementFilter.prototype.constructor = PIXI.DisplacementFilter; PIXI.DisplacementFilter.prototype.onTextureLoaded = function() { - - this.uniforms.mapDimensions.value.x = this.uniforms.displacementMap.value.width; - this.uniforms.mapDimensions.value.y = this.uniforms.displacementMap.value.height; + this.uniforms.mapDimensions.value.x = this.uniforms.displacementMap.value.width; + this.uniforms.mapDimensions.value.y = this.uniforms.displacementMap.value.height; - this.uniforms.displacementMap.value.baseTexture.off("loaded", this.boundLoadedFunction) - -} + this.uniforms.displacementMap.value.baseTexture.off('loaded', this.boundLoadedFunction); +}; /** * The texture used for the displacemtent map * must be power of 2 texture at the moment @@ -272,7 +268,7 @@ Object.defineProperty(PIXI.DisplacementFilter.prototype, 'map', { return this.uniforms.displacementMap.value; }, set: function(value) { - this.uniforms.displacementMap.value = value; + this.uniforms.displacementMap.value = value; } }); @@ -287,7 +283,7 @@ Object.defineProperty(PIXI.DisplacementFilter.prototype, 'scale', { return this.uniforms.scale.value; }, set: function(value) { - this.uniforms.scale.value = value; + this.uniforms.scale.value = value; } }); @@ -302,9 +298,10 @@ Object.defineProperty(PIXI.DisplacementFilter.prototype, 'offset', { return this.uniforms.offset.value; }, set: function(value) { - this.uniforms.offset.value = value; + this.uniforms.offset.value = value; } }); +
    diff --git a/docs/files/src_pixi_filters_DotScreenFilter.js.html b/docs/files/src_pixi_filters_DotScreenFilter.js.html new file mode 100644 index 0000000..e619678 --- /dev/null +++ b/docs/files/src_pixi_filters_DotScreenFilter.js.html @@ -0,0 +1,279 @@ + + + + + src/pixi/filters/DotScreenFilter.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/filters/DotScreenFilter.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/fun/dotscreen.js
    + */
    +
    +/**
    + *
    + * This filter applies a pixlate effect making display objects appear 'blocky'
    + * @class PixelateFilter
    + * @contructor
    + */
    +PIXI.DotScreenFilter = function()
    +{
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        scale: {type: '1f', value:1},
    +        angle: {type: '1f', value:5},
    +        dimensions:   {type: '4fv', value:[0,0,0,0]}
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform vec4 dimensions;',
    +        'uniform sampler2D uSampler;',
    +
    +        'uniform float angle;',
    +        'uniform float scale;',
    +
    +        'float pattern() {',
    +        '   float s = sin(angle), c = cos(angle);',
    +        '   vec2 tex = vTextureCoord * dimensions.xy;',
    +        '   vec2 point = vec2(',
    +        '       c * tex.x - s * tex.y,',
    +        '       s * tex.x + c * tex.y',
    +        '   ) * scale;',
    +        '   return (sin(point.x) * sin(point.y)) * 4.0;',
    +        '}',
    +
    +        'void main() {',
    +        '   vec4 color = texture2D(uSampler, vTextureCoord);',
    +        '   float average = (color.r + color.g + color.b) / 3.0;',
    +        '   gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);',
    +        '}'
    +    ];
    +};
    +
    +PIXI.DotScreenFilter.prototype = Object.create( PIXI.DotScreenFilter.prototype );
    +PIXI.DotScreenFilter.prototype.constructor = PIXI.DotScreenFilter;
    +
    +/**
    + *
    + * This describes the the scale
    + * @property scale
    + * @type Number
    + */
    +Object.defineProperty(PIXI.DotScreenFilter.prototype, 'scale', {
    +    get: function() {
    +        return this.uniforms.scale.value;
    +    },
    +    set: function(value) {
    +        this.dirty = true;
    +        this.uniforms.scale.value = value;
    +    }
    +});
    +
    +/**
    + *
    + * This radius describes angle
    + * @property angle
    + * @type Number
    + */
    +Object.defineProperty(PIXI.DotScreenFilter.prototype, 'angle', {
    +    get: function() {
    +        return this.uniforms.angle.value;
    +    },
    +    set: function(value) {
    +        this.dirty = true;
    +        this.uniforms.angle.value = value;
    +    }
    +});
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_filters_FilterBlock.js.html b/docs/files/src_pixi_filters_FilterBlock.js.html index 3491921..77e8eac 100644 --- a/docs/files/src_pixi_filters_FilterBlock.js.html +++ b/docs/files/src_pixi_filters_FilterBlock.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -178,9 +180,10 @@ PIXI.FilterBlock = function() { - this.visible = true; - this.renderable = true; -} + this.visible = true; + this.renderable = true; +}; +
    diff --git a/docs/files/src_pixi_filters_GrayFilter.js.html b/docs/files/src_pixi_filters_GrayFilter.js.html new file mode 100644 index 0000000..440c2a3 --- /dev/null +++ b/docs/files/src_pixi_filters_GrayFilter.js.html @@ -0,0 +1,245 @@ + + + + + src/pixi/filters/GrayFilter.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/filters/GrayFilter.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + *
    + * This turns your displayObjects to black and white.
    + * @class GrayFilter
    + * @contructor
    + */
    +PIXI.GrayFilter = function()
    +{
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        gray: {type: '1f', value: 1},
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform sampler2D uSampler;',
    +        'uniform float gray;',
    +
    +        'void main(void) {',
    +        '   gl_FragColor = texture2D(uSampler, vTextureCoord);',
    +        '   gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(0.2126*gl_FragColor.r + 0.7152*gl_FragColor.g + 0.0722*gl_FragColor.b), gray);',
    +     //   '   gl_FragColor = gl_FragColor;',
    +        '}'
    +    ];
    +};
    +
    +PIXI.GrayFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    +PIXI.GrayFilter.prototype.constructor = PIXI.GrayFilter;
    +
    +/**
    +The strength of the gray. 1 will make the object black and white, 0 will make the object its normal color
    +@property gray
    +*/
    +Object.defineProperty(PIXI.GrayFilter.prototype, 'gray', {
    +    get: function() {
    +        return this.uniforms.gray.value;
    +    },
    +    set: function(value) {
    +        this.uniforms.gray.value = value;
    +    }
    +});
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_filters_InvertFilter.js.html b/docs/files/src_pixi_filters_InvertFilter.js.html index a9b6382..2c66e5d 100644 --- a/docs/files/src_pixi_filters_InvertFilter.js.html +++ b/docs/files/src_pixi_filters_InvertFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,37 +177,37 @@ */ /** - * + * * This inverts your displayObjects colors. * @class InvertFilter * @contructor */ PIXI.InvertFilter = function() { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - - // set the uniforms - this.uniforms = { - invert: {type: 'f', value: 0}, - }; - - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform float invert;", - "uniform sampler2D uSampler;", - "void main(void) {", - "gl_FragColor = texture2D(uSampler, vTextureCoord);", - "gl_FragColor.rgb = mix( (vec3(1)-gl_FragColor.rgb) * gl_FragColor.a, gl_FragColor.rgb, invert);", - //"gl_FragColor.rgb = gl_FragColor.rgb * gl_FragColor.a;", - "gl_FragColor = gl_FragColor * vColor;", - "}" - ]; - -} + PIXI.AbstractFilter.call( this ); + + this.passes = [this]; + + // set the uniforms + this.uniforms = { + invert: {type: '1f', value: 1}, + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform float invert;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vTextureCoord);', + ' gl_FragColor.rgb = mix( (vec3(1)-gl_FragColor.rgb) * gl_FragColor.a, gl_FragColor.rgb, 1.0 - invert);', + //' gl_FragColor.rgb = gl_FragColor.rgb * gl_FragColor.a;', + // ' gl_FragColor = gl_FragColor * vColor;', + '}' + ]; +}; PIXI.InvertFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.InvertFilter.prototype.constructor = PIXI.InvertFilter; @@ -219,9 +221,10 @@ Object.defineProperty(PIXI.InvertFilter.prototype, 'invert', { return this.uniforms.invert.value; }, set: function(value) { - this.uniforms.invert.value = value; + this.uniforms.invert.value = value; } }); +
    diff --git a/docs/files/src_pixi_filters_PixelateFilter.js.html b/docs/files/src_pixi_filters_PixelateFilter.js.html index 84a51c4..b94056d 100644 --- a/docs/files/src_pixi_filters_PixelateFilter.js.html +++ b/docs/files/src_pixi_filters_PixelateFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,52 +177,49 @@ */ /** - * - * This filter applies a pixlate effect making display objects appear "blocky" + * + * This filter applies a pixlate effect making display objects appear 'blocky' * @class PixelateFilter * @contructor */ PIXI.PixelateFilter = function() { - PIXI.AbstractFilter.call( this ); + PIXI.AbstractFilter.call( this ); - this.passes = [this]; - - // set the uniforms - this.uniforms = { - invert: {type: 'f', value: 0}, - dimensions: {type: 'f4', value:new Float32Array([10000, 100, 10, 10])}, - pixelSize: {type: 'f2', value:{x:10, y:10}}, - }; + this.passes = [this]; - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform vec2 testDim;", - "uniform vec4 dimensions;", - "uniform vec2 pixelSize;", - "uniform sampler2D uSampler;", - "void main(void) {", - "vec2 coord = vTextureCoord;", + // set the uniforms + this.uniforms = { + invert: {type: '1f', value: 0}, + dimensions: {type: '4fv', value:new Float32Array([10000, 100, 10, 10])}, + pixelSize: {type: '2f', value:{x:10, y:10}}, + }; - // "vec2 dim = testDim;", - "vec2 size = dimensions.xy/pixelSize;", + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + 'uniform vec2 testDim;', + 'uniform vec4 dimensions;', + 'uniform vec2 pixelSize;', + 'uniform sampler2D uSampler;', - "vec2 color = floor( ( vTextureCoord * size ) ) / size + pixelSize/dimensions.xy * 0.5;", - // "color += (mod(dimensions.xy, size)/dimensions.zw;", - "gl_FragColor = texture2D(uSampler, color);", - "}" - ]; - + 'void main(void) {', + ' vec2 coord = vTextureCoord;', -} + ' vec2 size = dimensions.xy/pixelSize;', + + ' vec2 color = floor( ( vTextureCoord * size ) ) / size + pixelSize/dimensions.xy * 0.5;', + ' gl_FragColor = texture2D(uSampler, color);', + '}' + ]; +}; PIXI.PixelateFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.PixelateFilter.prototype.constructor = PIXI.PixelateFilter; /** - * + * * This a point that describes the size of the blocs. x is the width of the block and y is the the height * @property size * @type Point @@ -230,10 +229,11 @@ Object.defineProperty(PIXI.PixelateFilter.prototype, 'size', { return this.uniforms.pixelSize.value; }, set: function(value) { - this.dirty = true; - this.uniforms.pixelSize.value = value; + this.dirty = true; + this.uniforms.pixelSize.value = value; } }); +
    diff --git a/docs/files/src_pixi_filters_RGBSplitFilter.js.html b/docs/files/src_pixi_filters_RGBSplitFilter.js.html new file mode 100644 index 0000000..0aa4e0e --- /dev/null +++ b/docs/files/src_pixi_filters_RGBSplitFilter.js.html @@ -0,0 +1,243 @@ + + + + + src/pixi/filters/RGBSplitFilter.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/filters/RGBSplitFilter.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +PIXI.RGBSplitFilter = function()
    +{
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        red: {type: '2f', value: {x:20, y:20}},
    +        green: {type: '2f', value: {x:-20, y:20}},
    +        blue: {type: '2f', value: {x:20, y:-20}},
    +        dimensions:   {type: '4fv', value:[0,0,0,0]}
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform vec2 red;',
    +        'uniform vec2 green;',
    +        'uniform vec2 blue;',
    +        'uniform vec4 dimensions;',
    +        'uniform sampler2D uSampler;',
    +
    +        'void main(void) {',
    +        '   gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/dimensions.xy).r;',
    +        '   gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/dimensions.xy).g;',
    +        '   gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/dimensions.xy).b;',
    +        '   gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;',
    +        '}'
    +    ];
    +};
    +
    +PIXI.RGBSplitFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    +PIXI.RGBSplitFilter.prototype.constructor = PIXI.RGBSplitFilter;
    +
    +Object.defineProperty(PIXI.RGBSplitFilter.prototype, 'angle', {
    +    get: function() {
    +        return this.uniforms.blur.value / (1/7000);
    +    },
    +    set: function(value) {
    +        //this.padding = value;
    +        this.uniforms.blur.value = (1/7000) * value;
    +    }
    +});
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_filters_SepiaFilter.js.html b/docs/files/src_pixi_filters_SepiaFilter.js.html index 3571a8c..7314324 100644 --- a/docs/files/src_pixi_filters_SepiaFilter.js.html +++ b/docs/files/src_pixi_filters_SepiaFilter.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -170,45 +172,43 @@
    -/**
     /**
      * @author Mat Groves http://matgroves.com/ @Doormat23
      */
     
    -
     /**
    - * 
    + *
      * This applies a sepia effect to your displayObjects.
      * @class SepiaFilter
      * @contructor
      */
     PIXI.SepiaFilter = function()
     {
    -	PIXI.AbstractFilter.call( this );
    -	
    -	this.passes = [this];
    -	
    -	// set the uniforms
    -	this.uniforms = {
    -		sepia: {type: 'f', value: 1},
    -	};
    -	
    -	this.fragmentSrc = [
    -	  "precision mediump float;",
    -	  "varying vec2 vTextureCoord;",
    -	  "varying float vColor;",
    -	  "uniform float sepia;",
    -	  "uniform sampler2D uSampler;",
    -	 	   
    -	  "const mat3 sepiaMatrix = mat3(0.3588, 0.7044, 0.1368, 0.2990, 0.5870, 0.1140, 0.2392, 0.4696, 0.0912);",
    -	  "void main(void) {",
    -	    "gl_FragColor = texture2D(uSampler, vTextureCoord);",
    -		"gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb * sepiaMatrix, sepia);",
    -	    "gl_FragColor = gl_FragColor * vColor;",
    -	  "}"
    -	];
    -	
    -}
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        sepia: {type: '1f', value: 1},
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform float sepia;',
    +        'uniform sampler2D uSampler;',
    +
    +        'const mat3 sepiaMatrix = mat3(0.3588, 0.7044, 0.1368, 0.2990, 0.5870, 0.1140, 0.2392, 0.4696, 0.0912);',
    +
    +        'void main(void) {',
    +        '   gl_FragColor = texture2D(uSampler, vTextureCoord);',
    +        '   gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb * sepiaMatrix, sepia);',
    +       // '   gl_FragColor = gl_FragColor * vColor;',
    +        '}'
    +    ];
    +};
     
     PIXI.SepiaFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
     PIXI.SepiaFilter.prototype.constructor = PIXI.SepiaFilter;
    @@ -222,7 +222,7 @@ Object.defineProperty(PIXI.SepiaFilter.prototype, 'sepia', {
             return this.uniforms.sepia.value;
         },
         set: function(value) {
    -    	this.uniforms.sepia.value = value;
    +        this.uniforms.sepia.value = value;
         }
     });
     
    diff --git a/docs/files/src_pixi_filters_SmartBlurFilter.js.html b/docs/files/src_pixi_filters_SmartBlurFilter.js.html
    index 80af498..d050e27 100644
    --- a/docs/files/src_pixi_filters_SmartBlurFilter.js.html
    +++ b/docs/files/src_pixi_filters_SmartBlurFilter.js.html
    @@ -19,7 +19,7 @@
                 
             
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,54 +176,51 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - - PIXI.SmartBlurFilter = function() { - PIXI.AbstractFilter.call( this ); - - this.passes = [this]; - - // set the uniforms - this.uniforms = { - blur: {type: 'f', value: 1/512}, - }; - - this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "uniform sampler2D uSampler;", - // "uniform vec2 delta;", - "const vec2 delta = vec2(1.0/10.0, 0.0);", - // "uniform float darkness;", - - "float random(vec3 scale, float seed) {", - "return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);", - "}", - - - "void main(void) {", - - "vec4 color = vec4(0.0);", - "float total = 0.0;", - - "float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);", - - "for (float t = -30.0; t <= 30.0; t++) {", - "float percent = (t + offset - 0.5) / 30.0;", - "float weight = 1.0 - abs(percent);", - "vec4 sample = texture2D(uSampler, vTextureCoord + delta * percent);", - "sample.rgb *= sample.a;", - "color += sample * weight;", - "total += weight;", - "}", - - "gl_FragColor = color / total;", - "gl_FragColor.rgb /= gl_FragColor.a + 0.00001;", - // "gl_FragColor.rgb *= darkness;", - "}" - ]; -} + PIXI.AbstractFilter.call( this ); + + this.passes = [this]; + + // set the uniforms + this.uniforms = { + blur: {type: '1f', value: 1/512}, + }; + + this.fragmentSrc = [ + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'uniform sampler2D uSampler;', + //'uniform vec2 delta;', + 'const vec2 delta = vec2(1.0/10.0, 0.0);', + //'uniform float darkness;', + + 'float random(vec3 scale, float seed) {', + ' return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);', + '}', + + + 'void main(void) {', + ' vec4 color = vec4(0.0);', + ' float total = 0.0;', + + ' float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);', + + ' for (float t = -30.0; t <= 30.0; t++) {', + ' float percent = (t + offset - 0.5) / 30.0;', + ' float weight = 1.0 - abs(percent);', + ' vec4 sample = texture2D(uSampler, vTextureCoord + delta * percent);', + ' sample.rgb *= sample.a;', + ' color += sample * weight;', + ' total += weight;', + ' }', + + ' gl_FragColor = color / total;', + ' gl_FragColor.rgb /= gl_FragColor.a + 0.00001;', + //' gl_FragColor.rgb *= darkness;', + '}' + ]; +}; PIXI.SmartBlurFilter.prototype = Object.create( PIXI.AbstractFilter.prototype ); PIXI.SmartBlurFilter.prototype.constructor = PIXI.SmartBlurFilter; @@ -231,7 +230,7 @@ Object.defineProperty(PIXI.SmartBlurFilter.prototype, 'blur', { return this.uniforms.blur.value; }, set: function(value) { - this.uniforms.blur.value = value; + this.uniforms.blur.value = value; } }); diff --git a/docs/files/src_pixi_filters_TwistFilter.js.html b/docs/files/src_pixi_filters_TwistFilter.js.html new file mode 100644 index 0000000..65e7f1a --- /dev/null +++ b/docs/files/src_pixi_filters_TwistFilter.js.html @@ -0,0 +1,294 @@ + + + + + src/pixi/filters/TwistFilter.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/filters/TwistFilter.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + *
    + * This filter applies a pixlate effect making display objects appear 'blocky'
    + * @class PixelateFilter
    + * @contructor
    + */
    +PIXI.TwistFilter = function()
    +{
    +    PIXI.AbstractFilter.call( this );
    +
    +    this.passes = [this];
    +
    +    // set the uniforms
    +    this.uniforms = {
    +        radius: {type: '1f', value:0.5},
    +        angle: {type: '1f', value:5},
    +        offset: {type: '2f', value:{x:0.5, y:0.5}},
    +    };
    +
    +    this.fragmentSrc = [
    +        'precision mediump float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform vec4 dimensions;',
    +        'uniform sampler2D uSampler;',
    +
    +        'uniform float radius;',
    +        'uniform float angle;',
    +        'uniform vec2 offset;',
    +
    +        'void main(void) {',
    +        '   vec2 coord = vTextureCoord - offset;',
    +        '   float distance = length(coord);',
    +
    +        '   if (distance < radius) {',
    +        '       float ratio = (radius - distance) / radius;',
    +        '       float angleMod = ratio * ratio * angle;',
    +        '       float s = sin(angleMod);',
    +        '       float c = cos(angleMod);',
    +        '       coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);',
    +        '   }',
    +
    +        '   gl_FragColor = texture2D(uSampler, coord+offset);',
    +        '}'
    +    ];
    +};
    +
    +PIXI.TwistFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
    +PIXI.TwistFilter.prototype.constructor = PIXI.TwistFilter;
    +
    +/**
    + *
    + * This point describes the the offset of the twist
    + * @property size
    + * @type Point
    + */
    +Object.defineProperty(PIXI.TwistFilter.prototype, 'offset', {
    +    get: function() {
    +        return this.uniforms.offset.value;
    +    },
    +    set: function(value) {
    +        this.dirty = true;
    +        this.uniforms.offset.value = value;
    +    }
    +});
    +
    +/**
    + *
    + * This radius describes size of the twist
    + * @property size
    + * @type Number
    + */
    +Object.defineProperty(PIXI.TwistFilter.prototype, 'radius', {
    +    get: function() {
    +        return this.uniforms.radius.value;
    +    },
    +    set: function(value) {
    +        this.dirty = true;
    +        this.uniforms.radius.value = value;
    +    }
    +});
    +
    +/**
    + *
    + * This radius describes angle of the twist
    + * @property angle
    + * @type Number
    + */
    +Object.defineProperty(PIXI.TwistFilter.prototype, 'angle', {
    +    get: function() {
    +        return this.uniforms.angle.value;
    +    },
    +    set: function(value) {
    +        this.dirty = true;
    +        this.uniforms.angle.value = value;
    +    }
    +});
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index c7cbe8c..d9f0bf6 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -178,29 +180,29 @@ * A Class that loads a bunch of images / sprite sheet / bitmap font files. Once the * assets have been loaded they are added to the PIXI Texture cache and can be accessed * easily through PIXI.Texture.fromImage() and PIXI.Sprite.fromImage() - * When all items have been loaded this class will dispatch a "onLoaded" event - * As each individual item is loaded this class will dispatch a "onProgress" event + * When all items have been loaded this class will dispatch a 'onLoaded' event + * As each individual item is loaded this class will dispatch a 'onProgress' event * * @class AssetLoader * @constructor * @uses EventTarget * @param {Array<String>} assetURLs an array of image/sprite sheet urls that you would like loaded - * supported. Supported image formats include "jpeg", "jpg", "png", "gif". Supported - * sprite sheet data formats only include "JSON" at this time. Supported bitmap font - * data formats include "xml" and "fnt". + * supported. Supported image formats include 'jpeg', 'jpg', 'png', 'gif'. Supported + * sprite sheet data formats only include 'JSON' at this time. Supported bitmap font + * data formats include 'xml' and 'fnt'. * @param crossorigin {Boolean} Whether requests should be treated as crossorigin */ PIXI.AssetLoader = function(assetURLs, crossorigin) { - PIXI.EventTarget.call(this); + PIXI.EventTarget.call(this); - /** - * The array of asset URLs that are going to be loaded + /** + * The array of asset URLs that are going to be loaded * - * @property assetURLs - * @type Array<String> - */ - this.assetURLs = assetURLs; + * @property assetURLs + * @type Array<String> + */ + this.assetURLs = assetURLs; /** * Whether the requests should be treated as cross origin @@ -208,7 +210,7 @@ PIXI.AssetLoader = function(assetURLs, crossorigin) * @property crossorigin * @type Boolean */ - this.crossorigin = crossorigin; + this.crossorigin = crossorigin; /** * Maps file extension to loader types @@ -217,17 +219,16 @@ PIXI.AssetLoader = function(assetURLs, crossorigin) * @type Object */ this.loadersByType = { - "jpg": PIXI.ImageLoader, - "jpeg": PIXI.ImageLoader, - "png": PIXI.ImageLoader, - "gif": PIXI.ImageLoader, - "json": PIXI.JsonLoader, - "anim": PIXI.SpineLoader, - "xml": PIXI.BitmapFontLoader, - "fnt": PIXI.BitmapFontLoader + 'jpg': PIXI.ImageLoader, + 'jpeg': PIXI.ImageLoader, + 'png': PIXI.ImageLoader, + 'gif': PIXI.ImageLoader, + 'json': PIXI.JsonLoader, + 'atlas': PIXI.AtlasLoader, + 'anim': PIXI.SpineLoader, + 'xml': PIXI.BitmapFontLoader, + 'fnt': PIXI.BitmapFontLoader }; - - }; /** @@ -243,6 +244,34 @@ PIXI.AssetLoader = function(assetURLs, crossorigin) // constructor PIXI.AssetLoader.prototype.constructor = PIXI.AssetLoader; + +PIXI.AssetLoader.prototype._getDataType = function(str) +{ + var test = 'data:'; + //starts with 'data:' + var start = str.slice(0, test.length).toLowerCase(); + if (start === test) { + var data = str.slice(test.length); + + var sepIdx = data.indexOf(','); + if (sepIdx === -1) //malformed data URI scheme + return null; + + //e.g. 'image/gif;base64' => 'image/gif' + var info = data.slice(0, sepIdx).split(';')[0]; + + //We might need to handle some special cases here... + //standardize text/plain to 'txt' file extension + if (!info || info.toLowerCase() === 'text/plain') + return 'txt'; + + //User specified mime type, try splitting it by '/' + return info.split('/').pop().toLowerCase(); + } + + return null; +}; + /** * Starts loading the assets sequentially * @@ -252,25 +281,31 @@ PIXI.AssetLoader.prototype.load = function() { var scope = this; - this.loadCount = this.assetURLs.length; + function onLoad() { + scope.onAssetLoaded(); + } + + this.loadCount = this.assetURLs.length; for (var i=0; i < this.assetURLs.length; i++) - { - var fileName = this.assetURLs[i]; - var fileType = fileName.split(".").pop().toLowerCase(); + { + var fileName = this.assetURLs[i]; + //first see if we have a data URI scheme.. + var fileType = this._getDataType(fileName); - var loaderClass = this.loadersByType[fileType]; - if(!loaderClass) - throw new Error(fileType + " is an unsupported file type"); + //if not, assume it's a file URI + if (!fileType) + fileType = fileName.split('?').shift().split('.').pop().toLowerCase(); - var loader = new loaderClass(fileName, this.crossorigin); + var Constructor = this.loadersByType[fileType]; + if(!Constructor) + throw new Error(fileType + ' is an unsupported file type'); - loader.addEventListener("loaded", function() - { - scope.onAssetLoaded(); - }); + var loader = new Constructor(fileName, this.crossorigin); + + loader.addEventListener('loaded', onLoad); loader.load(); - } + } }; /** @@ -282,17 +317,16 @@ PIXI.AssetLoader.prototype.load = function() PIXI.AssetLoader.prototype.onAssetLoaded = function() { this.loadCount--; - this.dispatchEvent({type: "onProgress", content: this}); - if(this.onProgress) this.onProgress(); + this.dispatchEvent({type: 'onProgress', content: this}); + if (this.onProgress) this.onProgress(); - if(this.loadCount == 0) - { - this.dispatchEvent({type: "onComplete", content: this}); - if(this.onComplete) this.onComplete(); - } + if (!this.loadCount) + { + this.dispatchEvent({type: 'onComplete', content: this}); + if(this.onComplete) this.onComplete(); + } }; -
    diff --git a/docs/files/src_pixi_loaders_AtlasLoader.js.html b/docs/files/src_pixi_loaders_AtlasLoader.js.html new file mode 100644 index 0000000..b6b0475 --- /dev/null +++ b/docs/files/src_pixi_loaders_AtlasLoader.js.html @@ -0,0 +1,378 @@ + + + + + src/pixi/loaders/AtlasLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/AtlasLoader.js

    + +
    +
    +/**
    + * @author Martin Kelm http://mkelm.github.com
    + */
    +
    +/**
    + * The atlas file loader is used to load in Atlas data and parsing it
    + * When loaded this class will dispatch a 'loaded' event
    + * If load failed this class will dispatch a 'error' event
    + * @class AtlasLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.AtlasLoader = function (url, crossorigin) {
    +    PIXI.EventTarget.call(this);
    +    this.url = url;
    +    this.baseUrl = url.replace(/[^\/]*$/, '');
    +    this.crossorigin = crossorigin;
    +    this.loaded = false;
    +
    +};
    +
    +// constructor
    +PIXI.AtlasLoader.constructor = PIXI.AtlasLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.AtlasLoader.prototype.load = function () {
    +    this.ajaxRequest = new PIXI.AjaxRequest();
    +    this.ajaxRequest.onreadystatechange = this.onAtlasLoaded.bind(this);
    +
    +    this.ajaxRequest.open('GET', this.url, true);
    +    if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType('application/json');
    +    this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.AtlasLoader.prototype.onAtlasLoaded = function () {
    +    if (this.ajaxRequest.readyState === 4) {
    +        if (this.ajaxRequest.status === 200 || window.location.href.indexOf('http') === -1) {
    +            this.atlas = {
    +                meta : {
    +                    image : []
    +                },
    +                frames : []
    +            };
    +            var result = this.ajaxRequest.responseText.split(/\r?\n/);
    +            var lineCount = -3;
    +
    +            var currentImageId = 0;
    +            var currentFrame = null;
    +            var nameInNextLine = false;
    +
    +            var i = 0,
    +                j = 0,
    +                selfOnLoaded = this.onLoaded.bind(this);
    +
    +            // parser without rotation support yet!
    +            for (i = 0; i < result.length; i++) {
    +                result[i] = result[i].replace(/^\s+|\s+$/g, '');
    +                if (result[i] === '') {
    +                    nameInNextLine = i+1;
    +                }
    +                if (result[i].length > 0) {
    +                    if (nameInNextLine === i) {
    +                        this.atlas.meta.image.push(result[i]);
    +                        currentImageId = this.atlas.meta.image.length - 1;
    +                        this.atlas.frames.push({});
    +                        lineCount = -3;
    +                    } else if (lineCount > 0) {
    +                        if (lineCount % 7 === 1) { // frame name
    +                            if (currentFrame != null) { //jshint ignore:line
    +                                this.atlas.frames[currentImageId][currentFrame.name] = currentFrame;
    +                            }
    +                            currentFrame = { name: result[i], frame : {} };
    +                        } else {
    +                            var text = result[i].split(' ');
    +                            if (lineCount % 7 === 3) { // position
    +                                currentFrame.frame.x = Number(text[1].replace(',', ''));
    +                                currentFrame.frame.y = Number(text[2]);
    +                            } else if (lineCount % 7 === 4) { // size
    +                                currentFrame.frame.w = Number(text[1].replace(',', ''));
    +                                currentFrame.frame.h = Number(text[2]);
    +                            } else if (lineCount % 7 === 5) { // real size
    +                                var realSize = {
    +                                    x : 0,
    +                                    y : 0,
    +                                    w : Number(text[1].replace(',', '')),
    +                                    h : Number(text[2])
    +                                };
    +
    +                                if (realSize.w > currentFrame.frame.w || realSize.h > currentFrame.frame.h) {
    +                                    currentFrame.trimmed = true;
    +                                    currentFrame.realSize = realSize;
    +                                } else {
    +                                    currentFrame.trimmed = false;
    +                                }
    +                            }
    +                        }
    +                    }
    +                    lineCount++;
    +                }
    +            }
    +
    +            if (currentFrame != null) { //jshint ignore:line
    +                this.atlas.frames[currentImageId][currentFrame.name] = currentFrame;
    +            }
    +
    +            if (this.atlas.meta.image.length > 0) {
    +                this.images = [];
    +                for (j = 0; j < this.atlas.meta.image.length; j++) {
    +                    // sprite sheet
    +                    var textureUrl = this.baseUrl + this.atlas.meta.image[j];
    +                    var frameData = this.atlas.frames[j];
    +                    this.images.push(new PIXI.ImageLoader(textureUrl, this.crossorigin));
    +
    +                    for (i in frameData) {
    +                        var rect = frameData[i].frame;
    +                        if (rect) {
    +                            PIXI.TextureCache[i] = new PIXI.Texture(this.images[j].texture.baseTexture, {
    +                                x: rect.x,
    +                                y: rect.y,
    +                                width: rect.w,
    +                                height: rect.h
    +                            });
    +                            if (frameData[i].trimmed) {
    +                                PIXI.TextureCache[i].realSize = frameData[i].realSize;
    +                                // trim in pixi not supported yet, todo update trim properties if it is done ...
    +                                PIXI.TextureCache[i].trim.x = 0;
    +                                PIXI.TextureCache[i].trim.y = 0;
    +                            }
    +                        }
    +                    }
    +                }
    +
    +                this.currentImageId = 0;
    +                for (j = 0; j < this.images.length; j++) {
    +                    this.images[j].addEventListener('loaded', selfOnLoaded);
    +                }
    +                this.images[this.currentImageId].load();
    +
    +            } else {
    +                this.onLoaded();
    +            }
    +
    +        } else {
    +            this.onError();
    +        }
    +    }
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.AtlasLoader.prototype.onLoaded = function () {
    +    if (this.images.length - 1 > this.currentImageId) {
    +        this.currentImageId++;
    +        this.images[this.currentImageId].load();
    +    } else {
    +        this.loaded = true;
    +        this.dispatchEvent({
    +            type: 'loaded',
    +            content: this
    +        });
    +    }
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.AtlasLoader.prototype.onError = function () {
    +    this.dispatchEvent({
    +        type: 'error',
    +        content: this
    +    });
    +};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 5e9e825..6b7e263 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,10 +177,10 @@ */ /** - * The xml loader is used to load in XML bitmap font data ("xml" or "fnt") + * The xml loader is used to load in XML bitmap font data ('xml' or 'fnt') * To generate the data you can use http://www.angelcode.com/products/bmfont/ * This loader will also load the image file as the data. - * When loaded this class will dispatch a "loaded" event + * When loaded this class will dispatch a 'loaded' event * * @class BitmapFontLoader * @uses EventTarget @@ -191,7 +193,7 @@ PIXI.BitmapFontLoader = function(url, crossorigin) /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker - * make sure to set the format as "JSON" + * make sure to set the format as 'JSON' */ PIXI.EventTarget.call(this); @@ -218,7 +220,7 @@ PIXI.BitmapFontLoader = function(url, crossorigin) * @type String * @readOnly */ - this.baseUrl = url.replace(/[^\/]*$/, ""); + this.baseUrl = url.replace(/[^\/]*$/, ''); /** * [read-only] The texture of the bitmap font @@ -246,9 +248,9 @@ PIXI.BitmapFontLoader.prototype.load = function() scope.onXMLLoaded(); }; - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/xml"); - this.ajaxRequest.send(null) + this.ajaxRequest.open('GET', this.url, true); + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType('application/xml'); + this.ajaxRequest.send(null); }; /** @@ -259,40 +261,40 @@ PIXI.BitmapFontLoader.prototype.load = function() */ PIXI.BitmapFontLoader.prototype.onXMLLoaded = function() { - if (this.ajaxRequest.readyState == 4) + if (this.ajaxRequest.readyState === 4) { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) + if (this.ajaxRequest.status === 200 || window.location.protocol.indexOf('http') === -1) { - var textureUrl = this.baseUrl + this.ajaxRequest.responseXML.getElementsByTagName("page")[0].attributes.getNamedItem("file").nodeValue; + var textureUrl = this.baseUrl + this.ajaxRequest.responseXML.getElementsByTagName('page')[0].attributes.getNamedItem('file').nodeValue; var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); this.texture = image.texture.baseTexture; var data = {}; - var info = this.ajaxRequest.responseXML.getElementsByTagName("info")[0]; - var common = this.ajaxRequest.responseXML.getElementsByTagName("common")[0]; - data.font = info.attributes.getNamedItem("face").nodeValue; - data.size = parseInt(info.attributes.getNamedItem("size").nodeValue, 10); - data.lineHeight = parseInt(common.attributes.getNamedItem("lineHeight").nodeValue, 10); + var info = this.ajaxRequest.responseXML.getElementsByTagName('info')[0]; + var common = this.ajaxRequest.responseXML.getElementsByTagName('common')[0]; + data.font = info.attributes.getNamedItem('face').nodeValue; + data.size = parseInt(info.attributes.getNamedItem('size').nodeValue, 10); + data.lineHeight = parseInt(common.attributes.getNamedItem('lineHeight').nodeValue, 10); data.chars = {}; //parse letters - var letters = this.ajaxRequest.responseXML.getElementsByTagName("char"); + var letters = this.ajaxRequest.responseXML.getElementsByTagName('char'); for (var i = 0; i < letters.length; i++) { - var charCode = parseInt(letters[i].attributes.getNamedItem("id").nodeValue, 10); + var charCode = parseInt(letters[i].attributes.getNamedItem('id').nodeValue, 10); var textureRect = new PIXI.Rectangle( - parseInt(letters[i].attributes.getNamedItem("x").nodeValue, 10), - parseInt(letters[i].attributes.getNamedItem("y").nodeValue, 10), - parseInt(letters[i].attributes.getNamedItem("width").nodeValue, 10), - parseInt(letters[i].attributes.getNamedItem("height").nodeValue, 10) + parseInt(letters[i].attributes.getNamedItem('x').nodeValue, 10), + parseInt(letters[i].attributes.getNamedItem('y').nodeValue, 10), + parseInt(letters[i].attributes.getNamedItem('width').nodeValue, 10), + parseInt(letters[i].attributes.getNamedItem('height').nodeValue, 10) ); data.chars[charCode] = { - xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), - yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), - xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), + xOffset: parseInt(letters[i].attributes.getNamedItem('xoffset').nodeValue, 10), + yOffset: parseInt(letters[i].attributes.getNamedItem('yoffset').nodeValue, 10), + xAdvance: parseInt(letters[i].attributes.getNamedItem('xadvance').nodeValue, 10), kerning: {}, texture: PIXI.TextureCache[charCode] = new PIXI.Texture(this.texture, textureRect) @@ -300,12 +302,12 @@ PIXI.BitmapFontLoader.prototype.onXMLLoaded = function() } //parse kernings - var kernings = this.ajaxRequest.responseXML.getElementsByTagName("kerning"); + var kernings = this.ajaxRequest.responseXML.getElementsByTagName('kerning'); for (i = 0; i < kernings.length; i++) { - var first = parseInt(kernings[i].attributes.getNamedItem("first").nodeValue, 10); - var second = parseInt(kernings[i].attributes.getNamedItem("second").nodeValue, 10); - var amount = parseInt(kernings[i].attributes.getNamedItem("amount").nodeValue, 10); + var first = parseInt(kernings[i].attributes.getNamedItem('first').nodeValue, 10); + var second = parseInt(kernings[i].attributes.getNamedItem('second').nodeValue, 10); + var amount = parseInt(kernings[i].attributes.getNamedItem('amount').nodeValue, 10); data.chars[second].kerning[first] = amount; @@ -314,7 +316,7 @@ PIXI.BitmapFontLoader.prototype.onXMLLoaded = function() PIXI.BitmapText.fonts[data.font] = data; var scope = this; - image.addEventListener("loaded", function() { + image.addEventListener('loaded', function() { scope.onLoaded(); }); image.load(); @@ -330,7 +332,7 @@ PIXI.BitmapFontLoader.prototype.onXMLLoaded = function() */ PIXI.BitmapFontLoader.prototype.onLoaded = function() { - this.dispatchEvent({type: "loaded", content: this}); + this.dispatchEvent({type: 'loaded', content: this}); }; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index d7744fc..78cb9eb 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,7 +177,7 @@ */ /** - * The image loader class is responsible for loading images file formats ("jpeg", "jpg", "png" and "gif") + * The image loader class is responsible for loading images file formats ('jpeg', 'jpg', 'png' and 'gif') * Once the image has been loaded it is stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() * When loaded this class will dispatch a 'loaded' event * @@ -218,7 +220,7 @@ PIXI.ImageLoader.prototype.load = function() if(!this.texture.baseTexture.hasLoaded) { var scope = this; - this.texture.baseTexture.addEventListener("loaded", function() + this.texture.baseTexture.addEventListener('loaded', function() { scope.onLoaded(); }); @@ -237,7 +239,7 @@ PIXI.ImageLoader.prototype.load = function() */ PIXI.ImageLoader.prototype.onLoaded = function() { - this.dispatchEvent({type: "loaded", content: this}); + this.dispatchEvent({type: 'loaded', content: this}); }; /** @@ -247,7 +249,7 @@ PIXI.ImageLoader.prototype.onLoaded = function() * @method loadFramedSpriteSheet * @param frameWidth {Number} with of each frame * @param frameHeight {Number} height of each frame - * @param textureName {String} if given, the frames will be cached in <textureName>-<ord> format + * @param textureName {String} if given, the frames will be cached in <textureName>-<ord> format */ PIXI.ImageLoader.prototype.loadFramedSpriteSheet = function(frameWidth, frameHeight, textureName) { @@ -268,14 +270,14 @@ PIXI.ImageLoader.prototype.loadFramedSpriteSheet = function(frameWidth, frameHei }); this.frames.push(texture); - if (textureName) PIXI.TextureCache[textureName+'-'+i] = texture; + if (textureName) PIXI.TextureCache[textureName + '-' + i] = texture; } } if(!this.texture.baseTexture.hasLoaded) { var scope = this; - this.texture.baseTexture.addEventListener("loaded", function() { + this.texture.baseTexture.addEventListener('loaded', function() { scope.onLoaded(); }); } @@ -284,6 +286,7 @@ PIXI.ImageLoader.prototype.loadFramedSpriteSheet = function(frameWidth, frameHei this.onLoaded(); } }; +
    diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html index 292eab2..ed786d6 100644 --- a/docs/files/src_pixi_loaders_JsonLoader.js.html +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -176,8 +178,8 @@ /** * The json file loader is used to load in JSON data and parsing it - * When loaded this class will dispatch a "loaded" event - * If load failed this class will dispatch a "error" event + * When loaded this class will dispatch a 'loaded' event + * If load failed this class will dispatch a 'error' event * * @class JsonLoader * @uses EventTarget @@ -186,41 +188,41 @@ * @param crossorigin {Boolean} Whether requests should be treated as crossorigin */ PIXI.JsonLoader = function (url, crossorigin) { - PIXI.EventTarget.call(this); + PIXI.EventTarget.call(this); - /** - * The url of the bitmap font data - * - * @property url - * @type String - */ - this.url = url; + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; - /** - * Whether the requests should be treated as cross origin - * - * @property crossorigin - * @type Boolean - */ - this.crossorigin = crossorigin; + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; - /** - * [read-only] The base url of the bitmap font data - * - * @property baseUrl - * @type String - * @readOnly - */ - this.baseUrl = url.replace(/[^\/]*$/, ""); + /** + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ + this.baseUrl = url.replace(/[^\/]*$/, ''); - /** - * [read-only] Whether the data has loaded yet - * - * @property loaded - * @type Boolean - * @readOnly - */ - this.loaded = false; + /** + * [read-only] Whether the data has loaded yet + * + * @property loaded + * @type Boolean + * @readOnly + */ + this.loaded = false; }; @@ -233,15 +235,15 @@ PIXI.JsonLoader.prototype.constructor = PIXI.JsonLoader; * @method load */ PIXI.JsonLoader.prototype.load = function () { - this.ajaxRequest = new AjaxRequest(); - var scope = this; - this.ajaxRequest.onreadystatechange = function () { - scope.onJSONLoaded(); - }; + this.ajaxRequest = new PIXI.AjaxRequest(); + var scope = this; + this.ajaxRequest.onreadystatechange = function () { + scope.onJSONLoaded(); + }; - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null); + this.ajaxRequest.open('GET', this.url, true); + if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType('application/json'); + this.ajaxRequest.send(null); }; /** @@ -251,62 +253,72 @@ PIXI.JsonLoader.prototype.load = function () { * @private */ PIXI.JsonLoader.prototype.onJSONLoaded = function () { - if (this.ajaxRequest.readyState == 4) { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) { - this.json = JSON.parse(this.ajaxRequest.responseText); + if (this.ajaxRequest.readyState === 4) { + if (this.ajaxRequest.status === 200 || window.location.protocol.indexOf('http') === -1) { + this.json = JSON.parse(this.ajaxRequest.responseText); - if(this.json.frames) - { - // sprite sheet - var scope = this; - var textureUrl = this.baseUrl + this.json.meta.image; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - var frameData = this.json.frames; + if(this.json.frames) + { + // sprite sheet + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - this.texture = image.texture.baseTexture; - image.addEventListener("loaded", function (event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener('loaded', function() { + scope.onLoaded(); + }); - for (var i in frameData) { - var rect = frameData[i].frame; - if (rect) { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { - x: rect.x, - y: rect.y, - width: rect.w, - height: rect.h - }); - if (frameData[i].trimmed) { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); - image.load(); + // check to see ifthe sprite ha been trimmed.. + if (frameData[i].trimmed) { - } - else if(this.json.bones) - { - // spine animation - var spineJsonParser = new spine.SkeletonJson(); - var skeletonData = spineJsonParser.readSkeletonData(this.json); - PIXI.AnimCache[this.url] = skeletonData; - this.onLoaded(); - } - else - { - this.onLoaded(); - } - } - else - { - this.onError(); - } - } + var texture = PIXI.TextureCache[i]; + + texture.trimmed = true; + + var actualSize = frameData[i].sourceSize; + var realSize = frameData[i].spriteSourceSize; + + texture.trim.x = realSize.x; + texture.trim.y = realSize.y; + texture.trim.realWidth = actualSize.w; + texture.trim.realHeight = actualSize.h; + } + } + } + + image.load(); + + } + else if(this.json.bones) + { + // spine animation + var spineJsonParser = new spine.SkeletonJson(); + var skeletonData = spineJsonParser.readSkeletonData(this.json); + PIXI.AnimCache[this.url] = skeletonData; + this.onLoaded(); + } + else + { + this.onLoaded(); + } + } + else + { + this.onError(); + } + } }; /** @@ -316,11 +328,11 @@ PIXI.JsonLoader.prototype.onJSONLoaded = function () { * @private */ PIXI.JsonLoader.prototype.onLoaded = function () { - this.loaded = true; - this.dispatchEvent({ - type: "loaded", - content: this - }); + this.loaded = true; + this.dispatchEvent({ + type: 'loaded', + content: this + }); }; /** @@ -330,10 +342,10 @@ PIXI.JsonLoader.prototype.onLoaded = function () { * @private */ PIXI.JsonLoader.prototype.onError = function () { - this.dispatchEvent({ - type: "error", - content: this - }); + this.dispatchEvent({ + type: 'error', + content: this + }); };
    diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html index 0590ea8..9d33eac 100644 --- a/docs/files/src_pixi_loaders_SpineLoader.js.html +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -195,33 +197,33 @@ */ PIXI.SpineLoader = function(url, crossorigin) { - PIXI.EventTarget.call(this); + PIXI.EventTarget.call(this); - /** - * The url of the bitmap font data - * - * @property url - * @type String - */ - this.url = url; + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; - /** - * Whether the requests should be treated as cross origin - * - * @property crossorigin - * @type Boolean - */ - this.crossorigin = crossorigin; + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; - /** - * [read-only] Whether the data has loaded yet - * - * @property loaded - * @type Boolean - * @readOnly - */ - this.loaded = false; -} + /** + * [read-only] Whether the data has loaded yet + * + * @property loaded + * @type Boolean + * @readOnly + */ + this.loaded = false; +}; PIXI.SpineLoader.prototype.constructor = PIXI.SpineLoader; @@ -232,13 +234,13 @@ PIXI.SpineLoader.prototype.constructor = PIXI.SpineLoader; */ PIXI.SpineLoader.prototype.load = function () { - var scope = this; - var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); - jsonLoader.addEventListener("loaded", function (event) { - scope.json = event.content.json; - scope.onJSONLoaded(); - }); - jsonLoader.load(); + var scope = this; + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; + scope.onJSONLoaded(); + }); + jsonLoader.load(); }; /** @@ -247,13 +249,13 @@ PIXI.SpineLoader.prototype.load = function () { * @method onJSONLoaded * @private */ -PIXI.SpineLoader.prototype.onJSONLoaded = function (event) { - var spineJsonParser = new spine.SkeletonJson(); - var skeletonData = spineJsonParser.readSkeletonData(this.json); +PIXI.SpineLoader.prototype.onJSONLoaded = function () { + var spineJsonParser = new spine.SkeletonJson(); + var skeletonData = spineJsonParser.readSkeletonData(this.json); - PIXI.AnimCache[this.url] = skeletonData; + PIXI.AnimCache[this.url] = skeletonData; - this.onLoaded(); + this.onLoaded(); }; /** @@ -263,7 +265,7 @@ PIXI.SpineLoader.prototype.onJSONLoaded = function (event) { * @private */ PIXI.SpineLoader.prototype.onLoaded = function () { - this.loaded = true; + this.loaded = true; this.dispatchEvent({type: "loaded", content: this}); }; diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 7ec53e4..642a3eb 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -176,12 +178,12 @@ /** * The sprite sheet loader is used to load in JSON sprite sheet data - * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the "JSON" format + * To generate the data you can use http://www.codeandweb.com/texturepacker and publish the 'JSON' format * There is a free version so thats nice, although the paid version is great value for money. - * It is highly recommended to use Sprite sheets (also know as texture atlas") as it means sprite"s can be batched and drawn together for highly increased rendering speed. + * It is highly recommended to use Sprite sheets (also know as texture atlas') as it means sprite's can be batched and drawn together for highly increased rendering speed. * Once the data has been loaded the frames are stored in the PIXI texture cache and can be accessed though PIXI.Texture.fromFrameId() and PIXI.Sprite.fromFromeId() * This loader will also load the image file that the Spritesheet points to as well as the data. - * When loaded this class will dispatch a "loaded" event + * When loaded this class will dispatch a 'loaded' event * * @class SpriteSheetLoader * @uses EventTarget @@ -189,39 +191,38 @@ * @param url {String} The url of the sprite sheet JSON file * @param crossorigin {Boolean} Whether requests should be treated as crossorigin */ - PIXI.SpriteSheetLoader = function (url, crossorigin) { - /* - * i use texture packer to load the assets.. - * http://www.codeandweb.com/texturepacker - * make sure to set the format as "JSON" - */ - PIXI.EventTarget.call(this); + /* + * i use texture packer to load the assets.. + * http://www.codeandweb.com/texturepacker + * make sure to set the format as 'JSON' + */ + PIXI.EventTarget.call(this); - /** - * The url of the bitmap font data - * - * @property url - * @type String - */ - this.url = url; + /** + * The url of the bitmap font data + * + * @property url + * @type String + */ + this.url = url; - /** - * Whether the requests should be treated as cross origin - * - * @property crossorigin - * @type Boolean - */ - this.crossorigin = crossorigin; + /** + * Whether the requests should be treated as cross origin + * + * @property crossorigin + * @type Boolean + */ + this.crossorigin = crossorigin; - /** - * [read-only] The base url of the bitmap font data - * - * @property baseUrl - * @type String - * @readOnly - */ - this.baseUrl = url.replace(/[^\/]*$/, ""); + /** + * [read-only] The base url of the bitmap font data + * + * @property baseUrl + * @type String + * @readOnly + */ + this.baseUrl = url.replace(/[^\/]*$/, ''); /** * The texture being loaded @@ -237,7 +238,7 @@ PIXI.SpriteSheetLoader = function (url, crossorigin) { * @property frames * @type Object */ - this.frames = {}; + this.frames = {}; }; // constructor @@ -249,13 +250,13 @@ PIXI.SpriteSheetLoader.prototype.constructor = PIXI.SpriteSheetLoader; * @method load */ PIXI.SpriteSheetLoader.prototype.load = function () { - var scope = this; - var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); - jsonLoader.addEventListener("loaded", function (event) { - scope.json = event.content.json; - scope.onJSONLoaded(); - }); - jsonLoader.load(); + var scope = this; + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener('loaded', function (event) { + scope.json = event.content.json; + scope.onJSONLoaded(); + }); + jsonLoader.load(); }; /** @@ -265,36 +266,37 @@ PIXI.SpriteSheetLoader.prototype.load = function () { * @private */ PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { - var scope = this; - var textureUrl = this.baseUrl + this.json.meta.image; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - var frameData = this.json.frames; + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - this.texture = image.texture.baseTexture; - image.addEventListener("loaded", function (event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener('loaded', function () { + scope.onLoaded(); + }); - for (var i in frameData) { - var rect = frameData[i].frame; - if (rect) { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { - x: rect.x, - y: rect.y, - width: rect.w, - height: rect.h - }); - if (frameData[i].trimmed) { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); + image.load(); }; + /** * Invoke when all files are loaded (json and texture) * @@ -302,10 +304,10 @@ PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { * @private */ PIXI.SpriteSheetLoader.prototype.onLoaded = function () { - this.dispatchEvent({ - type: "loaded", - content: this - }); + this.dispatchEvent({ + type: 'loaded', + content: this + }); }; diff --git a/docs/files/src_pixi_primitives_Graphics.js.html b/docs/files/src_pixi_primitives_Graphics.js.html index 778e5be..8d743f6 100644 --- a/docs/files/src_pixi_primitives_Graphics.js.html +++ b/docs/files/src_pixi_primitives_Graphics.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -186,9 +188,9 @@ */ PIXI.Graphics = function() { - PIXI.DisplayObjectContainer.call( this ); + PIXI.DisplayObjectContainer.call( this ); - this.renderable = true; + this.renderable = true; /** * The alpha of the fill of this graphics object @@ -196,7 +198,7 @@ PIXI.Graphics = function() * @property fillAlpha * @type Number */ - this.fillAlpha = 1; + this.fillAlpha = 1; /** * The width of any lines drawn @@ -204,7 +206,7 @@ PIXI.Graphics = function() * @property lineWidth * @type Number */ - this.lineWidth = 0; + this.lineWidth = 0; /** * The color of any lines drawn @@ -212,7 +214,7 @@ PIXI.Graphics = function() * @property lineColor * @type String */ - this.lineColor = "black"; + this.lineColor = "black"; /** * Graphics data @@ -221,8 +223,12 @@ PIXI.Graphics = function() * @type Array * @private */ - this.graphicsData = []; + this.graphicsData = []; + this.tint = 0xFFFFFF;// * Math.random(); + + this.blendMode = PIXI.blendModes.NORMAL; + /** * Current path * @@ -230,8 +236,10 @@ PIXI.Graphics = function() * @type Object * @private */ - this.currentPath = {points:[]}; -} + this.currentPath = {points:[]}; + + this._webGL = []; +}; // constructor PIXI.Graphics.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); @@ -247,17 +255,17 @@ PIXI.Graphics.prototype.constructor = PIXI.Graphics; */ PIXI.Graphics.prototype.lineStyle = function(lineWidth, color, alpha) { - if(this.currentPath.points.length == 0)this.graphicsData.pop(); + if (!this.currentPath.points.length) this.graphicsData.pop(); - this.lineWidth = lineWidth || 0; - this.lineColor = color || 0; - this.lineAlpha = (alpha == undefined) ? 1 : alpha; + this.lineWidth = lineWidth || 0; + this.lineColor = color || 0; + this.lineAlpha = (arguments.length < 3) ? 1 : alpha; - this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, - fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, points:[], type:PIXI.Graphics.POLY}; + this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, + fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, points:[], type:PIXI.Graphics.POLY}; - this.graphicsData.push(this.currentPath); -} + this.graphicsData.push(this.currentPath); +}; /** * Moves the current drawing position to (x, y). @@ -268,15 +276,15 @@ PIXI.Graphics.prototype.lineStyle = function(lineWidth, color, alpha) */ PIXI.Graphics.prototype.moveTo = function(x, y) { - if(this.currentPath.points.length == 0)this.graphicsData.pop(); + if (!this.currentPath.points.length) this.graphicsData.pop(); - this.currentPath = this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, - fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, points:[], type:PIXI.Graphics.POLY}; + this.currentPath = this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, + fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, points:[], type:PIXI.Graphics.POLY}; - this.currentPath.points.push(x, y); + this.currentPath.points.push(x, y); - this.graphicsData.push(this.currentPath); -} + this.graphicsData.push(this.currentPath); +}; /** * Draws a line using the current line style from the current drawing position to (x, y); @@ -288,9 +296,9 @@ PIXI.Graphics.prototype.moveTo = function(x, y) */ PIXI.Graphics.prototype.lineTo = function(x, y) { - this.currentPath.points.push(x, y); - this.dirty = true; -} + this.currentPath.points.push(x, y); + this.dirty = true; +}; /** * Specifies a simple one-color fill that subsequent calls to other Graphics methods @@ -302,10 +310,11 @@ PIXI.Graphics.prototype.lineTo = function(x, y) */ PIXI.Graphics.prototype.beginFill = function(color, alpha) { - this.filling = true; - this.fillColor = color || 0; - this.fillAlpha = (alpha == undefined) ? 1 : alpha; -} + + this.filling = true; + this.fillColor = color || 0; + this.fillAlpha = (arguments.length < 2) ? 1 : alpha; +}; /** * Applies a fill to the lines and shapes that were added since the last call to the beginFill() method. @@ -314,10 +323,10 @@ PIXI.Graphics.prototype.beginFill = function(color, alpha) */ PIXI.Graphics.prototype.endFill = function() { - this.filling = false; - this.fillColor = null; - this.fillAlpha = 1; -} + this.filling = false; + this.fillColor = null; + this.fillAlpha = 1; +}; /** * @method drawRect @@ -329,15 +338,15 @@ PIXI.Graphics.prototype.endFill = function() */ PIXI.Graphics.prototype.drawRect = function( x, y, width, height ) { - if(this.currentPath.points.length == 0)this.graphicsData.pop(); + if (!this.currentPath.points.length) this.graphicsData.pop(); - this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, - fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, - points:[x, y, width, height], type:PIXI.Graphics.RECT}; + this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, + fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, + points:[x, y, width, height], type:PIXI.Graphics.RECT}; - this.graphicsData.push(this.currentPath); - this.dirty = true; -} + this.graphicsData.push(this.currentPath); + this.dirty = true; +}; /** * Draws a circle. @@ -349,15 +358,16 @@ PIXI.Graphics.prototype.drawRect = function( x, y, width, height ) */ PIXI.Graphics.prototype.drawCircle = function( x, y, radius) { - if(this.currentPath.points.length == 0)this.graphicsData.pop(); - this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, - fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, - points:[x, y, radius, radius], type:PIXI.Graphics.CIRC}; + if (!this.currentPath.points.length) this.graphicsData.pop(); - this.graphicsData.push(this.currentPath); - this.dirty = true; -} + this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, + fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, + points:[x, y, radius, radius], type:PIXI.Graphics.CIRC}; + + this.graphicsData.push(this.currentPath); + this.dirty = true; +}; /** * Draws an ellipse. @@ -370,15 +380,16 @@ PIXI.Graphics.prototype.drawCircle = function( x, y, radius) */ PIXI.Graphics.prototype.drawEllipse = function( x, y, width, height) { - if(this.currentPath.points.length == 0)this.graphicsData.pop(); - this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, - fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, - points:[x, y, width, height], type:PIXI.Graphics.ELIP}; + if (!this.currentPath.points.length) this.graphicsData.pop(); - this.graphicsData.push(this.currentPath); - this.dirty = true; -} + this.currentPath = {lineWidth:this.lineWidth, lineColor:this.lineColor, lineAlpha:this.lineAlpha, + fillColor:this.fillColor, fillAlpha:this.fillAlpha, fill:this.filling, + points:[x, y, width, height], type:PIXI.Graphics.ELIP}; + + this.graphicsData.push(this.currentPath); + this.dirty = true; +}; /** * Clears the graphics that were drawn to this Graphics object, and resets fill and line style settings. @@ -387,88 +398,189 @@ PIXI.Graphics.prototype.drawEllipse = function( x, y, width, height) */ PIXI.Graphics.prototype.clear = function() { - this.lineWidth = 0; - this.filling = false; + this.lineWidth = 0; + this.filling = false; - this.dirty = true; - this.clearDirty = true; - this.graphicsData = []; + this.dirty = true; + this.clearDirty = true; + this.graphicsData = []; - this.bounds = null//new PIXI.Rectangle(); -} + this.bounds = null; //new PIXI.Rectangle(); +}; -PIXI.Graphics.prototype.updateFilterBounds = function() +PIXI.Graphics.prototype._renderWebGL = function(renderSession) { - if(!this.bounds) - { - var minX = Infinity; - var maxX = -Infinity; + // 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 || this.isMask === true)return; + + renderSession.spriteBatch.stop(); - var minY = Infinity; - var maxY = -Infinity; + // check blend mode + if(this.blendMode !== renderSession.spriteBatch.currentBlendMode) + { + this.spriteBatch.currentBlendMode = this.blendMode; + var blendModeWebGL = PIXI.blendModesWebGL[renderSession.spriteBatch.currentBlendMode]; + this.spriteBatch.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + } - var points, x, y; + PIXI.WebGLGraphics.renderGraphics(this, renderSession); + + renderSession.spriteBatch.start(); +}; - for (var i = 0; i < this.graphicsData.length; i++) { - +PIXI.Graphics.prototype._renderCanvas = 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 || this.isMask === true)return; + + var context = renderSession.context; + var transform = this.worldTransform; + + if(this.blendMode !== renderSession.currentBlendMode) + { + renderSession.currentBlendMode = this.blendMode; + context.globalCompositeOperation = PIXI.blendModesCanvas[renderSession.currentBlendMode]; + } - var data = this.graphicsData[i]; - var type = data.type; - var lineWidth = data.lineWidth; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + PIXI.CanvasGraphics.renderGraphics(this, context); +}; - points = data.points; +PIXI.Graphics.prototype.getBounds = function() +{ + if(!this.bounds)this.updateBounds(); - if(type === PIXI.Graphics.RECT) - { - x = points.x - lineWidth/2; - y = points.y - lineWidth/2; - var width = points.width + lineWidth; - var height = points.height + lineWidth; + var w0 = this.bounds.x; + var w1 = this.bounds.y; - minX = x < minX ? x : minX; - maxX = x + width > maxX ? x + width : maxX; + var h0 = this.bounds.width + this.bounds.x; + var h1 = this.bounds.height + this.bounds.y; - minY = y < minY ? x : minY; - maxY = y + height > maxY ? y + height : maxY; - } - else if(type === PIXI.Graphics.CIRC || type === PIXI.Graphics.ELIP) - { - x = points.x; - y = points.y; - var radius = points.radius + lineWidth/2; - - minX = x - radius < minX ? x - radius : minX; - maxX = x + radius > maxX ? x + radius : maxX; + var worldTransform = this.worldTransform; - minY = y - radius < minY ? y - radius : minY; - maxY = y + radius > maxY ? y + radius : maxY; - } - else - { - // POLY - for (var j = 0; j < points.length; j+=2) - { - - x = points[j]; - y = points[j+1]; + var a = worldTransform[0]; + var b = worldTransform[3]; + var c = worldTransform[1]; + var d = worldTransform[4]; + var tx = worldTransform[2]; + var ty = worldTransform[5]; - minX = x-lineWidth < minX ? x-lineWidth : minX; - maxX = x+lineWidth > maxX ? x+lineWidth : maxX; + var x1 = a * w1 + c * h1 + tx; + var y1 = d * h1 + b * w1 + ty; - minY = y-lineWidth < minY ? y-lineWidth : minY; - maxY = y+lineWidth > maxY ? y+lineWidth : maxY; - }; - } + var x2 = a * w0 + c * h1 + tx; + var y2 = d * h1 + b * w0 + ty; - }; + var x3 = a * w0 + c * h0 + tx; + var y3 = d * h0 + b * w0 + ty; - this.bounds = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY); + var x4 = a * w1 + c * h0 + tx; + var y4 = d * h0 + b * w1 + ty; - } + var maxX = -Infinity; + var maxY = -Infinity; -// console.log(this.bounds); -} + var minX = Infinity; + var minY = Infinity; + + minX = x1 < minX ? x1 : minX; + minX = x2 < minX ? x2 : minX; + minX = x3 < minX ? x3 : minX; + minX = x4 < minX ? x4 : minX; + + minY = y1 < minY ? y1 : minY; + minY = y2 < minY ? y2 : minY; + minY = y3 < minY ? y3 : minY; + minY = y4 < minY ? y4 : minY; + + maxX = x1 > maxX ? x1 : maxX; + maxX = x2 > maxX ? x2 : maxX; + maxX = x3 > maxX ? x3 : maxX; + maxX = x4 > maxX ? x4 : maxX; + + maxY = y1 > maxY ? y1 : maxY; + maxY = y2 > maxY ? y2 : maxY; + maxY = y3 > maxY ? y3 : maxY; + maxY = y4 > maxY ? y4 : maxY; + + var bounds = this._bounds; + + bounds.x = minX; + bounds.width = maxX - minX; + + bounds.y = minY; + bounds.height = maxY - minY; + + return bounds; +}; + +PIXI.Graphics.prototype.updateBounds = function() +{ + + + var minX = Infinity; + var maxX = -Infinity; + + var minY = Infinity; + var maxY = -Infinity; + + var points, x, y; + + for (var i = 0; i < this.graphicsData.length; i++) { + var data = this.graphicsData[i]; + var type = data.type; + var lineWidth = data.lineWidth; + + points = data.points; + + if(type === PIXI.Graphics.RECT) + { + x = points.x - lineWidth/2; + y = points.y - lineWidth/2; + var width = points.width + lineWidth; + var height = points.height + lineWidth; + + minX = x < minX ? x : minX; + maxX = x + width > maxX ? x + width : maxX; + + minY = y < minY ? x : minY; + maxY = y + height > maxY ? y + height : maxY; + } + else if(type === PIXI.Graphics.CIRC || type === PIXI.Graphics.ELIP) + { + x = points.x; + y = points.y; + var radius = points.radius + lineWidth/2; + + minX = x - radius < minX ? x - radius : minX; + maxX = x + radius > maxX ? x + radius : maxX; + + minY = y - radius < minY ? y - radius : minY; + maxY = y + radius > maxY ? y + radius : maxY; + } + else + { + // POLY + for (var j = 0; j < points.length; j+=2) + { + + x = points[j]; + y = points[j+1]; + + minX = x-lineWidth < minX ? x-lineWidth : minX; + maxX = x+lineWidth > maxX ? x+lineWidth : maxX; + + minY = y-lineWidth < minY ? y-lineWidth : minY; + maxY = y+lineWidth > maxY ? y+lineWidth : maxY; + } + } + } + + this.bounds = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY); + +// console.log(this.bounds); +}; // SOME TYPES: PIXI.Graphics.POLY = 0; diff --git a/docs/files/src_pixi_renderers_canvas_CanvasGraphics.js.html b/docs/files/src_pixi_renderers_canvas_CanvasGraphics.js.html index 920213e..a9eed2b 100644 --- a/docs/files/src_pixi_renderers_canvas_CanvasGraphics.js.html +++ b/docs/files/src_pixi_renderers_canvas_CanvasGraphics.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -183,7 +185,7 @@ PIXI.CanvasGraphics = function() { -} +}; /* @@ -197,128 +199,128 @@ PIXI.CanvasGraphics = function() */ PIXI.CanvasGraphics.renderGraphics = function(graphics, context) { - var worldAlpha = graphics.worldAlpha; + var worldAlpha = graphics.worldAlpha; + var color = ''; - for (var i=0; i < graphics.graphicsData.length; i++) - { - var data = graphics.graphicsData[i]; - var points = data.points; + for (var i = 0; i < graphics.graphicsData.length; i++) + { + var data = graphics.graphicsData[i]; + var points = data.points; - context.strokeStyle = color = '#' + ('00000' + ( data.lineColor | 0).toString(16)).substr(-6); + context.strokeStyle = color = '#' + ('00000' + ( data.lineColor | 0).toString(16)).substr(-6); - context.lineWidth = data.lineWidth; + context.lineWidth = data.lineWidth; - if(data.type == PIXI.Graphics.POLY) - { - context.beginPath(); + if(data.type === PIXI.Graphics.POLY) + { + context.beginPath(); - context.moveTo(points[0], points[1]); + context.moveTo(points[0], points[1]); - for (var j=1; j < points.length/2; j++) - { - context.lineTo(points[j * 2], points[j * 2 + 1]); - } + for (var j=1; j < points.length/2; j++) + { + context.lineTo(points[j * 2], points[j * 2 + 1]); + } - // if the first and last point are the same close the path - much neater :) - if(points[0] == points[points.length-2] && points[1] == points[points.length-1]) - { - context.closePath(); - } + // if the first and last point are the same close the path - much neater :) + if(points[0] === points[points.length-2] && points[1] === points[points.length-1]) + { + context.closePath(); + } - if(data.fill) - { - context.globalAlpha = data.fillAlpha * worldAlpha; - context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); - context.fill(); - } - if(data.lineWidth) - { - context.globalAlpha = data.lineAlpha * worldAlpha; - context.stroke(); - } - } - else if(data.type == PIXI.Graphics.RECT) - { + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.stroke(); + } + } + else if(data.type === PIXI.Graphics.RECT) + { - if(data.fillColor || data.fillColor === 0) - { - context.globalAlpha = data.fillAlpha * worldAlpha; - context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); - context.fillRect(points[0], points[1], points[2], points[3]); + if(data.fillColor || data.fillColor === 0) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); + context.fillRect(points[0], points[1], points[2], points[3]); - } - if(data.lineWidth) - { - context.globalAlpha = data.lineAlpha * worldAlpha; - context.strokeRect(points[0], points[1], points[2], points[3]); - } + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.strokeRect(points[0], points[1], points[2], points[3]); + } - } - else if(data.type == PIXI.Graphics.CIRC) - { - // TODO - need to be Undefined! - context.beginPath(); - context.arc(points[0], points[1], points[2],0,2*Math.PI); - context.closePath(); + } + else if(data.type === PIXI.Graphics.CIRC) + { + // TODO - need to be Undefined! + context.beginPath(); + context.arc(points[0], points[1], points[2],0,2*Math.PI); + context.closePath(); - if(data.fill) - { - context.globalAlpha = data.fillAlpha * worldAlpha; - context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); - context.fill(); - } - if(data.lineWidth) - { - context.globalAlpha = data.lineAlpha * worldAlpha; - context.stroke(); - } - } - else if(data.type == PIXI.Graphics.ELIP) - { + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.stroke(); + } + } + else if(data.type === PIXI.Graphics.ELIP) + { - // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - var ellipseData = data.points; + var ellipseData = data.points; - var w = ellipseData[2] * 2; - var h = ellipseData[3] * 2; + var w = ellipseData[2] * 2; + var h = ellipseData[3] * 2; - var x = ellipseData[0] - w/2; - var y = ellipseData[1] - h/2; + var x = ellipseData[0] - w/2; + var y = ellipseData[1] - h/2; - context.beginPath(); + context.beginPath(); - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + var kappa = 0.5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle - context.moveTo(x, ym); - context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + context.moveTo(x, ym); + context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - context.closePath(); + context.closePath(); - if(data.fill) - { - context.globalAlpha = data.fillAlpha * worldAlpha; - context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); - context.fill(); - } - if(data.lineWidth) - { - context.globalAlpha = data.lineAlpha * worldAlpha; - context.stroke(); - } - } - - }; -} + if(data.fill) + { + context.globalAlpha = data.fillAlpha * worldAlpha; + context.fillStyle = color = '#' + ('00000' + ( data.fillColor | 0).toString(16)).substr(-6); + context.fill(); + } + if(data.lineWidth) + { + context.globalAlpha = data.lineAlpha * worldAlpha; + context.stroke(); + } + } + } +}; /* * Renders a graphics mask @@ -331,83 +333,82 @@ PIXI.CanvasGraphics.renderGraphics = function(graphics, context) */ PIXI.CanvasGraphics.renderGraphicsMask = function(graphics, context) { - var worldAlpha = graphics.worldAlpha; + var len = graphics.graphicsData.length; - var len = graphics.graphicsData.length; - if(len > 1) - { - len = 1; - console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object") - } + if(len === 0) return; - for (var i=0; i < 1; i++) - { - var data = graphics.graphicsData[i]; - var points = data.points; + if(len > 1) + { + len = 1; + window.console.log('Pixi.js warning: masks in canvas can only mask using the first path in the graphics object'); + } - if(data.type == PIXI.Graphics.POLY) - { - context.beginPath(); - context.moveTo(points[0], points[1]); + for (var i = 0; i < 1; i++) + { + var data = graphics.graphicsData[i]; + var points = data.points; - for (var j=1; j < points.length/2; j++) - { - context.lineTo(points[j * 2], points[j * 2 + 1]); - } + if(data.type === PIXI.Graphics.POLY) + { + context.beginPath(); + context.moveTo(points[0], points[1]); - // if the first and last point are the same close the path - much neater :) - if(points[0] == points[points.length-2] && points[1] == points[points.length-1]) - { - context.closePath(); - } + for (var j=1; j < points.length/2; j++) + { + context.lineTo(points[j * 2], points[j * 2 + 1]); + } - } - else if(data.type == PIXI.Graphics.RECT) - { - context.beginPath(); - context.rect(points[0], points[1], points[2], points[3]); - context.closePath(); - } - else if(data.type == PIXI.Graphics.CIRC) - { - // TODO - need to be Undefined! - context.beginPath(); - context.arc(points[0], points[1], points[2],0,2*Math.PI); - context.closePath(); - } - else if(data.type == PIXI.Graphics.ELIP) - { + // if the first and last point are the same close the path - much neater :) + if(points[0] === points[points.length-2] && points[1] === points[points.length-1]) + { + context.closePath(); + } - // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - var ellipseData = data.points; + } + else if(data.type === PIXI.Graphics.RECT) + { + context.beginPath(); + context.rect(points[0], points[1], points[2], points[3]); + context.closePath(); + } + else if(data.type === PIXI.Graphics.CIRC) + { + // TODO - need to be Undefined! + context.beginPath(); + context.arc(points[0], points[1], points[2],0,2*Math.PI); + context.closePath(); + } + else if(data.type === PIXI.Graphics.ELIP) + { - var w = ellipseData[2] * 2; - var h = ellipseData[3] * 2; + // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + var ellipseData = data.points; - var x = ellipseData[0] - w/2; - var y = ellipseData[1] - h/2; + var w = ellipseData[2] * 2; + var h = ellipseData[3] * 2; - context.beginPath(); + var x = ellipseData[0] - w/2; + var y = ellipseData[1] - h/2; - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + context.beginPath(); - context.moveTo(x, ym); - context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - context.closePath(); - } + var kappa = 0.5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle - - }; -} + context.moveTo(x, ym); + context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + context.closePath(); + } + } +};
    diff --git a/docs/files/src_pixi_renderers_canvas_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_canvas_CanvasRenderer.js.html index 9f17324..ae7063f 100644 --- a/docs/files/src_pixi_renderers_canvas_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_canvas_CanvasRenderer.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,6 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - /** * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. * Dont forget to add the view to your DOM or you will not see anything :) @@ -188,49 +189,95 @@ */ PIXI.CanvasRenderer = function(width, height, view, transparent) { - this.transparent = transparent; + PIXI.defaultRenderer = PIXI.defaultRenderer || this; - /** - * The width of the canvas view - * - * @property width - * @type Number - * @default 800 - */ - this.width = width || 800; + this.type = PIXI.CANVAS_RENDERER; - /** - * The height of the canvas view - * - * @property height - * @type Number - * @default 600 - */ - this.height = height || 600; + this.transparent = transparent; - /** - * The canvas element that the everything is drawn to - * - * @property view - * @type Canvas - */ - this.view = view || document.createElement( 'canvas' ); + if(!PIXI.blendModesCanvas) + { + PIXI.blendModesCanvas = []; + + if(PIXI.canUseNewCanvasBlendModes()) + { + PIXI.blendModesCanvas[PIXI.blendModes.NORMAL] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.ADD] = "lighter"; //IS THIS OK??? + PIXI.blendModesCanvas[PIXI.blendModes.MULTIPLY] = "multiply"; + PIXI.blendModesCanvas[PIXI.blendModes.SCREEN] = "screen"; + } + else + { + // this means that the browser does not support the cool new blend modes in canvas "cough" ie "cough" + PIXI.blendModesCanvas[PIXI.blendModes.NORMAL] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.ADD] = "lighter"; //IS THIS OK??? + PIXI.blendModesCanvas[PIXI.blendModes.MULTIPLY] = "source-over"; + PIXI.blendModesCanvas[PIXI.blendModes.SCREEN] = "source-over"; + } + } - /** - * The canvas context that the everything is drawn to - * @property context - * @type Canvas 2d Context - */ - this.context = this.view.getContext("2d"); + /** + * The width of the canvas view + * + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + + /** + * The height of the canvas view + * + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + /** + * The canvas element that the everything is drawn to + * + * @property view + * @type Canvas + */ + this.view = view || document.createElement( "canvas" ); + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext( "2d" ); + + //some filter variables + this.smoothProperty = null; + + if("imageSmoothingEnabled" in this.context) + this.smoothProperty = "imageSmoothingEnabled"; + else if("webkitImageSmoothingEnabled" in this.context) + this.smoothProperty = "webkitImageSmoothingEnabled"; + else if("mozImageSmoothingEnabled" in this.context) + this.smoothProperty = "mozImageSmoothingEnabled"; + else if("oImageSmoothingEnabled" in this.context) + this.smoothProperty = "oImageSmoothingEnabled"; + + this.scaleMode = null; + + this.refresh = true; + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; - this.refresh = true; - // hack to enable some hardware acceleration! - //this.view.style["transform"] = "translatez(0)"; - this.view.width = this.width; - this.view.height = this.height; - this.count = 0; -} + this.view.height = this.height; + this.count = 0; + + this.maskManager = new PIXI.CanvasMaskManager(); + + this.renderSession = {}; + this.renderSession.context = this.context; + this.renderSession.maskManager = this.maskManager; + +}; // constructor PIXI.CanvasRenderer.prototype.constructor = PIXI.CanvasRenderer; @@ -243,44 +290,42 @@ PIXI.CanvasRenderer.prototype.constructor = PIXI.CanvasRenderer; */ PIXI.CanvasRenderer.prototype.render = function(stage) { - - //stage.__childrenAdded = []; - //stage.__childrenRemoved = []; - - // update textures if need be - PIXI.texturesToUpdate = []; - PIXI.texturesToDestroy = []; - - PIXI.visibleCount++; - stage.updateTransform(); - - // update the background color - if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; - this.context.setTransform(1,0,0,1,0,0); - this.context.clearRect(0, 0, this.width, this.height) + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + PIXI.visibleCount++; + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor !== stage.backgroundColorString && !this.transparent) + this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height); this.renderDisplayObject(stage); //as - + // run interaction! - if(stage.interactive) - { - //need to add some events! - if(!stage._interactiveEventsAdded) - { - stage._interactiveEventsAdded = true; - stage.interactionManager.setTarget(this); - } - } - - // remove frame updates.. - if(PIXI.Texture.frameUpdates.length > 0) - { - PIXI.Texture.frameUpdates = []; - } - - -} + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +}; /** * resizes the canvas view to the specified width and height @@ -291,12 +336,12 @@ PIXI.CanvasRenderer.prototype.render = function(stage) */ PIXI.CanvasRenderer.prototype.resize = function(width, height) { - this.width = width; - this.height = height; - - this.view.width = width; - this.view.height = height; -} + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +}; /** * Renders a display object @@ -305,119 +350,15 @@ PIXI.CanvasRenderer.prototype.resize = function(width, height) * @param displayObject {DisplayObject} The displayObject to render * @private */ -PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject, context) { - // no loger recurrsive! - var transform; - var context = this.context; - - context.globalCompositeOperation = 'source-over'; - - // one the display object hits this. we can break the loop - var testObject = displayObject.last._iNext; - displayObject = displayObject.first; - - do - { - transform = displayObject.worldTransform; - - if(!displayObject.visible) - { - displayObject = displayObject.last._iNext; - continue; - } - - if(!displayObject.renderable) - { - displayObject = displayObject._iNext; - continue; - } - - if(displayObject instanceof PIXI.Sprite) - { - - var frame = displayObject.texture.frame; - - if(frame && frame.width && frame.height) - { - context.globalAlpha = displayObject.worldAlpha; - - context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); - - context.drawImage(displayObject.texture.baseTexture.source, - frame.x, - frame.y, - frame.width, - frame.height, - (displayObject.anchor.x) * -frame.width, - (displayObject.anchor.y) * -frame.height, - frame.width, - frame.height); - } - } - else if(displayObject instanceof PIXI.Strip) - { - context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) - this.renderStrip(displayObject); - } - else if(displayObject instanceof PIXI.TilingSprite) - { - context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) - this.renderTilingSprite(displayObject); - } - else if(displayObject instanceof PIXI.CustomRenderable) - { - context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); - displayObject.renderCanvas(this); - } - else if(displayObject instanceof PIXI.Graphics) - { - context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) - PIXI.CanvasGraphics.renderGraphics(displayObject, context); - } - else if(displayObject instanceof PIXI.FilterBlock) - { - if(displayObject.data instanceof PIXI.Graphics) - { - var mask = displayObject.data; + // no loger recurrsive! + //var transform; + //var context = this.context; - if(displayObject.open) - { - context.save(); - - var cacheAlpha = mask.alpha; - var maskTransform = mask.worldTransform; - - context.setTransform(maskTransform[0], maskTransform[3], maskTransform[1], maskTransform[4], maskTransform[2], maskTransform[5]) - - mask.worldAlpha = 0.5; - - context.worldAlpha = 0; - - PIXI.CanvasGraphics.renderGraphicsMask(mask, context); - context.clip(); - - mask.worldAlpha = cacheAlpha; - } - else - { - context.restore(); - } - } - else - { - // only masks supported right now! - } - } - // count++ - displayObject = displayObject._iNext; - - - } - while(displayObject != testObject) - - -} + this.renderSession.context = context || this.context; + displayObject._renderCanvas(this.renderSession); +}; /** * Renders a flat strip @@ -428,66 +369,30 @@ PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) */ PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) { - var context = this.context; - var verticies = strip.verticies; - var uvs = strip.uvs; - - var length = verticies.length/2; - this.count++; - - context.beginPath(); - for (var i=1; i < length-2; i++) - { - - // draw some triangles! - var index = i*2; - - var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; - var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; - - context.moveTo(x0, y0); - context.lineTo(x1, y1); - context.lineTo(x2, y2); - - }; - - context.fillStyle = "#FF0000"; - context.fill(); - context.closePath(); -} + var context = this.context; + var verticies = strip.verticies; -/** - * Renders a tiling sprite - * - * @method renderTilingSprite - * @param sprite {TilingSprite} The tilingsprite to render - * @private - */ -PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) -{ - var context = this.context; - - context.globalAlpha = sprite.worldAlpha; - - if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); - - context.beginPath(); - - var tilePosition = sprite.tilePosition; - var tileScale = sprite.tileScale; - - // offset - context.scale(tileScale.x,tileScale.y); - context.translate(tilePosition.x, tilePosition.y); - - context.fillStyle = sprite.__tilePattern; - context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); - - context.scale(1/tileScale.x, 1/tileScale.y); - context.translate(-tilePosition.x, -tilePosition.y); - + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + } + + context.fillStyle = "#FF0000"; + context.fill(); context.closePath(); -} +}; /** * Renders a strip @@ -498,58 +403,77 @@ PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) */ PIXI.CanvasRenderer.prototype.renderStrip = function(strip) { - var context = this.context; + var context = this.context; - // draw triangles!! - var verticies = strip.verticies; - var uvs = strip.uvs; - - var length = verticies.length/2; - this.count++; - for (var i=1; i < length-2; i++) - { - - // draw some triangles! - var index = i*2; - - var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; - var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; - - var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; - var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + var length = verticies.length/2; + this.count++; + + for (var i = 1; i < length-2; i++) + { + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + context.clip(); - context.save(); - context.beginPath(); - context.moveTo(x0, y0); - context.lineTo(x1, y1); - context.lineTo(x2, y2); - context.closePath(); - - context.clip(); - - // Compute matrix transform var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; - var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; - var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; - var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; - var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; - var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; - var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; - - - - - context.transform(delta_a/delta, delta_d/delta, - delta_b/delta, delta_e/delta, - delta_c/delta, delta_f/delta); - - context.drawImage(strip.texture.baseTexture.source, 0, 0); - context.restore(); - }; - -} + var deltaA = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var deltaB = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var deltaC = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var deltaD = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var deltaE = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var deltaF = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + context.transform(deltaA / delta, deltaD / delta, + deltaB / delta, deltaE / delta, + deltaC / delta, deltaF / delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + } +}; + +PIXI.CanvasBuffer = function(width, height) +{ + this.width = width; + this.height = height; + + this.canvas = document.createElement( "canvas" ); + this.context = this.canvas.getContext( "2d" ); + +// this.context.f + this.canvas.width = width; + this.canvas.height = height; +}; + +PIXI.CanvasBuffer.prototype.clear = function() +{ + this.context.clearRect(0,0, this.width, this.height); +}; + +PIXI.CanvasBuffer.prototype.resize = function(width, height) +{ + this.width = this.canvas.width = width; + this.height = this.canvas.height = height; +}; +
    diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_renderers_canvas_utils_CanvasMaskManager.js.html similarity index 79% rename from docs/files/src_pixi_extras_CustomRenderable.js.html rename to docs/files/src_pixi_renderers_canvas_utils_CanvasMaskManager.js.html index 8592913..b78571b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_renderers_canvas_utils_CanvasMaskManager.js.html @@ -2,7 +2,7 @@ - src/pixi/extras/CustomRenderable.js - Pixi.JS + src/pixi/renderers/canvas/utils/CanvasMaskManager.js - Pixi.JS @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -166,68 +168,44 @@
    -

    File: src/pixi/extras/CustomRenderable.js

    +

    File: src/pixi/renderers/canvas/utils/CanvasMaskManager.js

     /**
    - * @author Mat Groves http://matgroves.com/ @Doormat23
    + * @author Mat Groves
    + * 
    + * 
      */
     
    -
    -/**
    - * This object is one that will allow you to specify custom rendering functions based on render type
    - *
    - * @class CustomRenderable
    - * @extends DisplayObject
    - * @constructor
    - */
    -PIXI.CustomRenderable = function()
    +PIXI.CanvasMaskManager = function()
     {
    -	PIXI.DisplayObject.call( this );
    -	
    -	this.renderable = true;
    -}
    +    
    +};
     
    -// constructor
    -PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype );
    -PIXI.CustomRenderable.prototype.constructor = PIXI.CustomRenderable;
    -
    -/**
    - * If this object is being rendered by a CanvasRenderer it will call this callback
    - *
    - * @method renderCanvas
    - * @param renderer {CanvasRenderer} The renderer instance
    - */
    -PIXI.CustomRenderable.prototype.renderCanvas = function(renderer)
    +PIXI.CanvasMaskManager.prototype.pushMask = function(maskData, context)
     {
    -	// override!
    -}
    +    context.save();
    +    
    +    //maskData.visible = false;
    +    // maskData.alpha = 0;
    +    
    +    var cacheAlpha = maskData.alpha;
    +    var transform = maskData.worldTransform;
     
    -/**
    - * If this object is being rendered by a WebGLRenderer it will call this callback to initialize
    - *
    - * @method initWebGL
    - * @param renderer {WebGLRenderer} The renderer instance
    - */
    -PIXI.CustomRenderable.prototype.initWebGL = function(renderer)
    +    context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]);
    +
    +    PIXI.CanvasGraphics.renderGraphicsMask(maskData, context);
    +
    +    context.clip();
    +
    +    maskData.worldAlpha = cacheAlpha;
    +};
    +
    +PIXI.CanvasMaskManager.prototype.popMask = function(context)
     {
    -	// override!
    -}
    -
    -/**
    - * If this object is being rendered by a WebGLRenderer it will call this callback
    - *
    - * @method renderWebGL
    - * @param renderer {WebGLRenderer} The renderer instance
    - */
    -PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix)
    -{
    -	// not sure if both needed? but ya have for now!
    -	// override!
    -}
    -
    -
    +    context.restore();
    +};
         
    diff --git a/docs/files/src_pixi_renderers_canvas_utils_CanvasTinter.js.html b/docs/files/src_pixi_renderers_canvas_utils_CanvasTinter.js.html new file mode 100644 index 0000000..0b69d7c --- /dev/null +++ b/docs/files/src_pixi_renderers_canvas_utils_CanvasTinter.js.html @@ -0,0 +1,382 @@ + + + + + src/pixi/renderers/canvas/utils/CanvasTinter.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/canvas/utils/CanvasTinter.js

    + +
    +
    +
    +/**
    + * @author Mat Groves
    + * 
    + * 
    + */
    +
    +PIXI.CanvasTinter = function()
    +{
    +    /// this.textureCach
    +};
    +
    +//PIXI.CanvasTinter.cachTint = true;
    +    
    +
    +PIXI.CanvasTinter.getTintedTexture = function(sprite, color)
    +{
    +    //
    +    // cach on sprite
    +    // cach on texture
    +    // no cache
    +
    +    var texture = sprite.texture;
    +
    +    color = PIXI.CanvasTinter.roundColor(color);
    +
    +    var stringColor = "#" + ("00000" + ( color | 0).toString(16)).substr(-6);
    +   
    +    texture.tintCache = texture.tintCache || {};
    +
    +    if(texture.tintCache[stringColor]) return texture.tintCache[stringColor];
    +
    +     // clone texture..
    +    var canvas = PIXI.CanvasTinter.canvas || document.createElement("canvas");
    +    
    +    //PIXI.CanvasTinter.tintWithPerPixel(texture, stringColor, canvas);
    +
    +    
    +    PIXI.CanvasTinter.tintMethod(texture, color, canvas);
    +
    +    if(PIXI.CanvasTinter.convertTintToImage)
    +    {
    +        // is this better?
    +        var tintImage = new Image();
    +        tintImage.src = canvas.toDataURL();
    +
    +        texture.tintCache[stringColor] = tintImage;
    +    }
    +    else
    +    {
    +      
    +        texture.tintCache[stringColor] = canvas;
    +        // if we are not converting the texture to an image then we need to lose the refferance to the canvas
    +        PIXI.CanvasTinter.canvas = null;
    +
    +    }
    +
    +    return canvas;
    +};
    +
    +PIXI.CanvasTinter.tintWithMultiply = function(texture, color, canvas)
    +{
    +    var context = canvas.getContext( "2d" );
    +
    +    var frame = texture.frame;
    +
    +    canvas.width = frame.width;
    +    canvas.height = frame.height;
    +
    +    context.fillStyle = "#" + ("00000" + ( color | 0).toString(16)).substr(-6);
    +    
    +    context.fillRect(0, 0, frame.width, frame.height);
    +    
    +    context.globalCompositeOperation = "multiply";
    +
    +    context.drawImage(texture.baseTexture.source,
    +                           frame.x,
    +                           frame.y,
    +                           frame.width,
    +                           frame.height,
    +                           0,
    +                           0,
    +                           frame.width,
    +                           frame.height);
    +
    +    context.globalCompositeOperation = "destination-atop";
    +    
    +    context.drawImage(texture.baseTexture.source,
    +                           frame.x,
    +                           frame.y,
    +                           frame.width,
    +                           frame.height,
    +                           0,
    +                           0,
    +                           frame.width,
    +                           frame.height);
    +};
    +
    +PIXI.CanvasTinter.tintWithOverlay = function(texture, color, canvas)
    +{
    +    var context = canvas.getContext( "2d" );
    +
    +    var frame = texture.frame;
    +
    +    canvas.width = frame.width;
    +    canvas.height = frame.height;
    +
    +    
    +    
    +    context.globalCompositeOperation = "copy";
    +    context.fillStyle = "#" + ("00000" + ( color | 0).toString(16)).substr(-6);
    +    context.fillRect(0, 0, frame.width, frame.height);
    +
    +    context.globalCompositeOperation = "destination-atop";
    +    context.drawImage(texture.baseTexture.source,
    +                           frame.x,
    +                           frame.y,
    +                           frame.width,
    +                           frame.height,
    +                           0,
    +                           0,
    +                           frame.width,
    +                           frame.height);
    +
    +    
    +    //context.globalCompositeOperation = "copy";
    +
    +};
    +
    +
    +PIXI.CanvasTinter.tintWithPerPixel = function(texture, color, canvas)
    +{
    +    var context = canvas.getContext( "2d" );
    +
    +    var frame = texture.frame;
    +
    +    canvas.width = frame.width;
    +    canvas.height = frame.height;
    +  
    +    context.globalCompositeOperation = "copy";
    +    context.drawImage(texture.baseTexture.source,
    +                           frame.x,
    +                           frame.y,
    +                           frame.width,
    +                           frame.height,
    +                           0,
    +                           0,
    +                           frame.width,
    +                           frame.height);
    +
    +    var rgbValues = PIXI.hex2rgb(color);
    +    var r = rgbValues[0], g = rgbValues[1], b = rgbValues[2];
    +
    +    var pixelData = context.getImageData(0, 0, frame.width, frame.height);
    +
    +    var pixels = pixelData.data;
    +
    +    for (var i = 0; i < pixels.length; i += 4)
    +    {
    +        pixels[i+0] *= r;
    +        pixels[i+1] *= g;
    +        pixels[i+2] *= b;
    +    }
    +
    +    context.putImageData(pixelData, 0, 0);
    +};
    +
    +PIXI.CanvasTinter.roundColor = function(color)
    +{
    +    var step = PIXI.CanvasTinter.cacheStepsPerColorChannel;
    +
    +    var rgbValues = PIXI.hex2rgb(color);
    +
    +    rgbValues[0] = Math.round(rgbValues[0] * step) / step;
    +    rgbValues[1] = Math.round(rgbValues[1] * step) / step;
    +    rgbValues[2] = Math.round(rgbValues[2] * step) / step;
    +
    +    return PIXI.rgb2hex(rgbValues);
    +};
    +
    +PIXI.CanvasTinter.cacheStepsPerColorChannel = 8;
    +PIXI.CanvasTinter.convertTintToImage = false;
    +
    +PIXI.CanvasTinter.canUseMultiply = PIXI.canUseNewCanvasBlendModes();
    +
    +PIXI.CanvasTinter.tintMethod = PIXI.CanvasTinter.canUseMultiply ? PIXI.CanvasTinter.tintWithMultiply :  PIXI.CanvasTinter.tintWithPerPixel;
    +
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_renderers_webgl_PixiShader.js.html b/docs/files/src_pixi_renderers_webgl_PixiShader.js.html index a1b2a0a..173e0aa 100644 --- a/docs/files/src_pixi_renderers_webgl_PixiShader.js.html +++ b/docs/files/src_pixi_renderers_webgl_PixiShader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -172,124 +174,309 @@
     /**
      * @author Mat Groves http://matgroves.com/ @Doormat23
    + * @author Richard Davey http://www.photonstorm.com @photonstorm
      */
     
    -
    -PIXI.PixiShader = function()
    +/**
    +* @class PIXI.PixiShader
    +* @constructor
    +*/
    +PIXI.PixiShader = function(gl)
     {
    -	// the webGL program..
    -	this.program;
    -	
    -	this.fragmentSrc = [
    -	  "precision lowp float;",
    -	  "varying vec2 vTextureCoord;",
    -	  "varying float vColor;",
    -	  "uniform sampler2D uSampler;",
    -	  "void main(void) {",
    -	    "gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;",
    -	  "}"
    -	];
    -	
    -}
    +    this.gl = gl;
     
    +    /**
    +    * @property {any} program - The WebGL program.
    +    */
    +    this.program = null;
    +
    +    /**
    +    * @property {array} fragmentSrc - The fragment shader.
    +    */
    +    this.fragmentSrc = [
    +        'precision lowp float;',
    +        'varying vec2 vTextureCoord;',
    +        'varying vec4 vColor;',
    +        'uniform sampler2D uSampler;',
    +        'void main(void) {',
    +        '   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;',
    +        '}'
    +    ];
    +
    +
    +    /**
    +    * @property {number} textureCount - A local texture counter for multi-texture shaders.
    +    */
    +    this.textureCount = 0;
    +
    +
    +    this.init();
    +};
    +
    +/**
    +* @method PIXI.PixiShader#init
    +*/
     PIXI.PixiShader.prototype.init = function()
     {
    -	var program = PIXI.compileProgram(this.vertexSrc || PIXI.PixiShader.defaultVertexSrc, this.fragmentSrc)
    -	
    -	var gl = PIXI.gl;
    -	
    +
    +    var gl = this.gl;
    +
    +    var program = PIXI.compileProgram(gl, this.vertexSrc || PIXI.PixiShader.defaultVertexSrc, this.fragmentSrc);
    +    
         gl.useProgram(program);
    -	
    -	// get and store the uniforms for the shader
    -	this.uSampler = gl.getUniformLocation(program, "uSampler");
    -	this.projectionVector = gl.getUniformLocation(program, "projectionVector");
    -	this.offsetVector = gl.getUniformLocation(program, "offsetVector");
    -	this.colorAttribute = gl.getAttribLocation(program, "aColor");
    -	//this.dimensions = gl.getUniformLocation(this.program, "dimensions");
    -	
    -	// get and store the attributes
    -	this.aVertexPosition = gl.getAttribLocation(program, "aVertexPosition");
    -	this.aTextureCoord = gl.getAttribLocation(program, "aTextureCoord");
    -	  
    +
    +    // get and store the uniforms for the shader
    +    this.uSampler = gl.getUniformLocation(program, 'uSampler');
    +    this.projectionVector = gl.getUniformLocation(program, 'projectionVector');
    +    this.offsetVector = gl.getUniformLocation(program, 'offsetVector');
    +    this.dimensions = gl.getUniformLocation(program, 'dimensions');
    +
    +    // get and store the attributes
    +    this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition');
    +    this.colorAttribute = gl.getAttribLocation(program, 'aColor');
    +    this.aTextureCoord = gl.getAttribLocation(program, 'aTextureCoord');
    +
         // add those custom shaders!
         for (var key in this.uniforms)
         {
    -       
    -    	// get the uniform locations..
    -		program[key] = gl.getUniformLocation(program, key);
    -
    -
    -      
    +        // get the uniform locations..
    +        this.uniforms[key].uniformLocation = gl.getUniformLocation(program, key);
         }
    -  
    -	this.program = program;
    -}
     
    +    this.initUniforms();
    +
    +    this.program = program;
    +};
    +
    +/**
    +* Initialises the shader uniform values.
    +* Uniforms are specified in the GLSL_ES Specification: http://www.khronos.org/registry/webgl/specs/latest/1.0/
    +* http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
    +*
    +* @method PIXI.PixiShader#initUniforms
    +*/
    +PIXI.PixiShader.prototype.initUniforms = function()
    +{
    +    this.textureCount = 1;
    +    var gl = this.gl;
    +    var uniform;
    +
    +    for (var key in this.uniforms)
    +    {
    +        uniform = this.uniforms[key];
    +
    +        var type = uniform.type;
    +
    +        if (type === 'sampler2D')
    +        {
    +            uniform._init = false;
    +
    +            if (uniform.value !== null)
    +            {
    +                this.initSampler2D(uniform);
    +            }
    +        }
    +        else if (type === 'mat2' || type === 'mat3' || type === 'mat4')
    +        {
    +            //  These require special handling
    +            uniform.glMatrix = true;
    +            uniform.glValueLength = 1;
    +
    +            if (type === 'mat2')
    +            {
    +                uniform.glFunc = gl.uniformMatrix2fv;
    +            }
    +            else if (type === 'mat3')
    +            {
    +                uniform.glFunc = gl.uniformMatrix3fv;
    +            }
    +            else if (type === 'mat4')
    +            {
    +                uniform.glFunc = gl.uniformMatrix4fv;
    +            }
    +        }
    +        else
    +        {
    +            //  GL function reference
    +            uniform.glFunc = gl['uniform' + type];
    +
    +            if (type === '2f' || type === '2i')
    +            {
    +                uniform.glValueLength = 2;
    +            }
    +            else if (type === '3f' || type === '3i')
    +            {
    +                uniform.glValueLength = 3;
    +            }
    +            else if (type === '4f' || type === '4i')
    +            {
    +                uniform.glValueLength = 4;
    +            }
    +            else
    +            {
    +                uniform.glValueLength = 1;
    +            }
    +        }
    +    }
    +
    +};
    +
    +/**
    +* Initialises a Sampler2D uniform (which may only be available later on after initUniforms once the texture is has loaded)
    +*
    +* @method PIXI.PixiShader#initSampler2D
    +*/
    +PIXI.PixiShader.prototype.initSampler2D = function(uniform)
    +{
    +    if (!uniform.value || !uniform.value.baseTexture || !uniform.value.baseTexture.hasLoaded)
    +    {
    +        return;
    +    }
    +
    +    var gl = this.gl;
    +
    +    gl.activeTexture(gl['TEXTURE' + this.textureCount]);
    +    gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTexture);
    +
    +    //  Extended texture data
    +    if (uniform.textureData)
    +    {
    +        var data = uniform.textureData;
    +
    +        // GLTexture = mag linear, min linear_mipmap_linear, wrap repeat + gl.generateMipmap(gl.TEXTURE_2D);
    +        // GLTextureLinear = mag/min linear, wrap clamp
    +        // GLTextureNearestRepeat = mag/min NEAREST, wrap repeat
    +        // GLTextureNearest = mag/min nearest, wrap clamp
    +        // AudioTexture = whatever + luminance + width 512, height 2, border 0
    +        // KeyTexture = whatever + luminance + width 256, height 2, border 0
    +
    +        //  magFilter can be: gl.LINEAR, gl.LINEAR_MIPMAP_LINEAR or gl.NEAREST
    +        //  wrapS/T can be: gl.CLAMP_TO_EDGE or gl.REPEAT
    +
    +        var magFilter = (data.magFilter) ? data.magFilter : gl.LINEAR;
    +        var minFilter = (data.minFilter) ? data.minFilter : gl.LINEAR;
    +        var wrapS = (data.wrapS) ? data.wrapS : gl.CLAMP_TO_EDGE;
    +        var wrapT = (data.wrapT) ? data.wrapT : gl.CLAMP_TO_EDGE;
    +        var format = (data.luminance) ? gl.LUMINANCE : gl.RGBA;
    +
    +        if (data.repeat)
    +        {
    +            wrapS = gl.REPEAT;
    +            wrapT = gl.REPEAT;
    +        }
    +
    +        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
    +
    +        if (data.width)
    +        {
    +            var width = (data.width) ? data.width : 512;
    +            var height = (data.height) ? data.height : 2;
    +            var border = (data.border) ? data.border : 0;
    +
    +            // void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels);
    +            gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, border, format, gl.UNSIGNED_BYTE, null);
    +        }
    +        else
    +        {
    +            //  void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels);
    +            gl.texImage2D(gl.TEXTURE_2D, 0, format, gl.RGBA, gl.UNSIGNED_BYTE, uniform.value.baseTexture.source);
    +        }
    +
    +        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);
    +        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);
    +        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);
    +        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);
    +    }
    +
    +    gl.uniform1i(uniform.uniformLocation, this.textureCount);
    +
    +    uniform._init = true;
    +
    +    this.textureCount++;
    +
    +};
    +
    +/**
    +* Updates the shader uniform values.
    +*
    +* @method PIXI.PixiShader#syncUniforms
    +*/
     PIXI.PixiShader.prototype.syncUniforms = function()
     {
    -	var gl = PIXI.gl;
    -	
    -	for (var key in this.uniforms) 
    +    this.textureCount = 1;
    +    var uniform;
    +    var gl = this.gl;
    +
    +    //  This would probably be faster in an array and it would guarantee key order
    +    for (var key in this.uniforms)
         {
    -    	//var 
    -    	var type = this.uniforms[key].type;
    -    	
    -    	// need to grow this!
    -    	if(type == "f")
    -    	{
    -			gl.uniform1f(this.program[key], this.uniforms[key].value);
    -    	}
    -    	if(type == "f2")
    -    	{
    -    	//	console.log(this.program[key])
    -			gl.uniform2f(this.program[key], this.uniforms[key].value.x, this.uniforms[key].value.y);
    -    	}
    -        else if(type == "f4")
    +
    +        uniform = this.uniforms[key];
    +
    +        if (uniform.glValueLength === 1)
             {
    -           // console.log(this.uniforms[key].value)
    -            gl.uniform4fv(this.program[key], this.uniforms[key].value);
    +            if (uniform.glMatrix === true)
    +            {
    +                uniform.glFunc.call(gl, uniform.uniformLocation, uniform.transpose, uniform.value);
    +            }
    +            else
    +            {
    +                uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value);
    +            }
    +        }
    +        else if (uniform.glValueLength === 2)
    +        {
    +            uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y);
    +        }
    +        else if (uniform.glValueLength === 3)
    +        {
    +            uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z);
    +        }
    +        else if (uniform.glValueLength === 4)
    +        {
    +            uniform.glFunc.call(gl, uniform.uniformLocation, uniform.value.x, uniform.value.y, uniform.value.z, uniform.value.w);
    +        }
    +        else if (uniform.type === 'sampler2D')
    +        {
    +            if (uniform._init)
    +            {
    +                gl.activeTexture(gl['TEXTURE' + this.textureCount]);
    +                gl.bindTexture(gl.TEXTURE_2D, uniform.value.baseTexture._glTextures[gl.id] || PIXI.createWebGLTexture( uniform.value.baseTexture, gl));
    +                gl.uniform1i(uniform.uniformLocation, this.textureCount);
    +                this.textureCount++;
    +            }
    +            else
    +            {
    +                this.initSampler2D(uniform);
    +            }
             }
    -    	else if(type == "mat4")
    -    	{
    -    		gl.uniformMatrix4fv(this.program[key], false, this.uniforms[key].value);
    -    	}
    -    	else if(type == "sampler2D")
    -    	{
    -    		// first texture...
    -    		var texture = this.uniforms[key].value;
    -    		
    -    		gl.activeTexture(gl.TEXTURE1);
    -	    	gl.bindTexture(gl.TEXTURE_2D, texture.baseTexture._glTexture);
    -	    	
    -    		gl.uniform1i(this.program[key], 1);
    -    		
    -    		// activate texture..
    -    		// gl.uniformMatrix4fv(this.program[key], false, this.uniforms[key].value);
    -    		// gl.uniformMatrix4fv(this.program[key], false, this.uniforms[key].value);
    -    	}
         }
    -    
    -}
    +
    +};
     
     PIXI.PixiShader.defaultVertexSrc = [
    -  "attribute vec2 aVertexPosition;",
    -  "attribute vec2 aTextureCoord;",
    -  "attribute float aColor;",
    -  
    -  "uniform vec2 projectionVector;",
    - "uniform vec2 offsetVector;",
    -  "varying vec2 vTextureCoord;",
    -  
    -  "varying float vColor;",
    +    'attribute vec2 aVertexPosition;',
    +    'attribute vec2 aTextureCoord;',
    +    'attribute vec2 aColor;',
     
    -  "const vec2 center = vec2(-1.0, 1.0);",
    -  "void main(void) {",
    -    "gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);",
    -    "vTextureCoord = aTextureCoord;",
    -    "vColor = aColor;",
    -  "}"
    +    'uniform vec2 projectionVector;',
    +    'uniform vec2 offsetVector;',
    +    'varying vec2 vTextureCoord;',
    +
    +    'varying vec4 vColor;',
    +
    +    'const vec2 center = vec2(-1.0, 1.0);',
    +
    +    'void main(void) {',
    +    '   gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);',
    +    '   vTextureCoord = aTextureCoord;',
    +    '   vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;',
    +    '   vColor = vec4(color * aColor.x, aColor.x);',
    +    '}'
     ];
     
    +
    +
         
    diff --git a/docs/files/src_pixi_renderers_webgl_PrimitiveShader.js.html b/docs/files/src_pixi_renderers_webgl_PrimitiveShader.js.html index ec967e2..2c40066 100644 --- a/docs/files/src_pixi_renderers_webgl_PrimitiveShader.js.html +++ b/docs/files/src_pixi_renderers_webgl_PrimitiveShader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,58 +177,66 @@ */ -PIXI.PrimitiveShader = function() +PIXI.PrimitiveShader = function(gl) { - // the webGL program.. - this.program; - + this.gl = gl; + + // the webGL program.. + this.program = null; + this.fragmentSrc = [ - "precision mediump float;", - "varying vec4 vColor;", - "void main(void) {", - "gl_FragColor = vColor;", - "}" + 'precision mediump float;', + 'varying vec4 vColor;', + + 'void main(void) {', + ' gl_FragColor = vColor;', + '}' ]; this.vertexSrc = [ - "attribute vec2 aVertexPosition;", - "attribute vec4 aColor;", - "uniform mat3 translationMatrix;", - "uniform vec2 projectionVector;", - "uniform vec2 offsetVector;", - "uniform float alpha;", - "varying vec4 vColor;", - "void main(void) {", - "vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", - "v -= offsetVector.xyx;", - "gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", - "vColor = aColor * alpha;", - "}" + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + 'uniform mat3 translationMatrix;', + 'uniform vec2 projectionVector;', + 'uniform vec2 offsetVector;', + 'uniform float alpha;', + 'uniform vec3 tint;', + 'varying vec4 vColor;', + + 'void main(void) {', + ' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);', + ' v -= offsetVector.xyx;', + ' gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' ]; - -} + + this.init(); +}; PIXI.PrimitiveShader.prototype.init = function() { - var program = PIXI.compileProgram(this.vertexSrc, this.fragmentSrc); - - var gl = PIXI.gl; - - gl.useProgram(program); - - // get and store the uniforms for the shader - this.projectionVector = gl.getUniformLocation(program, "projectionVector"); - this.offsetVector = gl.getUniformLocation(program, "offsetVector"); - this.colorAttribute = gl.getAttribLocation(program, "aColor"); - - // get and store the attributes - this.aVertexPosition = gl.getAttribLocation(program, "aVertexPosition"); - - this.translationMatrix = gl.getUniformLocation(program, "translationMatrix"); - this.alpha = gl.getUniformLocation(program, "alpha"); - this.program = program; -} + var gl = this.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); + gl.useProgram(program); + + // get and store the uniforms for the shader + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.tintColor = gl.getUniformLocation(program, 'tint'); + + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + + this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix'); + this.alpha = gl.getUniformLocation(program, 'alpha'); + + this.program = program; +};
    diff --git a/docs/files/src_pixi_renderers_webgl_StripShader.js.html b/docs/files/src_pixi_renderers_webgl_StripShader.js.html index 4e56dc0..151fdbd 100644 --- a/docs/files/src_pixi_renderers_webgl_StripShader.js.html +++ b/docs/files/src_pixi_renderers_webgl_StripShader.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -177,64 +179,66 @@ PIXI.StripShader = function() { - // the webGL program.. - this.program; - + // the webGL program.. + this.program = null; + this.fragmentSrc = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying float vColor;", - "uniform float alpha;", - "uniform sampler2D uSampler;", - "void main(void) {", - "gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));", - "gl_FragColor = gl_FragColor * alpha;", - "}" + 'precision mediump float;', + 'varying vec2 vTextureCoord;', + 'varying float vColor;', + 'uniform float alpha;', + 'uniform sampler2D uSampler;', + + 'void main(void) {', + ' gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));', + ' gl_FragColor = gl_FragColor * alpha;', + '}' ]; this.vertexSrc = [ - "attribute vec2 aVertexPosition;", - "attribute vec2 aTextureCoord;", - "attribute float aColor;", - "uniform mat3 translationMatrix;", - "uniform vec2 projectionVector;", - "varying vec2 vTextureCoord;", - "varying vec2 offsetVector;", - "varying float vColor;", - "void main(void) {", - "vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);", - "v -= offsetVector.xyx;", - "gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);", - "vTextureCoord = aTextureCoord;", - "vColor = aColor;", - "}" + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aTextureCoord;', + 'attribute float aColor;', + 'uniform mat3 translationMatrix;', + 'uniform vec2 projectionVector;', + 'varying vec2 vTextureCoord;', + 'attribute vec2 offsetVector;', + 'varying float vColor;', + + 'void main(void) {', + ' vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);', + ' v -= offsetVector.xyx;', + ' gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + ' vColor = aColor;', + '}' ]; -} +}; PIXI.StripShader.prototype.init = function() { - var program = PIXI.compileProgram(this.vertexSrc, this.fragmentSrc) - - var gl = PIXI.gl; - + + var gl = PIXI.gl; + + var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc); gl.useProgram(program); - // get and store the uniforms for the shader - this.uSampler = gl.getUniformLocation(program, "uSampler"); - this.projectionVector = gl.getUniformLocation(program, "projectionVector"); - this.offsetVector = gl.getUniformLocation(program, "offsetVector"); - this.colorAttribute = gl.getAttribLocation(program, "aColor"); - //this.dimensions = gl.getUniformLocation(this.program, "dimensions"); - - // get and store the attributes - this.aVertexPosition = gl.getAttribLocation(program, "aVertexPosition"); - this.aTextureCoord = gl.getAttribLocation(program, "aTextureCoord"); - - this.translationMatrix = gl.getUniformLocation(program, "translationMatrix"); - this.alpha = gl.getUniformLocation(program, "alpha"); - - this.program = program; -} + // get and store the uniforms for the shader + this.uSampler = gl.getUniformLocation(program, 'uSampler'); + this.projectionVector = gl.getUniformLocation(program, 'projectionVector'); + this.offsetVector = gl.getUniformLocation(program, 'offsetVector'); + this.colorAttribute = gl.getAttribLocation(program, 'aColor'); + //this.dimensions = gl.getUniformLocation(this.program, 'dimensions'); + + // get and store the attributes + this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition'); + this.aTextureCoord = gl.getAttribLocation(program, 'aTextureCoord'); + + this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix'); + this.alpha = gl.getUniformLocation(program, 'alpha'); + + this.program = program; +};
    diff --git a/docs/files/src_pixi_renderers_webgl_WebGLBatch.js.html b/docs/files/src_pixi_renderers_webgl_WebGLBatch.js.html deleted file mode 100644 index 0d6c2ab..0000000 --- a/docs/files/src_pixi_renderers_webgl_WebGLBatch.js.html +++ /dev/null @@ -1,766 +0,0 @@ - - - - - src/pixi/renderers/webgl/WebGLBatch.js - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    File: src/pixi/renderers/webgl/WebGLBatch.js

    - -
    -
    -/**
    - * @author Mat Groves http://matgroves.com/ @Doormat23
    - */
    -
    -PIXI._batchs = [];
    -
    -/**
    - * @private
    - */
    -PIXI._getBatch = function(gl)
    -{
    -	if(PIXI._batchs.length == 0)
    -	{
    -		return new PIXI.WebGLBatch(gl);
    -	}
    -	else
    -	{
    -		return PIXI._batchs.pop();
    -	}
    -}
    -
    -/**
    - * @private
    - */
    -PIXI._returnBatch = function(batch)
    -{
    -	batch.clean();	
    -	PIXI._batchs.push(batch);
    -}
    -
    -/**
    - * @private
    - */
    -PIXI._restoreBatchs = function(gl)
    -{
    -	for (var i=0; i < PIXI._batchs.length; i++) 
    -	{
    -	  PIXI._batchs[i].restoreLostContext(gl);
    -	};
    -}
    -
    -/**
    - * A WebGLBatch Enables a group of sprites to be drawn using the same settings.
    - * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch.
    - * All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites
    - * in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled
    - * automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster
    - * the webGL renderer will run.
    - *
    - * @class WebGLBatch
    - * @constructor
    - * @param gl {WebGLContext} an instance of the webGL context
    - */
    -PIXI.WebGLBatch = function(gl)
    -{
    -	this.gl = gl;
    -	
    -	this.size = 0;
    -
    -	this.vertexBuffer =  gl.createBuffer();
    -	this.indexBuffer =  gl.createBuffer();
    -	this.uvBuffer =  gl.createBuffer();
    -	this.colorBuffer =  gl.createBuffer();
    -	this.blendMode = PIXI.blendModes.NORMAL;
    -	this.dynamicSize = 1;
    -}
    -
    -// constructor
    -PIXI.WebGLBatch.prototype.constructor = PIXI.WebGLBatch;
    -
    -/**
    - * Cleans the batch so that is can be returned to an object pool and reused
    - *
    - * @method clean
    - */
    -PIXI.WebGLBatch.prototype.clean = function()
    -{
    -	this.verticies = [];
    -	this.uvs = [];
    -	this.indices = [];
    -	this.colors = [];
    -	this.dynamicSize = 1;
    -	this.texture = null;
    -	this.last = null;
    -	this.size = 0;
    -	this.head;
    -	this.tail;
    -}
    -
    -/**
    - * Recreates the buffers in the event of a context loss
    - *
    - * @method restoreLostContext
    - * @param gl {WebGLContext}
    - */
    -PIXI.WebGLBatch.prototype.restoreLostContext = function(gl)
    -{
    -	this.gl = gl;
    -	this.vertexBuffer =  gl.createBuffer();
    -	this.indexBuffer =  gl.createBuffer();
    -	this.uvBuffer =  gl.createBuffer();
    -	this.colorBuffer =  gl.createBuffer();
    -}
    -
    -/**
    - * inits the batch's texture and blend mode based if the supplied sprite
    - *
    - * @method init
    - * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with
    - *		the same base texture and blend mode will be allowed to be added to this batch
    - */	
    -PIXI.WebGLBatch.prototype.init = function(sprite)
    -{
    -	sprite.batch = this;
    -	this.dirty = true;
    -	this.blendMode = sprite.blendMode;
    -	this.texture = sprite.texture.baseTexture;
    -	this.head = sprite;
    -	this.tail = sprite;
    -	this.size = 1;
    -
    -	this.growBatch();
    -}
    -
    -/**
    - * inserts a sprite before the specified sprite
    - *
    - * @method insertBefore
    - * @param sprite {Sprite} the sprite to be added
    - * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite
    - */	
    -PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite)
    -{
    -	this.size++;
    -
    -	sprite.batch = this;
    -	this.dirty = true;
    -	var tempPrev = nextSprite.__prev;
    -	nextSprite.__prev = sprite;
    -	sprite.__next = nextSprite;
    -
    -	if(tempPrev)
    -	{
    -		sprite.__prev = tempPrev;
    -		tempPrev.__next = sprite;
    -	}
    -	else
    -	{
    -		this.head = sprite;
    -	}
    -}
    -
    -/**
    - * inserts a sprite after the specified sprite
    - *
    - * @method insertAfter
    - * @param sprite {Sprite} the sprite to be added
    - * @param  previousSprite {Sprite} the first sprite will be inserted after this sprite
    - */	
    -PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite)
    -{
    -	this.size++;
    -
    -	sprite.batch = this;
    -	this.dirty = true;
    -
    -	var tempNext = previousSprite.__next;
    -	previousSprite.__next = sprite;
    -	sprite.__prev = previousSprite;
    -
    -	if(tempNext)
    -	{
    -		sprite.__next = tempNext;
    -		tempNext.__prev = sprite;
    -	}
    -	else
    -	{
    -		this.tail = sprite
    -	}
    -}
    -
    -/**
    - * removes a sprite from the batch
    - *
    - * @method remove
    - * @param sprite {Sprite} the sprite to be removed
    - */	
    -PIXI.WebGLBatch.prototype.remove = function(sprite)
    -{
    -	this.size--;
    -
    -	if(this.size == 0)
    -	{
    -		sprite.batch = null;
    -		sprite.__prev = null;
    -		sprite.__next = null;
    -		return;
    -	}
    -
    -	if(sprite.__prev)
    -	{
    -		sprite.__prev.__next = sprite.__next;
    -	}
    -	else
    -	{
    -		this.head = sprite.__next;
    -		this.head.__prev = null;
    -	}
    -
    -	if(sprite.__next)
    -	{
    -		sprite.__next.__prev = sprite.__prev;
    -	}
    -	else
    -	{
    -		this.tail = sprite.__prev;
    -		this.tail.__next = null
    -	}
    -
    -	sprite.batch = null;
    -	sprite.__next = null;
    -	sprite.__prev = null;
    -	this.dirty = true;
    -}
    -
    -/**
    - * Splits the batch into two with the specified sprite being the start of the new batch.
    - *
    - * @method split
    - * @param sprite {Sprite} the sprite that indicates where the batch should be split
    - * @return {WebGLBatch} the new batch
    - */
    -PIXI.WebGLBatch.prototype.split = function(sprite)
    -{
    -	this.dirty = true;
    -
    -	var batch = new PIXI.WebGLBatch(this.gl);
    -	batch.init(sprite);
    -	batch.texture = this.texture;
    -	batch.tail = this.tail;
    -
    -	this.tail = sprite.__prev;
    -	this.tail.__next = null;
    -
    -	sprite.__prev = null;
    -	// return a splite batch!
    -
    -	// TODO this size is wrong!
    -	// need to recalculate :/ problem with a linked list!
    -	// unless it gets calculated in the "clean"?
    -
    -	// need to loop through items as there is no way to know the length on a linked list :/
    -	var tempSize = 0;
    -	while(sprite)
    -	{
    -		tempSize++;
    -		sprite.batch = batch;
    -		sprite = sprite.__next;
    -	}
    -
    -	batch.size = tempSize;
    -	this.size -= tempSize;
    -
    -	return batch;
    -}
    -
    -/**
    - * Merges two batchs together
    - *
    - * @method merge
    - * @param batch {WebGLBatch} the batch that will be merged 
    - */
    -PIXI.WebGLBatch.prototype.merge = function(batch)
    -{
    -	this.dirty = true;
    -
    -	this.tail.__next = batch.head;
    -	batch.head.__prev = this.tail;
    -
    -	this.size += batch.size;
    -
    -	this.tail = batch.tail;
    -
    -	var sprite = batch.head;
    -	while(sprite)
    -	{
    -		sprite.batch = this;
    -		sprite = sprite.__next;
    -	}
    -}
    -
    -/**
    - * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this
    - * function is used to increase the size of the batch. It also creates a little extra room so
    - * that the batch does not need to be resized every time a sprite is added
    - *
    - * @method growBatch
    - */
    -PIXI.WebGLBatch.prototype.growBatch = function()
    -{
    -	var gl = this.gl;
    -	if( this.size == 1)
    -	{
    -		this.dynamicSize = 1;
    -	}
    -	else
    -	{
    -		this.dynamicSize = this.size * 1.5
    -	}
    -	// grow verts
    -	this.verticies = new Float32Array(this.dynamicSize * 8);
    -
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW);
    -
    -	this.uvs  = new Float32Array( this.dynamicSize * 8 );
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW);
    -
    -	this.dirtyUVS = true;
    -
    -	this.colors  = new Float32Array( this.dynamicSize * 4 );
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW);
    -
    -	this.dirtyColors = true;
    -
    -	this.indices = new Uint16Array(this.dynamicSize * 6); 
    -	var length = this.indices.length/6;
    -
    -	for (var i=0; i < length; i++) 
    -	{
    -	    var index2 = i * 6;
    -	    var index3 = i * 4;
    -		this.indices[index2 + 0] = index3 + 0;
    -		this.indices[index2 + 1] = index3 + 1;
    -		this.indices[index2 + 2] = index3 + 2;
    -		this.indices[index2 + 3] = index3 + 0;
    -		this.indices[index2 + 4] = index3 + 2;
    -		this.indices[index2 + 5] = index3 + 3;
    -	};
    -
    -	gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    -    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);
    -}
    -
    -/**
    - * Refresh's all the data in the batch and sync's it with the webGL buffers
    - *
    - * @method refresh
    - */
    -PIXI.WebGLBatch.prototype.refresh = function()
    -{
    -	var gl = this.gl;
    -
    -	if (this.dynamicSize < this.size)
    -	{
    -		this.growBatch();
    -	}
    -
    -	var indexRun = 0;
    -	var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index;
    -	var a, b, c, d, tx, ty;
    -
    -	var displayObject = this.head;
    -
    -	while(displayObject)
    -	{
    -		index = indexRun * 8;
    -
    -		var texture = displayObject.texture;
    -
    -		var frame = texture.frame;
    -		var tw = texture.baseTexture.width;
    -		var th = texture.baseTexture.height;
    -
    -		this.uvs[index + 0] = frame.x / tw;
    -		this.uvs[index +1] = frame.y / th;
    -
    -		this.uvs[index +2] = (frame.x + frame.width) / tw;
    -		this.uvs[index +3] = frame.y / th;
    -
    -		this.uvs[index +4] = (frame.x + frame.width) / tw;
    -		this.uvs[index +5] = (frame.y + frame.height) / th; 
    -
    -		this.uvs[index +6] = frame.x / tw;
    -		this.uvs[index +7] = (frame.y + frame.height) / th;
    -
    -		displayObject.updateFrame = false;
    -
    -		colorIndex = indexRun * 4;
    -		this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha;
    -
    -		displayObject = displayObject.__next;
    -
    -		indexRun ++;
    -	}
    -
    -	this.dirtyUVS = true;
    -	this.dirtyColors = true;
    -}
    -
    -/**
    - * Updates all the relevant geometry and uploads the data to the GPU
    - *
    - * @method update
    - */
    -PIXI.WebGLBatch.prototype.update = function()
    -{
    -	var gl = this.gl;
    -	var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3
    -
    -	var a, b, c, d, tx, ty;
    -
    -	var indexRun = 0;
    -
    -	var displayObject = this.head;
    -	var verticies = this.verticies;
    -	var uvs = this.uvs;
    -	var colors = this.colors;
    -	
    -	while(displayObject)
    -	{
    -		if(displayObject.vcount === PIXI.visibleCount)
    -		{
    -			width = displayObject.texture.frame.width;
    -			height = displayObject.texture.frame.height;
    -
    -			// TODO trim??
    -			aX = displayObject.anchor.x;// - displayObject.texture.trim.x
    -			aY = displayObject.anchor.y; //- displayObject.texture.trim.y
    -			w0 = width * (1-aX);
    -			w1 = width * -aX;
    -
    -			h0 = height * (1-aY);
    -			h1 = height * -aY;
    -
    -			index = indexRun * 8;
    -
    -			worldTransform = displayObject.worldTransform;
    -
    -			a = worldTransform[0];
    -			b = worldTransform[3];
    -			c = worldTransform[1];
    -			d = worldTransform[4];
    -			tx = worldTransform[2];
    -			ty = worldTransform[5];
    -
    -			verticies[index + 0 ] = a * w1 + c * h1 + tx; 
    -			verticies[index + 1 ] = d * h1 + b * w1 + ty;
    -
    -			verticies[index + 2 ] = a * w0 + c * h1 + tx; 
    -			verticies[index + 3 ] = d * h1 + b * w0 + ty; 
    -
    -			verticies[index + 4 ] = a * w0 + c * h0 + tx; 
    -			verticies[index + 5 ] = d * h0 + b * w0 + ty; 
    -
    -			verticies[index + 6] =  a * w1 + c * h0 + tx; 
    -			verticies[index + 7] =  d * h0 + b * w1 + ty; 
    -
    -			if(displayObject.updateFrame || displayObject.texture.updateFrame)
    -			{
    -				this.dirtyUVS = true;
    -
    -				var texture = displayObject.texture;
    -
    -				var frame = texture.frame;
    -				var tw = texture.baseTexture.width;
    -				var th = texture.baseTexture.height;
    -
    -				uvs[index + 0] = frame.x / tw;
    -				uvs[index +1] = frame.y / th;
    -
    -				uvs[index +2] = (frame.x + frame.width) / tw;
    -				uvs[index +3] = frame.y / th;
    -
    -				uvs[index +4] = (frame.x + frame.width) / tw;
    -				uvs[index +5] = (frame.y + frame.height) / th; 
    -
    -				uvs[index +6] = frame.x / tw;
    -				uvs[index +7] = (frame.y + frame.height) / th;
    -
    -				displayObject.updateFrame = false;
    -			}
    -
    -			// TODO this probably could do with some optimisation....
    -			if(displayObject.cacheAlpha != displayObject.worldAlpha)
    -			{
    -				displayObject.cacheAlpha = displayObject.worldAlpha;
    -
    -				var colorIndex = indexRun * 4;
    -				colors[colorIndex] = colors[colorIndex + 1] = colors[colorIndex + 2] = colors[colorIndex + 3] = displayObject.worldAlpha;
    -				this.dirtyColors = true;
    -			}
    -		}
    -		else
    -		{
    -			index = indexRun * 8;
    -
    -			verticies[index + 0 ] = verticies[index + 1 ] = verticies[index + 2 ] = verticies[index + 3 ] = verticies[index + 4 ] = verticies[index + 5 ] = verticies[index + 6] = 	verticies[index + 7] = 0;
    -		}
    -
    -		indexRun++;
    -		displayObject = displayObject.__next;
    -   }
    -}
    -
    -/**
    - * Draws the batch to the frame buffer
    - *
    - * @method render
    - */
    -PIXI.WebGLBatch.prototype.render = function(start, end)
    -{
    -	start = start || 0;
    -
    -	if(end == undefined)end = this.size;
    -	
    -	if(this.dirty)
    -	{
    -		this.refresh();
    -		this.dirty = false;
    -	}
    -
    -	if (this.size == 0)return;
    -
    -	this.update();
    -	var gl = this.gl;
    -
    -	//TODO optimize this!
    -
    -	var shaderProgram = PIXI.defaultShader;
    -	
    -	//gl.useProgram(shaderProgram);
    -
    -	// update the verts..
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -	// ok..
    -	gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies)
    -    gl.vertexAttribPointer(shaderProgram.aVertexPosition, 2, gl.FLOAT, false, 0, 0);
    -	// update the uvs
    -	//var isDefault = (shaderProgram == PIXI.shaderProgram)
    -
    -   	gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -
    -    if(this.dirtyUVS)
    -    {
    -    	this.dirtyUVS = false;
    -    	gl.bufferSubData(gl.ARRAY_BUFFER,  0, this.uvs);
    -    }
    -
    -    gl.vertexAttribPointer(shaderProgram.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
    -
    -    gl.activeTexture(gl.TEXTURE0);
    -    gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture);
    -
    -	// update color!
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer);
    -
    -	if(this.dirtyColors)
    -    {
    -    	this.dirtyColors = false;
    -    	gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors);
    -	}
    -
    -    gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0);
    -	// dont need to upload!
    -    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    -
    -	var len = end - start;
    -
    -    // DRAW THAT this!
    -    gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 );
    -}
    -
    -    
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/files/src_pixi_renderers_webgl_WebGLFilterManager.js.html b/docs/files/src_pixi_renderers_webgl_WebGLFilterManager.js.html deleted file mode 100644 index d109a7c..0000000 --- a/docs/files/src_pixi_renderers_webgl_WebGLFilterManager.js.html +++ /dev/null @@ -1,708 +0,0 @@ - - - - - src/pixi/renderers/webgl/WebGLFilterManager.js - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    File: src/pixi/renderers/webgl/WebGLFilterManager.js

    - -
    -
    -/**
    - * @author Mat Groves http://matgroves.com/ @Doormat23
    - */
    -
    -
    -PIXI.WebGLFilterManager = function()
    -{
    -	this.filterStack = [];
    -	this.texturePool = [];
    -	
    -	this.offsetX = 0;
    -	this.offsetY = 0;
    -	
    -	this.initShaderBuffers();
    -}
    -
    -// API
    -
    -PIXI.WebGLFilterManager.prototype.begin = function(projection, buffer)
    -{
    -	this.width = projection.x * 2;
    -	this.height = -projection.y * 2;
    -	this.buffer = buffer;
    -}
    -
    -PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock)
    -{
    -	var gl = PIXI.gl;
    -
    -	// filter program
    -	// OPTIMISATION - the first filter is free if its a simple color change?
    -	this.filterStack.push(filterBlock);
    -
    -	var filter = filterBlock.filterPasses[0];
    -
    -	
    -
    -	this.offsetX += filterBlock.target.filterArea.x;
    -	this.offsetY += filterBlock.target.filterArea.y;
    -	
    -	
    -	
    -	
    -	
    -	var texture = this.texturePool.pop();
    -	if(!texture)texture = new PIXI.FilterTexture(this.width, this.height);
    -	
    -	gl.bindTexture(gl.TEXTURE_2D,  texture.texture);
    -	
    -	this.getBounds(filterBlock.target);
    -		
    -	// addpadding?
    -	//displayObject.filterArea.x
    -
    -	var filterArea = filterBlock.target.filterArea;
    -
    -	var padidng = filter.padding;
    -	filterArea.x -= padidng;
    -	filterArea.y -= padidng;
    -	filterArea.width += padidng * 2;
    -	filterArea.height += padidng * 2;
    -
    -	// cap filter to screen size..
    -	if(filterArea.x < 0)filterArea.x = 0;	
    -	if(filterArea.width > this.width)filterArea.width = this.width;
    -	if(filterArea.y < 0)filterArea.y = 0;	
    -	if(filterArea.height > this.height)filterArea.height = this.height;
    -
    -
    -	//gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,  filterArea.width, filterArea.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    -	gl.bindFramebuffer(gl.FRAMEBUFFER, texture.frameBuffer);
    -   
    -  // console.log(filterArea)
    -	// set view port
    -	gl.viewport(0, 0, filterArea.width, filterArea.height);	
    -	
    -	PIXI.projection.x = filterArea.width/2;
    -	PIXI.projection.y = -filterArea.height/2;
    -	
    -	PIXI.offset.x = -filterArea.x; 
    -	PIXI.offset.y = -filterArea.y;
    -
    -	//console.log(PIXI.defaultShader.projectionVector)
    -	// update projection
    -	gl.uniform2f(PIXI.defaultShader.projectionVector, filterArea.width/2, -filterArea.height/2);
    -	gl.uniform2f(PIXI.defaultShader.offsetVector, -filterArea.x, -filterArea.y);
    -	//PIXI.primitiveProgram
    -
    -	gl.colorMask(true, true, true, true); 
    -	gl.clearColor(0,0,0, 0);     
    -	gl.clear(gl.COLOR_BUFFER_BIT);
    -	
    -	//filter.texture = texture;
    -	filterBlock._glFilterTexture = texture;
    -
    -	//console.log("PUSH")
    -}
    -
    -
    -PIXI.WebGLFilterManager.prototype.popFilter = function()
    -{
    -	
    -	var gl = PIXI.gl;
    -	
    -	var filterBlock = this.filterStack.pop();
    -
    -
    -
    -	var filterArea = filterBlock.target.filterArea;
    -
    -	var texture = filterBlock._glFilterTexture;
    -
    -	if(filterBlock.filterPasses.length > 1)
    -	{
    -		gl.viewport(0, 0, filterArea.width, filterArea.height);
    -
    -		gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -	
    -		this.vertexArray[0] = 0;
    -		this.vertexArray[1] = filterArea.height;
    -		
    -		this.vertexArray[2] = filterArea.width;
    -		this.vertexArray[3] = filterArea.height;
    -		
    -		this.vertexArray[4] = 0;
    -		this.vertexArray[5] = 0;
    -		
    -		this.vertexArray[6] = filterArea.width;
    -		this.vertexArray[7] = 0;
    -
    -
    -		gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray);
    -
    -	
    -		gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -		// nnow set the uvs..
    -		this.uvArray[2] = filterArea.width/this.width;
    -		this.uvArray[5] = filterArea.height/this.height;
    -		this.uvArray[6] = filterArea.width/this.width;
    -		this.uvArray[7] = filterArea.height/this.height;
    -		
    -		gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray);
    -
    -		var inputTexture = texture;
    -		var outputTexture = this.texturePool.pop();
    -		if(!outputTexture)outputTexture = new PIXI.FilterTexture(this.width, this.height);
    -		
    -		// need to clear this FBO as it may have some left over elements from a prvious filter.
    -		gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer );     
    -		gl.clear(gl.COLOR_BUFFER_BIT);
    -	 
    -		gl.disable(gl.BLEND);
    -		
    -		for (var i = 0; i < filterBlock.filterPasses.length-1; i++) 
    -		{
    -			var filterPass = filterBlock.filterPasses[i];
    -	
    -			gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer );
    -			
    -			// set texture
    -		    gl.activeTexture(gl.TEXTURE0);
    -			gl.bindTexture(gl.TEXTURE_2D, inputTexture.texture);
    -			
    -			// draw texture..
    -			//filterPass.applyFilterPass(filterArea.width, filterArea.height);
    -			this.applyFilterPass(filterPass, filterArea, filterArea.width, filterArea.height);
    -
    -			// swap the textures..
    -			var temp = inputTexture;
    -			inputTexture = outputTexture;
    -			outputTexture = temp;
    -			
    -		};
    -
    -		gl.enable(gl.BLEND);
    -
    -		texture = inputTexture;
    -		this.texturePool.push(outputTexture);
    -	}
    -
    -	var filter = filterBlock.filterPasses[filterBlock.filterPasses.length-1];
    -	
    -	this.offsetX -= filterArea.x;
    -	this.offsetY -= filterArea.y;
    -
    -	
    -	var sizeX = this.width;
    -	var sizeY = this.height;
    -	
    -	var offsetX = 0;
    -	var offsetY = 0;
    -	
    -	var buffer = this.buffer;
    -	
    -	// time to render the filters texture to the previous scene
    -	if(this.filterStack.length === 0)
    -	{
    -		gl.colorMask(true, true, true, this.buffer); 
    -	}
    -	else
    -	{
    -		var currentFilter = this.filterStack[this.filterStack.length-1];
    -		var filterArea = currentFilter.target.filterArea;
    -		
    -		sizeX = filterArea.width;
    -		sizeY = filterArea.height;
    -		
    -		offsetX = filterArea.x;
    -		offsetY = filterArea.y;
    -		
    -		buffer =  currentFilter._glFilterTexture.frameBuffer;
    -	}
    -	
    -	
    -
    -	// TODO need toremove thease global elements..
    -	PIXI.projection.x = sizeX/2;
    -	PIXI.projection.y = -sizeY/2;
    -
    -	PIXI.offset.x = offsetX;
    -	PIXI.offset.y = offsetY; 
    -	
    -
    -	var filterArea =  filterBlock.target.filterArea;
    -	var x = filterArea.x-offsetX;
    -	var y = filterArea.y-offsetY;
    -	
    -	// update the buffers..	
    -	// make sure to flip the y!
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -	
    -	this.vertexArray[0] = x;
    -	this.vertexArray[1] = y + filterArea.height;
    -	
    -	this.vertexArray[2] = x + filterArea.width;
    -	this.vertexArray[3] = y + filterArea.height;
    -	
    -	this.vertexArray[4] = x;
    -	this.vertexArray[5] = y;
    -	
    -	this.vertexArray[6] = x + filterArea.width;
    -	this.vertexArray[7] = y;
    -
    -	gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray);
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -
    -	this.uvArray[2] = filterArea.width/this.width;
    -	this.uvArray[5] = filterArea.height/this.height;
    -	this.uvArray[6] = filterArea.width/this.width;
    -	this.uvArray[7] = filterArea.height/this.height;
    -	
    -	gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray);
    -
    -	gl.viewport(0, 0, sizeX, sizeY);	
    -	// bind the buffer
    -	gl.bindFramebuffer(gl.FRAMEBUFFER, buffer );
    -	
    -	// set texture
    -    gl.activeTexture(gl.TEXTURE0);
    -	gl.bindTexture(gl.TEXTURE_2D, texture.texture);
    -	
    -	// apply!
    -	//filter.applyFilterPass(sizeX, sizeY);
    -	this.applyFilterPass(filter, filterArea, sizeX, sizeY);
    -
    -	// now restore the regular shader..
    -    gl.useProgram(PIXI.defaultShader.program);
    -	gl.uniform2f(PIXI.defaultShader.projectionVector, sizeX/2, -sizeY/2);
    -	gl.uniform2f(PIXI.defaultShader.offsetVector, -offsetX, -offsetY);
    -
    -	// return the texture to the pool
    -	this.texturePool.push(texture);
    -	filterBlock._glFilterTexture = null;	
    -}
    -
    -PIXI.WebGLFilterManager.prototype.applyFilterPass = function(filter, filterArea, width, height)
    -{
    -	// use program
    -	var gl = PIXI.gl;
    -
    -	if(!filter.shader)
    -	{
    -		var shader = new PIXI.PixiShader();
    -				
    -		shader.fragmentSrc = filter.fragmentSrc;
    -		shader.uniforms = filter.uniforms;
    -		shader.init();
    -		
    -		filter.shader = shader;
    -	}
    -
    -	var shader = filter.shader;
    -	
    -	// set the shader
    -	gl.useProgram(shader.program);
    -
    -	gl.uniform2f(shader.projectionVector, width/2, -height/2);
    -	gl.uniform2f(shader.offsetVector, 0,0)
    -
    -	if(filter.uniforms.dimensions)
    -	{
    -		//console.log(filter.uniforms.dimensions)
    -		filter.uniforms.dimensions.value[0] = this.width;//width;
    -		filter.uniforms.dimensions.value[1] = this.height;//height;
    -		filter.uniforms.dimensions.value[2] = this.vertexArray[0];
    -		filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height;
    -	//	console.log(this.vertexArray[5])
    -	}
    -
    -	shader.syncUniforms();
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -    gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);
    -   
    -   	gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -    gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
    -	
    -    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    -    
    -	// draw the filter...
    -    gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );
    -}
    -
    -PIXI.WebGLFilterManager.prototype.initShaderBuffers = function()
    -{
    -	var gl = PIXI.gl;
    -	
    -	// create some buffers
    -	this.vertexBuffer = gl.createBuffer();	
    -	this.uvBuffer = gl.createBuffer();
    -	this.indexBuffer = gl.createBuffer();
    -	
    -	// bind and upload the vertexs..
    -	// keep a refferance to the vertexFloatData..
    -	this.vertexArray = new Float32Array([0.0, 0.0, 
    -								         1.0, 0.0, 
    -								         0.0, 1.0, 
    -								         1.0, 1.0]);
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    -	gl.bufferData(
    -    gl.ARRAY_BUFFER, 
    -    this.vertexArray, 
    -    gl.STATIC_DRAW);
    -    
    -    
    -    // bind and upload the uv buffer
    -	this.uvArray = new Float32Array([0.0, 0.0, 
    -								     1.0, 0.0, 
    -								     0.0, 1.0, 
    -								     1.0, 1.0]);
    -								         
    -	gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    -	gl.bufferData(
    -    gl.ARRAY_BUFFER, 
    -    this.uvArray, 
    -    gl.STATIC_DRAW);
    -    
    -	// bind and upload the index
    -	gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    -	gl.bufferData(
    -    gl.ELEMENT_ARRAY_BUFFER, 
    -    new Uint16Array([0, 1, 2, 1, 3, 2]), 
    -    gl.STATIC_DRAW);
    -}
    -
    -PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject)
    -{
    -	// time to get the width and height of the object!
    -	var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, doTest;
    -	var a, b, c, d, tx, ty, x1, x2, x3, x4, y1, y2, y3, y4;
    -
    -	var tempObject = displayObject.first;
    -	var testObject = displayObject.last._iNext;
    -	
    -	var maxX = -Infinity;
    -	var maxY = -Infinity;
    -	
    -	var minX = Infinity;
    -	var minY = Infinity;
    -	
    -	do	
    -	{
    -		// TODO can be optimized! - what if there is no scale / rotation?
    -		
    -		if(tempObject.visible)
    -		{
    -			if(tempObject instanceof PIXI.Sprite)
    -			{
    -				width = tempObject.texture.frame.width;
    -				height = tempObject.texture.frame.height;
    -
    -				// TODO trim??
    -				aX = tempObject.anchor.x;
    -				aY = tempObject.anchor.y;
    -				w0 = width * (1-aX);
    -				w1 = width * -aX;
    -
    -				h0 = height * (1-aY);
    -				h1 = height * -aY;
    -
    -				doTest = true;
    -			}
    -			else if(tempObject instanceof PIXI.Graphics)
    -			{
    -				tempObject.updateFilterBounds();
    -
    -				var bounds = tempObject.bounds;
    -
    -				width = bounds.width;
    -				height = bounds.height;
    -
    -				w0 = bounds.x
    -				w1 = bounds.x + bounds.width;
    -
    -				h0 = bounds.y
    -				h1 = bounds.y + bounds.height;
    -
    -				doTest = true;	
    -			}
    -		}
    -		
    -		if(doTest)
    -		{
    -			worldTransform = tempObject.worldTransform;
    -
    -			a = worldTransform[0];
    -			b = worldTransform[3];
    -			c = worldTransform[1];
    -			d = worldTransform[4];
    -			tx = worldTransform[2];
    -			ty = worldTransform[5];
    -
    -			x1 = a * w1 + c * h1 + tx; 
    -			y1 = d * h1 + b * w1 + ty;
    -
    -			x2 = a * w0 + c * h1 + tx; 
    -			y2 = d * h1 + b * w0 + ty; 
    -
    -			x3 = a * w0 + c * h0 + tx; 
    -			y3 = d * h0 + b * w0 + ty; 
    -
    -			x4 =  a * w1 + c * h0 + tx; 
    -			y4 =  d * h0 + b * w1 + ty; 
    -
    -			minX = x1 < minX ? x1 : minX;
    -			minX = x2 < minX ? x2 : minX;
    -			minX = x3 < minX ? x3 : minX;
    -			minX = x4 < minX ? x4 : minX;
    -			
    -			minY = y1 < minY ? y1 : minY;
    -			minY = y2 < minY ? y2 : minY;
    -			minY = y3 < minY ? y3 : minY;
    -			minY = y4 < minY ? y4 : minY;
    -			
    -			maxX = x1 > maxX ? x1 : maxX;
    -			maxX = x2 > maxX ? x2 : maxX;
    -			maxX = x3 > maxX ? x3 : maxX;
    -			maxX = x4 > maxX ? x4 : maxX;
    -			
    -			maxY = y1 > maxY ? y1 : maxY;
    -			maxY = y2 > maxY ? y2 : maxY;
    -			maxY = y3 > maxY ? y3 : maxY;
    -			maxY = y4 > maxY ? y4 : maxY;
    -		}
    -
    -		doTest = false;
    -		tempObject = tempObject._iNext;
    -
    -	}
    -	while(tempObject != testObject)
    -	
    -	// maximum bounds is the size of the screen..
    -	//minX = minX > 0 ? minX : 0;
    -	//minY = minY > 0 ? minY : 0;
    -
    -	displayObject.filterArea.x = minX;
    -	displayObject.filterArea.y = minY;
    -
    -//	console.log(maxX+ " : " + minX)
    -	displayObject.filterArea.width = maxX - minX;
    -	displayObject.filterArea.height = maxY - minY;
    -}
    -
    -PIXI.FilterTexture = function(width, height)
    -{
    -	var gl = PIXI.gl;
    -	
    -    // next time to create a frame buffer and texture
    -	this.frameBuffer = gl.createFramebuffer();
    -    this.texture = gl.createTexture();
    -
    -    gl.bindTexture(gl.TEXTURE_2D,  this.texture);
    -    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    -	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    -	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    -	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    -	gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer );
    -	
    -	gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer );
    -	gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0);
    -	
    -	this.resize(width, height);
    -}
    -
    -PIXI.FilterTexture.prototype.resize = function(width, height)
    -{
    -	this.width = width;
    -	this.height = height;
    -
    -	var gl = PIXI.gl;
    -
    -	gl.bindTexture(gl.TEXTURE_2D,  this.texture);
    -	gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,  width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    -	
    -}
    -    
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/files/src_pixi_renderers_webgl_WebGLGraphics.js.html b/docs/files/src_pixi_renderers_webgl_WebGLGraphics.js.html deleted file mode 100644 index 9279cb9..0000000 --- a/docs/files/src_pixi_renderers_webgl_WebGLGraphics.js.html +++ /dev/null @@ -1,708 +0,0 @@ - - - - - src/pixi/renderers/webgl/WebGLGraphics.js - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    File: src/pixi/renderers/webgl/WebGLGraphics.js

    - -
    -
    -/**
    - * @author Mat Groves http://matgroves.com/ @Doormat23
    - */
    -
    -/**
    - * A set of functions used by the webGL renderer to draw the primitive graphics data
    - *
    - * @class CanvasGraphics
    - */
    -PIXI.WebGLGraphics = function()
    -{
    -	
    -}
    -
    -/**
    - * Renders the graphics object
    - *
    - * @static
    - * @private
    - * @method renderGraphics
    - * @param graphics {Graphics}
    - * @param projection {Object}
    - */
    -PIXI.WebGLGraphics.renderGraphics = function(graphics, projection)
    -{
    -	var gl = PIXI.gl;
    -	
    -	if(!graphics._webGL)graphics._webGL = {points:[], indices:[], lastIndex:0, 
    -										   buffer:gl.createBuffer(),
    -										   indexBuffer:gl.createBuffer()};
    -	
    -	if(graphics.dirty)
    -	{
    -		graphics.dirty = false;
    -		
    -		if(graphics.clearDirty)
    -		{
    -			graphics.clearDirty = false;
    -			
    -			graphics._webGL.lastIndex = 0;
    -			graphics._webGL.points = [];
    -			graphics._webGL.indices = [];
    -			
    -		}
    -		
    -		PIXI.WebGLGraphics.updateGraphics(graphics);
    -	}
    -	
    -	PIXI.activatePrimitiveShader();
    -	
    -	// This  could be speeded up fo sure!
    -	var m = PIXI.mat3.clone(graphics.worldTransform);
    -	
    -	PIXI.mat3.transpose(m);
    -	
    -	// set the matrix transform for the 
    - 	gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
    -
    - 	gl.uniformMatrix3fv(PIXI.primitiveShader.translationMatrix, false, m);
    - 	
    -	gl.uniform2f(PIXI.primitiveShader.projectionVector, projection.x, -projection.y);
    -	gl.uniform2f(PIXI.primitiveShader.offsetVector, -PIXI.offset.x, -PIXI.offset.y);
    -	
    -	gl.uniform1f(PIXI.primitiveShader.alpha, graphics.worldAlpha);
    -
    -	gl.bindBuffer(gl.ARRAY_BUFFER, graphics._webGL.buffer);
    -	
    -	// WHY DOES THIS LINE NEED TO BE THERE???
    -	//gl.vertexAttribPointer(PIXI.shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0);
    -	// its not even used.. but need to be set or it breaks?
    -	// only on pc though..
    -	
    -	gl.vertexAttribPointer(PIXI.primitiveShader.aVertexPosition, 2, gl.FLOAT, false, 4 * 6, 0);
    -	gl.vertexAttribPointer(PIXI.primitiveShader.colorAttribute, 4, gl.FLOAT, false,4 * 6, 2 * 4);
    -	
    -	// set the index buffer!
    -	gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, graphics._webGL.indexBuffer);
    -	
    -	gl.drawElements(gl.TRIANGLE_STRIP,  graphics._webGL.indices.length, gl.UNSIGNED_SHORT, 0 );
    -	
    -	PIXI.deactivatePrimitiveShader();
    -	
    -	// return to default shader...
    -//	PIXI.activateShader(PIXI.defaultShader);
    -}
    -
    -/**
    - * Updates the graphics object
    - *
    - * @static
    - * @private
    - * @method updateGraphics
    - * @param graphics {Graphics}
    - */
    -PIXI.WebGLGraphics.updateGraphics = function(graphics)
    -{
    -	for (var i=graphics._webGL.lastIndex; i < graphics.graphicsData.length; i++) 
    -	{
    -		var data = graphics.graphicsData[i];
    -		
    -		if(data.type == PIXI.Graphics.POLY)
    -		{
    -			if(data.fill)
    -			{
    -				if(data.points.length>3) 
    -				PIXI.WebGLGraphics.buildPoly(data, graphics._webGL);
    -			}
    -			
    -			if(data.lineWidth > 0)
    -			{
    -				PIXI.WebGLGraphics.buildLine(data, graphics._webGL);
    -			}
    -		}
    -		else if(data.type == PIXI.Graphics.RECT)
    -		{
    -			PIXI.WebGLGraphics.buildRectangle(data, graphics._webGL);
    -		}
    -		else if(data.type == PIXI.Graphics.CIRC || data.type == PIXI.Graphics.ELIP)
    -		{
    -			PIXI.WebGLGraphics.buildCircle(data, graphics._webGL);
    -		}
    -	};
    -	
    -	graphics._webGL.lastIndex = graphics.graphicsData.length;
    -	
    -	var gl = PIXI.gl;
    -
    -	graphics._webGL.glPoints = new Float32Array(graphics._webGL.points);
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, graphics._webGL.buffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, graphics._webGL.glPoints, gl.STATIC_DRAW);
    -	
    -	graphics._webGL.glIndicies = new Uint16Array(graphics._webGL.indices);
    -	
    -	gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, graphics._webGL.indexBuffer);
    -    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, graphics._webGL.glIndicies, gl.STATIC_DRAW);
    -}
    -
    -/**
    - * Builds a rectangle to draw
    - *
    - * @static
    - * @private
    - * @method buildRectangle
    - * @param graphics {Graphics}
    - * @param webGLData {Object}
    - */
    -PIXI.WebGLGraphics.buildRectangle = function(graphicsData, webGLData)
    -{
    -	// --- //
    -	// need to convert points to a nice regular data
    -	// 
    -	var rectData = graphicsData.points;
    -	var x = rectData[0];
    -	var y = rectData[1];
    -	var width = rectData[2];
    -	var height = rectData[3];
    -	
    -	
    -	if(graphicsData.fill)
    -	{
    -		var color = HEXtoRGB(graphicsData.fillColor);
    -		var alpha = graphicsData.fillAlpha;
    -		
    -		var r = color[0] * alpha;
    -		var g = color[1] * alpha;
    -		var b = color[2] * alpha;
    -	
    -		var verts = webGLData.points;
    -		var indices = webGLData.indices;
    -	
    -		var vertPos = verts.length/6;
    -		
    -		// start
    -		verts.push(x, y);
    -		verts.push(r, g, b, alpha);
    -		
    -		verts.push(x + width, y);
    -		verts.push(r, g, b, alpha);
    -		
    -		verts.push(x , y + height);
    -		verts.push(r, g, b, alpha);
    -		
    -		verts.push(x + width, y + height);
    -		verts.push(r, g, b, alpha);
    -		
    -		// insert 2 dead triangles..
    -		indices.push(vertPos, vertPos, vertPos+1, vertPos+2, vertPos+3, vertPos+3)
    -	}
    -	
    -	if(graphicsData.lineWidth)
    -	{
    -		graphicsData.points = [x, y,
    -				  x + width, y,
    -				  x + width, y + height,
    -				  x, y + height,
    -				  x, y];
    -	
    -		PIXI.WebGLGraphics.buildLine(graphicsData, webGLData);
    -	}
    -	
    -}
    -
    -/**
    - * Builds a circle to draw
    - *
    - * @static
    - * @private
    - * @method buildCircle
    - * @param graphics {Graphics}
    - * @param webGLData {Object}
    - */
    -PIXI.WebGLGraphics.buildCircle = function(graphicsData, webGLData)
    -{
    -	// --- //
    -	// need to convert points to a nice regular data
    -	// 
    -	var rectData = graphicsData.points;
    -	var x = rectData[0];
    -	var y = rectData[1];
    -	var width = rectData[2];
    -	var height = rectData[3];
    -	
    -	var totalSegs = 40;
    -	var seg = (Math.PI * 2) / totalSegs ;
    -		
    -	if(graphicsData.fill)
    -	{
    -		var color = HEXtoRGB(graphicsData.fillColor);
    -		var alpha = graphicsData.fillAlpha;
    -
    -		var r = color[0] * alpha;
    -		var g = color[1] * alpha;
    -		var b = color[2] * alpha;
    -	
    -		var verts = webGLData.points;
    -		var indices = webGLData.indices;
    -	
    -		var vecPos = verts.length/6;
    -		
    -		indices.push(vecPos);
    -		
    -		for (var i=0; i < totalSegs + 1 ; i++) 
    -		{
    -			verts.push(x,y, r, g, b, alpha);
    -			
    -			verts.push(x + Math.sin(seg * i) * width,
    -					   y + Math.cos(seg * i) * height,
    -					   r, g, b, alpha);
    -		
    -			indices.push(vecPos++, vecPos++);
    -		};
    -		
    -		indices.push(vecPos-1);
    -	}
    -	
    -	if(graphicsData.lineWidth)
    -	{
    -		graphicsData.points = [];
    -		
    -		for (var i=0; i < totalSegs + 1; i++) 
    -		{
    -			graphicsData.points.push(x + Math.sin(seg * i) * width,
    -									 y + Math.cos(seg * i) * height)
    -		};
    -		
    -		PIXI.WebGLGraphics.buildLine(graphicsData, webGLData);
    -	}
    -	
    -}
    -
    -/**
    - * Builds a line to draw
    - *
    - * @static
    - * @private
    - * @method buildLine
    - * @param graphics {Graphics}
    - * @param webGLData {Object}
    - */
    -PIXI.WebGLGraphics.buildLine = function(graphicsData, webGLData)
    -{
    -	// TODO OPTIMISE!
    -	
    -	var wrap = true;
    -	var points = graphicsData.points;
    -	if(points.length == 0)return;
    -	
    -	// get first and last point.. figure out the middle!
    -	var firstPoint = new PIXI.Point( points[0], points[1] );
    -	var lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] );
    -	
    -	// if the first point is the last point - goona have issues :)
    -	if(firstPoint.x == lastPoint.x && firstPoint.y == lastPoint.y)
    -	{
    -		points.pop();
    -		points.pop();
    -		
    -		lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] );
    -		
    -		var midPointX = lastPoint.x + (firstPoint.x - lastPoint.x) *0.5;
    -		var midPointY = lastPoint.y + (firstPoint.y - lastPoint.y) *0.5;
    -		
    -		points.unshift(midPointX, midPointY);
    -		points.push(midPointX, midPointY)
    -	}
    -	
    -	var verts = webGLData.points;
    -	var indices = webGLData.indices;
    -	var length = points.length / 2;
    -	var indexCount = points.length;
    -	var indexStart = verts.length/6;
    -	
    -	// DRAW the Line
    -	var width = graphicsData.lineWidth / 2;
    -	
    -	// sort color
    -	var color = HEXtoRGB(graphicsData.lineColor);
    -	var alpha = graphicsData.lineAlpha;
    -	var r = color[0] * alpha;
    -	var g = color[1] * alpha;
    -	var b = color[2] * alpha;
    -	
    -	var p1x, p1y, p2x, p2y, p3x, p3y;
    -	var perpx, perpy, perp2x, perp2y, perp3x, perp3y;
    -	var ipx, ipy;
    -	var a1, b1, c1, a2, b2, c2;
    -	var denom, pdist, dist;
    -	
    -	p1x = points[0];
    -	p1y = points[1];
    -	
    -	p2x = points[2];
    -	p2y = points[3];
    -	
    -	perpx = -(p1y - p2y);
    -	perpy =  p1x - p2x;
    -	
    -	dist = Math.sqrt(perpx*perpx + perpy*perpy);
    -	
    -	perpx /= dist;
    -	perpy /= dist;
    -	perpx *= width;
    -	perpy *= width;
    -	
    -	// start
    -	verts.push(p1x - perpx , p1y - perpy,
    -				r, g, b, alpha);
    -	
    -	verts.push(p1x + perpx , p1y + perpy,
    -				r, g, b, alpha);
    -	
    -	for (var i = 1; i < length-1; i++) 
    -	{
    -		p1x = points[(i-1)*2];
    -		p1y = points[(i-1)*2 + 1];
    -		
    -		p2x = points[(i)*2]
    -		p2y = points[(i)*2 + 1]
    -		
    -		p3x = points[(i+1)*2];
    -		p3y = points[(i+1)*2 + 1];
    -		
    -		perpx = -(p1y - p2y);
    -		perpy = p1x - p2x;
    -		
    -		dist = Math.sqrt(perpx*perpx + perpy*perpy);
    -		perpx /= dist;
    -		perpy /= dist;
    -		perpx *= width;
    -		perpy *= width;
    -
    -		perp2x = -(p2y - p3y);
    -		perp2y = p2x - p3x;
    -		
    -		dist = Math.sqrt(perp2x*perp2x + perp2y*perp2y);
    -		perp2x /= dist;
    -		perp2y /= dist;
    -		perp2x *= width;
    -		perp2y *= width;
    -		
    -		a1 = (-perpy + p1y) - (-perpy + p2y);
    -	    b1 = (-perpx + p2x) - (-perpx + p1x);
    -	    c1 = (-perpx + p1x) * (-perpy + p2y) - (-perpx + p2x) * (-perpy + p1y);
    -	    a2 = (-perp2y + p3y) - (-perp2y + p2y);
    -	    b2 = (-perp2x + p2x) - (-perp2x + p3x);
    -	    c2 = (-perp2x + p3x) * (-perp2y + p2y) - (-perp2x + p2x) * (-perp2y + p3y);
    -	 
    -	    denom = a1*b2 - a2*b1;
    -	    
    -	    if (denom == 0) {
    -	    	denom+=1;
    -	    }
    -	    
    -	    px = (b1*c2 - b2*c1)/denom;
    -	    py = (a2*c1 - a1*c2)/denom;
    -		
    -		pdist = (px -p2x) * (px -p2x) + (py -p2y) + (py -p2y);
    -		
    -		if(pdist > 140 * 140)
    -		{
    -			perp3x = perpx - perp2x;
    -			perp3y = perpy - perp2y;
    -			
    -			dist = Math.sqrt(perp3x*perp3x + perp3y*perp3y);
    -			perp3x /= dist;
    -			perp3y /= dist;
    -			perp3x *= width;
    -			perp3y *= width;
    -			
    -			verts.push(p2x - perp3x, p2y -perp3y);
    -			verts.push(r, g, b, alpha);
    -			
    -			verts.push(p2x + perp3x, p2y +perp3y);
    -			verts.push(r, g, b, alpha);
    -			
    -			verts.push(p2x - perp3x, p2y -perp3y);
    -			verts.push(r, g, b, alpha);
    -			
    -			indexCount++;
    -		}
    -		else
    -		{
    -			verts.push(px , py);
    -			verts.push(r, g, b, alpha);
    -			
    -			verts.push(p2x - (px-p2x), p2y - (py - p2y));
    -			verts.push(r, g, b, alpha);
    -		}
    -	}
    -	
    -	p1x = points[(length-2)*2]
    -	p1y = points[(length-2)*2 + 1] 
    -	
    -	p2x = points[(length-1)*2]
    -	p2y = points[(length-1)*2 + 1]
    -	
    -	perpx = -(p1y - p2y)
    -	perpy = p1x - p2x;
    -	
    -	dist = Math.sqrt(perpx*perpx + perpy*perpy);
    -	perpx /= dist;
    -	perpy /= dist;
    -	perpx *= width;
    -	perpy *= width;
    -	
    -	verts.push(p2x - perpx , p2y - perpy)
    -	verts.push(r, g, b, alpha);
    -	
    -	verts.push(p2x + perpx , p2y + perpy)
    -	verts.push(r, g, b, alpha);
    -	
    -	indices.push(indexStart);
    -	
    -	for (var i=0; i < indexCount; i++) 
    -	{
    -		indices.push(indexStart++);
    -	};
    -	
    -	indices.push(indexStart-1);
    -}
    -
    -/**
    - * Builds a polygon to draw
    - *
    - * @static
    - * @private
    - * @method buildPoly
    - * @param graphics {Graphics}
    - * @param webGLData {Object}
    - */
    -PIXI.WebGLGraphics.buildPoly = function(graphicsData, webGLData)
    -{
    -	var points = graphicsData.points;
    -	if(points.length < 6)return;
    -	
    -	// get first and last point.. figure out the middle!
    -	var verts = webGLData.points;
    -	var indices = webGLData.indices;
    -	
    -	var length = points.length / 2;
    -	
    -	// sort color
    -	var color = HEXtoRGB(graphicsData.fillColor);
    -	var alpha = graphicsData.fillAlpha;
    -	var r = color[0] * alpha;
    -	var g = color[1] * alpha;
    -	var b = color[2] * alpha;
    -	
    -	var triangles = PIXI.PolyK.Triangulate(points);
    -	
    -	var vertPos = verts.length / 6;
    -	
    -	for (var i=0; i < triangles.length; i+=3) 
    -	{
    -		indices.push(triangles[i] + vertPos);
    -		indices.push(triangles[i] + vertPos);
    -		indices.push(triangles[i+1] + vertPos);
    -		indices.push(triangles[i+2] +vertPos);
    -		indices.push(triangles[i+2] + vertPos);
    -	};
    -	
    -	for (var i = 0; i < length; i++) 
    -	{
    -		verts.push(points[i * 2], points[i * 2 + 1],
    -				   r, g, b, alpha);
    -	};
    -}
    -
    -function HEXtoRGB(hex) {
    -	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    -}
    -
    -
    -
    -
    -
    -    
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/files/src_pixi_renderers_webgl_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_webgl_WebGLRenderGroup.js.html deleted file mode 100644 index 59183b3..0000000 --- a/docs/files/src_pixi_renderers_webgl_WebGLRenderGroup.js.html +++ /dev/null @@ -1,1197 +0,0 @@ - - - - - src/pixi/renderers/webgl/WebGLRenderGroup.js - Pixi.JS - - - - - - - - -
    -
    -
    - -

    - -
    -
    - API Docs for: 1.3.0 -
    -
    -
    - - -
    -
    - Show: - - - - - - - -
    - - -
    -
    -
    -

    File: src/pixi/renderers/webgl/WebGLRenderGroup.js

    - -
    -
    -/**
    - * @author Mat Groves http://matgroves.com/ @Doormat23
    - */
    -
    -/**
    - * A WebGLBatch Enables a group of sprites to be drawn using the same settings.
    - * if a group of sprites all have the same baseTexture and blendMode then they can be
    - * grouped into a batch. All the sprites in a batch can then be drawn in one go by the
    - * GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch
    - * even if the batch only contains one sprite. Batching is handled automatically by the
    - * webGL renderer. A good tip is: the smaller the number of batchs there are, the faster
    - * the webGL renderer will run.
    - *
    - * @class WebGLBatch
    - * @contructor
    - * @param gl {WebGLContext} An instance of the webGL context
    - */
    -PIXI.WebGLRenderGroup = function(gl)
    -{
    -	this.gl = gl;
    -	this.root;
    -	
    -	this.backgroundColor;
    -	this.batchs = [];
    -	this.toRemove = [];
    -	
    -	this.filterManager = new PIXI.WebGLFilterManager();
    -}
    -
    -// constructor
    -PIXI.WebGLRenderGroup.prototype.constructor = PIXI.WebGLRenderGroup;
    -
    -/**
    - * Add a display object to the webgl renderer
    - *
    - * @method setRenderable
    - * @param displayObject {DisplayObject}
    - * @private 
    - */
    -PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject)
    -{
    -	// has this changed??
    -	if(this.root)this.removeDisplayObjectAndChildren(this.root);
    -	
    -	displayObject.worldVisible = displayObject.visible;
    -	
    -	// soooooo //
    -	// to check if any batchs exist already??
    -	
    -	// TODO what if its already has an object? should remove it
    -	this.root = displayObject;
    -	this.addDisplayObjectAndChildren(displayObject);
    -}
    -
    -/**
    - * Renders the stage to its webgl view
    - *
    - * @method render
    - * @param projection {Object}
    - */
    -PIXI.WebGLRenderGroup.prototype.render = function(projection, buffer)
    -{
    -	PIXI.WebGLRenderer.updateTextures();
    -	
    -	var gl = this.gl;
    -	gl.uniform2f(PIXI.defaultShader.projectionVector, projection.x, projection.y);
    -
    -	this.filterManager.begin(projection, buffer);
    -
    -	
    -	gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
    -	// will render all the elements in the group
    -	var renderable;
    -
    -	for (var i=0; i < this.batchs.length; i++) 
    -	{
    -		
    -		renderable = this.batchs[i];
    -		if(renderable instanceof PIXI.WebGLBatch)
    -		{
    -			this.batchs[i].render();
    -			continue;
    -		}
    -		
    -		// render special
    -		this.renderSpecial(renderable, projection);
    -	}
    -	
    -}
    -
    -/**
    - * Renders a specific displayObject
    - *
    - * @method renderSpecific
    - * @param displayObject {DisplayObject}
    - * @param projection {Object}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projection, buffer)
    -{
    -	PIXI.WebGLRenderer.updateTextures();
    -	var gl = this.gl;
    -
    -	gl.uniform2f(PIXI.defaultShader.projectionVector, projection.x, projection.y);
    -
    -	this.filterManager.begin(projection, buffer);
    -
    -	// to do!
    -	// render part of the scene...
    -	
    -	var startIndex;
    -	var startBatchIndex;
    -	
    -	var endIndex;
    -	var endBatchIndex;
    -	
    -	/*
    -	 *  LOOK FOR THE NEXT SPRITE
    -	 *  This part looks for the closest next sprite that can go into a batch
    -	 *  it keeps looking until it finds a sprite or gets to the end of the display
    -	 *  scene graph
    -	 */
    -	var nextRenderable = displayObject.first;
    -	while(nextRenderable._iNext)
    -	{
    -		if(nextRenderable.renderable && nextRenderable.__renderGroup)break;
    -		nextRenderable = nextRenderable._iNext;
    -	}
    -	var startBatch = nextRenderable.batch;
    -	//console.log(nextRenderable);
    -	
    -	//console.log(renderable)
    -	if(nextRenderable instanceof PIXI.Sprite)
    -	{
    -		startBatch = nextRenderable.batch;
    -		
    -		var head = startBatch.head;
    -		var next = head;
    -		
    -		// ok now we have the batch.. need to find the start index!
    -		if(head == nextRenderable)
    -		{
    -			startIndex = 0;
    -		}
    -		else
    -		{
    -			startIndex = 1;
    -			
    -			while(head.__next != nextRenderable)
    -			{
    -				startIndex++;
    -				head = head.__next;
    -			}
    -		}
    -	}
    -	else
    -	{
    -		startBatch = nextRenderable;
    -	}
    -	
    -	// Get the LAST renderable object
    -	var lastRenderable = displayObject.last;
    -	while(lastRenderable._iPrev)
    -	{
    -		if(lastRenderable.renderable && lastRenderable.__renderGroup)break;
    -		lastRenderable = lastRenderable._iNext;
    -	}
    -	
    -	if(lastRenderable instanceof PIXI.Sprite)
    -	{
    -		endBatch = lastRenderable.batch;
    -		
    -		var head = endBatch.head;
    -		
    -		if(head == lastRenderable)
    -		{
    -			endIndex = 0;
    -		}
    -		else
    -		{
    -			endIndex = 1;
    -			
    -			while(head.__next != lastRenderable)
    -			{
    -				endIndex++;
    -				head = head.__next;
    -			}
    -		}
    -	}
    -	else
    -	{
    -		endBatch = lastRenderable;
    -	}
    -	
    -	//console.log(endBatch);
    -	// TODO - need to fold this up a bit!
    -	
    -	if(startBatch == endBatch)
    -	{
    -		if(startBatch instanceof PIXI.WebGLBatch)
    -		{
    -			startBatch.render(startIndex, endIndex+1);
    -		}
    -		else
    -		{
    -			this.renderSpecial(startBatch, projection);
    -		}
    -		return;
    -	}
    -	
    -	// now we have first and last!
    -	startBatchIndex = this.batchs.indexOf(startBatch);
    -	endBatchIndex = this.batchs.indexOf(endBatch);
    -	
    -	// DO the first batch
    -	if(startBatch instanceof PIXI.WebGLBatch)
    -	{
    -		startBatch.render(startIndex);
    -	}
    -	else
    -	{
    -		this.renderSpecial(startBatch, projection);
    -	}
    -	
    -	// DO the middle batchs..
    -	for (var i=startBatchIndex+1; i < endBatchIndex; i++) 
    -	{
    -		renderable = this.batchs[i];
    -	
    -		if(renderable instanceof PIXI.WebGLBatch)
    -		{
    -			this.batchs[i].render();
    -		}
    -		else
    -		{
    -			this.renderSpecial(renderable, projection);
    -		}
    -	}
    -	
    -	// DO the last batch..
    -	if(endBatch instanceof PIXI.WebGLBatch)
    -	{
    -		endBatch.render(0, endIndex+1);
    -	}
    -	else
    -	{
    -		this.renderSpecial(endBatch, projection);
    -	}
    -}
    -
    -/**
    - * Renders a specific renderable
    - *
    - * @method renderSpecial
    - * @param renderable {DisplayObject}
    - * @param projection {Object}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.renderSpecial = function(renderable, projection)
    -{
    -	
    -	var worldVisible = renderable.vcount === PIXI.visibleCount
    -
    -
    -	if(renderable instanceof PIXI.TilingSprite)
    -	{
    -		if(worldVisible)this.renderTilingSprite(renderable, projection);
    -	}
    -	else if(renderable instanceof PIXI.Strip)
    -	{
    -		if(worldVisible)this.renderStrip(renderable, projection);
    -	}
    -	else if(renderable instanceof PIXI.CustomRenderable)
    -	{
    -		if(worldVisible) renderable.renderWebGL(this, projection);
    -	}
    -	else if(renderable instanceof PIXI.Graphics)
    -	{
    -		if(worldVisible && renderable.renderable) PIXI.WebGLGraphics.renderGraphics(renderable, projection);
    -	}
    -	else if(renderable instanceof PIXI.FilterBlock)
    -	{
    -		this.handleFilterBlock(renderable, projection);
    -	}
    -}
    -
    -PIXI.WebGLRenderGroup.prototype.handleFilterBlock = function(filterBlock, projection)
    -{
    -	/*
    -	 * for now only masks are supported..
    -	 */
    -	var gl = PIXI.gl;
    -	
    -	if(filterBlock.open)
    -	{
    -		if(filterBlock.data instanceof Array)
    -		{
    -			//var filter = filterBlock.data[0];
    -			//console.log(filter)
    -			this.filterManager.pushFilter(filterBlock);//filter);
    -			// ok so..
    -			
    -		}
    -		else
    -		{
    -			
    -			gl.enable(gl.STENCIL_TEST);
    -				
    -			gl.colorMask(false, false, false, false);
    -			gl.stencilFunc(gl.ALWAYS,1,0xff);
    -			gl.stencilOp(gl.KEEP,gl.KEEP,gl.REPLACE);
    -			PIXI.WebGLGraphics.renderGraphics(filterBlock.data, projection);
    -				
    -			gl.colorMask(true, true, true, true);
    -			gl.stencilFunc(gl.NOTEQUAL,0,0xff);
    -			gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP);
    -		}
    -	}
    -	else
    -	{
    -		if(filterBlock.data instanceof Array)
    -		{
    -			this.filterManager.popFilter();
    -		//	PIXI.popShader();
    -		//	gl.uniform2f(PIXI.currentShader.projectionVector, projection.x, projection.y);
    -		}
    -		else
    -		{
    -			gl.disable(gl.STENCIL_TEST);
    -		}
    -	}
    -}
    -
    -/**
    - * Updates a webgl texture
    - *
    - * @method updateTexture
    - * @param displayObject {DisplayObject}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject)
    -{
    -	
    -	// TODO definitely can optimse this function..
    -	
    -	this.removeObject(displayObject);
    -	
    -	/*
    -	 *  LOOK FOR THE PREVIOUS RENDERABLE
    -	 *  This part looks for the closest previous sprite that can go into a batch
    -	 *  It keeps going back until it finds a sprite or the stage
    -	 */
    -	var previousRenderable = displayObject.first;
    -	while(previousRenderable != this.root)
    -	{
    -		previousRenderable = previousRenderable._iPrev;
    -		if(previousRenderable.renderable && previousRenderable.__renderGroup)break;
    -	}
    -	
    -	/*
    -	 *  LOOK FOR THE NEXT SPRITE
    -	 *  This part looks for the closest next sprite that can go into a batch
    -	 *  it keeps looking until it finds a sprite or gets to the end of the display
    -	 *  scene graph
    -	 */
    -	var nextRenderable = displayObject.last;
    -	while(nextRenderable._iNext)
    -	{
    -		nextRenderable = nextRenderable._iNext;
    -		if(nextRenderable.renderable && nextRenderable.__renderGroup)break;
    -	}
    -	
    -	this.insertObject(displayObject, previousRenderable, nextRenderable);
    -}
    -
    -/**
    - * Adds filter blocks
    - *
    - * @method addFilterBlocks
    - * @param start {FilterBlock}
    - * @param end {FilterBlock}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.addFilterBlocks = function(start, end)
    -{
    -	start.__renderGroup = this;
    -	end.__renderGroup = this;
    -	/*
    -	 *  LOOK FOR THE PREVIOUS RENDERABLE
    -	 *  This part looks for the closest previous sprite that can go into a batch
    -	 *  It keeps going back until it finds a sprite or the stage
    -	 */
    -	var previousRenderable = start;
    -	while(previousRenderable != this.root.first)
    -	{
    -		previousRenderable = previousRenderable._iPrev;
    -		if(previousRenderable.renderable && previousRenderable.__renderGroup)break;
    -	}
    -	this.insertAfter(start, previousRenderable);
    -		
    -	/*
    -	 *  LOOK FOR THE NEXT SPRITE
    -	 *  This part looks for the closest next sprite that can go into a batch
    -	 *  it keeps looking until it finds a sprite or gets to the end of the display
    -	 *  scene graph
    -	 */
    -	var previousRenderable2 = end;
    -	while(previousRenderable2 != this.root.first)
    -	{
    -		previousRenderable2 = previousRenderable2._iPrev;
    -		if(previousRenderable2.renderable && previousRenderable2.__renderGroup)break;
    -	}
    -	this.insertAfter(end, previousRenderable2);
    -}
    -
    -/**
    - * Remove filter blocks
    - *
    - * @method removeFilterBlocks
    - * @param start {FilterBlock}
    - * @param end {FilterBlock}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.removeFilterBlocks = function(start, end)
    -{
    -	this.removeObject(start);
    -	this.removeObject(end);
    -}
    -
    -/**
    - * Adds a display object and children to the webgl context
    - *
    - * @method addDisplayObjectAndChildren
    - * @param displayObject {DisplayObject}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject)
    -{
    -	if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject);
    -	
    -	/*
    -	 *  LOOK FOR THE PREVIOUS RENDERABLE
    -	 *  This part looks for the closest previous sprite that can go into a batch
    -	 *  It keeps going back until it finds a sprite or the stage
    -	 */
    -	
    -	var previousRenderable = displayObject.first;
    -	while(previousRenderable != this.root.first)
    -	{
    -		previousRenderable = previousRenderable._iPrev;
    -		if(previousRenderable.renderable && previousRenderable.__renderGroup)break;
    -	}
    -	
    -	/*
    -	 *  LOOK FOR THE NEXT SPRITE
    -	 *  This part looks for the closest next sprite that can go into a batch
    -	 *  it keeps looking until it finds a sprite or gets to the end of the display
    -	 *  scene graph
    -	 */
    -	var nextRenderable = displayObject.last;
    -	while(nextRenderable._iNext)
    -	{
    -		nextRenderable = nextRenderable._iNext;
    -		if(nextRenderable.renderable && nextRenderable.__renderGroup)break;
    -	}
    -	
    -	// one the display object hits this. we can break the loop	
    -	
    -	var tempObject = displayObject.first;
    -	var testObject = displayObject.last._iNext;
    -	do	
    -	{
    -		tempObject.__renderGroup = this;
    -		
    -		if(tempObject.renderable)
    -		{
    -		
    -			this.insertObject(tempObject, previousRenderable, nextRenderable);
    -			previousRenderable = tempObject;
    -		}
    -		
    -		tempObject = tempObject._iNext;
    -	}
    -	while(tempObject != testObject)
    -}
    -
    -/**
    - * Removes a display object and children to the webgl context
    - *
    - * @method removeDisplayObjectAndChildren
    - * @param displayObject {DisplayObject}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject)
    -{
    -	if(displayObject.__renderGroup != this)return;
    -	
    -//	var displayObject = displayObject.first;
    -	var lastObject = displayObject.last;
    -	do	
    -	{
    -		displayObject.__renderGroup = null;
    -		if(displayObject.renderable)this.removeObject(displayObject);
    -		displayObject = displayObject._iNext;
    -	}
    -	while(displayObject)
    -}
    -
    -/**
    - * Inserts a displayObject into the linked list
    - *
    - * @method insertObject
    - * @param displayObject {DisplayObject}
    - * @param previousObject {DisplayObject}
    - * @param nextObject {DisplayObject}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.insertObject = function(displayObject, previousObject, nextObject)
    -{
    -	// while looping below THE OBJECT MAY NOT HAVE BEEN ADDED
    -	var previousSprite = previousObject;
    -	var nextSprite = nextObject;
    -	
    -	/*
    -	 * so now we have the next renderable and the previous renderable
    -	 * 
    -	 */
    -	if(displayObject instanceof PIXI.Sprite)
    -	{
    -		var previousBatch
    -		var nextBatch
    -		
    -		if(previousSprite instanceof PIXI.Sprite)
    -		{
    -			previousBatch = previousSprite.batch;
    -			if(previousBatch)
    -			{
    -				if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode)
    -				{
    -					previousBatch.insertAfter(displayObject, previousSprite);
    -					return;
    -				}
    -			}
    -		}
    -		else
    -		{
    -			// TODO reword!
    -			previousBatch = previousSprite;
    -		}
    -	
    -		if(nextSprite)
    -		{
    -			if(nextSprite instanceof PIXI.Sprite)
    -			{
    -				nextBatch = nextSprite.batch;
    -			
    -				//batch may not exist if item was added to the display list but not to the webGL
    -				if(nextBatch)
    -				{
    -					if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode)
    -					{
    -						nextBatch.insertBefore(displayObject, nextSprite);
    -						return;
    -					}
    -					else
    -					{
    -						if(nextBatch == previousBatch)
    -						{
    -							// THERE IS A SPLIT IN THIS BATCH! //
    -							var splitBatch = previousBatch.split(nextSprite);
    -							// COOL!
    -							// add it back into the array	
    -							/*
    -							 * OOPS!
    -							 * seems the new sprite is in the middle of a batch
    -							 * lets split it.. 
    -							 */
    -							var batch = PIXI.WebGLRenderer.getBatch();
    -
    -							var index = this.batchs.indexOf( previousBatch );
    -							batch.init(displayObject);
    -							this.batchs.splice(index+1, 0, batch, splitBatch);
    -							
    -							return;
    -						}
    -					}
    -				}
    -			}
    -			else
    -			{
    -				// TODO re-word!
    -				
    -				nextBatch = nextSprite;
    -			}
    -		}
    -		
    -		/*
    -		 * looks like it does not belong to any batch!
    -		 * but is also not intersecting one..
    -		 * time to create anew one!
    -		 */
    -		
    -		var batch =  PIXI.WebGLRenderer.getBatch();
    -		batch.init(displayObject);
    -
    -		if(previousBatch) // if this is invalid it means 
    -		{
    -			var index = this.batchs.indexOf( previousBatch );
    -			this.batchs.splice(index+1, 0, batch);
    -		}
    -		else
    -		{
    -			this.batchs.push(batch);
    -		}
    -		
    -		return;
    -	}
    -	else if(displayObject instanceof PIXI.TilingSprite)
    -	{
    -		
    -		// add to a batch!!
    -		this.initTilingSprite(displayObject);
    -	//	this.batchs.push(displayObject);
    -		
    -	}
    -	else if(displayObject instanceof PIXI.Strip)
    -	{
    -		// add to a batch!!
    -		this.initStrip(displayObject);
    -	//	this.batchs.push(displayObject);
    -	}
    -	else if(displayObject)// instanceof PIXI.Graphics)
    -	{
    -		//displayObject.initWebGL(this);
    -		
    -		// add to a batch!!
    -		//this.initStrip(displayObject);
    -		//this.batchs.push(displayObject);
    -	}
    -	
    -	this.insertAfter(displayObject, previousSprite);
    -			
    -	// insert and SPLIT!
    -
    -}
    -
    -/**
    - * Inserts a displayObject into the linked list
    - *
    - * @method insertAfter
    - * @param item {DisplayObject}
    - * @param displayObject {DisplayObject} The object to insert
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.insertAfter = function(item, displayObject)
    -{
    -	if(displayObject instanceof PIXI.Sprite)
    -	{
    -		var previousBatch = displayObject.batch;
    -		
    -		if(previousBatch)
    -		{
    -			// so this object is in a batch!
    -			
    -			// is it not? need to split the batch
    -			if(previousBatch.tail == displayObject)
    -			{
    -				// is it tail? insert in to batchs	
    -				var index = this.batchs.indexOf( previousBatch );
    -				this.batchs.splice(index+1, 0, item);
    -			}
    -			else
    -			{
    -				// TODO MODIFY ADD / REMOVE CHILD TO ACCOUNT FOR FILTERS (also get prev and next) //
    -				
    -				// THERE IS A SPLIT IN THIS BATCH! //
    -				var splitBatch = previousBatch.split(displayObject.__next);
    -				
    -				// COOL!
    -				// add it back into the array	
    -				/*
    -				 * OOPS!
    -				 * seems the new sprite is in the middle of a batch
    -				 * lets split it.. 
    -				 */
    -				var index = this.batchs.indexOf( previousBatch );
    -				this.batchs.splice(index+1, 0, item, splitBatch);
    -			}
    -		}
    -		else
    -		{
    -			this.batchs.push(item);
    -		}
    -	}
    -	else
    -	{
    -		var index = this.batchs.indexOf( displayObject );
    -		this.batchs.splice(index+1, 0, item);
    -	}
    -}
    -
    -/**
    - * Removes a displayObject from the linked list
    - *
    - * @method removeObject
    - * @param displayObject {DisplayObject} The object to remove
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.removeObject = function(displayObject)
    -{
    -	// loop through children..
    -	// display object //
    -	
    -	// add a child from the render group..
    -	// remove it and all its children!
    -	//displayObject.cacheVisible = false;//displayObject.visible;
    -
    -	/*
    -	 * removing is a lot quicker..
    -	 * 
    -	 */
    -	var batchToRemove;
    -	
    -	if(displayObject instanceof PIXI.Sprite)
    -	{
    -		// should always have a batch!
    -		var batch = displayObject.batch;
    -		if(!batch)return; // this means the display list has been altered befre rendering
    -		
    -		batch.remove(displayObject);
    -		
    -		if(batch.size==0)
    -		{
    -			batchToRemove = batch;
    -		}
    -	}
    -	else
    -	{
    -		batchToRemove = displayObject;
    -	}
    -	
    -	/*
    -	 * Looks like there is somthing that needs removing!
    -	 */
    -	if(batchToRemove)	
    -	{
    -		var index = this.batchs.indexOf( batchToRemove );
    -		if(index == -1)return;// this means it was added then removed before rendered
    -		
    -		// ok so.. check to see if you adjacent batchs should be joined.
    -		// TODO may optimise?
    -		if(index == 0 || index == this.batchs.length-1)
    -		{
    -			// wha - eva! just get of the empty batch!
    -			this.batchs.splice(index, 1);
    -			if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove);
    -		
    -			return;
    -		}
    -		
    -		if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch)
    -		{
    -			if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode)
    -			{
    -				//console.log("MERGE")
    -				this.batchs[index-1].merge(this.batchs[index+1]);
    -				
    -				if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove);
    -				PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]);
    -				this.batchs.splice(index, 2);
    -				return;
    -			}
    -		}
    -		
    -		this.batchs.splice(index, 1);
    -		if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove);
    -	}
    -}
    -
    -
    -/**
    - * Initializes a tiling sprite
    - *
    - * @method initTilingSprite
    - * @param sprite {TilingSprite} The tiling sprite to initialize
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite)
    -{
    -	var gl = this.gl;
    -
    -	// make the texture tilable..
    -			
    -	sprite.verticies = new Float32Array([0, 0,
    -										  sprite.width, 0,
    -										  sprite.width,  sprite.height,
    -										 0,  sprite.height]);
    -					
    -	sprite.uvs = new Float32Array([0, 0,
    -									1, 0,
    -									1, 1,
    -									0, 1]);
    -				
    -	sprite.colors = new Float32Array([1,1,1,1]);
    -	
    -	sprite.indices =  new Uint16Array([0, 1, 3,2])//, 2]);
    -	
    -	sprite._vertexBuffer = gl.createBuffer();
    -	sprite._indexBuffer = gl.createBuffer();
    -	sprite._uvBuffer = gl.createBuffer();
    -	sprite._colorBuffer = gl.createBuffer();
    -						
    -	gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW);
    -
    -	gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer);
    -    gl.bufferData(gl.ARRAY_BUFFER,  sprite.uvs, gl.DYNAMIC_DRAW);
    -
    -    gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW);
    -
    -    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer);
    -    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW);
    -    
    -//    return ( (x > 0) && ((x & (x - 1)) == 0) );
    -
    -	if(sprite.texture.baseTexture._glTexture)
    -	{
    -    	gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture);
    -    	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
    -		gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
    -		sprite.texture.baseTexture._powerOf2 = true;
    -	}
    -	else
    -	{
    -		sprite.texture.baseTexture._powerOf2 = true;
    -	}
    -}
    -
    -/**
    - * Renders a Strip
    - *
    - * @method renderStrip
    - * @param strip {Strip} The strip to render
    - * @param projection {Object}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projection)
    -{
    -	var gl = this.gl;
    -
    -	PIXI.activateStripShader();
    -
    -	var shader = PIXI.stripShader;
    -
    -	var program = shader.program;
    -	
    -	var m = PIXI.mat3.clone(strip.worldTransform);
    -	
    -	PIXI.mat3.transpose(m);
    -	
    -//	console.log(projection)
    -	// set the matrix transform for the 
    - 	gl.uniformMatrix3fv(shader.translationMatrix, false, m);
    -	gl.uniform2f(shader.projectionVector, projection.x, projection.y);
    -	gl.uniform2f(shader.offsetVector, -PIXI.offset.x, -PIXI.offset.y);
    -	
    -	gl.uniform1f(shader.alpha, strip.worldAlpha);
    -
    -	/*
    -	if(strip.blendMode == PIXI.blendModes.NORMAL)
    -	{
    -		gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
    -	}
    -	else
    -	{
    -		gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR);
    -	}
    -	*/
    -	
    -	//console.log("!!")
    -	if(!strip.dirty)
    -	{	
    -		gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer);
    -		gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies)
    -	    gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);
    -		
    -		// update the uvs
    -	   	gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer);
    -	    gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
    -			
    -	    gl.activeTexture(gl.TEXTURE0);
    -	    gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture);
    -		
    -		gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer);
    -	    gl.vertexAttribPointer(shader.colorAttribute, 1, gl.FLOAT, false, 0, 0);
    -		
    -		// dont need to upload!
    -	    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer);
    -	}
    -	else
    -	{
    -		strip.dirty = false;
    -		gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer);
    -		gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW)
    -	    gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);
    -		
    -		// update the uvs
    -	   	gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer);
    -	   	gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW)
    -	    gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
    -			
    -	    gl.activeTexture(gl.TEXTURE0);
    -	    gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture);
    -	//	console.log(strip.texture.baseTexture._glTexture)
    -		gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer);
    -		gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW)
    -	    gl.vertexAttribPointer(shader.colorAttribute, 1, gl.FLOAT, false, 0, 0);
    -		
    -		// dont need to upload!
    -	    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer);
    -	    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW);
    -	    
    -	}
    -	
    -	gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0);
    -    
    -    PIXI.deactivateStripShader();
    -  	//gl.useProgram(PIXI.currentProgram);
    -}
    -
    -/**
    - * Renders a TilingSprite
    - *
    - * @method renderTilingSprite
    - * @param sprite {TilingSprite} The tiling sprite to render
    - * @param projectionMatrix {Object}
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix)
    -{
    -	var gl = this.gl;
    -
    -
    -	var shaderProgram = PIXI.shaderProgram;
    -	
    -	var tilePosition = sprite.tilePosition;
    -	var tileScale = sprite.tileScale;
    -	
    -	var offsetX =  tilePosition.x/sprite.texture.baseTexture.width;
    -	var offsetY =  tilePosition.y/sprite.texture.baseTexture.height;
    -	
    -	var scaleX =  (sprite.width / sprite.texture.baseTexture.width)  / tileScale.x;
    -	var scaleY =  (sprite.height / sprite.texture.baseTexture.height) / tileScale.y;
    -
    -	sprite.uvs[0] = 0 - offsetX;
    -	sprite.uvs[1] = 0 - offsetY;
    -	
    -	sprite.uvs[2] = (1 * scaleX)  -offsetX;
    -	sprite.uvs[3] = 0 - offsetY;
    -	
    -	sprite.uvs[4] = (1 *scaleX) - offsetX;
    -	sprite.uvs[5] = (1 *scaleY) - offsetY;
    -	
    -	sprite.uvs[6] = 0 - offsetX;
    -	sprite.uvs[7] = (1 *scaleY) - offsetY;
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer);
    -	gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs)
    -	
    -	this.renderStrip(sprite, projectionMatrix);
    -}
    -
    -/**
    - * Initializes a strip to be rendered
    - *
    - * @method initStrip
    - * @param strip {Strip} The strip to initialize
    - * @private
    - */
    -PIXI.WebGLRenderGroup.prototype.initStrip = function(strip)
    -{
    -	// build the strip!
    -	var gl = this.gl;
    -	var shaderProgram = this.shaderProgram;
    -	
    -	strip._vertexBuffer = gl.createBuffer();
    -	strip._indexBuffer = gl.createBuffer();
    -	strip._uvBuffer = gl.createBuffer();
    -	strip._colorBuffer = gl.createBuffer();
    -	
    -	gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW);
    -
    -	gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer);
    -    gl.bufferData(gl.ARRAY_BUFFER,  strip.uvs, gl.STATIC_DRAW);
    -
    -    gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer);
    -	gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW);
    -
    -	
    -    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer);
    -    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW);
    -}
    -
    -
    -    
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - diff --git a/docs/files/src_pixi_renderers_webgl_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_webgl_WebGLRenderer.js.html index df7b30e..870cbf4 100644 --- a/docs/files/src_pixi_renderers_webgl_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_webgl_WebGLRenderer.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -178,7 +180,9 @@ PIXI._defaultFrame = new PIXI.Rectangle(0,0,1,1); // an instance of the gl context.. // only one at the moment :/ -PIXI.gl; +PIXI.gl = null; + + /** * the WebGLRenderer is draws the stage and all its content onto a webGL enabled canvas. This renderer @@ -193,120 +197,105 @@ PIXI.gl; * @param view {Canvas} the canvas to use as a view, optional * @param transparent=false {Boolean} the transparency of the render view, default false * @param antialias=false {Boolean} sets antialias (only applicable in chrome at the moment) - * + * */ PIXI.WebGLRenderer = function(width, height, view, transparent, antialias) { - // do a catch.. only 1 webGL renderer.. + if(!PIXI.defaultRenderer)PIXI.defaultRenderer = this; - this.transparent = !!transparent; + this.type = PIXI.WEBGL_RENDERER; - this.width = width || 800; - this.height = height || 600; + // do a catch.. only 1 webGL renderer.. + this.transparent = !!transparent; - this.view = view || document.createElement( 'canvas' ); + this.width = width || 800; + this.height = height || 600; + + this.view = view || document.createElement( 'canvas' ); this.view.width = this.width; - this.view.height = this.height; + this.view.height = this.height; - // deal with losing context.. + // deal with losing context.. var scope = this; - this.view.addEventListener('webglcontextlost', function(event) { scope.handleContextLost(event); }, false) - this.view.addEventListener('webglcontextrestored', function(event) { scope.handleContextRestored(event); }, false) + this.view.addEventListener('webglcontextlost', function(event) { scope.handleContextLost(event); }, false); + this.view.addEventListener('webglcontextrestored', function(event) { scope.handleContextRestored(event); }, false); - this.batchs = []; + this.batchs = []; - var options = { - alpha: this.transparent, - antialias:!!antialias, // SPEED UP?? - premultipliedAlpha:false, - stencil:true - } + this.options = { + alpha: this.transparent, + antialias:!!antialias, // SPEED UP?? + premultipliedAlpha:false, + stencil:true + }; - //try 'experimental-webgl' - try { - PIXI.gl = this.gl = this.view.getContext("experimental-webgl", options); - } catch (e) { - //try 'webgl' - try { - PIXI.gl = this.gl = this.view.getContext("webgl", options); - } catch (e) { - // fail, not able to get a context - throw new Error(" This browser does not support webGL. Try using the canvas renderer" + this); - } - } - - PIXI.initDefaultShaders(); - - - - - // PIXI.activateDefaultShader(); + //try 'experimental-webgl' + try { + this.gl = this.view.getContext('experimental-webgl', this.options); + } catch (e) { + //try 'webgl' + try { + this.gl = this.view.getContext('webgl', this.options); + } catch (e2) { + // fail, not able to get a context + throw new Error(' This browser does not support webGL. Try using the canvas renderer' + this); + } + } var gl = this.gl; + this.glContextId = gl.id = PIXI.WebGLRenderer.glContextId ++; + + if(!PIXI.blendModesWebGL) + { + PIXI.blendModesWebGL = []; + + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.SRC_ALPHA, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.MULTIPLY] = [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.SRC_ALPHA, gl.ONE]; + } + - gl.useProgram(PIXI.defaultShader.program); + + this.projection = new PIXI.Point(); + this.projection.x = this.width/2; + this.projection.y = -this.height/2; - PIXI.WebGLRenderer.gl = gl; - - this.batch = new PIXI.WebGLBatch(gl); - gl.disable(gl.DEPTH_TEST); - gl.disable(gl.CULL_FACE); - - gl.enable(gl.BLEND); - gl.colorMask(true, true, true, this.transparent); - - PIXI.projection = new PIXI.Point(400, 300); - PIXI.offset = new PIXI.Point(0, 0); - - // TODO remove thease globals.. + this.offset = new PIXI.Point(0, 0); this.resize(this.width, this.height); this.contextLost = false; - //PIXI.pushShader(PIXI.defaultShader); + // time to create the render managers! each one focuses on managine a state in webGL + this.shaderManager = new PIXI.WebGLShaderManager(gl); // deals with managing the shader programs and their attribs + this.spriteBatch = new PIXI.WebGLSpriteBatch(gl); // manages the rendering of sprites + this.maskManager = new PIXI.WebGLMaskManager(gl); // manages the masks using the stencil buffer + this.filterManager = new PIXI.WebGLFilterManager(gl, this.transparent); // manages the filters - this.stageRenderGroup = new PIXI.WebGLRenderGroup(this.gl); - -} + // + this.renderSession = {}; + this.renderSession.gl = this.gl; + this.renderSession.shaderManager = this.shaderManager; + this.renderSession.maskManager = this.maskManager; + this.renderSession.filterManager = this.filterManager; + this.renderSession.spriteBatch = this.spriteBatch; + + + gl.useProgram(this.shaderManager.defaultShader.program); + + PIXI.WebGLRenderer.gl = gl; + + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.CULL_FACE); + + gl.enable(gl.BLEND); + gl.colorMask(true, true, true, this.transparent); +}; // constructor PIXI.WebGLRenderer.prototype.constructor = PIXI.WebGLRenderer; -/** - * Gets a new WebGLBatch from the pool - * - * @static - * @method getBatch - * @return {WebGLBatch} - * @private - */ -PIXI.WebGLRenderer.getBatch = function() -{ - if(PIXI._batchs.length == 0) - { - return new PIXI.WebGLBatch(PIXI.WebGLRenderer.gl); - } - else - { - return PIXI._batchs.pop(); - } -} - -/** - * Puts a batch back into the pool - * - * @static - * @method returnBatch - * @param batch {WebGLBatch} The batch to return - * @private - */ -PIXI.WebGLRenderer.returnBatch = function(batch) -{ - batch.clean(); - PIXI._batchs.push(batch); -} - /** * Renders the stage to its webGL view * @@ -315,68 +304,95 @@ PIXI.WebGLRenderer.returnBatch = function(batch) */ PIXI.WebGLRenderer.prototype.render = function(stage) { - if(this.contextLost)return; - - - // if rendering a new stage clear the batchs.. - if(this.__stage !== stage) - { - // TODO make this work - // dont think this is needed any more? - this.__stage = stage; - this.stageRenderGroup.setRenderable(stage); - } + if(this.contextLost)return; - // update any textures - PIXI.WebGLRenderer.updateTextures(); - - // update the scene graph - PIXI.visibleCount++; - stage.updateTransform(); - - var gl = this.gl; - - // -- Does this need to be set every frame? -- // - gl.colorMask(true, true, true, this.transparent); - gl.viewport(0, 0, this.width, this.height); - - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); - gl.clear(gl.COLOR_BUFFER_BIT); - // HACK TO TEST - - this.stageRenderGroup.backgroundColor = stage.backgroundColorSplit; - - PIXI.projection.x = this.width/2; - PIXI.projection.y = -this.height/2; - - this.stageRenderGroup.render(PIXI.projection); - - // interaction - // run interaction! - if(stage.interactive) - { - //need to add some events! - if(!stage._interactiveEventsAdded) - { - stage._interactiveEventsAdded = true; - stage.interactionManager.setTarget(this); - } - } - - // after rendering lets confirm all frames that have been uodated.. - if(PIXI.Texture.frameUpdates.length > 0) - { - for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) - { - PIXI.Texture.frameUpdates[i].updateFrame = false; - }; - - PIXI.Texture.frameUpdates = []; - } -} + // if rendering a new stage clear the batchs.. + if(this.__stage !== stage) + { + // TODO make this work + // dont think this is needed any more? + this.__stage = stage; + } + + // update any textures this includes uvs and uploading them to the gpu + PIXI.WebGLRenderer.updateTextures(); + + // update the scene graph + stage.updateTransform(); + + var gl = this.gl; + + // -- Does this need to be set every frame? -- // + gl.colorMask(true, true, true, this.transparent); + gl.viewport(0, 0, this.width, this.height); + + // make sure we are bound to the main frame buffer + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + + + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); + gl.clear(gl.COLOR_BUFFER_BIT); + + // this.projection.x = this.width/2; + //this.projection.y = -this.height/2; + + this.renderDisplayObject( stage, this.projection ); + + // interaction + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + /* + //can simulate context loss in Chrome like so: + this.view.onmousedown = function(ev) { + console.dir(this.gl.getSupportedExtensions()); + var ext = ( + gl.getExtension("WEBGL_scompressed_texture_s3tc") + // gl.getExtension("WEBGL_compressed_texture_s3tc") || + // gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || + // gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc") + ); + console.dir(ext); + var loseCtx = this.gl.getExtension("WEBGL_lose_context"); + console.log("killing context"); + loseCtx.loseContext(); + setTimeout(function() { + console.log("restoring context..."); + loseCtx.restoreContext(); + }.bind(this), 1000); + }.bind(this); + */ +}; + +PIXI.WebGLRenderer.prototype.renderDisplayObject = function(displayObject, projection) +{ + // reset the render session data.. + this.renderSession.drawCount = 0; + this.renderSession.currentBlendMode = 9999; + + this.renderSession.projection = projection; + this.renderSession.offset = this.offset; + + // start the sprite batch + this.spriteBatch.begin(this.renderSession); + + // start the filter manager + this.filterManager.begin(this.renderSession, null); + + // render the scene! + displayObject._renderWebGL(this.renderSession); + + // finish the sprite batch + this.spriteBatch.end(); +}; /** * Updates the textures loaded into this webgl renderer @@ -387,12 +403,23 @@ PIXI.WebGLRenderer.prototype.render = function(stage) */ PIXI.WebGLRenderer.updateTextures = function() { - //TODO break this out into a texture manager... - for (var i=0; i < PIXI.texturesToUpdate.length; i++) PIXI.WebGLRenderer.updateTexture(PIXI.texturesToUpdate[i]); - for (var i=0; i < PIXI.texturesToDestroy.length; i++) PIXI.WebGLRenderer.destroyTexture(PIXI.texturesToDestroy[i]); - PIXI.texturesToUpdate = []; - PIXI.texturesToDestroy = []; -} + var i = 0; + + //TODO break this out into a texture manager... + //for (i = 0; i < PIXI.texturesToUpdate.length; i++) + // PIXI.WebGLRenderer.updateTexture(PIXI.texturesToUpdate[i]); + + + for (i=0; i < PIXI.Texture.frameUpdates.length; i++) + PIXI.WebGLRenderer.updateTextureFrame(PIXI.Texture.frameUpdates[i]); + + for (i = 0; i < PIXI.texturesToDestroy.length; i++) + PIXI.WebGLRenderer.destroyTexture(PIXI.texturesToDestroy[i]); + + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + PIXI.Texture.frameUpdates = []; +}; /** * Updates a loaded webgl texture @@ -402,41 +429,44 @@ PIXI.WebGLRenderer.updateTextures = function() * @param texture {Texture} The texture to update * @private */ + + /* PIXI.WebGLRenderer.updateTexture = function(texture) { - //TODO break this out into a texture manager... - var gl = PIXI.gl; - - if(!texture._glTexture) - { - texture._glTexture = gl.createTexture(); - } + //TODO break this out into a texture manager... + var gl = this.gl; - if(texture.hasLoaded) - { - gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); - // reguler... + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, texture.scaleMode === PIXI.BaseTexture.SCALE_MODE.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.BaseTexture.SCALE_MODE.LINEAR ? gl.LINEAR : gl.NEAREST); - if(!texture._powerOf2) - { - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - } - else - { - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - } + // reguler... - gl.bindTexture(gl.TEXTURE_2D, null); - } -} + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } +}; +*/ /** * Destroys a loaded webgl texture @@ -447,15 +477,24 @@ PIXI.WebGLRenderer.updateTexture = function(texture) */ PIXI.WebGLRenderer.destroyTexture = function(texture) { - //TODO break this out into a texture manager... - var gl = PIXI.gl; + //TODO break this out into a texture manager... + var gl = PIXI.gl; - if(texture._glTexture) - { - texture._glTexture = gl.createTexture(); - gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); - } -} + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +}; + +PIXI.WebGLRenderer.updateTextureFrame = function(texture) +{ + texture.updateFrame = false; + + // now set the uvs. Figured that the uv data sits with a texture rather than a sprite. + // so uv data is stored on the texture itself + texture._updateWebGLuvs(); +}; /** * resizes the webGL view to the specified width and height @@ -466,27 +505,49 @@ PIXI.WebGLRenderer.destroyTexture = function(texture) */ PIXI.WebGLRenderer.prototype.resize = function(width, height) { - this.width = width; - this.height = height; + this.width = width; + this.height = height; - this.view.width = width; - this.view.height = height; + this.view.width = width; + this.view.height = height; - this.gl.viewport(0, 0, this.width, this.height); + this.gl.viewport(0, 0, this.width, this.height); + + this.projection.x = this.width/2; + this.projection.y = -this.height/2; +}; - //var projectionMatrix = this.projectionMatrix; +PIXI.createWebGLTexture = function(texture, gl) +{ + - PIXI.projection.x = this.width/2; - PIXI.projection.y = -this.height/2; - - //PIXI.size.x = this.width/2; - //PIXI.size.y = -this.height/2; + if(texture.hasLoaded) + { + texture._glTextures[gl.id] = gl.createTexture(); + + gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); -// projectionMatrix[0] = 2/this.width; -// projectionMatrix[5] = -2/this.height; -// projectionMatrix[12] = -1; -// projectionMatrix[13] = 1; -} + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, texture.scaleMode === PIXI.BaseTexture.SCALE_MODE.LINEAR ? gl.LINEAR : gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.BaseTexture.SCALE_MODE.LINEAR ? gl.LINEAR : gl.NEAREST); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } +}; /** * Handles a lost webgl context @@ -497,9 +558,9 @@ PIXI.WebGLRenderer.prototype.resize = function(width, height) */ PIXI.WebGLRenderer.prototype.handleContextLost = function(event) { - event.preventDefault(); - this.contextLost = true; -} + event.preventDefault(); + this.contextLost = true; +}; /** * Handles a restored webgl context @@ -508,31 +569,55 @@ PIXI.WebGLRenderer.prototype.handleContextLost = function(event) * @param event {Event} * @private */ -PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +PIXI.WebGLRenderer.prototype.handleContextRestored = function() { - this.gl = this.view.getContext("experimental-webgl", { - alpha: true - }); + + //try 'experimental-webgl' + try { + this.gl = this.view.getContext('experimental-webgl', this.options); + } catch (e) { + //try 'webgl' + try { + this.gl = this.view.getContext('webgl', this.options); + } catch (e2) { + // fail, not able to get a context + throw new Error(' This browser does not support webGL. Try using the canvas renderer' + this); + } + } - this.initShaders(); + var gl = this.gl; + gl.id = PIXI.WebGLRenderer.glContextId ++; - for(var key in PIXI.TextureCache) - { - var texture = PIXI.TextureCache[key].baseTexture; - texture._glTexture = null; - PIXI.WebGLRenderer.updateTexture(texture); - }; - for (var i=0; i < this.batchs.length; i++) - { - this.batchs[i].restoreLostContext(this.gl)// - this.batchs[i].dirty = true; - }; - PIXI._restoreBatchs(this.gl); + // need to set the context... + this.shaderManager.setContext(gl); + this.spriteBatch.setContext(gl); + this.maskManager.setContext(gl); + this.filterManager.setContext(gl); - this.contextLost = false; -} + + this.renderSession.gl = this.gl; + + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.CULL_FACE); + + gl.enable(gl.BLEND); + gl.colorMask(true, true, true, this.transparent); + + this.gl.viewport(0, 0, this.width, this.height); + + for(var key in PIXI.TextureCache) + { + var texture = PIXI.TextureCache[key].baseTexture; + texture._glTextures = []; + } + + this.contextLost = false; + +}; + +PIXI.WebGLRenderer.glContextId = 0;
    diff --git a/docs/files/src_pixi_renderers_webgl_WebGLShaders.js.html b/docs/files/src_pixi_renderers_webgl_WebGLShaders.js.html index 085bec1..d841836 100644 --- a/docs/files/src_pixi_renderers_webgl_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_webgl_WebGLShaders.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,61 +176,73 @@ * @author Mat Groves http://matgroves.com/ @Doormat23 */ - -PIXI.initDefaultShaders = function() +PIXI.initDefaultShaders = function() { - PIXI.primitiveShader = new PIXI.PrimitiveShader(); - PIXI.primitiveShader.init(); + // PIXI.primitiveShader = new PIXI.PrimitiveShader(); + // PIXI.primitiveShader.init(); - PIXI.stripShader = new PIXI.StripShader(); - PIXI.stripShader.init(); + PIXI.stripShader = new PIXI.StripShader(); + PIXI.stripShader.init(); - PIXI.defaultShader = new PIXI.PixiShader(); - PIXI.defaultShader.init(); + // PIXI.defaultShader = new PIXI.PixiShader(); +// PIXI.defaultShader.init(); - var gl = PIXI.gl; - var shaderProgram = PIXI.defaultShader.program; - + /* var gl = PIXI.gl; + var shaderProgram = PIXI.defaultShader.program; - gl.useProgram(shaderProgram); - - gl.enableVertexAttribArray(PIXI.defaultShader.aVertexPosition); - gl.enableVertexAttribArray(PIXI.defaultShader.colorAttribute); - gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord); -} + gl.useProgram(shaderProgram); + gl.enableVertexAttribArray(PIXI.defaultShader.aVertexPosition); + gl.enableVertexAttribArray(PIXI.defaultShader.colorAttribute); + gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord);*/ +}; +/* PIXI.activatePrimitiveShader = function() { - var gl = PIXI.gl; - - gl.useProgram(PIXI.primitiveShader.program); - gl.disableVertexAttribArray(PIXI.defaultShader.aTextureCoord); -} + var gl = PIXI.gl; + + gl.useProgram(PIXI.primitiveShader.program); + + gl.disableVertexAttribArray(PIXI.defaultShader.aVertexPosition); + gl.disableVertexAttribArray(PIXI.defaultShader.colorAttribute); + gl.disableVertexAttribArray(PIXI.defaultShader.aTextureCoord); + + gl.enableVertexAttribArray(PIXI.primitiveShader.aVertexPosition); + gl.enableVertexAttribArray(PIXI.primitiveShader.colorAttribute); +}; PIXI.deactivatePrimitiveShader = function() { - var gl = PIXI.gl; + var gl = PIXI.gl; - gl.useProgram(PIXI.defaultShader.program); - gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord); -} + gl.useProgram(PIXI.defaultShader.program); + gl.disableVertexAttribArray(PIXI.primitiveShader.aVertexPosition); + gl.disableVertexAttribArray(PIXI.primitiveShader.colorAttribute); + + gl.enableVertexAttribArray(PIXI.defaultShader.aVertexPosition); + gl.enableVertexAttribArray(PIXI.defaultShader.colorAttribute); + gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord); +}; +*/ + +/* PIXI.activateStripShader = function() { - var gl = PIXI.gl; - - gl.useProgram(PIXI.stripShader.program); + var gl = PIXI.gl; + + gl.useProgram(PIXI.stripShader.program); // gl.disableVertexAttribArray(PIXI.defaultShader.aTextureCoord); -} +}; PIXI.deactivateStripShader = function() { - var gl = PIXI.gl; - - gl.useProgram(PIXI.defaultShader.program); - //gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord); -} + var gl = PIXI.gl; + gl.useProgram(PIXI.defaultShader.program); + //gl.enableVertexAttribArray(PIXI.defaultShader.aTextureCoord); +}; +*/ /* SHADER COMPILER HELPERS @@ -236,48 +250,47 @@ SHADER COMPILER HELPERS PIXI.CompileVertexShader = function(gl, shaderSrc) { - return PIXI._CompileShader(gl, shaderSrc, gl.VERTEX_SHADER); -} + return PIXI._CompileShader(gl, shaderSrc, gl.VERTEX_SHADER); +}; PIXI.CompileFragmentShader = function(gl, shaderSrc) { - return PIXI._CompileShader(gl, shaderSrc, gl.FRAGMENT_SHADER); -} + return PIXI._CompileShader(gl, shaderSrc, gl.FRAGMENT_SHADER); +}; PIXI._CompileShader = function(gl, shaderSrc, shaderType) { - var src = shaderSrc.join("\n"); - var shader = gl.createShader(shaderType); - gl.shaderSource(shader, src); - gl.compileShader(shader); + var src = shaderSrc.join("\n"); + var shader = gl.createShader(shaderType); + gl.shaderSource(shader, src); + gl.compileShader(shader); - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - console.log(gl.getShaderInfoLog(shader)); - return null; - } + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + window.console.log(gl.getShaderInfoLog(shader)); + return null; + } - return shader; -} + return shader; +}; - -PIXI.compileProgram = function(vertexSrc, fragmentSrc) +PIXI.compileProgram = function(gl, vertexSrc, fragmentSrc) { - var gl = PIXI.gl; - var fragmentShader = PIXI.CompileFragmentShader(gl, fragmentSrc); - var vertexShader = PIXI.CompileVertexShader(gl, vertexSrc); - - var shaderProgram = gl.createProgram(); - + //var gl = PIXI.gl; + var fragmentShader = PIXI.CompileFragmentShader(gl, fragmentSrc); + var vertexShader = PIXI.CompileVertexShader(gl, vertexSrc); + + var shaderProgram = gl.createProgram(); + gl.attachShader(shaderProgram, vertexShader); gl.attachShader(shaderProgram, fragmentShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - console.log("Could not initialise shaders"); + window.console.log("Could not initialise shaders"); } - return shaderProgram; -} + return shaderProgram; +};
    diff --git a/docs/files/src_pixi_renderers_webgl_utils_WebGLFilterManager.js.html b/docs/files/src_pixi_renderers_webgl_utils_WebGLFilterManager.js.html new file mode 100644 index 0000000..8f8901b --- /dev/null +++ b/docs/files/src_pixi_renderers_webgl_utils_WebGLFilterManager.js.html @@ -0,0 +1,751 @@ + + + + + src/pixi/renderers/webgl/utils/WebGLFilterManager.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/webgl/utils/WebGLFilterManager.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +
    +PIXI.WebGLFilterManager = function(gl, transparent)
    +{
    +    this.transparent = transparent;
    +
    +    this.filterStack = [];
    +    
    +    this.offsetX = 0;
    +    this.offsetY = 0;
    +
    +    this.setContext(gl);
    +};
    +
    +// API
    +
    +PIXI.WebGLFilterManager.prototype.setContext = function(gl)
    +{
    +    this.gl = gl;
    +    this.texturePool = [];
    +
    +    this.initShaderBuffers();
    +};
    +
    +PIXI.WebGLFilterManager.prototype.begin = function(renderSession, buffer)
    +{
    +    this.renderSession = renderSession;
    +    this.defaultShader = renderSession.shaderManager.defaultShader;
    +
    +    var projection = this.renderSession.projection;
    +
    +    this.width = projection.x * 2;
    +    this.height = -projection.y * 2;
    +    this.buffer = buffer;
    +};
    +
    +PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock)
    +{
    +    var gl = this.gl;
    +
    +    var projection = this.renderSession.projection;
    +    var offset = this.renderSession.offset;
    +
    +
    +    // filter program
    +    // OPTIMISATION - the first filter is free if its a simple color change?
    +    this.filterStack.push(filterBlock);
    +
    +    var filter = filterBlock.filterPasses[0];
    +
    +    this.offsetX += filterBlock.target.filterArea.x;
    +    this.offsetY += filterBlock.target.filterArea.y;
    +
    +    var texture = this.texturePool.pop();
    +    if(!texture)
    +    {
    +        texture = new PIXI.FilterTexture(this.gl, this.width, this.height);
    +    }
    +    else
    +    {
    +        texture.resize(this.width, this.height);
    +    }
    +
    +    gl.bindTexture(gl.TEXTURE_2D,  texture.texture);
    +
    +    this.getBounds(filterBlock.target);
    +
    +    filterBlock.target.filterArea = filterBlock.target.getBounds();
    +
    +   // console.log(filterBlock.target.filterArea);
    +    // addpadding?
    +    //displayObject.filterArea.x
    +
    +    var filterArea = filterBlock.target.filterArea;
    +
    +    var padidng = filter.padding;
    +    filterArea.x -= padidng;
    +    filterArea.y -= padidng;
    +    filterArea.width += padidng * 2;
    +    filterArea.height += padidng * 2;
    +
    +    // cap filter to screen size..
    +    if(filterArea.x < 0)filterArea.x = 0;
    +    if(filterArea.width > this.width)filterArea.width = this.width;
    +    if(filterArea.y < 0)filterArea.y = 0;
    +    if(filterArea.height > this.height)filterArea.height = this.height;
    +
    +    //gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,  filterArea.width, filterArea.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    +    gl.bindFramebuffer(gl.FRAMEBUFFER, texture.frameBuffer);
    +
    +    //console.log(filterArea)
    +    // set view port
    +    gl.viewport(0, 0, filterArea.width, filterArea.height);
    +
    +    projection.x = filterArea.width/2;
    +    projection.y = -filterArea.height/2;
    +
    +    offset.x = -filterArea.x;
    +    offset.y = -filterArea.y;
    +
    +    //console.log(PIXI.defaultShader.projectionVector)
    +    // update projection
    +    gl.uniform2f(this.defaultShader.projectionVector, filterArea.width/2, -filterArea.height/2);
    +    gl.uniform2f(this.defaultShader.offsetVector, -filterArea.x, -filterArea.y);
    +    //PIXI.primitiveProgram
    +
    +    gl.colorMask(true, true, true, true);
    +    gl.clearColor(0,0,0, 0);
    +    gl.clear(gl.COLOR_BUFFER_BIT);
    +
    +    //filter.texture = texture;
    +    filterBlock._glFilterTexture = texture;
    +
    +    //console.log("PUSH")
    +};
    +
    +
    +PIXI.WebGLFilterManager.prototype.popFilter = function()
    +{
    +    var gl = this.gl;
    +    var filterBlock = this.filterStack.pop();
    +    var filterArea = filterBlock.target.filterArea;
    +    var texture = filterBlock._glFilterTexture;
    +    var projection = this.renderSession.projection;
    +    var offset = this.renderSession.offset;
    +
    +    if(filterBlock.filterPasses.length > 1)
    +    {
    +        gl.viewport(0, 0, filterArea.width, filterArea.height);
    +
    +        gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +
    +        this.vertexArray[0] = 0;
    +        this.vertexArray[1] = filterArea.height;
    +
    +        this.vertexArray[2] = filterArea.width;
    +        this.vertexArray[3] = filterArea.height;
    +
    +        this.vertexArray[4] = 0;
    +        this.vertexArray[5] = 0;
    +
    +        this.vertexArray[6] = filterArea.width;
    +        this.vertexArray[7] = 0;
    +
    +        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray);
    +
    +        gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    +        // nnow set the uvs..
    +        this.uvArray[2] = filterArea.width/this.width;
    +        this.uvArray[5] = filterArea.height/this.height;
    +        this.uvArray[6] = filterArea.width/this.width;
    +        this.uvArray[7] = filterArea.height/this.height;
    +
    +        gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray);
    +
    +        var inputTexture = texture;
    +        var outputTexture = this.texturePool.pop();
    +        if(!outputTexture)outputTexture = new PIXI.FilterTexture(this.gl, this.width, this.height);
    +
    +        // need to clear this FBO as it may have some left over elements from a prvious filter.
    +        gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer );
    +        gl.clear(gl.COLOR_BUFFER_BIT);
    +
    +        gl.disable(gl.BLEND);
    +
    +        for (var i = 0; i < filterBlock.filterPasses.length-1; i++)
    +        {
    +            var filterPass = filterBlock.filterPasses[i];
    +
    +            gl.bindFramebuffer(gl.FRAMEBUFFER, outputTexture.frameBuffer );
    +
    +            // set texture
    +            gl.activeTexture(gl.TEXTURE0);
    +            gl.bindTexture(gl.TEXTURE_2D, inputTexture.texture);
    +
    +            // draw texture..
    +            //filterPass.applyFilterPass(filterArea.width, filterArea.height);
    +            this.applyFilterPass(filterPass, filterArea, filterArea.width, filterArea.height);
    +
    +            // swap the textures..
    +            var temp = inputTexture;
    +            inputTexture = outputTexture;
    +            outputTexture = temp;
    +        }
    +
    +        gl.enable(gl.BLEND);
    +
    +        texture = inputTexture;
    +        this.texturePool.push(outputTexture);
    +    }
    +
    +    var filter = filterBlock.filterPasses[filterBlock.filterPasses.length-1];
    +
    +    this.offsetX -= filterArea.x;
    +    this.offsetY -= filterArea.y;
    +
    +
    +    var sizeX = this.width;
    +    var sizeY = this.height;
    +
    +    var offsetX = 0;
    +    var offsetY = 0;
    +
    +    var buffer = this.buffer;
    +
    +    // time to render the filters texture to the previous scene
    +    if(this.filterStack.length === 0)
    +    {
    +        gl.colorMask(true, true, true, this.transparent);
    +    }
    +    else
    +    {
    +        var currentFilter = this.filterStack[this.filterStack.length-1];
    +        filterArea = currentFilter.target.filterArea;
    +
    +        sizeX = filterArea.width;
    +        sizeY = filterArea.height;
    +
    +        offsetX = filterArea.x;
    +        offsetY = filterArea.y;
    +
    +        buffer =  currentFilter._glFilterTexture.frameBuffer;
    +    }
    +
    +
    +
    +    // TODO need toremove thease global elements..
    +    projection.x = sizeX/2;
    +    projection.y = -sizeY/2;
    +
    +    offset.x = offsetX;
    +    offset.y = offsetY;
    +
    +    filterArea = filterBlock.target.filterArea;
    +
    +    var x = filterArea.x-offsetX;
    +    var y = filterArea.y-offsetY;
    +
    +    // update the buffers..
    +    // make sure to flip the y!
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +
    +    this.vertexArray[0] = x;
    +    this.vertexArray[1] = y + filterArea.height;
    +
    +    this.vertexArray[2] = x + filterArea.width;
    +    this.vertexArray[3] = y + filterArea.height;
    +
    +    this.vertexArray[4] = x;
    +    this.vertexArray[5] = y;
    +
    +    this.vertexArray[6] = x + filterArea.width;
    +    this.vertexArray[7] = y;
    +
    +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexArray);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    +
    +    this.uvArray[2] = filterArea.width/this.width;
    +    this.uvArray[5] = filterArea.height/this.height;
    +    this.uvArray[6] = filterArea.width/this.width;
    +    this.uvArray[7] = filterArea.height/this.height;
    +
    +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvArray);
    +
    +    gl.viewport(0, 0, sizeX, sizeY);
    +    // bind the buffer
    +    gl.bindFramebuffer(gl.FRAMEBUFFER, buffer );
    +
    +    // set the blend mode! 
    +    //gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)
    +
    +    // set texture
    +    gl.activeTexture(gl.TEXTURE0);
    +    gl.bindTexture(gl.TEXTURE_2D, texture.texture);
    +
    +    // apply!
    +    //filter.applyFilterPass(sizeX, sizeY);
    +    this.applyFilterPass(filter, filterArea, sizeX, sizeY);
    +
    +    // now restore the regular shader..
    +    gl.useProgram(this.defaultShader.program);
    +    gl.uniform2f(this.defaultShader.projectionVector, sizeX/2, -sizeY/2);
    +    gl.uniform2f(this.defaultShader.offsetVector, -offsetX, -offsetY);
    +
    +    // return the texture to the pool
    +    this.texturePool.push(texture);
    +    filterBlock._glFilterTexture = null;
    +};
    +
    +PIXI.WebGLFilterManager.prototype.applyFilterPass = function(filter, filterArea, width, height)
    +{
    +    // use program
    +    var gl = this.gl;
    +    var shader = filter.shaders[gl.id];
    +
    +    if(!shader)
    +    {
    +        shader = new PIXI.PixiShader(gl);
    +
    +        shader.fragmentSrc = filter.fragmentSrc;
    +        shader.uniforms = filter.uniforms;
    +        shader.init();
    +
    +        filter.shaders[gl.id] = shader;
    +    }
    +
    +    // set the shader
    +    gl.useProgram(shader.program);
    +
    +    gl.uniform2f(shader.projectionVector, width/2, -height/2);
    +    gl.uniform2f(shader.offsetVector, 0,0);
    +
    +    if(filter.uniforms.dimensions)
    +    {
    +        //console.log(filter.uniforms.dimensions)
    +        filter.uniforms.dimensions.value[0] = this.width;//width;
    +        filter.uniforms.dimensions.value[1] = this.height;//height;
    +        filter.uniforms.dimensions.value[2] = this.vertexArray[0];
    +        filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height;
    +    //  console.log(this.vertexArray[5])
    +    }
    +
    +    shader.syncUniforms();
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +    gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 0, 0);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    +    gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer);
    +    gl.vertexAttribPointer(shader.colorAttribute, 1, gl.FLOAT, false, 0, 0);
    +
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    +
    +    // draw the filter...
    +    gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );
    +};
    +
    +PIXI.WebGLFilterManager.prototype.initShaderBuffers = function()
    +{
    +    var gl = this.gl;
    +
    +    // create some buffers
    +    this.vertexBuffer = gl.createBuffer();
    +    this.uvBuffer = gl.createBuffer();
    +    this.colorBuffer = gl.createBuffer();
    +    this.indexBuffer = gl.createBuffer();
    +
    +
    +    // bind and upload the vertexs..
    +    // keep a refferance to the vertexFloatData..
    +    this.vertexArray = new Float32Array([0.0, 0.0,
    +                                         1.0, 0.0,
    +                                         0.0, 1.0,
    +                                         1.0, 1.0]);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +    gl.bufferData(
    +    gl.ARRAY_BUFFER,
    +    this.vertexArray,
    +    gl.STATIC_DRAW);
    +
    +
    +    // bind and upload the uv buffer
    +    this.uvArray = new Float32Array([0.0, 0.0,
    +                                     1.0, 0.0,
    +                                     0.0, 1.0,
    +                                     1.0, 1.0]);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
    +    gl.bufferData(
    +    gl.ARRAY_BUFFER,
    +    this.uvArray,
    +    gl.STATIC_DRAW);
    +
    +    this.colorArray = new Float32Array([1.0, 1.0 , 1.0, 1.0]);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer);
    +    gl.bufferData(
    +    gl.ARRAY_BUFFER,
    +    this.colorArray,
    +    gl.STATIC_DRAW);
    +
    +    // bind and upload the index
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    +    gl.bufferData(
    +    gl.ELEMENT_ARRAY_BUFFER,
    +    new Uint16Array([0, 1, 2, 1, 3, 2]),
    +    gl.STATIC_DRAW);
    +};
    +
    +PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject)
    +{
    +    // time to get the width and height of the object!
    +    var worldTransform, width, height, aX, aY, w0, w1, h0, h1, doTest;
    +    var a, b, c, d, tx, ty, x1, x2, x3, x4, y1, y2, y3, y4;
    +
    +    var tempObject = displayObject.first;
    +    var testObject = displayObject.last._iNext;
    +
    +    var maxX = -Infinity;
    +    var maxY = -Infinity;
    +
    +    var minX = Infinity;
    +    var minY = Infinity;
    +
    +    do
    +    {
    +        // TODO can be optimized! - what if there is no scale / rotation?
    +
    +        if(tempObject.visible)
    +        {
    +            if(tempObject instanceof PIXI.Sprite)
    +            {
    +                width = tempObject.texture.frame.width;
    +                height = tempObject.texture.frame.height;
    +
    +                // TODO trim??
    +                aX = tempObject.anchor.x;
    +                aY = tempObject.anchor.y;
    +                w0 = width * (1-aX);
    +                w1 = width * -aX;
    +
    +                h0 = height * (1-aY);
    +                h1 = height * -aY;
    +
    +                doTest = true;
    +            }
    +            else if(tempObject instanceof PIXI.Graphics)
    +            {
    +                tempObject.updateFilterBounds();
    +
    +                var bounds = tempObject.bounds;
    +
    +                width = bounds.width;
    +                height = bounds.height;
    +
    +                w0 = bounds.x;
    +                w1 = bounds.x + bounds.width;
    +
    +                h0 = bounds.y;
    +                h1 = bounds.y + bounds.height;
    +
    +                doTest = true;
    +            }
    +        }
    +
    +        if(doTest)
    +        {
    +            worldTransform = tempObject.worldTransform;
    +
    +            a = worldTransform[0];
    +            b = worldTransform[3];
    +            c = worldTransform[1];
    +            d = worldTransform[4];
    +            tx = worldTransform[2];
    +            ty = worldTransform[5];
    +
    +            x1 = a * w1 + c * h1 + tx;
    +            y1 = d * h1 + b * w1 + ty;
    +
    +            x2 = a * w0 + c * h1 + tx;
    +            y2 = d * h1 + b * w0 + ty;
    +
    +            x3 = a * w0 + c * h0 + tx;
    +            y3 = d * h0 + b * w0 + ty;
    +
    +            x4 =  a * w1 + c * h0 + tx;
    +            y4 =  d * h0 + b * w1 + ty;
    +
    +            minX = x1 < minX ? x1 : minX;
    +            minX = x2 < minX ? x2 : minX;
    +            minX = x3 < minX ? x3 : minX;
    +            minX = x4 < minX ? x4 : minX;
    +
    +            minY = y1 < minY ? y1 : minY;
    +            minY = y2 < minY ? y2 : minY;
    +            minY = y3 < minY ? y3 : minY;
    +            minY = y4 < minY ? y4 : minY;
    +
    +            maxX = x1 > maxX ? x1 : maxX;
    +            maxX = x2 > maxX ? x2 : maxX;
    +            maxX = x3 > maxX ? x3 : maxX;
    +            maxX = x4 > maxX ? x4 : maxX;
    +
    +            maxY = y1 > maxY ? y1 : maxY;
    +            maxY = y2 > maxY ? y2 : maxY;
    +            maxY = y3 > maxY ? y3 : maxY;
    +            maxY = y4 > maxY ? y4 : maxY;
    +        }
    +
    +        doTest = false;
    +        tempObject = tempObject._iNext;
    +
    +    }
    +    while(tempObject !== testObject);
    +
    +    // maximum bounds is the size of the screen..
    +    //minX = minX > 0 ? minX : 0;
    +    //minY = minY > 0 ? minY : 0;
    +
    +    displayObject.filterArea.x = minX;
    +    displayObject.filterArea.y = minY;
    +
    +//  console.log(maxX+ " : " + minX)
    +    displayObject.filterArea.width = maxX - minX;
    +    displayObject.filterArea.height = maxY - minY;
    +};
    +
    +PIXI.FilterTexture = function(gl, width, height)
    +{
    +   // var gl = PIXI.gl;
    +    this.gl = gl;
    +
    +    // next time to create a frame buffer and texture
    +    this.frameBuffer = gl.createFramebuffer();
    +    this.texture = gl.createTexture();
    +
    +    gl.bindTexture(gl.TEXTURE_2D,  this.texture);
    +    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    +    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    +    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    +    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    +    gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer );
    +
    +    gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer );
    +    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texture, 0);
    +
    +    this.resize(width, height);
    +};
    +
    +PIXI.FilterTexture.prototype.clear = function()
    +{
    +    var gl = this.gl;
    +    
    +    gl.clearColor(0,0,0, 0);
    +    gl.clear(gl.COLOR_BUFFER_BIT);
    +};
    +
    +PIXI.FilterTexture.prototype.resize = function(width, height)
    +{
    +    if(this.width === width && this.height === height) return;
    +
    +    this.width = width;
    +    this.height = height;
    +
    +    var gl = this.gl;
    +
    +    gl.bindTexture(gl.TEXTURE_2D,  this.texture);
    +    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,  width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    +
    +};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_renderers_webgl_utils_WebGLGraphics.js.html b/docs/files/src_pixi_renderers_webgl_utils_WebGLGraphics.js.html new file mode 100644 index 0000000..0859b40 --- /dev/null +++ b/docs/files/src_pixi_renderers_webgl_utils_WebGLGraphics.js.html @@ -0,0 +1,727 @@ + + + + + src/pixi/renderers/webgl/utils/WebGLGraphics.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/webgl/utils/WebGLGraphics.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * A set of functions used by the webGL renderer to draw the primitive graphics data
    + *
    + * @class CanvasGraphics
    + */
    +PIXI.WebGLGraphics = function()
    +{
    +
    +};
    +
    +/**
    + * Renders the graphics object
    + *
    + * @static
    + * @private
    + * @method renderGraphics
    + * @param graphics {Graphics}
    + * @param projection {Object}
    + */
    +PIXI.WebGLGraphics.renderGraphics = function(graphics, renderSession)//projection, offset)
    +{
    +    var gl = renderSession.gl;
    +    var projection = renderSession.projection,
    +        offset = renderSession.offset,
    +        shader = renderSession.shaderManager.primitiveShader;
    +
    +    if(!graphics._webGL[gl.id])graphics._webGL[gl.id] = {points:[], indices:[], lastIndex:0,
    +                                           buffer:gl.createBuffer(),
    +                                           indexBuffer:gl.createBuffer()};
    +
    +    var webGL = graphics._webGL[gl.id];
    +
    +    if(graphics.dirty)
    +    {
    +        graphics.dirty = false;
    +
    +        if(graphics.clearDirty)
    +        {
    +            graphics.clearDirty = false;
    +
    +            webGL.lastIndex = 0;
    +            webGL.points = [];
    +            webGL.indices = [];
    +
    +        }
    +
    +        PIXI.WebGLGraphics.updateGraphics(graphics, gl);
    +    }
    +
    +    renderSession.shaderManager.activatePrimitiveShader();
    +
    +    // This  could be speeded up fo sure!
    +    var m = PIXI.mat3.clone(graphics.worldTransform);
    +
    +    PIXI.mat3.transpose(m);
    +
    +    // set the matrix transform for the
    +    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
    +
    +    gl.uniformMatrix3fv(shader.translationMatrix, false, m);
    +
    +    gl.uniform2f(shader.projectionVector, projection.x, -projection.y);
    +    gl.uniform2f(shader.offsetVector, -offset.x, -offset.y);
    +
    +    gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint));
    +
    +    gl.uniform1f(shader.alpha, graphics.worldAlpha);
    +    gl.uniform1f(shader.alpha, graphics.worldAlpha);
    +    gl.bindBuffer(gl.ARRAY_BUFFER, webGL.buffer);
    +
    +    gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, 4 * 6, 0);
    +    gl.vertexAttribPointer(shader.colorAttribute, 4, gl.FLOAT, false,4 * 6, 2 * 4);
    +
    +    // set the index buffer!
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGL.indexBuffer);
    +
    +    gl.drawElements(gl.TRIANGLE_STRIP,  webGL.indices.length, gl.UNSIGNED_SHORT, 0 );
    +
    +    renderSession.shaderManager.deactivatePrimitiveShader();
    +
    +    // return to default shader...
    +//  PIXI.activateShader(PIXI.defaultShader);
    +};
    +
    +/**
    + * Updates the graphics object
    + *
    + * @static
    + * @private
    + * @method updateGraphics
    + * @param graphics {Graphics}
    + */
    +PIXI.WebGLGraphics.updateGraphics = function(graphics, gl)
    +{
    +    var webGL = graphics._webGL[gl.id];
    +    
    +    for (var i = webGL.lastIndex; i < graphics.graphicsData.length; i++)
    +    {
    +        var data = graphics.graphicsData[i];
    +
    +        if(data.type === PIXI.Graphics.POLY)
    +        {
    +            if(data.fill)
    +            {
    +                if(data.points.length>3)
    +                    PIXI.WebGLGraphics.buildPoly(data, webGL);
    +            }
    +
    +            if(data.lineWidth > 0)
    +            {
    +                PIXI.WebGLGraphics.buildLine(data, webGL);
    +            }
    +        }
    +        else if(data.type === PIXI.Graphics.RECT)
    +        {
    +            PIXI.WebGLGraphics.buildRectangle(data, webGL);
    +        }
    +        else if(data.type === PIXI.Graphics.CIRC || data.type === PIXI.Graphics.ELIP)
    +        {
    +            PIXI.WebGLGraphics.buildCircle(data, webGL);
    +        }
    +    }
    +
    +    webGL.lastIndex = graphics.graphicsData.length;
    +
    +   
    +
    +    webGL.glPoints = new Float32Array(webGL.points);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, webGL.buffer);
    +    gl.bufferData(gl.ARRAY_BUFFER, webGL.glPoints, gl.STATIC_DRAW);
    +
    +    webGL.glIndicies = new Uint16Array(webGL.indices);
    +
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGL.indexBuffer);
    +    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, webGL.glIndicies, gl.STATIC_DRAW);
    +};
    +
    +/**
    + * Builds a rectangle to draw
    + *
    + * @static
    + * @private
    + * @method buildRectangle
    + * @param graphics {Graphics}
    + * @param webGLData {Object}
    + */
    +PIXI.WebGLGraphics.buildRectangle = function(graphicsData, webGLData)
    +{
    +    // --- //
    +    // need to convert points to a nice regular data
    +    //
    +    var rectData = graphicsData.points;
    +    var x = rectData[0];
    +    var y = rectData[1];
    +    var width = rectData[2];
    +    var height = rectData[3];
    +
    +
    +    if(graphicsData.fill)
    +    {
    +        var color = PIXI.hex2rgb(graphicsData.fillColor);
    +        var alpha = graphicsData.fillAlpha;
    +
    +        var r = color[0] * alpha;
    +        var g = color[1] * alpha;
    +        var b = color[2] * alpha;
    +
    +        var verts = webGLData.points;
    +        var indices = webGLData.indices;
    +
    +        var vertPos = verts.length/6;
    +
    +        // start
    +        verts.push(x, y);
    +        verts.push(r, g, b, alpha);
    +
    +        verts.push(x + width, y);
    +        verts.push(r, g, b, alpha);
    +
    +        verts.push(x , y + height);
    +        verts.push(r, g, b, alpha);
    +
    +        verts.push(x + width, y + height);
    +        verts.push(r, g, b, alpha);
    +
    +        // insert 2 dead triangles..
    +        indices.push(vertPos, vertPos, vertPos+1, vertPos+2, vertPos+3, vertPos+3);
    +    }
    +
    +    if(graphicsData.lineWidth)
    +    {
    +        graphicsData.points = [x, y,
    +                  x + width, y,
    +                  x + width, y + height,
    +                  x, y + height,
    +                  x, y];
    +
    +        PIXI.WebGLGraphics.buildLine(graphicsData, webGLData);
    +    }
    +};
    +
    +/**
    + * Builds a circle to draw
    + *
    + * @static
    + * @private
    + * @method buildCircle
    + * @param graphics {Graphics}
    + * @param webGLData {Object}
    + */
    +PIXI.WebGLGraphics.buildCircle = function(graphicsData, webGLData)
    +{
    +    // --- //
    +    // need to convert points to a nice regular data
    +    //
    +    var rectData = graphicsData.points;
    +    var x = rectData[0];
    +    var y = rectData[1];
    +    var width = rectData[2];
    +    var height = rectData[3];
    +
    +    var totalSegs = 40;
    +    var seg = (Math.PI * 2) / totalSegs ;
    +
    +    var i = 0;
    +
    +    if(graphicsData.fill)
    +    {
    +        var color = PIXI.hex2rgb(graphicsData.fillColor);
    +        var alpha = graphicsData.fillAlpha;
    +
    +        var r = color[0] * alpha;
    +        var g = color[1] * alpha;
    +        var b = color[2] * alpha;
    +
    +        var verts = webGLData.points;
    +        var indices = webGLData.indices;
    +
    +        var vecPos = verts.length/6;
    +
    +        indices.push(vecPos);
    +
    +        for (i = 0; i < totalSegs + 1 ; i++)
    +        {
    +            verts.push(x,y, r, g, b, alpha);
    +
    +            verts.push(x + Math.sin(seg * i) * width,
    +                       y + Math.cos(seg * i) * height,
    +                       r, g, b, alpha);
    +
    +            indices.push(vecPos++, vecPos++);
    +        }
    +
    +        indices.push(vecPos-1);
    +    }
    +
    +    if(graphicsData.lineWidth)
    +    {
    +        graphicsData.points = [];
    +
    +        for (i = 0; i < totalSegs + 1; i++)
    +        {
    +            graphicsData.points.push(x + Math.sin(seg * i) * width,
    +                                     y + Math.cos(seg * i) * height);
    +        }
    +
    +        PIXI.WebGLGraphics.buildLine(graphicsData, webGLData);
    +    }
    +};
    +
    +/**
    + * Builds a line to draw
    + *
    + * @static
    + * @private
    + * @method buildLine
    + * @param graphics {Graphics}
    + * @param webGLData {Object}
    + */
    +PIXI.WebGLGraphics.buildLine = function(graphicsData, webGLData)
    +{
    +    // TODO OPTIMISE!
    +    var i = 0;
    +
    +    var points = graphicsData.points;
    +    if(points.length === 0)return;
    +
    +    // if the line width is an odd number add 0.5 to align to a whole pixel
    +    if(graphicsData.lineWidth%2)
    +    {
    +        for (i = 0; i < points.length; i++) {
    +            points[i] += 0.5;
    +        }
    +    }
    +
    +    // get first and last point.. figure out the middle!
    +    var firstPoint = new PIXI.Point( points[0], points[1] );
    +    var lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] );
    +
    +    // if the first point is the last point - goona have issues :)
    +    if(firstPoint.x === lastPoint.x && firstPoint.y === lastPoint.y)
    +    {
    +        points.pop();
    +        points.pop();
    +
    +        lastPoint = new PIXI.Point( points[points.length - 2], points[points.length - 1] );
    +
    +        var midPointX = lastPoint.x + (firstPoint.x - lastPoint.x) *0.5;
    +        var midPointY = lastPoint.y + (firstPoint.y - lastPoint.y) *0.5;
    +
    +        points.unshift(midPointX, midPointY);
    +        points.push(midPointX, midPointY);
    +    }
    +
    +    var verts = webGLData.points;
    +    var indices = webGLData.indices;
    +    var length = points.length / 2;
    +    var indexCount = points.length;
    +    var indexStart = verts.length/6;
    +
    +    // DRAW the Line
    +    var width = graphicsData.lineWidth / 2;
    +
    +    // sort color
    +    var color = PIXI.hex2rgb(graphicsData.lineColor);
    +    var alpha = graphicsData.lineAlpha;
    +    var r = color[0] * alpha;
    +    var g = color[1] * alpha;
    +    var b = color[2] * alpha;
    +
    +    var px, py, p1x, p1y, p2x, p2y, p3x, p3y;
    +    var perpx, perpy, perp2x, perp2y, perp3x, perp3y;
    +    var a1, b1, c1, a2, b2, c2;
    +    var denom, pdist, dist;
    +
    +    p1x = points[0];
    +    p1y = points[1];
    +
    +    p2x = points[2];
    +    p2y = points[3];
    +
    +    perpx = -(p1y - p2y);
    +    perpy =  p1x - p2x;
    +
    +    dist = Math.sqrt(perpx*perpx + perpy*perpy);
    +
    +    perpx /= dist;
    +    perpy /= dist;
    +    perpx *= width;
    +    perpy *= width;
    +
    +    // start
    +    verts.push(p1x - perpx , p1y - perpy,
    +                r, g, b, alpha);
    +
    +    verts.push(p1x + perpx , p1y + perpy,
    +                r, g, b, alpha);
    +
    +    for (i = 1; i < length-1; i++)
    +    {
    +        p1x = points[(i-1)*2];
    +        p1y = points[(i-1)*2 + 1];
    +
    +        p2x = points[(i)*2];
    +        p2y = points[(i)*2 + 1];
    +
    +        p3x = points[(i+1)*2];
    +        p3y = points[(i+1)*2 + 1];
    +
    +        perpx = -(p1y - p2y);
    +        perpy = p1x - p2x;
    +
    +        dist = Math.sqrt(perpx*perpx + perpy*perpy);
    +        perpx /= dist;
    +        perpy /= dist;
    +        perpx *= width;
    +        perpy *= width;
    +
    +        perp2x = -(p2y - p3y);
    +        perp2y = p2x - p3x;
    +
    +        dist = Math.sqrt(perp2x*perp2x + perp2y*perp2y);
    +        perp2x /= dist;
    +        perp2y /= dist;
    +        perp2x *= width;
    +        perp2y *= width;
    +
    +        a1 = (-perpy + p1y) - (-perpy + p2y);
    +        b1 = (-perpx + p2x) - (-perpx + p1x);
    +        c1 = (-perpx + p1x) * (-perpy + p2y) - (-perpx + p2x) * (-perpy + p1y);
    +        a2 = (-perp2y + p3y) - (-perp2y + p2y);
    +        b2 = (-perp2x + p2x) - (-perp2x + p3x);
    +        c2 = (-perp2x + p3x) * (-perp2y + p2y) - (-perp2x + p2x) * (-perp2y + p3y);
    +
    +        denom = a1*b2 - a2*b1;
    +
    +        if(Math.abs(denom) < 0.1 )
    +        {
    +
    +            denom+=10.1;
    +            verts.push(p2x - perpx , p2y - perpy,
    +                r, g, b, alpha);
    +
    +            verts.push(p2x + perpx , p2y + perpy,
    +                r, g, b, alpha);
    +
    +            continue;
    +        }
    +
    +        px = (b1*c2 - b2*c1)/denom;
    +        py = (a2*c1 - a1*c2)/denom;
    +
    +
    +        pdist = (px -p2x) * (px -p2x) + (py -p2y) + (py -p2y);
    +
    +
    +        if(pdist > 140 * 140)
    +        {
    +            perp3x = perpx - perp2x;
    +            perp3y = perpy - perp2y;
    +
    +            dist = Math.sqrt(perp3x*perp3x + perp3y*perp3y);
    +            perp3x /= dist;
    +            perp3y /= dist;
    +            perp3x *= width;
    +            perp3y *= width;
    +
    +            verts.push(p2x - perp3x, p2y -perp3y);
    +            verts.push(r, g, b, alpha);
    +
    +            verts.push(p2x + perp3x, p2y +perp3y);
    +            verts.push(r, g, b, alpha);
    +
    +            verts.push(p2x - perp3x, p2y -perp3y);
    +            verts.push(r, g, b, alpha);
    +
    +            indexCount++;
    +        }
    +        else
    +        {
    +
    +            verts.push(px , py);
    +            verts.push(r, g, b, alpha);
    +
    +            verts.push(p2x - (px-p2x), p2y - (py - p2y));
    +            verts.push(r, g, b, alpha);
    +        }
    +    }
    +
    +    p1x = points[(length-2)*2];
    +    p1y = points[(length-2)*2 + 1];
    +
    +    p2x = points[(length-1)*2];
    +    p2y = points[(length-1)*2 + 1];
    +
    +    perpx = -(p1y - p2y);
    +    perpy = p1x - p2x;
    +
    +    dist = Math.sqrt(perpx*perpx + perpy*perpy);
    +    perpx /= dist;
    +    perpy /= dist;
    +    perpx *= width;
    +    perpy *= width;
    +
    +    verts.push(p2x - perpx , p2y - perpy);
    +    verts.push(r, g, b, alpha);
    +
    +    verts.push(p2x + perpx , p2y + perpy);
    +    verts.push(r, g, b, alpha);
    +
    +    indices.push(indexStart);
    +
    +    for (i = 0; i < indexCount; i++)
    +    {
    +        indices.push(indexStart++);
    +    }
    +
    +    indices.push(indexStart-1);
    +};
    +
    +/**
    + * Builds a polygon to draw
    + *
    + * @static
    + * @private
    + * @method buildPoly
    + * @param graphics {Graphics}
    + * @param webGLData {Object}
    + */
    +PIXI.WebGLGraphics.buildPoly = function(graphicsData, webGLData)
    +{
    +    var points = graphicsData.points;
    +    if(points.length < 6)return;
    +
    +    // get first and last point.. figure out the middle!
    +    var verts = webGLData.points;
    +    var indices = webGLData.indices;
    +
    +    var length = points.length / 2;
    +
    +    // sort color
    +    var color = PIXI.hex2rgb(graphicsData.fillColor);
    +    var alpha = graphicsData.fillAlpha;
    +    var r = color[0] * alpha;
    +    var g = color[1] * alpha;
    +    var b = color[2] * alpha;
    +
    +    var triangles = PIXI.PolyK.Triangulate(points);
    +
    +    var vertPos = verts.length / 6;
    +
    +    var i = 0;
    +
    +    for (i = 0; i < triangles.length; i+=3)
    +    {
    +        indices.push(triangles[i] + vertPos);
    +        indices.push(triangles[i] + vertPos);
    +        indices.push(triangles[i+1] + vertPos);
    +        indices.push(triangles[i+2] +vertPos);
    +        indices.push(triangles[i+2] + vertPos);
    +    }
    +
    +    for (i = 0; i < length; i++)
    +    {
    +        verts.push(points[i * 2], points[i * 2 + 1],
    +                   r, g, b, alpha);
    +    }
    +};
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_renderers_webgl_utils_WebGLMaskManager.js.html b/docs/files/src_pixi_renderers_webgl_utils_WebGLMaskManager.js.html new file mode 100644 index 0000000..c8d7300 --- /dev/null +++ b/docs/files/src_pixi_renderers_webgl_utils_WebGLMaskManager.js.html @@ -0,0 +1,256 @@ + + + + + src/pixi/renderers/webgl/utils/WebGLMaskManager.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/webgl/utils/WebGLMaskManager.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    + 
    +PIXI.WebGLMaskManager = function(gl)
    +{
    +    this.maskStack = [];
    +    this.maskPosition = 0;
    +
    +    this.setContext(gl);
    +};
    +
    +PIXI.WebGLMaskManager.prototype.setContext = function(gl)
    +{
    +    this.gl = gl;
    +};
    +
    +PIXI.WebGLMaskManager.prototype.pushMask = function(maskData, renderSession)
    +{
    +    var gl = this.gl;
    +
    +    if(this.maskStack.length === 0)
    +    {
    +        gl.enable(gl.STENCIL_TEST);
    +        gl.stencilFunc(gl.ALWAYS,1,1);
    +    }
    +    
    +  //  maskData.visible = false;
    +
    +    this.maskStack.push(maskData);
    +    
    +    gl.colorMask(false, false, false, false);
    +    gl.stencilOp(gl.KEEP,gl.KEEP,gl.INCR);
    +
    +    PIXI.WebGLGraphics.renderGraphics(maskData, renderSession);
    +
    +    gl.colorMask(true, true, true, true);
    +    gl.stencilFunc(gl.NOTEQUAL,0, this.maskStack.length);
    +    gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP);
    +};
    +
    +PIXI.WebGLMaskManager.prototype.popMask = function(renderSession)
    +{
    +    var gl = this.gl;
    +
    +    var maskData = this.maskStack.pop();
    +
    +    if(maskData)
    +    {
    +        gl.colorMask(false, false, false, false);
    +
    +        //gl.stencilFunc(gl.ALWAYS,1,1);
    +        gl.stencilOp(gl.KEEP,gl.KEEP,gl.DECR);
    +
    +        PIXI.WebGLGraphics.renderGraphics(maskData, renderSession);
    +
    +        gl.colorMask(true, true, true, true);
    +        gl.stencilFunc(gl.NOTEQUAL,0,this.maskStack.length);
    +        gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP);
    +    }
    +   
    +    if(this.maskStack.length === 0)gl.disable(gl.STENCIL_TEST);
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_renderers_webgl_utils_WebGLShaderManager.js.html b/docs/files/src_pixi_renderers_webgl_utils_WebGLShaderManager.js.html new file mode 100644 index 0000000..05a4410 --- /dev/null +++ b/docs/files/src_pixi_renderers_webgl_utils_WebGLShaderManager.js.html @@ -0,0 +1,253 @@ + + + + + src/pixi/renderers/webgl/utils/WebGLShaderManager.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/webgl/utils/WebGLShaderManager.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +PIXI.WebGLShaderManager = function(gl)
    +{
    +    this.setContext(gl);
    +
    +    // the final one is used for the rendering strips
    +    //this.stripShader = new PIXI.StripShader(gl);
    +};
    +
    +PIXI.WebGLShaderManager.prototype.setContext = function(gl)
    +{
    +    this.gl = gl;
    +    
    +    // the next one is used for rendering primatives
    +    this.primitiveShader = new PIXI.PrimitiveShader(gl);
    +
    +    // this shader is used for the default sprite rendering
    +    this.defaultShader = new PIXI.PixiShader(gl);
    +
    +    var shaderProgram = this.defaultShader.program;
    +
    +    gl.useProgram(shaderProgram);
    +
    +    gl.enableVertexAttribArray(this.defaultShader.aVertexPosition);
    +    gl.enableVertexAttribArray(this.defaultShader.colorAttribute);
    +    gl.enableVertexAttribArray(this.defaultShader.aTextureCoord);
    +
    +    
    +};
    +
    +PIXI.WebGLShaderManager.prototype.activatePrimitiveShader = function()
    +{
    +    var gl = this.gl;
    +
    +    gl.useProgram(this.primitiveShader.program);
    +
    +    gl.disableVertexAttribArray(this.defaultShader.aVertexPosition);
    +    gl.disableVertexAttribArray(this.defaultShader.colorAttribute);
    +    gl.disableVertexAttribArray(this.defaultShader.aTextureCoord);
    +
    +    gl.enableVertexAttribArray(this.primitiveShader.aVertexPosition);
    +    gl.enableVertexAttribArray(this.primitiveShader.colorAttribute);
    +};
    +
    +PIXI.WebGLShaderManager.prototype.deactivatePrimitiveShader = function()
    +{
    +    var gl = this.gl;
    +
    +    gl.useProgram(this.defaultShader.program);
    +
    +    gl.disableVertexAttribArray(this.primitiveShader.aVertexPosition);
    +    gl.disableVertexAttribArray(this.primitiveShader.colorAttribute);
    +
    +    gl.enableVertexAttribArray(this.defaultShader.aVertexPosition);
    +    gl.enableVertexAttribArray(this.defaultShader.colorAttribute);
    +    gl.enableVertexAttribArray(this.defaultShader.aTextureCoord);
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_renderers_webgl_utils_WebGLSpriteBatch.js.html b/docs/files/src_pixi_renderers_webgl_utils_WebGLSpriteBatch.js.html new file mode 100644 index 0000000..bf7e1dd --- /dev/null +++ b/docs/files/src_pixi_renderers_webgl_utils_WebGLSpriteBatch.js.html @@ -0,0 +1,573 @@ + + + + + src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.4.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js

    + +
    +
    +/**
    + * @author Mat Groves
    + * 
    + * Big thanks to the very clever Matt DesLauriers <mattdesl> https://github.com/mattdesl/
    + * for creating the original pixi version!
    + *
    + * Heavily inspired by LibGDX's WebGLSpriteBatch:
    + * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/WebGLSpriteBatch.java
    + */
    +
    +PIXI.WebGLSpriteBatch = function(gl)
    +{
    +   
    +
    +    this.size = 2000;
    +    this.vertSize = 6;
    +
    +    //the total number of floats in our batch
    +    var numVerts = this.size * 4 *  this.vertSize;
    +    //the total number of indices in our batch
    +    var numIndices = this.size * 6;
    +
    +     //vertex data
    +    this.vertices = new Float32Array(numVerts);
    +    //index data
    +    this.indices = new Uint16Array(numIndices);
    +    
    +    this.lastIndexCount = 0;
    +
    +    for (var i=0, j=0; i < numIndices; i += 6, j += 4)
    +    {
    +        this.indices[i + 0] = j + 0;
    +        this.indices[i + 1] = j + 1;
    +        this.indices[i + 2] = j + 2;
    +        this.indices[i + 3] = j + 0;
    +        this.indices[i + 4] = j + 2;
    +        this.indices[i + 5] = j + 3;
    +    }
    +
    +
    +    this.drawing = false;
    +    this.currentBatchSize = 0;
    +    this.currentBaseTexture = null;
    +    
    +    this.setContext(gl);
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.setContext = function(gl)
    +{
    +    this.gl = gl;
    +
    +    // create a couple of buffers
    +    this.vertexBuffer = gl.createBuffer();
    +    this.indexBuffer = gl.createBuffer();
    +
    +    // 65535 is max index, so 65535 / 6 = 10922.
    +
    +
    +    //upload the index data
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    +    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW);
    +
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +    gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW);
    +
    +    this.currentBlendMode = 99999;
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.begin = function(renderSession)
    +{
    +    this.renderSession = renderSession;
    +    this.shader = this.renderSession.shaderManager.defaultShader;
    +
    +    this.start();
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.end = function()
    +{
    +    this.flush();
    +};
    +
    +
    +PIXI.WebGLSpriteBatch.prototype.render = function(sprite)
    +{
    +    // check texture..
    +    if(sprite.texture.baseTexture !== this.currentBaseTexture || this.currentBatchSize >= this.size)
    +    {
    +        this.flush();
    +        this.currentBaseTexture = sprite.texture.baseTexture;
    +    }
    +
    +
    +    // check blend mode
    +    if(sprite.blendMode !== this.currentBlendMode)
    +    {
    +        this.setBlendMode(sprite.blendMode);
    +    }
    +
    +    // get the uvs for the texture
    +    var uvs = sprite._uvs || sprite.texture._uvs;
    +    // if the uvs have not updated then no point rendering just yet!
    +    if(!uvs)return;
    +
    +    // get the sprites current alpha
    +    var alpha = sprite.worldAlpha;
    +    var tint = sprite.tint;
    +
    +    var  verticies = this.vertices;
    +
    +    var width = sprite.texture.frame.width;
    +    var height = sprite.texture.frame.height;
    +
    +    // TODO trim??
    +    var aX = sprite.anchor.x;
    +    var aY = sprite.anchor.y;
    +
    +    var w0, w1, h0, h1;
    +        
    +    if (sprite.texture.trimmed)
    +    {
    +        // if the sprite is trimmed then we need to add the extra space before transforming the sprite coords..
    +        var trim = sprite.texture.trim;
    +
    +        w1 = trim.x - aX * trim.realWidth;
    +        w0 = w1 + width;
    +
    +        h1 = trim.y - aY * trim.realHeight;
    +        h0 = h1 + height;
    +    }
    +    else
    +    {
    +        w0 = (width ) * (1-aX);
    +        w1 = (width ) * -aX;
    +
    +        h0 = height * (1-aY);
    +        h1 = height * -aY;
    +    }
    +
    +    var index = this.currentBatchSize * 4 * this.vertSize;
    +
    +    var worldTransform = sprite.worldTransform;
    +
    +    var a = worldTransform[0];
    +    var b = worldTransform[3];
    +    var c = worldTransform[1];
    +    var d = worldTransform[4];
    +    var tx = worldTransform[2];
    +    var ty = worldTransform[5];
    +
    +    // xy
    +    verticies[index++] = a * w1 + c * h1 + tx;
    +    verticies[index++] = d * h1 + b * w1 + ty;
    +    // uv
    +    verticies[index++] = uvs[0];
    +    verticies[index++] = uvs[1];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // xy
    +    verticies[index++] = a * w0 + c * h1 + tx;
    +    verticies[index++] = d * h1 + b * w0 + ty;
    +    // uv
    +    verticies[index++] = uvs[2];
    +    verticies[index++] = uvs[3];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // xy
    +    verticies[index++] = a * w0 + c * h0 + tx;
    +    verticies[index++] = d * h0 + b * w0 + ty;
    +    // uv
    +    verticies[index++] = uvs[4];
    +    verticies[index++] = uvs[5];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // xy
    +    verticies[index++] = a * w1 + c * h0 + tx;
    +    verticies[index++] = d * h0 + b * w1 + ty;
    +    // uv
    +    verticies[index++] = uvs[6];
    +    verticies[index++] = uvs[7];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // increment the batchs
    +    this.currentBatchSize++;
    +
    +
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.renderTilingSprite = function(tilingSprite)
    +{
    +    var texture = tilingSprite.texture;
    +
    +    if(texture.baseTexture !== this.currentBaseTexture || this.currentBatchSize >= this.size)
    +    {
    +        this.flush();
    +        this.currentBaseTexture = texture.baseTexture;
    +    }
    +
    +     // check blend mode
    +    if(tilingSprite.blendMode !== this.currentBlendMode)
    +    {
    +        this.setBlendMode(tilingSprite.blendMode);
    +    }
    +
    +     // set the textures uvs temporarily
    +    // TODO create a seperate texture so that we can tile part of a texture
    +
    +    if(!tilingSprite._uvs)tilingSprite._uvs = new Float32Array(8);
    +
    +    var uvs = tilingSprite._uvs;
    +
    +    var offsetX =  tilingSprite.tilePosition.x/texture.baseTexture.width;
    +    var offsetY =  tilingSprite.tilePosition.y/texture.baseTexture.height;
    +
    +    var scaleX =  (tilingSprite.width / texture.baseTexture.width)  / tilingSprite.tileScale.x;
    +    var scaleY =  (tilingSprite.height / texture.baseTexture.height) / tilingSprite.tileScale.y;
    +
    +    uvs[0] = 0 - offsetX;
    +    uvs[1] = 0 - offsetY;
    +
    +    uvs[2] = (1 * scaleX) - offsetX;
    +    uvs[3] = 0 - offsetY;
    +
    +    uvs[4] = (1 * scaleX) - offsetX;
    +    uvs[5] = (1 * scaleY) - offsetY;
    +
    +    uvs[6] = 0 - offsetX;
    +    uvs[7] = (1 *scaleY) - offsetY;
    +
    +   
    +    // get the tilingSprites current alpha
    +    var alpha = tilingSprite.worldAlpha;
    +    var tint = tilingSprite.tint;
    +
    +    var  verticies = this.vertices;
    +
    +    var width = tilingSprite.width;
    +    var height = tilingSprite.height;
    +
    +    // TODO trim??
    +    var aX = tilingSprite.anchor.x; // - tilingSprite.texture.trim.x
    +    var aY = tilingSprite.anchor.y; //- tilingSprite.texture.trim.y
    +    var w0 = width * (1-aX);
    +    var w1 = width * -aX;
    +
    +    var h0 = height * (1-aY);
    +    var h1 = height * -aY;
    +
    +    var index = this.currentBatchSize * 4 * this.vertSize;
    +
    +    var worldTransform = tilingSprite.worldTransform;
    +
    +    var a = worldTransform[0];
    +    var b = worldTransform[3];
    +    var c = worldTransform[1];
    +    var d = worldTransform[4];
    +    var tx = worldTransform[2];
    +    var ty = worldTransform[5];
    +
    +    // xy
    +    verticies[index++] = a * w1 + c * h1 + tx;
    +    verticies[index++] = d * h1 + b * w1 + ty;
    +    // uv
    +    verticies[index++] = uvs[0];
    +    verticies[index++] = uvs[1];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // xy
    +    verticies[index++] = a * w0 + c * h1 + tx;
    +    verticies[index++] = d * h1 + b * w0 + ty;
    +    // uv
    +    verticies[index++] = uvs[2];
    +    verticies[index++] = uvs[3];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +    
    +    // xy
    +    verticies[index++] = a * w0 + c * h0 + tx;
    +    verticies[index++] = d * h0 + b * w0 + ty;
    +    // uv
    +    verticies[index++] = uvs[4];
    +    verticies[index++] = uvs[5];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // xy
    +    verticies[index++] = a * w1 + c * h0 + tx;
    +    verticies[index++] = d * h0 + b * w1 + ty;
    +    // uv
    +    verticies[index++] = uvs[6];
    +    verticies[index++] = uvs[7];
    +    // color
    +    verticies[index++] = alpha;
    +    verticies[index++] = tint;
    +
    +    // increment the batchs
    +    this.currentBatchSize++;
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.flush = function()
    +{
    +    // If the batch is length 0 then return as there is nothing to draw
    +    if (this.currentBatchSize===0)return;
    +
    +    var gl = this.gl;
    +    
    +    // bind the current texture
    +    gl.bindTexture(gl.TEXTURE_2D, this.currentBaseTexture._glTextures[gl.id] || PIXI.createWebGLTexture(this.currentBaseTexture, gl));
    +
    +    // upload the verts to the buffer
    +    var view = this.vertices.subarray(0, this.currentBatchSize * 4 * this.vertSize);
    +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, view);
    +    
    +    // now draw those suckas!
    +    gl.drawElements(gl.TRIANGLES, this.currentBatchSize * 6, gl.UNSIGNED_SHORT, 0);
    +   
    +    // then reset the batch!
    +    this.currentBatchSize = 0;
    +
    +    // increment the draw count
    +    this.renderSession.drawCount++;
    +};
    +
    +
    +PIXI.WebGLSpriteBatch.prototype.stop = function()
    +{
    +    this.flush();
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.start = function()
    +{
    +    var gl = this.gl;
    +
    +    // bind the main texture
    +    gl.activeTexture(gl.TEXTURE0);
    +
    +    // bind the buffers
    +    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    +    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
    +
    +    // set the projection
    +    var projection = this.renderSession.projection;
    +    gl.uniform2f(this.shader.projectionVector, projection.x, projection.y);
    +
    +    // set the pointers
    +    var stride =  this.vertSize * 4;
    +    gl.vertexAttribPointer(this.shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0);
    +    gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4);
    +    gl.vertexAttribPointer(this.shader.colorAttribute, 2, gl.FLOAT, false, stride, 4 * 4);
    +
    +    // set the blend mode..
    +    if(this.currentBlendMode !== PIXI.blendModes.NORMAL)
    +    {
    +        this.setBlendMode(PIXI.blendModes.NORMAL);
    +    }
    +};
    +
    +PIXI.WebGLSpriteBatch.prototype.setBlendMode = function(blendMode)
    +{
    +    this.flush();
    +
    +    this.currentBlendMode = blendMode;
    +    
    +    var blendModeWebGL = PIXI.blendModesWebGL[this.currentBlendMode];
    +    this.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]);
    +};
    +
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index 8c436af..90d057e 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,7 +177,7 @@ */ /** - * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use '\n', '\r' or '\r\n' * You can generate the fnt files using * http://www.angelcode.com/products/bmfont/ for windows or * http://www.bmglyph.com/ for mac. @@ -185,8 +187,8 @@ * @constructor * @param text {String} The copy that you would like the text to display * @param style {Object} The style parameters - * @param style.font {String} The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) - * @param [style.align="left"] {String} An alignment of the multiline text ("left", "center" or "right") + * @param style.font {String} The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously) + * @param [style.align='left'] {String} An alignment of the multiline text ('left', 'center' or 'right') */ PIXI.BitmapText = function(text, style) { @@ -195,8 +197,7 @@ PIXI.BitmapText = function(text, style) this.setText(text); this.setStyle(style); this.updateText(); - this.dirty = false - + this.dirty = false; }; // constructor @@ -211,7 +212,7 @@ PIXI.BitmapText.prototype.constructor = PIXI.BitmapText; */ PIXI.BitmapText.prototype.setText = function(text) { - this.text = text || " "; + this.text = text || ' '; this.dirty = true; }; @@ -220,16 +221,16 @@ PIXI.BitmapText.prototype.setText = function(text) * * @method setStyle * @param style {Object} The style parameters - * @param style.font {String} The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) - * @param [style.align="left"] {String} An alignment of the multiline text ("left", "center" or "right") + * @param style.font {String} The size (optional) and bitmap font id (required) eq 'Arial' or '20px Arial' (must have loaded previously) + * @param [style.align='left'] {String} An alignment of the multiline text ('left', 'center' or 'right') */ PIXI.BitmapText.prototype.setStyle = function(style) { style = style || {}; - style.align = style.align || "left"; + style.align = style.align || 'left'; this.style = style; - var font = style.font.split(" "); + var font = style.font.split(' '); this.fontName = font[font.length - 1]; this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; @@ -272,7 +273,7 @@ PIXI.BitmapText.prototype.updateText = function() if(prevCharCode && charData[prevCharCode]) { - pos.x += charData.kerning[prevCharCode]; + pos.x += charData.kerning[prevCharCode]; } chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; @@ -287,11 +288,11 @@ PIXI.BitmapText.prototype.updateText = function() for(i = 0; i <= line; i++) { var alignOffset = 0; - if(this.style.align == "right") + if(this.style.align === 'right') { alignOffset = maxLineWidth - lineWidths[i]; } - else if(this.style.align == "center") + else if(this.style.align === 'center') { alignOffset = (maxLineWidth - lineWidths[i]) / 2; } @@ -300,14 +301,14 @@ PIXI.BitmapText.prototype.updateText = function() for(i = 0; i < chars.length; i++) { - var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + var c = new PIXI.Sprite(chars[i].texture); //PIXI.Sprite.fromFrame(chars[i].charCode); c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; c.position.y = chars[i].position.y * scale; c.scale.x = c.scale.y = scale; this.addChild(c); } - this.width = pos.x * scale; + this.width = maxLineWidth * scale; this.height = (pos.y + data.lineHeight) * scale; }; @@ -319,8 +320,8 @@ PIXI.BitmapText.prototype.updateText = function() */ PIXI.BitmapText.prototype.updateTransform = function() { - if(this.dirty) - { + if(this.dirty) + { while(this.children.length > 0) { this.removeChild(this.getChildAt(0)); @@ -328,9 +329,9 @@ PIXI.BitmapText.prototype.updateTransform = function() this.updateText(); this.dirty = false; - } + } - PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); }; PIXI.BitmapText.fonts = {}; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 8702980..d818952 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -175,25 +177,25 @@ */ /** - * A Text Object will create a line(s) of text to split a line you can use "\n" + * A Text Object will create a line(s) of text to split a line you can use '\n' * * @class Text * @extends Sprite * @constructor * @param text {String} The copy that you would like the text to display * @param [style] {Object} The style parameters - * @param [style.font] {String} default "bold 20pt Arial" The style and size of the font - * @param [style.fill="black"] {Object} A canvas fillstyle that will be used on the text eg "red", "#00FF00" - * @param [style.align="left"] {String} An alignment of the multiline text ("left", "center" or "right") - * @param [style.stroke] {String} A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param [style.font] {String} default 'bold 20pt Arial' The style and size of the font + * @param [style.fill='black'] {Object} A canvas fillstyle that will be used on the text eg 'red', '#00FF00' + * @param [style.align='left'] {String} An alignment of the multiline text ('left', 'center' or 'right') + * @param [style.stroke] {String} A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00' * @param [style.strokeThickness=0] {Number} A number that represents the thickness of the stroke. Default is 0 (no stroke) * @param [style.wordWrap=false] {Boolean} Indicates if word wrap should be used * @param [style.wordWrapWidth=100] {Number} The width at which text will wrap */ PIXI.Text = function(text, style) { - this.canvas = document.createElement("canvas"); - this.context = this.canvas.getContext("2d"); + this.canvas = document.createElement('canvas'); + this.context = this.canvas.getContext('2d'); PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); this.setText(text); @@ -212,10 +214,10 @@ PIXI.Text.prototype.constructor = PIXI.Text; * * @method setStyle * @param [style] {Object} The style parameters - * @param [style.font="bold 20pt Arial"] {String} The style and size of the font - * @param [style.fill="black"] {Object} A canvas fillstyle that will be used on the text eg "red", "#00FF00" - * @param [style.align="left"] {String} An alignment of the multiline text ("left", "center" or "right") - * @param [style.stroke="black"] {String} A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param [style.font='bold 20pt Arial'] {String} The style and size of the font + * @param [style.fill='black'] {Object} A canvas fillstyle that will be used on the text eg 'red', '#00FF00' + * @param [style.align='left'] {String} An alignment of the multiline text ('left', 'center' or 'right') + * @param [style.stroke='black'] {String} A canvas fillstyle that will be used on the text stroke eg 'blue', '#FCFF00' * @param [style.strokeThickness=0] {Number} A number that represents the thickness of the stroke. Default is 0 (no stroke) * @param [style.wordWrap=false] {Boolean} Indicates if word wrap should be used * @param [style.wordWrapWidth=100] {Number} The width at which text will wrap @@ -223,10 +225,10 @@ PIXI.Text.prototype.constructor = PIXI.Text; PIXI.Text.prototype.setStyle = function(style) { style = style || {}; - style.font = style.font || "bold 20pt Arial"; - style.fill = style.fill || "black"; - style.align = style.align || "left"; - style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 + style.font = style.font || 'bold 20pt Arial'; + style.fill = style.fill || 'black'; + style.align = style.align || 'left'; + style.stroke = style.stroke || 'black'; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; style.wordWrap = style.wordWrap || false; style.wordWrapWidth = style.wordWrapWidth || 100; @@ -235,14 +237,14 @@ PIXI.Text.prototype.setStyle = function(style) }; /** - * Set the copy for the text object. To split a line you can use "\n" + * Set the copy for the text object. To split a line you can use '\n' * - * @methos setText + * @method setText * @param {String} text The copy that you would like the text to display */ PIXI.Text.prototype.setText = function(text) { - this.text = text.toString() || " "; + this.text = text.toString() || ' '; this.dirty = true; }; @@ -254,65 +256,65 @@ PIXI.Text.prototype.setText = function(text) */ PIXI.Text.prototype.updateText = function() { - this.context.font = this.style.font; + this.context.font = this.style.font; - var outputText = this.text; + var outputText = this.text; - // word wrap - // preserve original text - if(this.style.wordWrap)outputText = this.wordWrap(this.text); + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); - //split text into lines - var lines = outputText.split(/(?:\r\n|\r|\n)/); + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); - //calculate text width - var lineWidths = []; - var maxLineWidth = 0; - for (var i = 0; i < lines.length; i++) - { - var lineWidth = this.context.measureText(lines[i]).width; - lineWidths[i] = lineWidth; - maxLineWidth = Math.max(maxLineWidth, lineWidth); - } - this.canvas.width = maxLineWidth + this.style.strokeThickness; + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; - //calculate text height - var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; - this.canvas.height = lineHeight * lines.length; + //calculate text height + var lineHeight = this.determineFontHeight('font: ' + this.style.font + ';') + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; - //set canvas text styles - this.context.fillStyle = this.style.fill; - this.context.font = this.style.font; + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; - this.context.strokeStyle = this.style.stroke; - this.context.lineWidth = this.style.strokeThickness; + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; - this.context.textBaseline = "top"; + this.context.textBaseline = 'top'; - //draw lines line by line - for (i = 0; i < lines.length; i++) - { - var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); - if(this.style.align == "right") - { - linePosition.x += maxLineWidth - lineWidths[i]; - } - else if(this.style.align == "center") - { - linePosition.x += (maxLineWidth - lineWidths[i]) / 2; - } + if(this.style.align === 'right') + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align === 'center') + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } - if(this.style.stroke && this.style.strokeThickness) - { - this.context.strokeText(lines[i], linePosition.x, linePosition.y); - } + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } - if(this.style.fill) - { - this.context.fillText(lines[i], linePosition.x, linePosition.y); - } - } + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } this.updateTexture(); }; @@ -330,7 +332,7 @@ PIXI.Text.prototype.updateTexture = function() this.texture.frame.width = this.canvas.width; this.texture.frame.height = this.canvas.height; - this._width = this.canvas.width; + this._width = this.canvas.width; this._height = this.canvas.height; PIXI.texturesToUpdate.push(this.texture.baseTexture); @@ -344,13 +346,13 @@ PIXI.Text.prototype.updateTexture = function() */ PIXI.Text.prototype.updateTransform = function() { - if(this.dirty) - { - this.updateText(); - this.dirty = false; - } + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } - PIXI.Sprite.prototype.updateTransform.call(this); + PIXI.Sprite.prototype.updateTransform.call(this); }; /* @@ -363,30 +365,31 @@ PIXI.Text.prototype.updateTransform = function() */ PIXI.Text.prototype.determineFontHeight = function(fontStyle) { - // build a little reference dictionary so if the font style has been used return a - // cached version... - var result = PIXI.Text.heightCache[fontStyle]; + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; - if(!result) - { - var body = document.getElementsByTagName("body")[0]; - var dummy = document.createElement("div"); - var dummyText = document.createTextNode("M"); - dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); - body.appendChild(dummy); + if(!result) + { + var body = document.getElementsByTagName('body')[0]; + var dummy = document.createElement('div'); + var dummyText = document.createTextNode('M'); + dummy.appendChild(dummyText); + dummy.setAttribute('style', fontStyle + ';position:absolute;top:0;left:0'); + body.appendChild(dummy); - result = dummy.offsetHeight; - PIXI.Text.heightCache[fontStyle] = result; + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; - body.removeChild(dummy); - } + body.removeChild(dummy); + } - return result; + return result; }; /** - * A Text Object will apply wordwrap + * Applies newlines to a string to have it optimally fit into the horizontal + * bounds set by the Text object's wordWrapWidth property. * * @method wordWrap * @param text {String} @@ -394,49 +397,38 @@ PIXI.Text.prototype.determineFontHeight = function(fontStyle) */ PIXI.Text.prototype.wordWrap = function(text) { - // search good wrap position - var searchWrapPos = function(ctx, text, start, end, wrapWidth) - { - var p = Math.floor((end-start) / 2) + start; - if(p == start) { - return 1; - } - - if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) - { - if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) - { - return p; - } - else - { - return arguments.callee(ctx, text, p, end, wrapWidth); - } - } - else - { - return arguments.callee(ctx, text, start, p, wrapWidth); - } - }; - - var lineWrap = function(ctx, text, wrapWidth) - { - if(ctx.measureText(text).width <= wrapWidth || text.length < 1) - { - return text; - } - var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); - return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); - }; - - var result = ""; - var lines = text.split("\n"); - for (var i = 0; i < lines.length; i++) - { - result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; - } - - return result; + // Greedy wrapping algorithm that will wrap words as the line grows longer + // than its horizontal bounds. + var result = ''; + var lines = text.split('\n'); + for (var i = 0; i < lines.length; i++) + { + var spaceLeft = this.style.wordWrapWidth; + var words = lines[i].split(' '); + for (var j = 0; j < words.length; j++) + { + var wordWidth = this.context.measureText(words[j]).width; + var wordWidthWithSpace = wordWidth + this.context.measureText(' ').width; + if(wordWidthWithSpace > spaceLeft) + { + // Skip printing the newline if it's the first word of the line that is + // greater than the word wrap width. + if(j > 0) + { + result += '\n'; + } + result += words[j] + ' '; + spaceLeft = this.style.wordWrapWidth - wordWidth; + } + else + { + spaceLeft -= wordWidthWithSpace; + result += words[j] + ' '; + } + } + result += '\n'; + } + return result; }; /** @@ -447,10 +439,10 @@ PIXI.Text.prototype.wordWrap = function(text) */ PIXI.Text.prototype.destroy = function(destroyTexture) { - if(destroyTexture) - { - this.texture.destroy(); - } + if(destroyTexture) + { + this.texture.destroy(); + } }; diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index b4888f2..61f3487 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -186,85 +188,99 @@ PIXI.texturesToDestroy = []; * @constructor * @param source {String} the source object (image or canvas) */ -PIXI.BaseTexture = function(source) +PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); + PIXI.EventTarget.call( this ); - /** - * [read-only] The width of the base texture set when the image has loaded - * - * @property width - * @type Number - * @readOnly - */ - this.width = 100; + /** + * [read-only] The width of the base texture set when the image has loaded + * + * @property width + * @type Number + * @readOnly + */ + this.width = 100; - /** - * [read-only] The height of the base texture set when the image has loaded - * - * @property height - * @type Number - * @readOnly - */ - this.height = 100; + /** + * [read-only] The height of the base texture set when the image has loaded + * + * @property height + * @type Number + * @readOnly + */ + this.height = 100; - /** - * [read-only] Describes if the base texture has loaded or not - * - * @property hasLoaded - * @type Boolean - * @readOnly - */ - this.hasLoaded = false; + /** + * The scale mode to apply when scaling this texture + * @property scaleMode + * @type PIXI.BaseTexture.SCALE_MODE + * @default PIXI.BaseTexture.SCALE_MODE.LINEAR + */ + this.scaleMode = scaleMode || PIXI.BaseTexture.SCALE_MODE.DEFAULT; - /** - * The source that is loaded to create the texture - * - * @property source - * @type Image - */ - this.source = source; + /** + * [read-only] Describes if the base texture has loaded or not + * + * @property hasLoaded + * @type Boolean + * @readOnly + */ + this.hasLoaded = false; - if(!source)return; + /** + * The source that is loaded to create the texture + * + * @property source + * @type Image + */ + this.source = source; - if(this.source instanceof Image || this.source instanceof HTMLImageElement) - { - if(this.source.complete) - { - this.hasLoaded = true; - this.width = this.source.width; - this.height = this.source.height; + if(!source)return; - PIXI.texturesToUpdate.push(this); - } - else - { + if(this.source instanceof Image || this.source instanceof HTMLImageElement) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; - var scope = this; - this.source.onload = function(){ + PIXI.texturesToUpdate.push(this); + } + else + { - scope.hasLoaded = true; - scope.width = scope.source.width; - scope.height = scope.source.height; + var scope = this; + this.source.onload = function() { - // add it to somewhere... - PIXI.texturesToUpdate.push(scope); - scope.dispatchEvent( { type: 'loaded', content: scope } ); - } - // this.image.src = imageUrl; - } - } - else - { - this.hasLoaded = true; - this.width = this.source.width; - this.height = this.source.height; + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; - PIXI.texturesToUpdate.push(this); - } + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + }; + //this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; - this._powerOf2 = false; -} + PIXI.texturesToUpdate.push(this); + } + + this.imageUrl = null; + this._powerOf2 = false; + + + // used for webGL + this._glTextures = []; + +}; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; @@ -275,13 +291,29 @@ PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; */ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) - { - this.source.src = null; - } - this.source = null; - PIXI.texturesToDestroy.push(this); -} + if(this.source instanceof Image) + { + if (this.imageUrl in PIXI.BaseTextureCache) + delete PIXI.BaseTextureCache[this.imageUrl]; + this.imageUrl = null; + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +}; + +/** + * + * + * @method destroy + */ + +PIXI.BaseTexture.prototype.updateSourceImage = function(newSrc) +{ + this.hasLoaded = false; + this.source.src = null; + this.source.src = newSrc; +}; /** * Helper function that returns a base texture based on an image url @@ -292,26 +324,32 @@ PIXI.BaseTexture.prototype.destroy = function() * @param imageUrl {String} The image url of the texture * @return BaseTexture */ -PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin, scaleMode) { - var baseTexture = PIXI.BaseTextureCache[imageUrl]; - if(!baseTexture) - { - // new Image() breaks tex loading in some versions of Chrome. - // See https://code.google.com/p/chromium/issues/detail?id=238071 - var image = new Image();//document.createElement('img'); - if (crossorigin) - { - image.crossOrigin = ''; - } - image.src = imageUrl; - baseTexture = new PIXI.BaseTexture(image); - PIXI.BaseTextureCache[imageUrl] = baseTexture; - } + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + // new Image() breaks tex loading in some versions of Chrome. + // See https://code.google.com/p/chromium/issues/detail?id=238071 + var image = new Image();//document.createElement('img'); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image, scaleMode); + baseTexture.imageUrl = imageUrl; + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } - return baseTexture; -} + return baseTexture; +}; +PIXI.BaseTexture.SCALE_MODE = { + DEFAULT: 0, //default to LINEAR + LINEAR: 0, + NEAREST: 1 +};
    diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 9fbba1c..41383a6 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -177,24 +179,24 @@ /** A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. - __Hint__: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded. - Otherwise black rectangles will be drawn instead. - + __Hint__: All DisplayObjects (exmpl. Sprites) that renders on RenderTexture should be preloaded. + Otherwise black rectangles will be drawn instead. + RenderTexture takes snapshot of DisplayObject passed to render method. If DisplayObject is passed to render method, position and rotation of it will be ignored. For example: - - var renderTexture = new PIXI.RenderTexture(800, 600); - var sprite = PIXI.Sprite.fromImage("spinObj_01.png"); - sprite.position.x = 800/2; - sprite.position.y = 600/2; - sprite.anchor.x = 0.5; - sprite.anchor.y = 0.5; - renderTexture.render(sprite); + + var renderTexture = new PIXI.RenderTexture(800, 600); + var sprite = PIXI.Sprite.fromImage("spinObj_01.png"); + sprite.position.x = 800/2; + sprite.position.y = 600/2; + sprite.anchor.x = 0.5; + sprite.anchor.y = 0.5; + renderTexture.render(sprite); Sprite in this case will be rendered to 0,0 position. To render this sprite at center DisplayObjectContainer should be used: - var doc = new PIXI.DisplayObjectContainer(); - doc.addChild(sprite); - renderTexture.render(doc); // Renders to center of renderTexture + var doc = new PIXI.DisplayObjectContainer(); + doc.addChild(sprite); + renderTexture.render(doc); // Renders to center of renderTexture @class RenderTexture @extends Texture @@ -202,113 +204,74 @@ @param width {Number} The width of the render texture @param height {Number} The height of the render texture */ -PIXI.RenderTexture = function(width, height) +PIXI.RenderTexture = function(width, height, renderer) { - PIXI.EventTarget.call( this ); + PIXI.EventTarget.call( this ); - this.width = width || 100; - this.height = height || 100; + this.width = width || 100; + this.height = height || 100; - this.indetityMatrix = PIXI.mat3.create(); + this.indetityMatrix = PIXI.mat3.create(); - this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); - if(PIXI.gl) - { - this.initWebGL(); - } - else - { - this.initCanvas(); - } -} + this.baseTexture = new PIXI.BaseTexture(); + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + this.baseTexture._glTextures = []; + + this.baseTexture.hasLoaded = true; + + // each render texture can only belong to one renderer at the moment if its webGL + this.renderer = renderer || PIXI.defaultRenderer; + + if(this.renderer.type === PIXI.WEBGL_RENDERER) + { + var gl = this.renderer.gl; + + this.textureBuffer = new PIXI.FilterTexture(gl, this.width, this.height); + this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; + + this.render = this.renderWebGL; + this.projection = new PIXI.Point(this.width/2 , -this.height/2); + } + else + { + this.render = this.renderCanvas; + this.textureBuffer = new PIXI.CanvasBuffer(this.width, this.height); + this.baseTexture.source = this.textureBuffer.canvas; + } + + PIXI.Texture.frameUpdates.push(this); +}; PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; -/** - * Initializes the webgl data for this texture - * - * @method initWebGL - * @private - */ -PIXI.RenderTexture.prototype.initWebGL = function() -{ - var gl = PIXI.gl; - this.glFramebuffer = gl.createFramebuffer(); - - gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); - - this.glFramebuffer.width = this.width; - this.glFramebuffer.height = this.height; - - this.baseTexture = new PIXI.BaseTexture(); - - this.baseTexture.width = this.width; - this.baseTexture.height = this.height; - - this.baseTexture._glTexture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); - - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); - - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - - this.baseTexture.isRender = true; - - gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); - - // create a projection matrix.. - this.projection = new PIXI.Point(this.width/2 , -this.height/2); - - // set the correct render function.. - this.render = this.renderWebGL; -} - - PIXI.RenderTexture.prototype.resize = function(width, height) { + this.width = width; + this.height = height; - this.width = width; - this.height = height; - - if(PIXI.gl) - { - this.projection.x = this.width/2 - this.projection.y = -this.height/2; - - var gl = PIXI.gl; - gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); - } - else - { - - this.frame.width = this.width - this.frame.height = this.height; - this.renderer.resize(this.width, this.height); - } -} + this.frame.width = this.width; + this.frame.height = this.height; -/** - * Initializes the canvas data for this texture - * - * @method initCanvas - * @private - */ -PIXI.RenderTexture.prototype.initCanvas = function() -{ - this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + if(this.renderer.type === PIXI.WEBGL_RENDERER) + { + this.projection.x = this.width / 2; + this.projection.y = -this.height / 2; - this.baseTexture = new PIXI.BaseTexture(this.renderer.view); - this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + var gl = this.gl; + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTextures[gl.id]); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + } + else + { + this.textureBuffer.resize(this.width, this.height); + } - this.render = this.renderCanvas; -} + PIXI.Texture.frameUpdates.push(this); +}; /** * This function will draw the display object to the texture. @@ -320,67 +283,46 @@ PIXI.RenderTexture.prototype.initCanvas = function() */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, position, clear) { - var gl = PIXI.gl; + var gl = this.renderer.gl; - // enable the alpha color mask.. - gl.colorMask(true, true, true, true); + gl.colorMask(true, true, true, true); - gl.viewport(0, 0, this.width, this.height); + gl.viewport(0, 0, this.width, this.height); - gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.bindFramebuffer(gl.FRAMEBUFFER, this.textureBuffer.frameBuffer ); - if(clear) - { - gl.clearColor(0,0,0, 0); - gl.clear(gl.COLOR_BUFFER_BIT); - } + if(clear)this.textureBuffer.clear(); - // THIS WILL MESS WITH HIT TESTING! - var children = displayObject.children; + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; - //TODO -? create a new one??? dont think so! - var originalWorldTransform = displayObject.worldTransform; - displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; - // modify to flip... - displayObject.worldTransform[4] = -1; - displayObject.worldTransform[5] = this.projection.y * -2; + //TODO -? create a new one??? dont think so! + var originalWorldTransform = displayObject.worldTransform; + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + // modify to flip... + displayObject.worldTransform[4] = -1; + displayObject.worldTransform[5] = this.projection.y * -2; - if(position) - { - displayObject.worldTransform[2] = position.x; - displayObject.worldTransform[5] -= position.y; - } - - PIXI.visibleCount++; - displayObject.vcount = PIXI.visibleCount; - - for(var i=0,j=children.length; i<j; i++) - { - children[i].updateTransform(); - } + if(position) + { + displayObject.worldTransform[2] = position.x; + displayObject.worldTransform[5] -= position.y; + } - var renderGroup = displayObject.__renderGroup; + PIXI.visibleCount++; + displayObject.vcount = PIXI.visibleCount; - if(renderGroup) - { - if(displayObject == renderGroup.root) - { - renderGroup.render(this.projection, this.glFramebuffer); - } - else - { - renderGroup.renderSpecific(displayObject, this.projection, this.glFramebuffer); - } - } - else - { - if(!this.renderGroup)this.renderGroup = new PIXI.WebGLRenderGroup(gl); - this.renderGroup.setRenderable(displayObject); - this.renderGroup.render(this.projection, this.glFramebuffer); - } - - displayObject.worldTransform = originalWorldTransform; -} + for(var i=0,j=children.length; i<j; i++) + { + children[i].updateTransform(); + } + + + // + this.renderer.renderDisplayObject(displayObject, this.projection); + + displayObject.worldTransform = originalWorldTransform; +}; /** @@ -393,31 +335,31 @@ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, position, cle */ PIXI.RenderTexture.prototype.renderCanvas = function(displayObject, position, clear) { - var children = displayObject.children; + //console.log("!!") + var children = displayObject.children; - displayObject.worldTransform = PIXI.mat3.create(); - - if(position) - { - displayObject.worldTransform[2] = position.x; - displayObject.worldTransform[5] = position.y; - } - + displayObject.worldTransform = PIXI.mat3.create(); - for(var i=0,j=children.length; i<j; i++) - { - children[i].updateTransform(); - } + if(position) + { + displayObject.worldTransform[2] = position.x; + displayObject.worldTransform[5] = position.y; + } - if(clear)this.renderer.context.clearRect(0,0, this.width, this.height); - - this.renderer.renderDisplayObject(displayObject); - - this.renderer.context.setTransform(1,0,0,1,0,0); - + for(var i = 0, j = children.length; i < j; i++) + { + children[i].updateTransform(); + } - // PIXI.texturesToUpdate.push(this.baseTexture); -} + if(clear)this.textureBuffer.clear(); + + var context = this.textureBuffer.context; + + this.renderer.renderDisplayObject(displayObject, context); + + context.setTransform(1,0,0,1,0,0); + +};
    diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index c60354b..4c5c257 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -189,56 +191,55 @@ PIXI.FrameCache = {}; */ PIXI.Texture = function(baseTexture, frame) { - PIXI.EventTarget.call( this ); + PIXI.EventTarget.call( this ); - if(!frame) - { - this.noFrame = true; - frame = new PIXI.Rectangle(0,0,1,1); - } + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } - if(baseTexture instanceof PIXI.Texture) - baseTexture = baseTexture.baseTexture; + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; - /** - * The base texture of this texture - * - * @property baseTexture - * @type BaseTexture - */ - this.baseTexture = baseTexture; + /** + * The base texture of this texture + * + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; - /** - * The frame specifies the region of the base texture that this texture uses - * - * @property frame - * @type Rectangle - */ - this.frame = frame; + /** + * The frame specifies the region of the base texture that this texture uses + * + * @property frame + * @type Rectangle + */ + this.frame = frame; - /** - * The trim point - * - * @property trim - * @type Point - */ - this.trim = new PIXI.Point(); + /** + * The trim point + * + * @property trim + * @type Point + */ + this.trim = new PIXI.Point(); - this.scope = this; + this.scope = this; - if(baseTexture.hasLoaded) - { - if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); - //console.log(frame) - - this.setFrame(frame); - } - else - { - var scope = this; - baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); - } -} + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener('loaded', function(){ scope.onBaseTextureLoaded(); }); + } +}; PIXI.Texture.prototype.constructor = PIXI.Texture; @@ -249,18 +250,17 @@ PIXI.Texture.prototype.constructor = PIXI.Texture; * @param event * @private */ -PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +PIXI.Texture.prototype.onBaseTextureLoaded = function() { - var baseTexture = this.baseTexture; - baseTexture.removeEventListener( 'loaded', this.onLoaded ); + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); - if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); - this.noFrame = false; - this.width = this.frame.width; - this.height = this.frame.height; + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + + this.setFrame(this.frame); - this.scope.dispatchEvent( { type: 'update', content: this } ); -} + this.scope.dispatchEvent( { type: 'update', content: this } ); +}; /** * Destroys this texture @@ -270,8 +270,8 @@ PIXI.Texture.prototype.onBaseTextureLoaded = function(event) */ PIXI.Texture.prototype.destroy = function(destroyBase) { - if(destroyBase)this.baseTexture.destroy(); -} + if(destroyBase) this.baseTexture.destroy(); +}; /** * Specifies the rectangle region of the baseTexture @@ -281,20 +281,41 @@ PIXI.Texture.prototype.destroy = function(destroyBase) */ PIXI.Texture.prototype.setFrame = function(frame) { - this.frame = frame; - this.width = frame.width; - this.height = frame.height; + this.frame = frame; + this.width = frame.width; + this.height = frame.height; - if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) - { - throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); - } + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error('Texture Error: frame does not fit inside the base Texture dimensions ' + this); + } - this.updateFrame = true; + this.updateFrame = true; - PIXI.Texture.frameUpdates.push(this); - //this.dispatchEvent( { type: 'update', content: this } ); -} + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +}; + +PIXI.Texture.prototype._updateWebGLuvs = function() +{ + if(!this._uvs)this._uvs = new Float32Array(8); + + var frame = this.frame; + var tw = this.baseTexture.width; + var th = this.baseTexture.height; + + this._uvs[0] = frame.x / tw; + this._uvs[1] = frame.y / th; + + this._uvs[2] = (frame.x + frame.width) / tw; + this._uvs[3] = frame.y / th; + + this._uvs[4] = (frame.x + frame.width) / tw; + this._uvs[5] = (frame.y + frame.height) / th; + + this._uvs[6] = frame.x / tw; + this._uvs[7] = (frame.y + frame.height) / th; +}; /** * Helper function that returns a texture based on an image url @@ -306,18 +327,18 @@ PIXI.Texture.prototype.setFrame = function(frame) * @param crossorigin {Boolean} Whether requests should be treated as crossorigin * @return Texture */ -PIXI.Texture.fromImage = function(imageUrl, crossorigin) +PIXI.Texture.fromImage = function(imageUrl, crossorigin, scaleMode) { - var texture = PIXI.TextureCache[imageUrl]; + var texture = PIXI.TextureCache[imageUrl]; - if(!texture) - { - texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); - PIXI.TextureCache[imageUrl] = texture; - } + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin, scaleMode)); + PIXI.TextureCache[imageUrl] = texture; + } - return texture; -} + return texture; +}; /** * Helper function that returns a texture based on a frame id @@ -330,10 +351,10 @@ PIXI.Texture.fromImage = function(imageUrl, crossorigin) */ PIXI.Texture.fromFrame = function(frameId) { - var texture = PIXI.TextureCache[frameId]; - if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); - return texture; -} + var texture = PIXI.TextureCache[frameId]; + if(!texture) throw new Error('The frameId "' + frameId + '" does not exist in the texture cache ' + this); + return texture; +}; /** * Helper function that returns a texture based on a canvas element @@ -344,11 +365,11 @@ PIXI.Texture.fromFrame = function(frameId) * @param canvas {Canvas} The canvas element source of the texture * @return Texture */ -PIXI.Texture.fromCanvas = function(canvas) +PIXI.Texture.fromCanvas = function(canvas, scaleMode) { - var baseTexture = new PIXI.BaseTexture(canvas); - return new PIXI.Texture(baseTexture); -} + var baseTexture = new PIXI.BaseTexture(canvas, scaleMode); + return new PIXI.Texture(baseTexture); +}; /** @@ -361,8 +382,8 @@ PIXI.Texture.fromCanvas = function(canvas) */ PIXI.Texture.addTextureToCache = function(texture, id) { - PIXI.TextureCache[id] = texture; -} + PIXI.TextureCache[id] = texture; +}; /** * Remove a texture from the textureCache. @@ -374,14 +395,15 @@ PIXI.Texture.addTextureToCache = function(texture, id) */ PIXI.Texture.removeTextureFromCache = function(id) { - var texture = PIXI.TextureCache[id] - PIXI.TextureCache[id] = null; - return texture; -} + var texture = PIXI.TextureCache[id]; + PIXI.TextureCache[id] = null; + return texture; +}; // this is more for webGL.. it contains updated frames.. PIXI.Texture.frameUpdates = []; +PIXI.Texture.SCALE_MODE = PIXI.BaseTexture.SCALE_MODE;
    diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index 34e1f5a..8501a71 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -191,29 +193,33 @@ */ PIXI.autoDetectRenderer = function(width, height, view, transparent, antialias) { - if(!width)width = 800; - if(!height)height = 600; + if(!width)width = 800; + if(!height)height = 600; - // BORROWED from Mr Doob (mrdoob.com) - var webgl = ( function () { try { var canvas = document.createElement( 'canvas' ); return !! window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); } catch( e ) { return false; } } )(); + // BORROWED from Mr Doob (mrdoob.com) + var webgl = ( function () { try { + var canvas = document.createElement( 'canvas' ); + return !! window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); + } catch( e ) { + return false; + } + } )(); - if(webgl) - { - var ie = (navigator.userAgent.toLowerCase().indexOf('msie') != -1); - webgl = !ie; - } - - //console.log(webgl); - if( webgl ) - { - return new PIXI.WebGLRenderer(width, height, view, transparent, antialias); - } + if(webgl) + { + var ie = (navigator.userAgent.toLowerCase().indexOf('trident') !== -1); + webgl = !ie; + } - return new PIXI.CanvasRenderer(width, height, view, transparent); + //console.log(webgl); + if( webgl ) + { + return new PIXI.WebGLRenderer(width, height, view, transparent, antialias); + } + + return new PIXI.CanvasRenderer(width, height, view, transparent); }; - -
    diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index 63cb9dd..416de4b 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -180,61 +182,66 @@ * * @class EventTarget * @example - * function MyEmitter() { - * PIXI.EventTarget.call(this); //mixes in event target stuff - * } + * function MyEmitter() { + * PIXI.EventTarget.call(this); //mixes in event target stuff + * } * - * var em = new MyEmitter(); - * em.emit({ type: 'eventName', data: 'some data' }); + * var em = new MyEmitter(); + * em.emit({ type: 'eventName', data: 'some data' }); */ PIXI.EventTarget = function () { - var listeners = {}; + var listeners = {}; - this.addEventListener = this.on = function ( type, listener ) { + this.addEventListener = this.on = function ( type, listener ) { - if ( listeners[ type ] === undefined ) { + if ( listeners[ type ] === undefined ) { - listeners[ type ] = []; + listeners[ type ] = []; - } + } - if ( listeners[ type ].indexOf( listener ) === - 1 ) { + if ( listeners[ type ].indexOf( listener ) === - 1 ) { - listeners[ type ].push( listener ); - } + listeners[ type ].push( listener ); + } + }; + + this.dispatchEvent = this.emit = function ( event ) { + + if ( !listeners[ event.type ] || !listeners[ event.type ].length ) { + + return; + + } + + for(var i = 0, l = listeners[ event.type ].length; i < l; i++) { + + listeners[ event.type ][ i ]( event ); + + } + + }; + + this.removeEventListener = this.off = function ( type, listener ) { + + var index = listeners[ type ].indexOf( listener ); + + if ( index !== - 1 ) { + + listeners[ type ].splice( index, 1 ); + + } + + }; + + this.removeAllEventListeners = function( type ) { + var a = listeners[type]; + if (a) + a.length = 0; }; - - this.dispatchEvent = this.emit = function ( event ) { - - if ( !listeners[ event.type ] || !listeners[ event.type ].length ) { - - return; - - } - - for(var i = 0, l = listeners[ event.type ].length; i < l; i++) { - - listeners[ event.type ][ i ]( event ); - - } - - }; - - this.removeEventListener = this.off = function ( type, listener ) { - - var index = listeners[ type ].indexOf( listener ); - - if ( index !== - 1 ) { - - listeners[ type ].splice( index, 1 ); - - } - - }; - }; diff --git a/docs/files/src_pixi_utils_Polyk.js.html b/docs/files/src_pixi_utils_Polyk.js.html index 00d055c..5fe9e1c 100644 --- a/docs/files/src_pixi_utils_Polyk.js.html +++ b/docs/files/src_pixi_utils_Polyk.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -171,36 +173,36 @@
     /*
    -	PolyK library
    -	url: http://polyk.ivank.net
    -	Released under MIT licence.
    +    PolyK library
    +    url: http://polyk.ivank.net
    +    Released under MIT licence.
     
    -	Copyright (c) 2012 Ivan Kuckir
    +    Copyright (c) 2012 Ivan Kuckir
     
    -	Permission is hereby granted, free of charge, to any person
    -	obtaining a copy of this software and associated documentation
    -	files (the "Software"), to deal in the Software without
    -	restriction, including without limitation the rights to use,
    -	copy, modify, merge, publish, distribute, sublicense, and/or sell
    -	copies of the Software, and to permit persons to whom the
    -	Software is furnished to do so, subject to the following
    -	conditions:
    +    Permission is hereby granted, free of charge, to any person
    +    obtaining a copy of this software and associated documentation
    +    files (the "Software"), to deal in the Software without
    +    restriction, including without limitation the rights to use,
    +    copy, modify, merge, publish, distribute, sublicense, and/or sell
    +    copies of the Software, and to permit persons to whom the
    +    Software is furnished to do so, subject to the following
    +    conditions:
     
    -	The above copyright notice and this permission notice shall be
    -	included in all copies or substantial portions of the Software.
    +    The above copyright notice and this permission notice shall be
    +    included in all copies or substantial portions of the Software.
     
    -	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -	EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    -	OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -	NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    -	HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    -	WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    -	FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    -	OTHER DEALINGS IN THE SOFTWARE.
    +    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    +    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +    OTHER DEALINGS IN THE SOFTWARE.
     
    -	This is an amazing lib!
    +    This is an amazing lib!
     
    -	slightly modified by mat groves (matgroves.com);
    +    slightly modified by mat groves (matgroves.com);
     */
     
     PIXI.PolyK = {};
    @@ -214,69 +216,76 @@ PIXI.PolyK = {};
      */
     PIXI.PolyK.Triangulate = function(p)
     {
    -	var sign = true;
    +    var sign = true;
     
    -	var n = p.length>>1;
    -	if(n<3) return [];
    -	var tgs = [];
    -	var avl = [];
    -	for(var i=0; i<n; i++) avl.push(i);
    +    var n = p.length >> 1;
    +    if(n < 3) return [];
     
    -	var i = 0;
    -	var al = n;
    -	while(al > 3)
    -	{
    -		var i0 = avl[(i+0)%al];
    -		var i1 = avl[(i+1)%al];
    -		var i2 = avl[(i+2)%al];
    +    var tgs = [];
    +    var avl = [];
    +    for(var i = 0; i < n; i++) avl.push(i);
     
    -		var ax = p[2*i0],  ay = p[2*i0+1];
    -		var bx = p[2*i1],  by = p[2*i1+1];
    -		var cx = p[2*i2],  cy = p[2*i2+1];
    +    i = 0;
    +    var al = n;
    +    while(al > 3)
    +    {
    +        var i0 = avl[(i+0)%al];
    +        var i1 = avl[(i+1)%al];
    +        var i2 = avl[(i+2)%al];
     
    -		var earFound = false;
    -		if(PIXI.PolyK._convex(ax, ay, bx, by, cx, cy, sign))
    -		{
    -			earFound = true;
    -			for(var j=0; j<al; j++)
    -			{
    -				var vi = avl[j];
    -				if(vi==i0 || vi==i1 || vi==i2) continue;
    -				if(PIXI.PolyK._PointInTriangle(p[2*vi], p[2*vi+1], ax, ay, bx, by, cx, cy)) {earFound = false; break;}
    -			}
    -		}
    -		if(earFound)
    -		{
    -			tgs.push(i0, i1, i2);
    -			avl.splice((i+1)%al, 1);
    -			al--;
    -			i = 0;
    -		}
    -		else if(i++ > 3*al)
    -		{
    -			// need to flip flip reverse it!
    -			// reset!
    -			if(sign)
    -			{
    -				var tgs = [];
    -				avl = [];
    -				for(var i=0; i<n; i++) avl.push(i);
    +        var ax = p[2*i0],  ay = p[2*i0+1];
    +        var bx = p[2*i1],  by = p[2*i1+1];
    +        var cx = p[2*i2],  cy = p[2*i2+1];
     
    -				i = 0;
    -				al = n;
    +        var earFound = false;
    +        if(PIXI.PolyK._convex(ax, ay, bx, by, cx, cy, sign))
    +        {
    +            earFound = true;
    +            for(var j = 0; j < al; j++)
    +            {
    +                var vi = avl[j];
    +                if(vi === i0 || vi === i1 || vi === i2) continue;
     
    -				sign = false;
    -			}
    -			else
    -			{
    -				console.log("PIXI Warning: shape too complex to fill")
    -				return [];
    -			}
    -		}
    -	}
    -	tgs.push(avl[0], avl[1], avl[2]);
    -	return tgs;
    -}
    +                if(PIXI.PolyK._PointInTriangle(p[2*vi], p[2*vi+1], ax, ay, bx, by, cx, cy)) {
    +                    earFound = false;
    +                    break;
    +                }
    +            }
    +        }
    +
    +        if(earFound)
    +        {
    +            tgs.push(i0, i1, i2);
    +            avl.splice((i+1)%al, 1);
    +            al--;
    +            i = 0;
    +        }
    +        else if(i++ > 3*al)
    +        {
    +            // need to flip flip reverse it!
    +            // reset!
    +            if(sign)
    +            {
    +                tgs = [];
    +                avl = [];
    +                for(i = 0; i < n; i++) avl.push(i);
    +
    +                i = 0;
    +                al = n;
    +
    +                sign = false;
    +            }
    +            else
    +            {
    +                window.console.log("PIXI Warning: shape too complex to fill");
    +                return [];
    +            }
    +        }
    +    }
    +
    +    tgs.push(avl[0], avl[1], avl[2]);
    +    return tgs;
    +};
     
     /**
      * Checks if a point is within a triangle
    @@ -287,26 +296,26 @@ PIXI.PolyK.Triangulate = function(p)
      */
     PIXI.PolyK._PointInTriangle = function(px, py, ax, ay, bx, by, cx, cy)
     {
    -	var v0x = cx-ax;
    -	var v0y = cy-ay;
    -	var v1x = bx-ax;
    -	var v1y = by-ay;
    -	var v2x = px-ax;
    -	var v2y = py-ay;
    +    var v0x = cx-ax;
    +    var v0y = cy-ay;
    +    var v1x = bx-ax;
    +    var v1y = by-ay;
    +    var v2x = px-ax;
    +    var v2y = py-ay;
     
    -	var dot00 = v0x*v0x+v0y*v0y;
    -	var dot01 = v0x*v1x+v0y*v1y;
    -	var dot02 = v0x*v2x+v0y*v2y;
    -	var dot11 = v1x*v1x+v1y*v1y;
    -	var dot12 = v1x*v2x+v1y*v2y;
    +    var dot00 = v0x*v0x+v0y*v0y;
    +    var dot01 = v0x*v1x+v0y*v1y;
    +    var dot02 = v0x*v2x+v0y*v2y;
    +    var dot11 = v1x*v1x+v1y*v1y;
    +    var dot12 = v1x*v2x+v1y*v2y;
     
    -	var invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
    -	var u = (dot11 * dot02 - dot01 * dot12) * invDenom;
    -	var v = (dot00 * dot12 - dot01 * dot02) * invDenom;
    +    var invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
    +    var u = (dot11 * dot02 - dot01 * dot12) * invDenom;
    +    var v = (dot00 * dot12 - dot01 * dot02) * invDenom;
     
    -	// Check if point is in triangle
    -	return (u >= 0) && (v >= 0) && (u + v < 1);
    -}
    +    // Check if point is in triangle
    +    return (u >= 0) && (v >= 0) && (u + v < 1);
    +};
     
     /**
      * Checks if a shape is convex
    @@ -317,8 +326,8 @@ PIXI.PolyK._PointInTriangle = function(px, py, ax, ay, bx, by, cx, cy)
      */
     PIXI.PolyK._convex = function(ax, ay, bx, by, cx, cy, sign)
     {
    -	return ((ay-by)*(cx-bx) + (bx-ax)*(cy-by) >= 0) == sign;
    -}
    +    return ((ay-by)*(cx-bx) + (bx-ax)*(cy-by) >= 0) === sign;
    +};
     
         
    diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 15fcb57..4aac872 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -190,13 +192,13 @@ var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; - window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] - || window[vendors[x]+'CancelRequestAnimationFrame']; + window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || + window[vendors[x] + 'CancelRequestAnimationFrame']; } -if (!window.requestAnimationFrame) - window.requestAnimationFrame = function(callback, element) { +if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function(callback) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, @@ -204,50 +206,57 @@ if (!window.requestAnimationFrame) lastTime = currTime + timeToCall; return id; }; +} -if (!window.cancelAnimationFrame) +if (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function(id) { clearTimeout(id); }; +} window.requestAnimFrame = window.requestAnimationFrame; /** * Converts a hex color number to an [R, G, B] array * - * @method HEXtoRGB + * @method hex2rgb * @param hex {Number} */ -function HEXtoRGB(hex) { - return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; -} +PIXI.hex2rgb = function(hex) { + return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +}; + + +PIXI.rgb2hex = function(rgb) { + return ((rgb[0]*255 << 16) + (rgb[1]*255 << 8) + rgb[2]*255); +}; /** * A polyfill for Function.prototype.bind * * @method bind */ -if (typeof Function.prototype.bind != 'function') { - Function.prototype.bind = (function () { - var slice = Array.prototype.slice; - return function (thisArg) { - var target = this, boundArgs = slice.call(arguments, 1); +if (typeof Function.prototype.bind !== 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); - if (typeof target != 'function') throw new TypeError(); + if (typeof target !== 'function') throw new TypeError(); - function bound() { - var args = boundArgs.concat(slice.call(arguments)); - target.apply(this instanceof bound ? this : thisArg, args); - } + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } - bound.prototype = (function F(proto) { - proto && (F.prototype = proto); - if (!(this instanceof F)) return new F; - })(target.prototype); + bound.prototype = (function F(proto) { + if (proto) F.prototype = proto; + if (!(this instanceof F)) return new F(); + })(target.prototype); - return bound; - }; - })(); + return bound; + }; + })(); } /** @@ -256,60 +265,86 @@ if (typeof Function.prototype.bind != 'function') { * @class AjaxRequest * @constructor */ -var AjaxRequest = PIXI.AjaxRequest = function() +PIXI.AjaxRequest = function AjaxRequest() { - var activexmodes = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"] //activeX versions to check for in IE - - if (window.ActiveXObject) - { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) - for (var i=0; i<activexmodes.length; i++) - { - try{ - return new ActiveXObject(activexmodes[i]) - } - catch(e){ - //suppress error - } - } - } - else if (window.XMLHttpRequest) // if Mozilla, Safari etc - { - return new XMLHttpRequest() - } - else - { - return false; - } -} + var activexmodes = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Microsoft.XMLHTTP']; //activeX versions to check for in IE + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i<activexmodes.length; i++) + { + try{ + return new window.ActiveXObject(activexmodes[i]); + } + catch(e) { + //suppress error + } + } + } + else if (window.XMLHttpRequest) // if Mozilla, Safari etc + { + return new window.XMLHttpRequest(); + } + else + { + return false; + } +}; /* - * DEBUGGING ONLY - */ -PIXI.runList = function(item) +PIXI.packColorRGBA = function(r, g, b, a)//r, g, b, a) { - console.log(">>>>>>>>>") - console.log("_") - var safe = 0; - var tmp = item.first; - console.log(tmp); + // console.log(r, b, c, d) + return (Math.floor((r)*63) << 18) | (Math.floor((g)*63) << 12) | (Math.floor((b)*63) << 6);// | (Math.floor((a)*63)) + // i = i | (Math.floor((a)*63)); + // return i; + // var r = (i / 262144.0 ) / 64; + // var g = (i / 4096.0)%64 / 64; + // var b = (i / 64.0)%64 / 64; + // var a = (i)%64 / 64; + + // console.log(r, g, b, a); + // return i; - while(tmp._iNext) - { - safe++; - tmp = tmp._iNext; - console.log(tmp); - // console.log(tmp); - - if(safe > 100) - { - console.log("BREAK") - break - } - } -} +}; +*/ +/* +PIXI.packColorRGB = function(r, g, b)//r, g, b, a) +{ + return (Math.floor((r)*255) << 16) | (Math.floor((g)*255) << 8) | (Math.floor((b)*255)); +}; +PIXI.unpackColorRGB = function(r, g, b)//r, g, b, a) +{ + return (Math.floor((r)*255) << 16) | (Math.floor((g)*255) << 8) | (Math.floor((b)*255)); +}; +*/ +PIXI.canUseNewCanvasBlendModes = function() +{ + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = 1; + var context = canvas.getContext('2d'); + context.fillStyle = '#000'; + context.fillRect(0,0,1,1); + context.globalCompositeOperation = 'multiply'; + context.fillStyle = '#fff'; + context.fillRect(0,0,1,1); + return context.getImageData(0,0,1,1).data[0] === 0; +}; +// this function is taken from Starling Framework as its pretty neat ;) +PIXI.getNextPowerOfTwo = function(number) +{ + if (number > 0 && (number & (number - 1)) === 0) // see: http://goo.gl/D9kPj + return number; + else + { + var result = 1; + while (result < number) result <<= 1; + return result; + } +}; diff --git a/docs/index.html b/docs/index.html index 1b0f5e0..79c7a59 100644 --- a/docs/index.html +++ b/docs/index.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 9a9e653..3686232 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -19,7 +19,7 @@
    - API Docs for: 1.3.0 + API Docs for: 1.4.0
    @@ -45,6 +45,8 @@
  • AssetLoader
  • +
  • AtlasLoader
  • +
  • BaseTexture
  • BitmapFontLoader
  • @@ -61,7 +63,7 @@
  • ColorMatrixFilter
  • -
  • CustomRenderable
  • +
  • ColorStepFilter
  • DisplacementFilter
  • @@ -75,7 +77,7 @@
  • Graphics
  • -
  • GreyFilter
  • +
  • GrayFilter
  • ImageLoader
  • @@ -87,6 +89,8 @@
  • PixelateFilter
  • +
  • PIXI.PixiShader
  • +
  • Point
  • Polygon
  • @@ -109,10 +113,10 @@
  • Spine
  • -
  • Sprite
  • -
  • SpriteSheetLoader
  • +
  • Sprite™
  • +
  • Stage
  • Text
  • @@ -121,8 +125,6 @@
  • TilingSprite
  • -
  • WebGLBatch
  • -
  • WebGLRenderer
  • @@ -174,7 +176,7 @@ @@ -208,6 +210,12 @@ +
  • + + AtlasLoader + +
  • +
  • BaseTexture @@ -257,8 +265,8 @@
  • - - CustomRenderable + + ColorStepFilter
  • @@ -299,8 +307,8 @@
  • - - GreyFilter + + GrayFilter
  • @@ -334,6 +342,12 @@ +
  • + + PIXI.PixiShader + +
  • +
  • Point @@ -401,14 +415,14 @@
  • - - Sprite + + SpriteSheetLoader
  • - - SpriteSheetLoader + + Sprite™
  • @@ -436,12 +450,6 @@ -
  • - - WebGLBatch - -
  • -
  • WebGLRenderer diff --git a/examples/example 13 - Graphics/index.html b/examples/example 13 - Graphics/index.html index e879f60..3740a44 100644 --- a/examples/example 13 - Graphics/index.html +++ b/examples/example 13 - Graphics/index.html @@ -80,13 +80,13 @@ stage.addChild(graphics); - +/* // lets create moving shape var thing = new PIXI.Graphics(); stage.addChild(thing); thing.position.x = 620/2; thing.position.y = 380/2; - +*/ var count = 0; stage.click = stage.tap = function() @@ -98,6 +98,9 @@ requestAnimFrame(animate); + graphics.filters = [new PIXI.BlurFilter()]; + + stage.addChild(PIXI.Sprite.fromImage("spinObj_02.png")); function animate() { /* thing.clear(); diff --git a/src/pixi/display/Sprite.js b/src/pixi/display/Sprite.js index 23951db..5f882cc 100644 --- a/src/pixi/display/Sprite.js +++ b/src/pixi/display/Sprite.js @@ -67,8 +67,23 @@ PIXI.Sprite = function(texture) */ this._height = 0; + + /** + * The tint applied to the sprite. This is a hex value + * + * @property tint + * @type Number + * @default 0xFFFFFF + */ this.tint = 0xFFFFFF;// * Math.random(); + /** + * The blend mode to be applied to the sprite + * + * @property blendMode + * @type Number + * @default PIXI.blendModes.NORMAL; + */ this.blendMode = PIXI.blendModes.NORMAL; if(texture.baseTexture.hasLoaded) diff --git a/src/pixi/primitives/Graphics.js b/src/pixi/primitives/Graphics.js index 0b6ab18..bf1d223 100644 --- a/src/pixi/primitives/Graphics.js +++ b/src/pixi/primitives/Graphics.js @@ -240,8 +240,13 @@ PIXI.Graphics.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 || this.isMask === true)return; + + renderSession.spriteBatch.stop(); + if(this._mask)renderSession.maskManager.pushMask(this.mask, renderSession); + if(this._filters)renderSession.filterManager.pushFilter(this._filterBlock); + // check blend mode if(this.blendMode !== renderSession.spriteBatch.currentBlendMode) { @@ -249,9 +254,13 @@ PIXI.Graphics.prototype._renderWebGL = function(renderSession) var blendModeWebGL = PIXI.blendModesWebGL[renderSession.spriteBatch.currentBlendMode]; this.spriteBatch.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); } - + PIXI.WebGLGraphics.renderGraphics(this, renderSession); + if(this._filters)renderSession.filterManager.popFilter(); + if(this._mask)renderSession.maskManager.popMask(renderSession); + + renderSession.spriteBatch.start(); }; @@ -278,9 +287,9 @@ PIXI.Graphics.prototype.getBounds = function() if(!this.bounds)this.updateBounds(); var w0 = this.bounds.x; - var w1 = this.bounds.y; + var w1 = this.bounds.width + this.bounds.x; - var h0 = this.bounds.width + this.bounds.x; + var h0 = this.bounds.y; var h1 = this.bounds.height + this.bounds.y; var worldTransform = this.worldTransform; @@ -344,7 +353,6 @@ PIXI.Graphics.prototype.getBounds = function() PIXI.Graphics.prototype.updateBounds = function() { - var minX = Infinity; var maxX = -Infinity; @@ -393,7 +401,6 @@ PIXI.Graphics.prototype.updateBounds = function() x = points[j]; y = points[j+1]; - minX = x-lineWidth < minX ? x-lineWidth : minX; maxX = x+lineWidth > maxX ? x+lineWidth : maxX; @@ -404,8 +411,6 @@ PIXI.Graphics.prototype.updateBounds = function() } this.bounds = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY); - -// console.log(this.bounds); }; // SOME TYPES: diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index bfed2d2..f63b82b 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -417,9 +417,9 @@ PIXI.WebGLRenderer.prototype.handleContextRestored = function() // need to set the context... - this.shaderManager.setContext(gl); - this.spriteBatch.setContext(gl); - this.maskManager.setContext(gl); + this.shaderManager.setContext(gl); + this.spriteBatch.setContext(gl); + this.maskManager.setContext(gl); this.filterManager.setContext(gl); diff --git a/src/pixi/renderers/webgl/utils/WebGLFilterManager.js b/src/pixi/renderers/webgl/utils/WebGLFilterManager.js index 41f8952..fe36539 100644 --- a/src/pixi/renderers/webgl/utils/WebGLFilterManager.js +++ b/src/pixi/renderers/webgl/utils/WebGLFilterManager.js @@ -23,7 +23,7 @@ PIXI.WebGLFilterManager.prototype.setContext = function(gl) this.texturePool = []; this.initShaderBuffers(); -} +}; PIXI.WebGLFilterManager.prototype.begin = function(renderSession, buffer) { @@ -66,10 +66,10 @@ PIXI.WebGLFilterManager.prototype.pushFilter = function(filterBlock) gl.bindTexture(gl.TEXTURE_2D, texture.texture); - this.getBounds(filterBlock.target); +// this.getBounds(filterBlock.target); filterBlock.target.filterArea = filterBlock.target.getBounds(); - + // console.log(filterBlock.target.filterArea) // console.log(filterBlock.target.filterArea); // addpadding? //displayObject.filterArea.x @@ -323,7 +323,7 @@ PIXI.WebGLFilterManager.prototype.applyFilterPass = function(filter, filterArea, filter.uniforms.dimensions.value[3] = this.vertexArray[5];//filterArea.height; // console.log(this.vertexArray[5]) } - + shader.syncUniforms(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); @@ -393,7 +393,7 @@ PIXI.WebGLFilterManager.prototype.initShaderBuffers = function() new Uint16Array([0, 1, 2, 1, 3, 2]), gl.STATIC_DRAW); }; - +/* PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject) { // time to get the width and height of the object! @@ -511,7 +511,7 @@ PIXI.WebGLFilterManager.prototype.getBounds = function(displayObject) displayObject.filterArea.width = maxX - minX; displayObject.filterArea.height = maxY - minY; }; - +*/ PIXI.FilterTexture = function(gl, width, height) { // var gl = PIXI.gl; diff --git a/src/pixi/renderers/webgl/utils/WebGLGraphics.js b/src/pixi/renderers/webgl/utils/WebGLGraphics.js index 792d305..fff1223 100644 --- a/src/pixi/renderers/webgl/utils/WebGLGraphics.js +++ b/src/pixi/renderers/webgl/utils/WebGLGraphics.js @@ -68,7 +68,6 @@ PIXI.WebGLGraphics.renderGraphics = function(graphics, renderSession)//projectio gl.uniform3fv(shader.tintColor, PIXI.hex2rgb(graphics.tint)); - gl.uniform1f(shader.alpha, graphics.worldAlpha); gl.uniform1f(shader.alpha, graphics.worldAlpha); gl.bindBuffer(gl.ARRAY_BUFFER, webGL.buffer); diff --git a/src/pixi/renderers/webgl/utils/WebGLShaderManager.js b/src/pixi/renderers/webgl/utils/WebGLShaderManager.js index f98c286..f5c022e 100644 --- a/src/pixi/renderers/webgl/utils/WebGLShaderManager.js +++ b/src/pixi/renderers/webgl/utils/WebGLShaderManager.js @@ -29,7 +29,7 @@ PIXI.WebGLShaderManager.prototype.setContext = function(gl) gl.enableVertexAttribArray(this.defaultShader.aTextureCoord); -} +}; PIXI.WebGLShaderManager.prototype.activatePrimitiveShader = function() { diff --git a/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js b/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js index 1ff949f..9f43d64 100644 --- a/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js +++ b/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js @@ -54,11 +54,7 @@ PIXI.WebGLSpriteBatch.prototype.setContext = function(gl) this.indexBuffer = gl.createBuffer(); // 65535 is max index, so 65535 / 6 = 10922. - - //the total number of floats in our batch - var numVerts = this.size * 4 * this.vertSize; - //the total number of indices in our batch - var numIndices = this.size * 6; + //upload the index data gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); @@ -68,7 +64,7 @@ PIXI.WebGLSpriteBatch.prototype.setContext = function(gl) gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); this.currentBlendMode = 99999; -} +}; PIXI.WebGLSpriteBatch.prototype.begin = function(renderSession) { diff --git a/src/pixi/utils/Utils.js b/src/pixi/utils/Utils.js index bf0c98c..90fd759 100644 --- a/src/pixi/utils/Utils.js +++ b/src/pixi/utils/Utils.js @@ -159,4 +159,17 @@ PIXI.canUseNewCanvasBlendModes = function() return context.getImageData(0,0,1,1).data[0] === 0; }; +// this function is taken from Starling Framework as its pretty neat ;) +PIXI.getNextPowerOfTwo = function(number) +{ + if (number > 0 && (number & (number - 1)) === 0) // see: http://goo.gl/D9kPj + return number; + else + { + var result = 1; + while (result < number) result <<= 1; + return result; + } +}; +