diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index f28b6bb..0951cc3 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -216,7 +216,7 @@ return renderTarget; }; -/* +/* * Returns a RenderTarget to the internal pool * @param renderTarget {RenderTarget} The RenderTarget we want to return to the pool */ @@ -225,11 +225,11 @@ this.texturePool.push( renderTarget ); }; -/* +/* * Applies the filter * @param shader {Shader} The shader to upload * @param inputTarget {RenderTarget} - * @param outputTarget {RenderTarget} + * @param outputTarget {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ FilterManager.prototype.applyFilter = function (shader, inputTarget, outputTarget, clear) @@ -262,9 +262,9 @@ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); }; -/* - * Calculates the mapped matrix - * @param filterArea {Rectangle} The filter area +/* + * Calculates the mapped matrix + * @param filterArea {Rectangle} The filter area * @param sprite {Sprite} the target sprite * @param outputMatrix {Matrix} @alvin */ @@ -335,7 +335,7 @@ // return transform; }; -/* +/* * Constrains the filter area to the texture size * @param filterArea {Rectangle} The filter area we want to cap */ @@ -364,7 +364,7 @@ } }; -/* +/* * Resizes all the render targets in the pool * @param width {number} the new width * @param height {number} the new height diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index f28b6bb..0951cc3 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -216,7 +216,7 @@ return renderTarget; }; -/* +/* * Returns a RenderTarget to the internal pool * @param renderTarget {RenderTarget} The RenderTarget we want to return to the pool */ @@ -225,11 +225,11 @@ this.texturePool.push( renderTarget ); }; -/* +/* * Applies the filter * @param shader {Shader} The shader to upload * @param inputTarget {RenderTarget} - * @param outputTarget {RenderTarget} + * @param outputTarget {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ FilterManager.prototype.applyFilter = function (shader, inputTarget, outputTarget, clear) @@ -262,9 +262,9 @@ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); }; -/* - * Calculates the mapped matrix - * @param filterArea {Rectangle} The filter area +/* + * Calculates the mapped matrix + * @param filterArea {Rectangle} The filter area * @param sprite {Sprite} the target sprite * @param outputMatrix {Matrix} @alvin */ @@ -335,7 +335,7 @@ // return transform; }; -/* +/* * Constrains the filter area to the texture size * @param filterArea {Rectangle} The filter area we want to cap */ @@ -364,7 +364,7 @@ } }; -/* +/* * Resizes all the render targets in the pool * @param width {number} the new width * @param height {number} the new height diff --git a/src/core/renderers/webgl/utils/Quad.js b/src/core/renderers/webgl/utils/Quad.js index 0c51505..d708f16 100644 --- a/src/core/renderers/webgl/utils/Quad.js +++ b/src/core/renderers/webgl/utils/Quad.js @@ -129,6 +129,7 @@ { var gl = this.gl; + // TODO could probably be pushed into one upload! gl.bindBuffer( gl.ARRAY_BUFFER, this.vertexBuffer ); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index f28b6bb..0951cc3 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -216,7 +216,7 @@ return renderTarget; }; -/* +/* * Returns a RenderTarget to the internal pool * @param renderTarget {RenderTarget} The RenderTarget we want to return to the pool */ @@ -225,11 +225,11 @@ this.texturePool.push( renderTarget ); }; -/* +/* * Applies the filter * @param shader {Shader} The shader to upload * @param inputTarget {RenderTarget} - * @param outputTarget {RenderTarget} + * @param outputTarget {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ FilterManager.prototype.applyFilter = function (shader, inputTarget, outputTarget, clear) @@ -262,9 +262,9 @@ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); }; -/* - * Calculates the mapped matrix - * @param filterArea {Rectangle} The filter area +/* + * Calculates the mapped matrix + * @param filterArea {Rectangle} The filter area * @param sprite {Sprite} the target sprite * @param outputMatrix {Matrix} @alvin */ @@ -335,7 +335,7 @@ // return transform; }; -/* +/* * Constrains the filter area to the texture size * @param filterArea {Rectangle} The filter area we want to cap */ @@ -364,7 +364,7 @@ } }; -/* +/* * Resizes all the render targets in the pool * @param width {number} the new width * @param height {number} the new height diff --git a/src/core/renderers/webgl/utils/Quad.js b/src/core/renderers/webgl/utils/Quad.js index 0c51505..d708f16 100644 --- a/src/core/renderers/webgl/utils/Quad.js +++ b/src/core/renderers/webgl/utils/Quad.js @@ -129,6 +129,7 @@ { var gl = this.gl; + // TODO could probably be pushed into one upload! gl.bindBuffer( gl.ARRAY_BUFFER, this.vertexBuffer ); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); diff --git a/src/core/renderers/webgl/utils/RenderTarget.js b/src/core/renderers/webgl/utils/RenderTarget.js index 8390359..63f6c54 100644 --- a/src/core/renderers/webgl/utils/RenderTarget.js +++ b/src/core/renderers/webgl/utils/RenderTarget.js @@ -43,7 +43,7 @@ /** * The size of the object as a rectangle - * @member {Rectangle} + * @member {Rectangle} */ this.size = new math.Rectangle(0, 0, 1, 1); @@ -54,7 +54,7 @@ this.resolution = resolution || CONST.RESOLUTION; /** - * The projection matrix + * The projection matrix * @member {Matrix} */ this.projectionMatrix = new math.Matrix(); @@ -66,7 +66,7 @@ this.transform = null; /** - * + * * @member {Rectangle} */ this.frame = null; @@ -158,10 +158,14 @@ * Clears the filter texture. * */ -RenderTarget.prototype.clear = function() +RenderTarget.prototype.clear = function(bind) { var gl = this.gl; - gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + if(bind) + { + gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + } + gl.clearColor(0,0,0,0); gl.clear(gl.COLOR_BUFFER_BIT); }; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index f28b6bb..0951cc3 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -216,7 +216,7 @@ return renderTarget; }; -/* +/* * Returns a RenderTarget to the internal pool * @param renderTarget {RenderTarget} The RenderTarget we want to return to the pool */ @@ -225,11 +225,11 @@ this.texturePool.push( renderTarget ); }; -/* +/* * Applies the filter * @param shader {Shader} The shader to upload * @param inputTarget {RenderTarget} - * @param outputTarget {RenderTarget} + * @param outputTarget {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ FilterManager.prototype.applyFilter = function (shader, inputTarget, outputTarget, clear) @@ -262,9 +262,9 @@ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); }; -/* - * Calculates the mapped matrix - * @param filterArea {Rectangle} The filter area +/* + * Calculates the mapped matrix + * @param filterArea {Rectangle} The filter area * @param sprite {Sprite} the target sprite * @param outputMatrix {Matrix} @alvin */ @@ -335,7 +335,7 @@ // return transform; }; -/* +/* * Constrains the filter area to the texture size * @param filterArea {Rectangle} The filter area we want to cap */ @@ -364,7 +364,7 @@ } }; -/* +/* * Resizes all the render targets in the pool * @param width {number} the new width * @param height {number} the new height diff --git a/src/core/renderers/webgl/utils/Quad.js b/src/core/renderers/webgl/utils/Quad.js index 0c51505..d708f16 100644 --- a/src/core/renderers/webgl/utils/Quad.js +++ b/src/core/renderers/webgl/utils/Quad.js @@ -129,6 +129,7 @@ { var gl = this.gl; + // TODO could probably be pushed into one upload! gl.bindBuffer( gl.ARRAY_BUFFER, this.vertexBuffer ); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); diff --git a/src/core/renderers/webgl/utils/RenderTarget.js b/src/core/renderers/webgl/utils/RenderTarget.js index 8390359..63f6c54 100644 --- a/src/core/renderers/webgl/utils/RenderTarget.js +++ b/src/core/renderers/webgl/utils/RenderTarget.js @@ -43,7 +43,7 @@ /** * The size of the object as a rectangle - * @member {Rectangle} + * @member {Rectangle} */ this.size = new math.Rectangle(0, 0, 1, 1); @@ -54,7 +54,7 @@ this.resolution = resolution || CONST.RESOLUTION; /** - * The projection matrix + * The projection matrix * @member {Matrix} */ this.projectionMatrix = new math.Matrix(); @@ -66,7 +66,7 @@ this.transform = null; /** - * + * * @member {Rectangle} */ this.frame = null; @@ -158,10 +158,14 @@ * Clears the filter texture. * */ -RenderTarget.prototype.clear = function() +RenderTarget.prototype.clear = function(bind) { var gl = this.gl; - gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + if(bind) + { + gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + } + gl.clearColor(0,0,0,0); gl.clear(gl.COLOR_BUFFER_BIT); }; diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index a5f40d7..ebdfe3c 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -386,25 +386,29 @@ { currentShader = nextShader; + + shader = currentShader.shaders ? currentShader.shaders[gl.id] : currentShader; if (!shader) { - shader = new Shader(this.renderer.shaderManager, currentShader.vertexSrc, currentShader.fragmentSrc, currentShader.uniforms); + shader = currentShader.getShader(this.renderer); - if (currentShader.shaders) { - currentShader.shaders[gl.id] = shader; - } } // set shader function??? this.renderer.shaderManager.setShader(shader); - ///console.log(shader.uniforms.projectionMatrix); + //TODO - i KNOW this can be optimised! Once v3 is stable il look at this next... + shader.uniforms.projectionMatrix.value = this.renderer.currentRenderTarget.projectionMatrix.toArray(true); + //Make this a little more dynamic / intelligent! + shader.syncUniforms(); // both thease only need to be set if they are changing.. // set the projection - gl.uniformMatrix3fv(shader.uniforms.projectionMatrix._location, false, this.renderer.currentRenderTarget.projectionMatrix.toArray(true)); + //gl.uniformMatrix3fv(shader.uniforms.projectionMatrix._location, false, this.renderer.currentRenderTarget.projectionMatrix.toArray(true)); + + } } diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 132618a..efcf056 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -42,7 +42,7 @@ * The type of this renderer as a standardised const * * @member {number} - * + * */ this.type = CONST.RENDERER_TYPE.WEBGL; @@ -141,7 +141,7 @@ /** * object renderer @alvin - * @member {ObjectRenderer} + * @member {ObjectRenderer} */ this.currentRenderer = new ObjectRenderer(this); @@ -242,7 +242,6 @@ var gl = this.gl; // make sure we are bound to the main frame buffer - gl.bindFramebuffer(gl.FRAMEBUFFER, null); if (this.clearBeforeRender) { @@ -266,7 +265,7 @@ * * @param displayObject {DisplayObject} The DisplayObject to render * @param renderTarget {RenderTarget} The render target to use to render this display object - * + * */ WebGLRenderer.prototype.renderDisplayObject = function (displayObject, renderTarget)//projection, buffer) { @@ -288,7 +287,7 @@ * Changes the current renderer to the one given in parameter * * @param objectRenderer {Object} TODO @alvin - * + * */ WebGLRenderer.prototype.setObjectRenderer = function (objectRenderer) { @@ -306,10 +305,14 @@ * Changes the current render target to the one given in parameter * * @param renderTarget {RenderTarget} the new render target - * + * */ WebGLRenderer.prototype.setRenderTarget = function (renderTarget) { + if( this.currentRenderTarget === renderTarget) + { + return; + } // TODO - maybe down the line this should be a push pos thing? Leaving for now though. this.currentRenderTarget = renderTarget; this.currentRenderTarget.activate(); diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index f28b6bb..0951cc3 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -216,7 +216,7 @@ return renderTarget; }; -/* +/* * Returns a RenderTarget to the internal pool * @param renderTarget {RenderTarget} The RenderTarget we want to return to the pool */ @@ -225,11 +225,11 @@ this.texturePool.push( renderTarget ); }; -/* +/* * Applies the filter * @param shader {Shader} The shader to upload * @param inputTarget {RenderTarget} - * @param outputTarget {RenderTarget} + * @param outputTarget {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ FilterManager.prototype.applyFilter = function (shader, inputTarget, outputTarget, clear) @@ -262,9 +262,9 @@ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); }; -/* - * Calculates the mapped matrix - * @param filterArea {Rectangle} The filter area +/* + * Calculates the mapped matrix + * @param filterArea {Rectangle} The filter area * @param sprite {Sprite} the target sprite * @param outputMatrix {Matrix} @alvin */ @@ -335,7 +335,7 @@ // return transform; }; -/* +/* * Constrains the filter area to the texture size * @param filterArea {Rectangle} The filter area we want to cap */ @@ -364,7 +364,7 @@ } }; -/* +/* * Resizes all the render targets in the pool * @param width {number} the new width * @param height {number} the new height diff --git a/src/core/renderers/webgl/utils/Quad.js b/src/core/renderers/webgl/utils/Quad.js index 0c51505..d708f16 100644 --- a/src/core/renderers/webgl/utils/Quad.js +++ b/src/core/renderers/webgl/utils/Quad.js @@ -129,6 +129,7 @@ { var gl = this.gl; + // TODO could probably be pushed into one upload! gl.bindBuffer( gl.ARRAY_BUFFER, this.vertexBuffer ); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertices); diff --git a/src/core/renderers/webgl/utils/RenderTarget.js b/src/core/renderers/webgl/utils/RenderTarget.js index 8390359..63f6c54 100644 --- a/src/core/renderers/webgl/utils/RenderTarget.js +++ b/src/core/renderers/webgl/utils/RenderTarget.js @@ -43,7 +43,7 @@ /** * The size of the object as a rectangle - * @member {Rectangle} + * @member {Rectangle} */ this.size = new math.Rectangle(0, 0, 1, 1); @@ -54,7 +54,7 @@ this.resolution = resolution || CONST.RESOLUTION; /** - * The projection matrix + * The projection matrix * @member {Matrix} */ this.projectionMatrix = new math.Matrix(); @@ -66,7 +66,7 @@ this.transform = null; /** - * + * * @member {Rectangle} */ this.frame = null; @@ -158,10 +158,14 @@ * Clears the filter texture. * */ -RenderTarget.prototype.clear = function() +RenderTarget.prototype.clear = function(bind) { var gl = this.gl; - gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + if(bind) + { + gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer); + } + gl.clearColor(0,0,0,0); gl.clear(gl.COLOR_BUFFER_BIT); }; diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index a5f40d7..ebdfe3c 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -386,25 +386,29 @@ { currentShader = nextShader; + + shader = currentShader.shaders ? currentShader.shaders[gl.id] : currentShader; if (!shader) { - shader = new Shader(this.renderer.shaderManager, currentShader.vertexSrc, currentShader.fragmentSrc, currentShader.uniforms); + shader = currentShader.getShader(this.renderer); - if (currentShader.shaders) { - currentShader.shaders[gl.id] = shader; - } } // set shader function??? this.renderer.shaderManager.setShader(shader); - ///console.log(shader.uniforms.projectionMatrix); + //TODO - i KNOW this can be optimised! Once v3 is stable il look at this next... + shader.uniforms.projectionMatrix.value = this.renderer.currentRenderTarget.projectionMatrix.toArray(true); + //Make this a little more dynamic / intelligent! + shader.syncUniforms(); // both thease only need to be set if they are changing.. // set the projection - gl.uniformMatrix3fv(shader.uniforms.projectionMatrix._location, false, this.renderer.currentRenderTarget.projectionMatrix.toArray(true)); + //gl.uniformMatrix3fv(shader.uniforms.projectionMatrix._location, false, this.renderer.currentRenderTarget.projectionMatrix.toArray(true)); + + } } diff --git a/src/core/textures/RenderTexture.js b/src/core/textures/RenderTexture.js index 5317c3e..ceba9b6 100644 --- a/src/core/textures/RenderTexture.js +++ b/src/core/textures/RenderTexture.js @@ -152,6 +152,9 @@ this.filterManager.onContextChange(); this.filterManager.resize(width, height); this.render = this.renderWebGL; + + // the creation of a filter manager unbinds the buffers.. + this.renderer.currentRenderer.start(); } else { @@ -293,6 +296,8 @@ this.renderer.renderDisplayObject(displayObject, this.textureBuffer); this.renderer.filterManager = temp; + + };