diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index bef199d..fcf69ca 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -161,6 +161,8 @@ renderer.bindRenderTarget(output); + + if(clear) { var gl = renderer.gl; @@ -170,6 +172,12 @@ gl.enable(gl.SCISSOR_TEST); } + // incase the render target is being masked using a scissor rect + if(output === renderer.maskManager.scissorRenderTarget) + { + renderer.maskManager.pushScissorMask(null, renderer.maskManager.scissorData) + } + renderer.bindShader(shader); // this syncs the pixi filters uniforms with glsl uniforms diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index bef199d..fcf69ca 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -161,6 +161,8 @@ renderer.bindRenderTarget(output); + + if(clear) { var gl = renderer.gl; @@ -170,6 +172,12 @@ gl.enable(gl.SCISSOR_TEST); } + // incase the render target is being masked using a scissor rect + if(output === renderer.maskManager.scissorRenderTarget) + { + renderer.maskManager.pushScissorMask(null, renderer.maskManager.scissorData) + } + renderer.bindShader(shader); // this syncs the pixi filters uniforms with glsl uniforms diff --git a/src/core/renderers/webgl/managers/MaskManager.js b/src/core/renderers/webgl/managers/MaskManager.js index b979ff6..bfc84ba 100644 --- a/src/core/renderers/webgl/managers/MaskManager.js +++ b/src/core/renderers/webgl/managers/MaskManager.js @@ -10,7 +10,10 @@ { WebGLManager.call(this, renderer); + //TODO - we don't need both! this.scissor = false; + this.scissorData = null; + this.scissorRenderTarget = null; this.enableScissor = true; @@ -36,7 +39,6 @@ } else { - // console.log( maskData.graphicsData[0].shape.type) if(this.enableScissor && !this.scissor && !this.renderer.stencilManager.stencilMaskStack.length && maskData.graphicsData[0].shape.type === 1) { var matrix = maskData.worldTransform; @@ -152,22 +154,28 @@ var renderTarget = this.renderer._activeRenderTarget; var bounds = maskData.getBounds(); + bounds.fit(renderTarget.size); maskData.renderable = false; this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST); this.renderer.gl.scissor(bounds.x, - renderTarget.root ? renderTarget.size.height - bounds.y - bounds.height : bounds.y, - bounds.width , - bounds.height); + renderTarget.root ? renderTarget.size.height - bounds.y - bounds.height : bounds.y, + bounds.width , + bounds.height); + this.scissorRenderTarget = renderTarget; + this.scissorData = maskData; this.scissor = true; }; MaskManager.prototype.popScissorMask = function () { + this.scissorRenderTarget = null; + this.scissorData = null; this.scissor = false; + // must be scissor! var gl = this.renderer.gl; gl.disable(gl.SCISSOR_TEST);