diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 9ebe8e4..3ff6d22 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -74,7 +74,29 @@ bounds.width = bounds.width | 0; bounds.height = bounds.height | 0; - this.capFilterArea( bounds ); + + + + + if(this.renderer.currentRenderTarget.transform) + { + //TODO this will break if the renderTexture transform is anything other than a translation. + //Will need to take the full matrix transform into acount.. + var transform = this.renderer.currentRenderTarget.transform; + + bounds.x += transform.tx; + bounds.y += transform.ty; + + this.capFilterArea( bounds ); + + bounds.x -= transform.tx; + bounds.y -= transform.ty; + } + else + { + this.capFilterArea( bounds ); + } + this.currentFrame = bounds; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 9ebe8e4..3ff6d22 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -74,7 +74,29 @@ bounds.width = bounds.width | 0; bounds.height = bounds.height | 0; - this.capFilterArea( bounds ); + + + + + if(this.renderer.currentRenderTarget.transform) + { + //TODO this will break if the renderTexture transform is anything other than a translation. + //Will need to take the full matrix transform into acount.. + var transform = this.renderer.currentRenderTarget.transform; + + bounds.x += transform.tx; + bounds.y += transform.ty; + + this.capFilterArea( bounds ); + + bounds.x -= transform.tx; + bounds.y -= transform.ty; + } + else + { + this.capFilterArea( bounds ); + } + this.currentFrame = bounds; diff --git a/src/core/textures/RenderTexture.js b/src/core/textures/RenderTexture.js index a668f11..f3d84d4 100644 --- a/src/core/textures/RenderTexture.js +++ b/src/core/textures/RenderTexture.js @@ -1,6 +1,7 @@ var BaseTexture = require('./BaseTexture'), Texture = require('./Texture'), RenderTarget = require('../renderers/webgl/utils/RenderTarget'), + FilterManager = require('../renderers/webgl/managers/FilterManager'), CanvasBuffer = require('../renderers/canvas/utils/CanvasBuffer'), math = require('../math'), CONST = require('../const'), @@ -146,6 +147,10 @@ this.textureBuffer = new RenderTarget(gl, this.width, this.height, null, this.resolution);//, this.baseTexture.scaleMode); this.baseTexture._glTextures[gl.id] = this.textureBuffer.texture; + //TODO refactor filter manager.. as really its no longer a manager if we use it here.. + this.filterManager = new FilterManager(this.renderer); + this.filterManager.onContextChange(); + this.filterManager.resize(width, height); this.render = this.renderWebGL; } else @@ -205,6 +210,11 @@ } this.textureBuffer.resize(this.width * this.resolution, this.height * this.resolution); + + if(this.filterManager) + { + this.filterManager.resize(this.width, this.height); + } }; /** @@ -254,9 +264,12 @@ if (updateTransform) { + // reset the matrix of the displatyObject.. displayObject.worldTransform.identity(); + displayObject._currentBounds = null; + // Time to update all the children of the displayObject with the new matrix.. var children = displayObject.children; var i, j; @@ -274,9 +287,12 @@ } //TODO rename textureBuffer to renderTarget.. + var temp = this.renderer.filterManager; + this.renderer.filterManager = this.filterManager; this.renderer.renderDisplayObject(displayObject, this.textureBuffer); + this.renderer.filterManager = temp; }; @@ -350,6 +366,12 @@ this.textureBuffer.destroy(); + // destroy the filtermanager.. + if(this.filterManager) + { + this.filterManager.destroy(); + } + this.renderer = null; };