diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 1698aca..efcf28c 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -282,6 +282,7 @@ //TOOD - required? WebGLRenderer.prototype.bindRenderTexture = function (renderTexture) { + //TODO fix this frame.. this.bindRenderTarget( renderTexture.baseTexture.textureBuffer, renderTexture.frame ); return this; diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 1698aca..efcf28c 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -282,6 +282,7 @@ //TOOD - required? WebGLRenderer.prototype.bindRenderTexture = function (renderTexture) { + //TODO fix this frame.. this.bindRenderTarget( renderTexture.baseTexture.textureBuffer, renderTexture.frame ); return this; diff --git a/src/core/renderers/webgl/managers/MaskManager.js b/src/core/renderers/webgl/managers/MaskManager.js index 050a6fd..42a4486 100644 --- a/src/core/renderers/webgl/managers/MaskManager.js +++ b/src/core/renderers/webgl/managers/MaskManager.js @@ -10,14 +10,11 @@ { WebGLManager.call(this, renderer); - this.stencilStack = []; - this.reverse = true; - this.count = 0; + this.scissor = false; this.alphaMaskPool = []; this.alphaMaskPool = []; this.alphaMaskIndex = 0; - } MaskManager.prototype = Object.create(WebGLManager.prototype); @@ -38,7 +35,29 @@ } else { - this.pushStencilMask(target, maskData); + // console.log( maskData.graphicsData[0].shape.type) + if(!this.scissor && !this.renderer.stencilManager.stencilMaskStack.length && maskData.graphicsData[0].shape.type === 1) + { + var matrix = maskData.worldTransform; + + var rot = Math.atan2(matrix.b, matrix.a); + + // use the nearest degree! + rot = Math.round(rot * (180/Math.PI)); + + if(rot % 90) + { + this.pushStencilMask(target, maskData); + } + else + { + this.pushScissorMask(target, maskData); + } + } + else + { + this.pushStencilMask(target, maskData); + } } }; @@ -56,7 +75,15 @@ } else { - this.popStencilMask(target, maskData); + if(!this.renderer.stencilManager.stencilMaskStack.length) + { + this.popScissorMask(target, maskData); + } + else + { + this.popStencilMask(target, maskData); + } + } }; @@ -120,3 +147,23 @@ this.renderer.stencilManager.popStencil(); }; +MaskManager.prototype.pushScissorMask = function (target, maskData) +{ + maskData.renderable = true; + var bounds = maskData.getBounds(); + maskData.renderable = false; + + gl.enable(gl.SCISSOR_TEST); + gl.scissor(bounds.x, this.renderer._activeRenderTarget.size.height - bounds.y - bounds.height, bounds.width , bounds.height); + + this.scissor = true; +}; + +MaskManager.prototype.popScissorMask = function (target, maskData) +{ + this.scissor = false; + // must be scissor! + var gl = this.renderer.gl; + gl.disable(gl.SCISSOR_TEST); +}; +