diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 69aebd3..bb5f977 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -1,6 +1,6 @@ var math = require('../math'), Texture = require('../textures/Texture'), - DisplayObjectContainer = require('./DisplayObjectContainer'), + DisplayObjectContainer = require('../display/DisplayObjectContainer'), CanvasTinter = require('../renderers/canvas/utils/CanvasTinter'), utils = require('../utils'), CONST = require('../const'); @@ -201,8 +201,8 @@ Sprite.prototype._renderWebGL = function (renderer) { - renderer.setObjectRenderer(renderer.objectRenderer.sprite); - renderer.objectRenderer.sprite.render(this); + renderer.setObjectRenderer(renderer.objectRenderers.sprite); + renderer.objectRenderers.sprite.render(this); }; /** diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 69aebd3..bb5f977 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -1,6 +1,6 @@ var math = require('../math'), Texture = require('../textures/Texture'), - DisplayObjectContainer = require('./DisplayObjectContainer'), + DisplayObjectContainer = require('../display/DisplayObjectContainer'), CanvasTinter = require('../renderers/canvas/utils/CanvasTinter'), utils = require('../utils'), CONST = require('../const'); @@ -201,8 +201,8 @@ Sprite.prototype._renderWebGL = function (renderer) { - renderer.setObjectRenderer(renderer.objectRenderer.sprite); - renderer.objectRenderer.sprite.render(this); + renderer.setObjectRenderer(renderer.objectRenderers.sprite); + renderer.objectRenderers.sprite.render(this); }; /** diff --git a/src/core/sprites/SpriteBatch.js b/src/core/sprites/SpriteBatch.js index 00b1718..63cebc0 100644 --- a/src/core/sprites/SpriteBatch.js +++ b/src/core/sprites/SpriteBatch.js @@ -1,4 +1,4 @@ -var DisplayObjectContainer = require('./DisplayObjectContainer'); +var DisplayObjectContainer = require('../display/DisplayObjectContainer'); /** * The SpriteBatch class is a really fast version of the DisplayObjectContainer built solely for speed, diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 69aebd3..bb5f977 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -1,6 +1,6 @@ var math = require('../math'), Texture = require('../textures/Texture'), - DisplayObjectContainer = require('./DisplayObjectContainer'), + DisplayObjectContainer = require('../display/DisplayObjectContainer'), CanvasTinter = require('../renderers/canvas/utils/CanvasTinter'), utils = require('../utils'), CONST = require('../const'); @@ -201,8 +201,8 @@ Sprite.prototype._renderWebGL = function (renderer) { - renderer.setObjectRenderer(renderer.objectRenderer.sprite); - renderer.objectRenderer.sprite.render(this); + renderer.setObjectRenderer(renderer.objectRenderers.sprite); + renderer.objectRenderers.sprite.render(this); }; /** diff --git a/src/core/sprites/SpriteBatch.js b/src/core/sprites/SpriteBatch.js index 00b1718..63cebc0 100644 --- a/src/core/sprites/SpriteBatch.js +++ b/src/core/sprites/SpriteBatch.js @@ -1,4 +1,4 @@ -var DisplayObjectContainer = require('./DisplayObjectContainer'); +var DisplayObjectContainer = require('../display/DisplayObjectContainer'); /** * The SpriteBatch class is a really fast version of the DisplayObjectContainer built solely for speed, diff --git a/src/core/sprites/SpriteRenderer.js b/src/core/sprites/SpriteRenderer.js index bf8991d..fcb1e24 100644 --- a/src/core/sprites/SpriteRenderer.js +++ b/src/core/sprites/SpriteRenderer.js @@ -168,17 +168,15 @@ // listen for context and update necessary buffers var self = this; - this.renderer.on('context', function () - { - self.setupContext(); - }); + + this.setupContext(); } SpriteRenderer.prototype = Object.create(ObjectRenderer.prototype); SpriteRenderer.prototype.constructor = SpriteRenderer; module.exports = SpriteRenderer; -WebGLRenderer.registerObjectRenderer('sprite', SpriteRenderer); + /** * Sets up the renderer context and necessary buffers. diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 69aebd3..bb5f977 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -1,6 +1,6 @@ var math = require('../math'), Texture = require('../textures/Texture'), - DisplayObjectContainer = require('./DisplayObjectContainer'), + DisplayObjectContainer = require('../display/DisplayObjectContainer'), CanvasTinter = require('../renderers/canvas/utils/CanvasTinter'), utils = require('../utils'), CONST = require('../const'); @@ -201,8 +201,8 @@ Sprite.prototype._renderWebGL = function (renderer) { - renderer.setObjectRenderer(renderer.objectRenderer.sprite); - renderer.objectRenderer.sprite.render(this); + renderer.setObjectRenderer(renderer.objectRenderers.sprite); + renderer.objectRenderers.sprite.render(this); }; /** diff --git a/src/core/sprites/SpriteBatch.js b/src/core/sprites/SpriteBatch.js index 00b1718..63cebc0 100644 --- a/src/core/sprites/SpriteBatch.js +++ b/src/core/sprites/SpriteBatch.js @@ -1,4 +1,4 @@ -var DisplayObjectContainer = require('./DisplayObjectContainer'); +var DisplayObjectContainer = require('../display/DisplayObjectContainer'); /** * The SpriteBatch class is a really fast version of the DisplayObjectContainer built solely for speed, diff --git a/src/core/sprites/SpriteRenderer.js b/src/core/sprites/SpriteRenderer.js index bf8991d..fcb1e24 100644 --- a/src/core/sprites/SpriteRenderer.js +++ b/src/core/sprites/SpriteRenderer.js @@ -168,17 +168,15 @@ // listen for context and update necessary buffers var self = this; - this.renderer.on('context', function () - { - self.setupContext(); - }); + + this.setupContext(); } SpriteRenderer.prototype = Object.create(ObjectRenderer.prototype); SpriteRenderer.prototype.constructor = SpriteRenderer; module.exports = SpriteRenderer; -WebGLRenderer.registerObjectRenderer('sprite', SpriteRenderer); + /** * Sets up the renderer context and necessary buffers. diff --git a/src/core/textures/RenderTexture.js b/src/core/textures/RenderTexture.js index 53ae796..305de0c 100644 --- a/src/core/textures/RenderTexture.js +++ b/src/core/textures/RenderTexture.js @@ -53,33 +53,57 @@ throw new Error('Unable to create RenderTexture, you must pass a renderer into the constructor.'); } + width = width || 100; + height = height || 100; + resolution = resolution || 1; + + /** + * The base texture object that this texture uses + * + * @member {BaseTexture} + */ + var baseTexture = new BaseTexture(); + baseTexture.width = width * resolution; + baseTexture.height = height * resolution; + baseTexture._glTextures = []; + baseTexture.resolution = resolution; + baseTexture.scaleMode = scaleMode || CONST.scaleModes.DEFAULT; + baseTexture.hasLoaded = true; + + + Texture.call(this, + baseTexture, + new math.Rectangle(0, 0, width, height) + ); + + /** * The with of the render texture * * @member {number} */ - this.width = width || 100; + this.width = width; /** * The height of the render texture * * @member {number} */ - this.height = height || 100; + this.height = height; /** * The Resolution of the texture. * * @member {number} */ - this.resolution = resolution || 1; + this.resolution = resolution; /** * The framing rectangle of the render texture * * @member {Rectangle} */ - this.frame = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + //this._frame = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); /** * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering, @@ -87,7 +111,7 @@ * * @member {Rectangle} */ - this.crop = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + //this.crop = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); /** * Draw/render the given DisplayObject onto the texture. @@ -108,26 +132,8 @@ */ this.render = null; - /** - * The base texture object that this texture uses - * - * @member {BaseTexture} - */ - this.baseTexture = new BaseTexture(); - this.baseTexture.width = this.width * this.resolution; - this.baseTexture.height = this.height * this.resolution; - this.baseTexture._glTextures = []; - this.baseTexture.resolution = this.resolution; - this.baseTexture.scaleMode = scaleMode || CONST.scaleModes.DEFAULT; - - this.baseTexture.hasLoaded = true; - - Texture.call(this, - this.baseTexture, - new math.Rectangle(0, 0, this.width, this.height) - ); - + /** * The renderer this RenderTexture uses. A RenderTexture can only belong to one renderer at the moment if its webGL. * @@ -147,9 +153,20 @@ } else { + this.render = this.renderCanvas; this.textureBuffer = new CanvasBuffer(this.width* this.resolution, this.height* this.resolution); this.baseTexture.source = this.textureBuffer.canvas; + /* document.body.appendChild( this.textureBuffer.canvas); + + this.textureBuffer.canvas.style.position = "absolute"; + this.textureBuffer.canvas.style.top = 0; + this.textureBuffer.canvas.style.left= 0; + this.textureBuffer.canvas.style.zIndex = 1000; + this.textureBuffer.canvas.width = width; + this.textureBuffer.canvas.height = height; + + console.log(this.textureBuffer.canvas);*/ } /** @@ -158,6 +175,8 @@ this.valid = true; this._updateUvs(); + + console.log(baseTexture); } RenderTexture.prototype = Object.create(Texture.prototype); @@ -180,8 +199,8 @@ this.valid = (width > 0 && height > 0); - this.width = this.frame.width = this.crop.width = width; - this.height = this.frame.height = this.crop.height = height; + this.width = this._frame.width = this.crop.width = width; + this.height = this._frame.height = this.crop.height = height; if (updateBase) { @@ -292,11 +311,11 @@ this.textureBuffer.clear(); } - this.renderer.spriteBatch.dirty = true; +// this.renderer.spriteRenderer.dirty = true; this.renderer.renderDisplayObject(displayObject, this.projection, this.textureBuffer.frameBuffer); - this.renderer.spriteBatch.dirty = true; + // this.renderer.spriteRenderer.dirty = true; if (restoreWorldTransform) { @@ -328,19 +347,11 @@ return; } - if (typeof restoreWorldTransform === 'undefined') - { - restoreWorldTransform = true; - } - + var tempAlpha, tempTransform; - if (restoreWorldTransform) - { - tempAlpha = displayObject.worldAlpha; - tempTransform = displayObject.worldTransform.toArray(); - } + var wt = displayObject.worldTransform; wt.identity(); @@ -366,26 +377,23 @@ this.textureBuffer.clear(); } + + + +// this.textureBuffer. var context = this.textureBuffer.context; var realResolution = this.renderer.resolution; this.renderer.resolution = this.resolution; - this.renderer.renderDisplayObject(displayObject, context); +// this.renderer.renderDisplayObject(displayObject, context); this.renderer.resolution = realResolution; + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle ="#FF0000" + context.fillRect(0, 0, 800, 600); - if (restoreWorldTransform) - { - displayObject.worldAlpha = tempAlpha; - displayObject.worldTransform.fromArray(tempTransform); - - for (i = 0, j = children.length; i < j; ++i) - { - children[i].updateTransform(); - } - } }; /** diff --git a/src/core/index.js b/src/core/index.js index c620978..6f744e9 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -21,12 +21,14 @@ Stage: require('./display/DisplayObjectContainer'), - Sprite: require('./display/Sprite'), - SpriteBatch: require('./display/SpriteBatch'), + Sprite: require('./sprites/Sprite'), + SpriteBatch: require('./sprites/SpriteBatch'), + SpriteRenderer: require('./sprites/SpriteRenderer'), // primitives Graphics: require('./primitives/Graphics'), GraphicsData: require('./primitives/GraphicsData'), + GraphicsRenderer: require('./primitives/GraphicsRenderer'), // textures Texture: require('./textures/Texture'), @@ -43,6 +45,8 @@ WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), // WebGLGraphics: require('./renderers/webgl/utils/WebGLGraphics'), + + /** * This helper function will automatically detect which renderer you should be using. * WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by @@ -99,3 +103,7 @@ return core.autoDetectRenderer(width, height, options, isAndroid); } }; + +// Adding here for now.. sure there is a better place! +core.WebGLRenderer.registerObjectRenderer('sprite', core.SpriteRenderer); +core.WebGLRenderer.registerObjectRenderer('graphics', core.GraphicsRenderer); diff --git a/src/core/primitives/Graphics.js b/src/core/primitives/Graphics.js index baab0f8..8db9b45 100644 --- a/src/core/primitives/Graphics.js +++ b/src/core/primitives/Graphics.js @@ -1,5 +1,5 @@ var DisplayObjectContainer = require('../display/DisplayObjectContainer'), - Sprite = require('../display/Sprite'), + //Sprite = require('../display/Sprite'), Texture = require('../textures/Texture'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), CanvasGraphics = require('../renderers/canvas/utils/CanvasGraphics'), diff --git a/src/core/primitives/GraphicsRenderer.js b/src/core/primitives/GraphicsRenderer.js index e0cbb05..8e8a5e3 100644 --- a/src/core/primitives/GraphicsRenderer.js +++ b/src/core/primitives/GraphicsRenderer.js @@ -1,9 +1,9 @@ -var utils = require('../../../utils'), - math = require('../../../math'), - CONST = require('../../../const'), +var utils = require('../utils'), + math = require('../math'), + CONST = require('../const'), ObjectRenderer = require('../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../renderers/webgl/WebGLRenderer'), - WebGLGraphicsData = require('./WebGLGraphicsData'); + WebGLGraphicsData = require('./GraphicsData'); /** * Renders the graphics object. @@ -24,8 +24,6 @@ GraphicsRenderer.prototype.constructor = GraphicsRenderer; module.exports = GraphicsRenderer; -WebGLRenderer.registerObjectRenderer('graphics', GraphicsRenderer); - /** * Destroys this renderer. * diff --git a/src/core/renderers/canvas/CanvasRenderer.js b/src/core/renderers/canvas/CanvasRenderer.js index 7aebd44..f43e637 100644 --- a/src/core/renderers/canvas/CanvasRenderer.js +++ b/src/core/renderers/canvas/CanvasRenderer.js @@ -1,5 +1,6 @@ var CanvasMaskManager = require('./utils/CanvasMaskManager'), utils = require('../../utils'), + math = require('../../math'), CONST = require('../../const'); /** @@ -93,7 +94,6 @@ */ this.autoResize = options.autoResize || false; - /** * The width of the canvas view * @@ -188,6 +188,13 @@ this._mapBlendModes(); + /** + * This temporary display object used as the parent of the currently being rendered item + * @member DisplayObject + * @private + */ + this._tempDisplayObjectParent = {worldTransform:new math.Matrix(), worldAlpha:1}; + this.resize(width, height); } @@ -222,8 +229,14 @@ */ CanvasRenderer.prototype.render = function (object) { + var cacheParent = object.parent; + object.parent = this._tempDisplayObjectParent; + + // update the scene graph object.updateTransform(); + object.parent = cacheParent; + this.context.setTransform(1,0,0,1,0,0); this.context.globalAlpha = 1; @@ -250,7 +263,7 @@ } } - this.renderDisplayObject(object); + this.renderDisplayObject(object, this.context); }; /** @@ -297,9 +310,13 @@ * @param displayObject {DisplayObject} The displayObject to render * @private */ -CanvasRenderer.prototype.renderDisplayObject = function (displayObject) +CanvasRenderer.prototype.renderDisplayObject = function (displayObject, context) { + var tempContext = this.context; + + this.context = context; displayObject.renderCanvas(this); + this.context = tempContext; }; /** diff --git a/src/core/renderers/canvas/utils/CanvasBuffer.js b/src/core/renderers/canvas/utils/CanvasBuffer.js index b183a66..6f96ba3 100644 --- a/src/core/renderers/canvas/utils/CanvasBuffer.js +++ b/src/core/renderers/canvas/utils/CanvasBuffer.js @@ -22,8 +22,7 @@ */ this.context = this.canvas.getContext('2d'); - this.canvas.width = width; - this.canvas.height = height; + } CanvasBuffer.prototype.constructor = CanvasBuffer; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 8cdd664..f84eb31 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -4,6 +4,7 @@ WebGLFilterManager = require('./managers/WebGLFilterManager'), WebGLStencilManager = require('./managers/WebGLStencilManager'), WebGLBlendModeManager = require('./managers/WebGLBlendModeManager'), + ObjectRenderer = require('./utils/ObjectRenderer'), math = require('../../math'), utils = require('../../utils'), CONST = require('../../const'); @@ -242,6 +243,8 @@ */ this.objectRenderers = {}; + this.currentRenderer = new ObjectRenderer(); + // create an instance of each registered object renderer for (var o in WebGLRenderer._objectRenderers) { this.objectRenderers[o] = new (WebGLRenderer._objectRenderers[o])(this); @@ -382,6 +385,7 @@ // finish the sprite batch this.currentRenderer.flush(); + }; WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) diff --git a/src/core/renderers/webgl/utils/WebGLGraphicsData.js b/src/core/renderers/webgl/utils/WebGLGraphicsData.js deleted file mode 100644 index c739ba7..0000000 --- a/src/core/renderers/webgl/utils/WebGLGraphicsData.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @class - * @private - */ -function WebGLGraphicsData(gl) -{ - this.gl = gl; - - //TODO does this need to be split before uploding?? - this.color = [0, 0, 0]; // color split! - this.points = []; - this.indices = []; - this.buffer = gl.createBuffer(); - this.indexBuffer = gl.createBuffer(); - this.mode = 1; - this.alpha = 1; - this.dirty = true; -} - -WebGLGraphicsData.prototype.constructor = WebGLGraphicsData; -module.exports = WebGLGraphicsData; - -/** - * - */ -WebGLGraphicsData.prototype.reset = function () -{ - this.points.length = 0; - this.indices.length = 0; -}; - -/** - * - */ -WebGLGraphicsData.prototype.upload = function () -{ - var gl = this.gl; - -// this.lastIndex = graphics.graphicsData.length; - this.glPoints = new Float32Array(this.points); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, this.glPoints, gl.STATIC_DRAW); - - this.glIndicies = new Uint16Array(this.indices); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.glIndicies, gl.STATIC_DRAW); - - this.dirty = false; -}; diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 69aebd3..bb5f977 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -1,6 +1,6 @@ var math = require('../math'), Texture = require('../textures/Texture'), - DisplayObjectContainer = require('./DisplayObjectContainer'), + DisplayObjectContainer = require('../display/DisplayObjectContainer'), CanvasTinter = require('../renderers/canvas/utils/CanvasTinter'), utils = require('../utils'), CONST = require('../const'); @@ -201,8 +201,8 @@ Sprite.prototype._renderWebGL = function (renderer) { - renderer.setObjectRenderer(renderer.objectRenderer.sprite); - renderer.objectRenderer.sprite.render(this); + renderer.setObjectRenderer(renderer.objectRenderers.sprite); + renderer.objectRenderers.sprite.render(this); }; /** diff --git a/src/core/sprites/SpriteBatch.js b/src/core/sprites/SpriteBatch.js index 00b1718..63cebc0 100644 --- a/src/core/sprites/SpriteBatch.js +++ b/src/core/sprites/SpriteBatch.js @@ -1,4 +1,4 @@ -var DisplayObjectContainer = require('./DisplayObjectContainer'); +var DisplayObjectContainer = require('../display/DisplayObjectContainer'); /** * The SpriteBatch class is a really fast version of the DisplayObjectContainer built solely for speed, diff --git a/src/core/sprites/SpriteRenderer.js b/src/core/sprites/SpriteRenderer.js index bf8991d..fcb1e24 100644 --- a/src/core/sprites/SpriteRenderer.js +++ b/src/core/sprites/SpriteRenderer.js @@ -168,17 +168,15 @@ // listen for context and update necessary buffers var self = this; - this.renderer.on('context', function () - { - self.setupContext(); - }); + + this.setupContext(); } SpriteRenderer.prototype = Object.create(ObjectRenderer.prototype); SpriteRenderer.prototype.constructor = SpriteRenderer; module.exports = SpriteRenderer; -WebGLRenderer.registerObjectRenderer('sprite', SpriteRenderer); + /** * Sets up the renderer context and necessary buffers. diff --git a/src/core/textures/RenderTexture.js b/src/core/textures/RenderTexture.js index 53ae796..305de0c 100644 --- a/src/core/textures/RenderTexture.js +++ b/src/core/textures/RenderTexture.js @@ -53,33 +53,57 @@ throw new Error('Unable to create RenderTexture, you must pass a renderer into the constructor.'); } + width = width || 100; + height = height || 100; + resolution = resolution || 1; + + /** + * The base texture object that this texture uses + * + * @member {BaseTexture} + */ + var baseTexture = new BaseTexture(); + baseTexture.width = width * resolution; + baseTexture.height = height * resolution; + baseTexture._glTextures = []; + baseTexture.resolution = resolution; + baseTexture.scaleMode = scaleMode || CONST.scaleModes.DEFAULT; + baseTexture.hasLoaded = true; + + + Texture.call(this, + baseTexture, + new math.Rectangle(0, 0, width, height) + ); + + /** * The with of the render texture * * @member {number} */ - this.width = width || 100; + this.width = width; /** * The height of the render texture * * @member {number} */ - this.height = height || 100; + this.height = height; /** * The Resolution of the texture. * * @member {number} */ - this.resolution = resolution || 1; + this.resolution = resolution; /** * The framing rectangle of the render texture * * @member {Rectangle} */ - this.frame = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + //this._frame = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); /** * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering, @@ -87,7 +111,7 @@ * * @member {Rectangle} */ - this.crop = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); + //this.crop = new math.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution); /** * Draw/render the given DisplayObject onto the texture. @@ -108,26 +132,8 @@ */ this.render = null; - /** - * The base texture object that this texture uses - * - * @member {BaseTexture} - */ - this.baseTexture = new BaseTexture(); - this.baseTexture.width = this.width * this.resolution; - this.baseTexture.height = this.height * this.resolution; - this.baseTexture._glTextures = []; - this.baseTexture.resolution = this.resolution; - this.baseTexture.scaleMode = scaleMode || CONST.scaleModes.DEFAULT; - - this.baseTexture.hasLoaded = true; - - Texture.call(this, - this.baseTexture, - new math.Rectangle(0, 0, this.width, this.height) - ); - + /** * The renderer this RenderTexture uses. A RenderTexture can only belong to one renderer at the moment if its webGL. * @@ -147,9 +153,20 @@ } else { + this.render = this.renderCanvas; this.textureBuffer = new CanvasBuffer(this.width* this.resolution, this.height* this.resolution); this.baseTexture.source = this.textureBuffer.canvas; + /* document.body.appendChild( this.textureBuffer.canvas); + + this.textureBuffer.canvas.style.position = "absolute"; + this.textureBuffer.canvas.style.top = 0; + this.textureBuffer.canvas.style.left= 0; + this.textureBuffer.canvas.style.zIndex = 1000; + this.textureBuffer.canvas.width = width; + this.textureBuffer.canvas.height = height; + + console.log(this.textureBuffer.canvas);*/ } /** @@ -158,6 +175,8 @@ this.valid = true; this._updateUvs(); + + console.log(baseTexture); } RenderTexture.prototype = Object.create(Texture.prototype); @@ -180,8 +199,8 @@ this.valid = (width > 0 && height > 0); - this.width = this.frame.width = this.crop.width = width; - this.height = this.frame.height = this.crop.height = height; + this.width = this._frame.width = this.crop.width = width; + this.height = this._frame.height = this.crop.height = height; if (updateBase) { @@ -292,11 +311,11 @@ this.textureBuffer.clear(); } - this.renderer.spriteBatch.dirty = true; +// this.renderer.spriteRenderer.dirty = true; this.renderer.renderDisplayObject(displayObject, this.projection, this.textureBuffer.frameBuffer); - this.renderer.spriteBatch.dirty = true; + // this.renderer.spriteRenderer.dirty = true; if (restoreWorldTransform) { @@ -328,19 +347,11 @@ return; } - if (typeof restoreWorldTransform === 'undefined') - { - restoreWorldTransform = true; - } - + var tempAlpha, tempTransform; - if (restoreWorldTransform) - { - tempAlpha = displayObject.worldAlpha; - tempTransform = displayObject.worldTransform.toArray(); - } + var wt = displayObject.worldTransform; wt.identity(); @@ -366,26 +377,23 @@ this.textureBuffer.clear(); } + + + +// this.textureBuffer. var context = this.textureBuffer.context; var realResolution = this.renderer.resolution; this.renderer.resolution = this.resolution; - this.renderer.renderDisplayObject(displayObject, context); +// this.renderer.renderDisplayObject(displayObject, context); this.renderer.resolution = realResolution; + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle ="#FF0000" + context.fillRect(0, 0, 800, 600); - if (restoreWorldTransform) - { - displayObject.worldAlpha = tempAlpha; - displayObject.worldTransform.fromArray(tempTransform); - - for (i = 0, j = children.length; i < j; ++i) - { - children[i].updateTransform(); - } - } }; /** diff --git a/src/loaders/index.js b/src/loaders/index.js index 0ca02e6..3b83499 100644 --- a/src/loaders/index.js +++ b/src/loaders/index.js @@ -9,6 +9,7 @@ * @namespace PIXI */ module.exports = { + AssetLoader: require('./AssetLoader'), AtlasLoader: require('./AtlasLoader'), BitmapFontLoader: require('./BitmapFontLoader'), ImageLoader: require('./ImageLoader'),