diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 753c475..f75a226 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function PrimitiveShader(gl) +function PrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -53,3 +54,5 @@ PrimitiveShader.prototype = Object.create(Shader.prototype); PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; + +WebGLShaderManager.registerPlugin('primitiveShader', PrimitiveShader); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 753c475..f75a226 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function PrimitiveShader(gl) +function PrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -53,3 +54,5 @@ PrimitiveShader.prototype = Object.create(Shader.prototype); PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; + +WebGLShaderManager.registerPlugin('primitiveShader', PrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index d065a76..c60c5f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -1,12 +1,16 @@ -var utils = require('../../../utils'); +var utils = require('../../../utils'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param [fragmentSrc] {string} The source of the fragment shader. + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. * @param [vertexSrc] {string} The source of the vertex shader. + * @param [fragmentSrc] {string} The source of the fragment shader. + * @param customUniforms {object} Custom uniforms to use to augment the built-in ones. + * @param [fragmentSrc] {string} The source of the fragment shader. */ -function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) +function Shader(shaderManager, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} @@ -18,7 +22,7 @@ * @member {WebGLContext} * @readonly */ - this.gl = gl; + this.gl = shaderManager.renderer.gl; /** * The WebGL program. @@ -31,8 +35,8 @@ uSampler: { type: 'sampler2D', value: 0 }, projectionVector: { type: '2f', value: { x: 0, y: 0 } }, offsetVector: { type: '2f', value: { x: 0, y: 0 } }, - projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, - 0, 1, 0, + projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, + 0, 1, 0, 0, 0, 1) }, dimensions: { type: '4f', value: new Float32Array(4) } }; @@ -103,6 +107,8 @@ Shader.prototype.constructor = Shader; module.exports = Shader; +WebGLShaderManager.registerPlugin('defaultShader', Shader); + Shader.prototype.init = function () { this.compile(); @@ -506,4 +512,4 @@ } return shader; -}; \ No newline at end of file +}; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 753c475..f75a226 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function PrimitiveShader(gl) +function PrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -53,3 +54,5 @@ PrimitiveShader.prototype = Object.create(Shader.prototype); PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; + +WebGLShaderManager.registerPlugin('primitiveShader', PrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index d065a76..c60c5f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -1,12 +1,16 @@ -var utils = require('../../../utils'); +var utils = require('../../../utils'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param [fragmentSrc] {string} The source of the fragment shader. + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. * @param [vertexSrc] {string} The source of the vertex shader. + * @param [fragmentSrc] {string} The source of the fragment shader. + * @param customUniforms {object} Custom uniforms to use to augment the built-in ones. + * @param [fragmentSrc] {string} The source of the fragment shader. */ -function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) +function Shader(shaderManager, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} @@ -18,7 +22,7 @@ * @member {WebGLContext} * @readonly */ - this.gl = gl; + this.gl = shaderManager.renderer.gl; /** * The WebGL program. @@ -31,8 +35,8 @@ uSampler: { type: 'sampler2D', value: 0 }, projectionVector: { type: '2f', value: { x: 0, y: 0 } }, offsetVector: { type: '2f', value: { x: 0, y: 0 } }, - projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, - 0, 1, 0, + projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, + 0, 1, 0, 0, 0, 1) }, dimensions: { type: '4f', value: new Float32Array(4) } }; @@ -103,6 +107,8 @@ Shader.prototype.constructor = Shader; module.exports = Shader; +WebGLShaderManager.registerPlugin('defaultShader', Shader); + Shader.prototype.init = function () { this.compile(); @@ -506,4 +512,4 @@ } return shader; -}; \ No newline at end of file +}; diff --git a/src/core/renderers/webgl/shaders/SpriteShader.js b/src/core/renderers/webgl/shaders/SpriteShader.js index 1805b0a..8532a96 100644 --- a/src/core/renderers/webgl/shaders/SpriteShader.js +++ b/src/core/renderers/webgl/shaders/SpriteShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function SpriteShader(gl) +function SpriteShader(shaderManager) { Shader.call(this, - gl, + shaderManager, null, // fragment shader [ @@ -40,3 +41,5 @@ SpriteShader.prototype = Object.create(Shader.prototype); SpriteShader.prototype.constructor = SpriteShader; module.exports = SpriteShader; + +WebGLShaderManager.registerPlugin('fastShader', SpriteShader); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 753c475..f75a226 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function PrimitiveShader(gl) +function PrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -53,3 +54,5 @@ PrimitiveShader.prototype = Object.create(Shader.prototype); PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; + +WebGLShaderManager.registerPlugin('primitiveShader', PrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index d065a76..c60c5f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -1,12 +1,16 @@ -var utils = require('../../../utils'); +var utils = require('../../../utils'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param [fragmentSrc] {string} The source of the fragment shader. + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. * @param [vertexSrc] {string} The source of the vertex shader. + * @param [fragmentSrc] {string} The source of the fragment shader. + * @param customUniforms {object} Custom uniforms to use to augment the built-in ones. + * @param [fragmentSrc] {string} The source of the fragment shader. */ -function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) +function Shader(shaderManager, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} @@ -18,7 +22,7 @@ * @member {WebGLContext} * @readonly */ - this.gl = gl; + this.gl = shaderManager.renderer.gl; /** * The WebGL program. @@ -31,8 +35,8 @@ uSampler: { type: 'sampler2D', value: 0 }, projectionVector: { type: '2f', value: { x: 0, y: 0 } }, offsetVector: { type: '2f', value: { x: 0, y: 0 } }, - projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, - 0, 1, 0, + projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, + 0, 1, 0, 0, 0, 1) }, dimensions: { type: '4f', value: new Float32Array(4) } }; @@ -103,6 +107,8 @@ Shader.prototype.constructor = Shader; module.exports = Shader; +WebGLShaderManager.registerPlugin('defaultShader', Shader); + Shader.prototype.init = function () { this.compile(); @@ -506,4 +512,4 @@ } return shader; -}; \ No newline at end of file +}; diff --git a/src/core/renderers/webgl/shaders/SpriteShader.js b/src/core/renderers/webgl/shaders/SpriteShader.js index 1805b0a..8532a96 100644 --- a/src/core/renderers/webgl/shaders/SpriteShader.js +++ b/src/core/renderers/webgl/shaders/SpriteShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function SpriteShader(gl) +function SpriteShader(shaderManager) { Shader.call(this, - gl, + shaderManager, null, // fragment shader [ @@ -40,3 +41,5 @@ SpriteShader.prototype = Object.create(Shader.prototype); SpriteShader.prototype.constructor = SpriteShader; module.exports = SpriteShader; + +WebGLShaderManager.registerPlugin('fastShader', SpriteShader); diff --git a/src/core/renderers/webgl/shaders/StripShader.js b/src/core/renderers/webgl/shaders/StripShader.js index f487381..1fbd9ef 100644 --- a/src/core/renderers/webgl/shaders/StripShader.js +++ b/src/core/renderers/webgl/shaders/StripShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function StripShader(gl) +function StripShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -52,3 +53,5 @@ StripShader.prototype = Object.create(Shader.prototype); StripShader.prototype.constructor = StripShader; module.exports = StripShader; + +WebGLShaderManager.registerPlugin('stripShader', StripShader); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index c5a7b55..ae25627 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -174,6 +174,9 @@ // time to create the render managers! each one focuses on managing a state in webGL + // initialize the context so it is ready for the managers. + this._initContext(); + /** * Deals with managing the shader programs and their attribs * @member {WebGLShaderManager} @@ -204,18 +207,12 @@ */ this.blendModeManager = new WebGLBlendModeManager(this); - - this.blendModes = null; this._boundUpdateTexture = this.updateTexture.bind(this); this._boundDestroyTexture = this.destroyTexture.bind(this); - - // time init the context.. - this._initContext(); - this.currentRenderTarget = this.renderTarget; // map some webGL blend modes.. @@ -289,10 +286,8 @@ this.renderTarget = new RenderTarget(this.gl, this.width, this.height, null, true); - this.emit('context', gl); - // now resize and we are good to go! this.resize(this.width, this.height); }; diff --git a/src/core/renderers/webgl/managers/WebGLShaderManager.js b/src/core/renderers/webgl/managers/WebGLShaderManager.js index 90c6477..d4059f7 100644 --- a/src/core/renderers/webgl/managers/WebGLShaderManager.js +++ b/src/core/renderers/webgl/managers/WebGLShaderManager.js @@ -1,9 +1,4 @@ -var WebGLManager = require('./WebGLManager'), - PrimitiveShader = require('../shaders/PrimitiveShader'), - ComplexPrimitiveShader = require('../shaders/ComplexPrimitiveShader'), - Shader = require('../shaders/Shader'), - FastShader = require('../shaders/FastShader'), - StripShader = require('../shaders/StripShader'); +var WebGLManager = require('./WebGLManager'); /** * @class @@ -51,41 +46,16 @@ */ this.currentShader = null; - // this shader is used for rendering primitives - this.primitiveShader = null; - - // this shader is used for rendering triangle strips - this.complexPrimitiveShader = null; - - // this shader is used for the default sprite rendering - this.defaultShader = null; - - // this shader is used for the fast sprite rendering - this.fastShader = null; - - // the next one is used for rendering triangle strips - this.stripShader = null; + this.initPlugins(); // listen for context and update necessary shaders var self = this; this.renderer.on('context', function (event) { - var gl = event.data; - - // this shader is used for rendering primitives - self.primitiveShader = new PrimitiveShader(gl); - - // this shader is used for rendering triangle strips - self.complexPrimitiveShader = new ComplexPrimitiveShader(gl); - - // this shader is used for the default sprite rendering - self.defaultShader = new Shader(gl); - - // this shader is used for the fast sprite rendering - self.fastShader = new FastShader(gl); - - // the next one is used for rendering triangle strips - self.stripShader = new StripShader(gl); + for (var o in this.plugins) + { + this.plugins[o] = new (this.plugins[o].constructor)(self); + } self.setShader(self.defaultShader); }); @@ -95,6 +65,8 @@ WebGLShaderManager.prototype.constructor = WebGLShaderManager; module.exports = WebGLShaderManager; +utils.pluginTarget.mixin(WebGLShaderManager); + /** * Takes the attributes given in parameters. * diff --git a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js index f8a07da..656c5fd 100644 --- a/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/ComplexPrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function ComplexPrimitiveShader(gl) +function ComplexPrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -51,3 +52,5 @@ ComplexPrimitiveShader.prototype = Object.create(Shader.prototype); ComplexPrimitiveShader.prototype.constructor = ComplexPrimitiveShader; module.exports = ComplexPrimitiveShader; + +WebGLShaderManager.registerPlugin('complexPrimitiveShader', ComplexPrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index d198f10..c80d040 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -1,15 +1,16 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @extends Shader * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function FastShader(gl) +function FastShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -70,3 +71,5 @@ FastShader.prototype = Object.create(Shader.prototype); FastShader.prototype.constructor = FastShader; module.exports = FastShader; + +WebGLShaderManager.registerPlugin('fastShader', FastShader); diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 753c475..f75a226 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function PrimitiveShader(gl) +function PrimitiveShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -53,3 +54,5 @@ PrimitiveShader.prototype = Object.create(Shader.prototype); PrimitiveShader.prototype.constructor = PrimitiveShader; module.exports = PrimitiveShader; + +WebGLShaderManager.registerPlugin('primitiveShader', PrimitiveShader); diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index d065a76..c60c5f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -1,12 +1,16 @@ -var utils = require('../../../utils'); +var utils = require('../../../utils'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param [fragmentSrc] {string} The source of the fragment shader. + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. * @param [vertexSrc] {string} The source of the vertex shader. + * @param [fragmentSrc] {string} The source of the fragment shader. + * @param customUniforms {object} Custom uniforms to use to augment the built-in ones. + * @param [fragmentSrc] {string} The source of the fragment shader. */ -function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) +function Shader(shaderManager, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} @@ -18,7 +22,7 @@ * @member {WebGLContext} * @readonly */ - this.gl = gl; + this.gl = shaderManager.renderer.gl; /** * The WebGL program. @@ -31,8 +35,8 @@ uSampler: { type: 'sampler2D', value: 0 }, projectionVector: { type: '2f', value: { x: 0, y: 0 } }, offsetVector: { type: '2f', value: { x: 0, y: 0 } }, - projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, - 0, 1, 0, + projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0, + 0, 1, 0, 0, 0, 1) }, dimensions: { type: '4f', value: new Float32Array(4) } }; @@ -103,6 +107,8 @@ Shader.prototype.constructor = Shader; module.exports = Shader; +WebGLShaderManager.registerPlugin('defaultShader', Shader); + Shader.prototype.init = function () { this.compile(); @@ -506,4 +512,4 @@ } return shader; -}; \ No newline at end of file +}; diff --git a/src/core/renderers/webgl/shaders/SpriteShader.js b/src/core/renderers/webgl/shaders/SpriteShader.js index 1805b0a..8532a96 100644 --- a/src/core/renderers/webgl/shaders/SpriteShader.js +++ b/src/core/renderers/webgl/shaders/SpriteShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function SpriteShader(gl) +function SpriteShader(shaderManager) { Shader.call(this, - gl, + shaderManager, null, // fragment shader [ @@ -40,3 +41,5 @@ SpriteShader.prototype = Object.create(Shader.prototype); SpriteShader.prototype.constructor = SpriteShader; module.exports = SpriteShader; + +WebGLShaderManager.registerPlugin('fastShader', SpriteShader); diff --git a/src/core/renderers/webgl/shaders/StripShader.js b/src/core/renderers/webgl/shaders/StripShader.js index f487381..1fbd9ef 100644 --- a/src/core/renderers/webgl/shaders/StripShader.js +++ b/src/core/renderers/webgl/shaders/StripShader.js @@ -1,14 +1,15 @@ -var Shader = require('./Shader'); +var Shader = require('./Shader'), + WebGLShaderManager = require('../managers/WebGLShaderManager'); /** * @class * @namespace PIXI - * @param gl {WebGLContext} the current WebGL drawing context + * @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for. */ -function StripShader(gl) +function StripShader(shaderManager) { Shader.call(this, - gl, + shaderManager, // vertex shader [ 'attribute vec2 aVertexPosition;', @@ -52,3 +53,5 @@ StripShader.prototype = Object.create(Shader.prototype); StripShader.prototype.constructor = StripShader; module.exports = StripShader; + +WebGLShaderManager.registerPlugin('stripShader', StripShader); diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index 0ee4dfe..a2727e3 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -190,7 +190,7 @@ var gl = this.renderer.gl; // setup default shader - this.shader = new SpriteShader(gl); + this.shader = new SpriteShader(this.renderer.shaderManager); // create a couple of buffers this.vertexBuffer = gl.createBuffer();