diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index af85faf..a0f4492 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -54,8 +54,6 @@ glTexture.premultiplyAlpha = true; texture._glTextures[gl.id] = glTexture; - // this.glTextures[texture.uid] = glTexture; - texture.on('update', this.updateTexture, this); texture.on('dispose', this.destroyTexture, this); @@ -64,7 +62,6 @@ //TODO check is power of two.. glTexture.enableWrapClamp(); - // TODO check for scaling type if(texture.scaleMode === CONST.SCALE_MODES.NEAREST) { glTexture.enableNearestScaling(); diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index af85faf..a0f4492 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -54,8 +54,6 @@ glTexture.premultiplyAlpha = true; texture._glTextures[gl.id] = glTexture; - // this.glTextures[texture.uid] = glTexture; - texture.on('update', this.updateTexture, this); texture.on('dispose', this.destroyTexture, this); @@ -64,7 +62,6 @@ //TODO check is power of two.. glTexture.enableWrapClamp(); - // TODO check for scaling type if(texture.scaleMode === CONST.SCALE_MODES.NEAREST) { glTexture.enableNearestScaling(); diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index 459417d..6f44685 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -109,7 +109,7 @@ this.textureCount = 0; this.currentIndex = 0; - + this.tick =0; this.groups = []; //TODO - 300 is a bit magic, figure out a nicer amount! @@ -220,9 +220,10 @@ var tint; var uvs; var textureId; - - currentGroup.textureCount = 0 - //var array = + var blendMode = 0; + currentGroup.textureCount = 0; + + this.tick++; for (var i = 0; i < currentIndex; i++) { @@ -232,21 +233,25 @@ nextTexture = sprite._texture.baseTexture; + if(blendMode !== sprite.blendMode) + { + // blendMode = sprite.blendMode; + // currentTexture = null; + // textureCount = this.Max + } + if(currentTexture !== nextTexture) { currentTexture = nextTexture; - if(!nextTexture._enabled) + if(nextTexture._enabled !== this.tick) { - nextTexture._enabled = true; + nextTexture._enabled = this.tick; nextTexture._id = textureCount; if(textureCount === this.MAX_TEXTURES) { - for ( i = 0; i < currentGroup.textureCount; i++) - { - currentGroup.textures[i]._enabled = false; - }; + this.tick++; textureCount = 0; @@ -254,6 +259,7 @@ currentGroup = groups[groupCount++]; currentGroup.textureCount = 0; + currentGroup.blend = blendMode; currentGroup.start = currentIndex; } @@ -262,8 +268,10 @@ textureCount++; } - + var vertexData = sprite.vertexData; + + //TODO this sum does not need to be set each frame.. var tint = (sprite.tint >> 16) + (sprite.tint & 0xff00) + ((sprite.tint & 0xff) << 16) + (sprite.worldAlpha * 255 << 24); var uvs = sprite._texture._uvs.uvs_uint32; var textureId = nextTexture._id; @@ -299,16 +307,9 @@ }; currentGroup.size = currentIndex - currentGroup.start; - - for (i = 0; i < currentGroup.textureCount; i++) - { - currentGroup.textures[i]._enabled = false; - }; this.vertexBuffer.upload(buffer.vertices, 0, true); - // bind shader.. - this.renderer.setBlendMode( 1 ); /// render the groups.. for (i = 0; i < groupCount; i++) { @@ -319,6 +320,9 @@ this.renderer.bindTexture(group.textures[j], j); }; + // set the blend mode.. + this.renderer.state.setBlendMode( group.blend ); + gl.drawElements(gl.TRIANGLES, group.size * 6, gl.UNSIGNED_SHORT, group.start * 6 * 2); }; @@ -326,11 +330,6 @@ this.currentIndex = 0; }; -SpriteRenderer.prototype.start = function () -{ - -} - /** * Starts a new sprite batch. * @@ -339,6 +338,7 @@ { this.renderer.bindShader(this.shader); this.vao.bind(); + this.tick %= 1000; }; SpriteRenderer.prototype.stop = function () @@ -361,11 +361,6 @@ this.renderer = null; - this.vertices = null; - this.positions = null; - this.colors = null; - this.indices = null; - this.vertexBuffer = null; this.indexBuffer = null; diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index af85faf..a0f4492 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -54,8 +54,6 @@ glTexture.premultiplyAlpha = true; texture._glTextures[gl.id] = glTexture; - // this.glTextures[texture.uid] = glTexture; - texture.on('update', this.updateTexture, this); texture.on('dispose', this.destroyTexture, this); @@ -64,7 +62,6 @@ //TODO check is power of two.. glTexture.enableWrapClamp(); - // TODO check for scaling type if(texture.scaleMode === CONST.SCALE_MODES.NEAREST) { glTexture.enableNearestScaling(); diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index 459417d..6f44685 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -109,7 +109,7 @@ this.textureCount = 0; this.currentIndex = 0; - + this.tick =0; this.groups = []; //TODO - 300 is a bit magic, figure out a nicer amount! @@ -220,9 +220,10 @@ var tint; var uvs; var textureId; - - currentGroup.textureCount = 0 - //var array = + var blendMode = 0; + currentGroup.textureCount = 0; + + this.tick++; for (var i = 0; i < currentIndex; i++) { @@ -232,21 +233,25 @@ nextTexture = sprite._texture.baseTexture; + if(blendMode !== sprite.blendMode) + { + // blendMode = sprite.blendMode; + // currentTexture = null; + // textureCount = this.Max + } + if(currentTexture !== nextTexture) { currentTexture = nextTexture; - if(!nextTexture._enabled) + if(nextTexture._enabled !== this.tick) { - nextTexture._enabled = true; + nextTexture._enabled = this.tick; nextTexture._id = textureCount; if(textureCount === this.MAX_TEXTURES) { - for ( i = 0; i < currentGroup.textureCount; i++) - { - currentGroup.textures[i]._enabled = false; - }; + this.tick++; textureCount = 0; @@ -254,6 +259,7 @@ currentGroup = groups[groupCount++]; currentGroup.textureCount = 0; + currentGroup.blend = blendMode; currentGroup.start = currentIndex; } @@ -262,8 +268,10 @@ textureCount++; } - + var vertexData = sprite.vertexData; + + //TODO this sum does not need to be set each frame.. var tint = (sprite.tint >> 16) + (sprite.tint & 0xff00) + ((sprite.tint & 0xff) << 16) + (sprite.worldAlpha * 255 << 24); var uvs = sprite._texture._uvs.uvs_uint32; var textureId = nextTexture._id; @@ -299,16 +307,9 @@ }; currentGroup.size = currentIndex - currentGroup.start; - - for (i = 0; i < currentGroup.textureCount; i++) - { - currentGroup.textures[i]._enabled = false; - }; this.vertexBuffer.upload(buffer.vertices, 0, true); - // bind shader.. - this.renderer.setBlendMode( 1 ); /// render the groups.. for (i = 0; i < groupCount; i++) { @@ -319,6 +320,9 @@ this.renderer.bindTexture(group.textures[j], j); }; + // set the blend mode.. + this.renderer.state.setBlendMode( group.blend ); + gl.drawElements(gl.TRIANGLES, group.size * 6, gl.UNSIGNED_SHORT, group.start * 6 * 2); }; @@ -326,11 +330,6 @@ this.currentIndex = 0; }; -SpriteRenderer.prototype.start = function () -{ - -} - /** * Starts a new sprite batch. * @@ -339,6 +338,7 @@ { this.renderer.bindShader(this.shader); this.vao.bind(); + this.tick %= 1000; }; SpriteRenderer.prototype.stop = function () @@ -361,11 +361,6 @@ this.renderer = null; - this.vertices = null; - this.positions = null; - this.colors = null; - this.indices = null; - this.vertexBuffer = null; this.indexBuffer = null; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 34b702c..a108f2b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -136,7 +136,7 @@ * @private */ this._glTextures = []; - this._active = false; + this._enabled = 0; this._id = 0; // if no source passed don't try to load