diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index caab077..191c894 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -519,7 +519,7 @@ }; /** - * Maps Pixi blend modes to WebGL blend modes. + * Maps Pixi blend modes to WebGL blend modes. It works only for pre-multiplied textures. * * @method mapBlendModes */ @@ -531,10 +531,10 @@ { PIXI.blendModesWebGL = []; - PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA]; - PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.SRC_ALPHA, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.ONE, 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]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR]; PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index caab077..191c894 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -519,7 +519,7 @@ }; /** - * Maps Pixi blend modes to WebGL blend modes. + * Maps Pixi blend modes to WebGL blend modes. It works only for pre-multiplied textures. * * @method mapBlendModes */ @@ -531,10 +531,10 @@ { PIXI.blendModesWebGL = []; - PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA]; - PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.SRC_ALPHA, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.ONE, 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]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR]; PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; diff --git a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js index 487843d..3de0ec9 100644 --- a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js +++ b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js @@ -31,36 +31,25 @@ /** * Sets-up the given blendMode from WebGL's point of view. -* -* @method setBlendMode +* +* @method setBlendMode * @param blendMode {Number} the blendMode, should be a Pixi const, such as PIXI.BlendModes.ADD */ -PIXI.WebGLBlendModeManager.prototype.setBlendMode = function (blendMode, isSourcePremultiplied) +PIXI.WebGLBlendModeManager.prototype.setBlendMode = function(blendMode) { - if (typeof isSourcePremultiplied === "undefined") { - isSourcePremultiplied = true; - } - if (this.currentBlendMode === blendMode && - this.currentSourcePremultiplied == isSourcePremultiplied) - { - return false; - } + if(this.currentBlendMode === blendMode)return false; this.currentBlendMode = blendMode; - this.currentSourcePremultiplied = isSourcePremultiplied; - - var mode = PIXI.blendModesWebGL[this.currentBlendMode]; - var gl = this.gl; - if (isSourcePremultiplied && mode[0] == gl.SRC_ALPHA) - gl.blendFunc(gl.ONE, mode[1]); - else - gl.blendFunc(mode[0], mode[1]); + + var blendModeWebGL = PIXI.blendModesWebGL[this.currentBlendMode]; + this.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + return true; }; /** * Destroys this object. -* +* * @method destroy */ PIXI.WebGLBlendModeManager.prototype.destroy = function() diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index caab077..191c894 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -519,7 +519,7 @@ }; /** - * Maps Pixi blend modes to WebGL blend modes. + * Maps Pixi blend modes to WebGL blend modes. It works only for pre-multiplied textures. * * @method mapBlendModes */ @@ -531,10 +531,10 @@ { PIXI.blendModesWebGL = []; - PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA]; - PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.SRC_ALPHA, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.ONE, 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]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR]; PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; diff --git a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js index 487843d..3de0ec9 100644 --- a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js +++ b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js @@ -31,36 +31,25 @@ /** * Sets-up the given blendMode from WebGL's point of view. -* -* @method setBlendMode +* +* @method setBlendMode * @param blendMode {Number} the blendMode, should be a Pixi const, such as PIXI.BlendModes.ADD */ -PIXI.WebGLBlendModeManager.prototype.setBlendMode = function (blendMode, isSourcePremultiplied) +PIXI.WebGLBlendModeManager.prototype.setBlendMode = function(blendMode) { - if (typeof isSourcePremultiplied === "undefined") { - isSourcePremultiplied = true; - } - if (this.currentBlendMode === blendMode && - this.currentSourcePremultiplied == isSourcePremultiplied) - { - return false; - } + if(this.currentBlendMode === blendMode)return false; this.currentBlendMode = blendMode; - this.currentSourcePremultiplied = isSourcePremultiplied; - - var mode = PIXI.blendModesWebGL[this.currentBlendMode]; - var gl = this.gl; - if (isSourcePremultiplied && mode[0] == gl.SRC_ALPHA) - gl.blendFunc(gl.ONE, mode[1]); - else - gl.blendFunc(mode[0], mode[1]); + + var blendModeWebGL = PIXI.blendModesWebGL[this.currentBlendMode]; + this.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + return true; }; /** * Destroys this object. -* +* * @method destroy */ PIXI.WebGLBlendModeManager.prototype.destroy = function() diff --git a/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js b/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js index b7e2c27..d870f50 100644 --- a/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js +++ b/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js @@ -1,6 +1,6 @@ /** * @author Mat Groves - * + * * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/ * for creating the original pixi version! * @@ -51,7 +51,7 @@ * @type Uint16Array */ this.indices = new PIXI.Uint16Array(numIndices); - + /** * @property vertexBuffer * @type Object @@ -97,7 +97,7 @@ * @type BaseTexture */ this.currentBaseTexture = null; - + /** * @property currentBlendMode * @type Number @@ -109,7 +109,7 @@ * @type Object */ this.renderSession = null; - + /** * @property shader * @type Object @@ -184,19 +184,19 @@ var sprite = children[0]; // if the uvs have not updated then no point rendering just yet! - + // check texture. if(!sprite.texture._uvs)return; - + this.currentBaseTexture = sprite.texture.baseTexture; - + // check blend mode if(sprite.blendMode !== this.renderSession.blendModeManager.currentBlendMode) { this.flush(); - this.renderSession.blendModeManager.setBlendMode(sprite.blendMode, this.currentBaseTexture.premultipliedAlpha); + this.renderSession.blendModeManager.setBlendMode(sprite.blendMode); } - + for(var i=0,j= children.length; i ( this.size * 0.5 ) ) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); @@ -374,10 +374,10 @@ 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; @@ -424,5 +424,5 @@ gl.vertexAttribPointer(this.shader.aRotation, 1, gl.FLOAT, false, stride, 6 * 4); gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 7 * 4); gl.vertexAttribPointer(this.shader.colorAttribute, 1, gl.FLOAT, false, stride, 9 * 4); - + }; diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index caab077..191c894 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -519,7 +519,7 @@ }; /** - * Maps Pixi blend modes to WebGL blend modes. + * Maps Pixi blend modes to WebGL blend modes. It works only for pre-multiplied textures. * * @method mapBlendModes */ @@ -531,10 +531,10 @@ { PIXI.blendModesWebGL = []; - PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA]; - PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.SRC_ALPHA, gl.DST_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; + PIXI.blendModesWebGL[PIXI.blendModes.ADD] = [gl.ONE, 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]; + PIXI.blendModesWebGL[PIXI.blendModes.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR]; PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA]; diff --git a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js index 487843d..3de0ec9 100644 --- a/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js +++ b/src/pixi/renderers/webgl/utils/WebGLBlendModeManager.js @@ -31,36 +31,25 @@ /** * Sets-up the given blendMode from WebGL's point of view. -* -* @method setBlendMode +* +* @method setBlendMode * @param blendMode {Number} the blendMode, should be a Pixi const, such as PIXI.BlendModes.ADD */ -PIXI.WebGLBlendModeManager.prototype.setBlendMode = function (blendMode, isSourcePremultiplied) +PIXI.WebGLBlendModeManager.prototype.setBlendMode = function(blendMode) { - if (typeof isSourcePremultiplied === "undefined") { - isSourcePremultiplied = true; - } - if (this.currentBlendMode === blendMode && - this.currentSourcePremultiplied == isSourcePremultiplied) - { - return false; - } + if(this.currentBlendMode === blendMode)return false; this.currentBlendMode = blendMode; - this.currentSourcePremultiplied = isSourcePremultiplied; - - var mode = PIXI.blendModesWebGL[this.currentBlendMode]; - var gl = this.gl; - if (isSourcePremultiplied && mode[0] == gl.SRC_ALPHA) - gl.blendFunc(gl.ONE, mode[1]); - else - gl.blendFunc(mode[0], mode[1]); + + var blendModeWebGL = PIXI.blendModesWebGL[this.currentBlendMode]; + this.gl.blendFunc(blendModeWebGL[0], blendModeWebGL[1]); + return true; }; /** * Destroys this object. -* +* * @method destroy */ PIXI.WebGLBlendModeManager.prototype.destroy = function() diff --git a/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js b/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js index b7e2c27..d870f50 100644 --- a/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js +++ b/src/pixi/renderers/webgl/utils/WebGLFastSpriteBatch.js @@ -1,6 +1,6 @@ /** * @author Mat Groves - * + * * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/ * for creating the original pixi version! * @@ -51,7 +51,7 @@ * @type Uint16Array */ this.indices = new PIXI.Uint16Array(numIndices); - + /** * @property vertexBuffer * @type Object @@ -97,7 +97,7 @@ * @type BaseTexture */ this.currentBaseTexture = null; - + /** * @property currentBlendMode * @type Number @@ -109,7 +109,7 @@ * @type Object */ this.renderSession = null; - + /** * @property shader * @type Object @@ -184,19 +184,19 @@ var sprite = children[0]; // if the uvs have not updated then no point rendering just yet! - + // check texture. if(!sprite.texture._uvs)return; - + this.currentBaseTexture = sprite.texture.baseTexture; - + // check blend mode if(sprite.blendMode !== this.renderSession.blendModeManager.currentBlendMode) { this.flush(); - this.renderSession.blendModeManager.setBlendMode(sprite.blendMode, this.currentBaseTexture.premultipliedAlpha); + this.renderSession.blendModeManager.setBlendMode(sprite.blendMode); } - + for(var i=0,j= children.length; i ( this.size * 0.5 ) ) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); @@ -374,10 +374,10 @@ 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; @@ -424,5 +424,5 @@ gl.vertexAttribPointer(this.shader.aRotation, 1, gl.FLOAT, false, stride, 6 * 4); gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 7 * 4); gl.vertexAttribPointer(this.shader.colorAttribute, 1, gl.FLOAT, false, stride, 9 * 4); - + }; diff --git a/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js b/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js index e993bf7..711b4da 100755 --- a/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js +++ b/src/pixi/renderers/webgl/utils/WebGLSpriteBatch.js @@ -1,10 +1,10 @@ /** * @author Mat Groves - * + * * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/ * for creating the original pixi version! * Also a thanks to https://github.com/bchevalier for tweaking the tint and alpha so that they now share 4 bytes on the vertex buffer - * + * * Heavily inspired by LibGDX's WebGLSpriteBatch: * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/WebGLSpriteBatch.java */ @@ -66,7 +66,7 @@ * @type Uint16Array */ this.indices = new PIXI.Uint16Array(numIndices); - + /** * @property lastIndexCount * @type Number @@ -206,7 +206,7 @@ { var texture = sprite.texture; - //TODO set blend modes.. + //TODO set blend modes.. // check texture.. if(this.currentBatchSize >= this.size) { @@ -224,7 +224,7 @@ var aY = sprite.anchor.y; var w0, w1, h0, h1; - + if (texture.trim) { // if the sprite is trimmed then we need to add the extra space before transforming the sprite coords.. @@ -247,7 +247,7 @@ } var index = this.currentBatchSize * 4 * this.vertSize; - + var resolution = texture.baseTexture.resolution; var worldTransform = sprite.worldTransform; @@ -298,7 +298,7 @@ positions[index+15] = a * w1 + c * h0 + tx; positions[index+16] = d * h0 + b * w1 + ty; } - + // uv positions[index+2] = uvs.x0; positions[index+3] = uvs.y0; @@ -327,7 +327,7 @@ /** * Renders a TilingSprite using the spriteBatch. -* +* * @method renderTilingSprite * @param sprite {TilingSprite} the tilingSprite to render */ @@ -420,7 +420,7 @@ positions[index++] = uvs.y1; // color colors[index++] = color; - + // xy positions[index++] = a * w0 + c * h0 + tx; positions[index++] = d * h0 + b * w0 + ty; @@ -477,7 +477,7 @@ gl.vertexAttribPointer(shader.colorAttribute, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); } - // upload the verts to the buffer + // upload the verts to the buffer if(this.currentBatchSize > ( this.size * 0.5 ) ) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); @@ -501,7 +501,7 @@ var sprite; for (var i = 0, j = this.currentBatchSize; i < j; i++) { - + sprite = this.sprites[i]; nextTexture = sprite.texture.baseTexture; @@ -522,13 +522,13 @@ if( blendSwap ) { currentBlendMode = nextBlendMode; - this.renderSession.blendModeManager.setBlendMode( currentBlendMode, currentBaseTexture.premultipliedAlpha ); + this.renderSession.blendModeManager.setBlendMode( currentBlendMode ); } if( shaderSwap ) { currentShader = nextShader; - + shader = currentShader.shaders[gl.id]; if(!shader) @@ -546,7 +546,7 @@ this.renderSession.shaderManager.setShader(shader); if(shader.dirty)shader.syncUniforms(); - + // both thease only need to be set if they are changing.. // set the projection var projection = this.renderSession.projection; @@ -594,7 +594,7 @@ // now draw those suckas! gl.drawElements(gl.TRIANGLES, size * 6, gl.UNSIGNED_SHORT, startIndex * 6 * 2); - + // increment the draw count this.renderSession.drawCount++; }; @@ -618,18 +618,18 @@ /** * Destroys the SpriteBatch. -* +* * @method destroy */ PIXI.WebGLSpriteBatch.prototype.destroy = function() { this.vertices = null; this.indices = null; - + this.gl.deleteBuffer( this.vertexBuffer ); this.gl.deleteBuffer( this.indexBuffer ); - + this.currentBaseTexture = null; - + this.gl = null; -}; +}; \ No newline at end of file