diff --git a/src/core/display/DisplayObjectContainer.js b/src/core/display/DisplayObjectContainer.js index 8fc273b..d76b7f2 100644 --- a/src/core/display/DisplayObjectContainer.js +++ b/src/core/display/DisplayObjectContainer.js @@ -419,6 +419,7 @@ * @param renderer {WebGLRenderer} The renderer */ DisplayObjectContainer.prototype.renderWebGL = function (renderer) { + // if the object is not visible or the alpha is 0 then no need to render this element if (!this.visible || this.alpha <= 0) { return; } @@ -430,6 +431,7 @@ var i, j; + // do a quick check to see if this element has a mask or a filter. if (this._mask || this._filters) { // push filter first as we need to ensure the stencil buffer is correct for any masking if (this._filters) { @@ -443,11 +445,15 @@ renderer.spriteBatch.start(); } - // simple render children! - for (i = 0, j = this.children.length; i < j; ++i) { + // add this object to the batch, only rendered if it has a texture. + renderer.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(renderer); } + // time to stop the sprite batch as either a mask element or a filter draw will happen next renderer.spriteBatch.stop(); if (this._mask) { @@ -461,10 +467,13 @@ renderer.spriteBatch.start(); } else { + renderer.spriteBatch.render(this); + // simple render children! - for(i = 0, j = this.children.length; i < j; ++i) { + for (i = 0, j = this.children.length; i < j; ++i) { this.children[i].renderWebGL(renderer); } + } }; @@ -506,10 +515,10 @@ this._cachedSprite.worldAlpha = this.worldAlpha; if (renderer.gl) { - Sprite.prototype.renderWebGL.call(this._cachedSprite, renderer); + this._cachedSprite.renderWebGL(renderer); } else { - Sprite.prototype.renderCanvas.call(this._cachedSprite, renderer); + this._cachedSprite.renderCanvas(renderer); } }; diff --git a/src/core/display/DisplayObjectContainer.js b/src/core/display/DisplayObjectContainer.js index 8fc273b..d76b7f2 100644 --- a/src/core/display/DisplayObjectContainer.js +++ b/src/core/display/DisplayObjectContainer.js @@ -419,6 +419,7 @@ * @param renderer {WebGLRenderer} The renderer */ DisplayObjectContainer.prototype.renderWebGL = function (renderer) { + // if the object is not visible or the alpha is 0 then no need to render this element if (!this.visible || this.alpha <= 0) { return; } @@ -430,6 +431,7 @@ var i, j; + // do a quick check to see if this element has a mask or a filter. if (this._mask || this._filters) { // push filter first as we need to ensure the stencil buffer is correct for any masking if (this._filters) { @@ -443,11 +445,15 @@ renderer.spriteBatch.start(); } - // simple render children! - for (i = 0, j = this.children.length; i < j; ++i) { + // add this object to the batch, only rendered if it has a texture. + renderer.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(renderer); } + // time to stop the sprite batch as either a mask element or a filter draw will happen next renderer.spriteBatch.stop(); if (this._mask) { @@ -461,10 +467,13 @@ renderer.spriteBatch.start(); } else { + renderer.spriteBatch.render(this); + // simple render children! - for(i = 0, j = this.children.length; i < j; ++i) { + for (i = 0, j = this.children.length; i < j; ++i) { this.children[i].renderWebGL(renderer); } + } }; @@ -506,10 +515,10 @@ this._cachedSprite.worldAlpha = this.worldAlpha; if (renderer.gl) { - Sprite.prototype.renderWebGL.call(this._cachedSprite, renderer); + this._cachedSprite.renderWebGL(renderer); } else { - Sprite.prototype.renderCanvas.call(this._cachedSprite, renderer); + this._cachedSprite.renderCanvas(renderer); } }; diff --git a/src/core/display/Sprite.js b/src/core/display/Sprite.js index 1f9db47..f05db8a 100644 --- a/src/core/display/Sprite.js +++ b/src/core/display/Sprite.js @@ -264,67 +264,6 @@ }; /** - * Renders the object using the WebGL renderer - * - * @param renderer {WebGLRenderer} The renderer - */ -Sprite.prototype.renderWebGL = function (renderer) { - // if the sprite is not visible or the alpha is 0 then no need to render this element - if (!this.visible || 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 = renderer.spriteBatch; - - // push filter first as we need to ensure the stencil buffer is correct for any masking - if (this._filters) { - spriteBatch.flush(); - renderer.filterManager.pushFilter(this._filterBlock); - } - - if (this._mask) { - spriteBatch.stop(); - renderer.maskManager.pushMask(this.mask, renderer); - spriteBatch.start(); - } - - // 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(renderer); - } - - // time to stop the sprite batch as either a mask element or a filter draw will happen next - spriteBatch.stop(); - - if (this._mask) { - renderer.maskManager.popMask(this._mask, renderer); - } - - if (this._filters) { - renderer.filterManager.popFilter(); - } - - spriteBatch.start(); - } - else { - renderer.spriteBatch.render(this); - - // simple render children! - for (i = 0, j = this.children.length; i < j; ++i) { - this.children[i].renderWebGL(renderer); - } - - } -}; - -/** * Renders the object using the Canvas renderer * * @param renderer {CanvasRenderer} The renderer diff --git a/src/core/display/DisplayObjectContainer.js b/src/core/display/DisplayObjectContainer.js index 8fc273b..d76b7f2 100644 --- a/src/core/display/DisplayObjectContainer.js +++ b/src/core/display/DisplayObjectContainer.js @@ -419,6 +419,7 @@ * @param renderer {WebGLRenderer} The renderer */ DisplayObjectContainer.prototype.renderWebGL = function (renderer) { + // if the object is not visible or the alpha is 0 then no need to render this element if (!this.visible || this.alpha <= 0) { return; } @@ -430,6 +431,7 @@ var i, j; + // do a quick check to see if this element has a mask or a filter. if (this._mask || this._filters) { // push filter first as we need to ensure the stencil buffer is correct for any masking if (this._filters) { @@ -443,11 +445,15 @@ renderer.spriteBatch.start(); } - // simple render children! - for (i = 0, j = this.children.length; i < j; ++i) { + // add this object to the batch, only rendered if it has a texture. + renderer.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(renderer); } + // time to stop the sprite batch as either a mask element or a filter draw will happen next renderer.spriteBatch.stop(); if (this._mask) { @@ -461,10 +467,13 @@ renderer.spriteBatch.start(); } else { + renderer.spriteBatch.render(this); + // simple render children! - for(i = 0, j = this.children.length; i < j; ++i) { + for (i = 0, j = this.children.length; i < j; ++i) { this.children[i].renderWebGL(renderer); } + } }; @@ -506,10 +515,10 @@ this._cachedSprite.worldAlpha = this.worldAlpha; if (renderer.gl) { - Sprite.prototype.renderWebGL.call(this._cachedSprite, renderer); + this._cachedSprite.renderWebGL(renderer); } else { - Sprite.prototype.renderCanvas.call(this._cachedSprite, renderer); + this._cachedSprite.renderCanvas(renderer); } }; diff --git a/src/core/display/Sprite.js b/src/core/display/Sprite.js index 1f9db47..f05db8a 100644 --- a/src/core/display/Sprite.js +++ b/src/core/display/Sprite.js @@ -264,67 +264,6 @@ }; /** - * Renders the object using the WebGL renderer - * - * @param renderer {WebGLRenderer} The renderer - */ -Sprite.prototype.renderWebGL = function (renderer) { - // if the sprite is not visible or the alpha is 0 then no need to render this element - if (!this.visible || 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 = renderer.spriteBatch; - - // push filter first as we need to ensure the stencil buffer is correct for any masking - if (this._filters) { - spriteBatch.flush(); - renderer.filterManager.pushFilter(this._filterBlock); - } - - if (this._mask) { - spriteBatch.stop(); - renderer.maskManager.pushMask(this.mask, renderer); - spriteBatch.start(); - } - - // 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(renderer); - } - - // time to stop the sprite batch as either a mask element or a filter draw will happen next - spriteBatch.stop(); - - if (this._mask) { - renderer.maskManager.popMask(this._mask, renderer); - } - - if (this._filters) { - renderer.filterManager.popFilter(); - } - - spriteBatch.start(); - } - else { - renderer.spriteBatch.render(this); - - // simple render children! - for (i = 0, j = this.children.length; i < j; ++i) { - this.children[i].renderWebGL(renderer); - } - - } -}; - -/** * Renders the object using the Canvas renderer * * @param renderer {CanvasRenderer} The renderer diff --git a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js index 2a54317..768c3c4 100644 --- a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js +++ b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js @@ -163,7 +163,7 @@ }; /** - * @param renderSession {object} The RenderSession object + * @param renderer {WebGLRenderer} The renderer */ WebGLSpriteBatch.prototype.begin = function (renderSession) { this.renderSession = renderSession; @@ -182,9 +182,13 @@ * @param sprite {Sprite} the sprite to render when using this spritebatch */ WebGLSpriteBatch.prototype.render = function (sprite) { + if (!sprite.texture) { + return; + } + var texture = sprite.texture; - //TODO set blend modes.. + //TODO set blend modes.. // check texture.. if (this.currentBatchSize >= this.size) { this.flush();