diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 7588dbc..eb6f498 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -66,7 +66,7 @@ initFromOptions(options) { - const gl = glCore.createContext(this.renderer.view, this.options); + const gl = glCore.createContext(this.renderer.view, options); this.initFromContext(gl); } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 7588dbc..eb6f498 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -66,7 +66,7 @@ initFromOptions(options) { - const gl = glCore.createContext(this.renderer.view, this.options); + const gl = glCore.createContext(this.renderer.view, options); this.initFromContext(gl); } diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..528c0b8 100644 --- a/src/core/renderers/webgl/systems/MaskSystem.js +++ b/src/core/renderers/webgl/systems/MaskSystem.js @@ -20,7 +20,7 @@ this.scissorData = null; this.scissorRenderTarget = null; - this.enableScissor = true; + this.enableScissor = false; this.alphaMaskPool = []; this.alphaMaskIndex = 0; @@ -32,7 +32,7 @@ * @param {PIXI.DisplayObject} target - Display Object to push the mask to * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - pushMask(target, maskData) + push(target, maskData) { // TODO the root check means scissor rect will not // be used on render textures more info here: @@ -76,7 +76,7 @@ * @param {PIXI.DisplayObject} target - Display Object to pop the mask from * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - popMask(target, maskData) + pop(target, maskData) { if (maskData.texture) { @@ -135,7 +135,7 @@ */ pushStencilMask(maskData) { - this.renderer.currentRenderer.stop(); + this.renderer.batch.flush(); this.renderer.stencil.pushStencil(maskData); } @@ -145,7 +145,7 @@ */ popStencilMask() { - this.renderer.currentRenderer.stop(); + // this.renderer.currentRenderer.stop(); this.renderer.stencil.popStencil(); } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 7588dbc..eb6f498 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -66,7 +66,7 @@ initFromOptions(options) { - const gl = glCore.createContext(this.renderer.view, this.options); + const gl = glCore.createContext(this.renderer.view, options); this.initFromContext(gl); } diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..528c0b8 100644 --- a/src/core/renderers/webgl/systems/MaskSystem.js +++ b/src/core/renderers/webgl/systems/MaskSystem.js @@ -20,7 +20,7 @@ this.scissorData = null; this.scissorRenderTarget = null; - this.enableScissor = true; + this.enableScissor = false; this.alphaMaskPool = []; this.alphaMaskIndex = 0; @@ -32,7 +32,7 @@ * @param {PIXI.DisplayObject} target - Display Object to push the mask to * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - pushMask(target, maskData) + push(target, maskData) { // TODO the root check means scissor rect will not // be used on render textures more info here: @@ -76,7 +76,7 @@ * @param {PIXI.DisplayObject} target - Display Object to pop the mask from * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - popMask(target, maskData) + pop(target, maskData) { if (maskData.texture) { @@ -135,7 +135,7 @@ */ pushStencilMask(maskData) { - this.renderer.currentRenderer.stop(); + this.renderer.batch.flush(); this.renderer.stencil.pushStencil(maskData); } @@ -145,7 +145,7 @@ */ popStencilMask() { - this.renderer.currentRenderer.stop(); + // this.renderer.currentRenderer.stop(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..d27802b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -19,6 +19,9 @@ super(renderer); this.clearColor = renderer._backgroundColorRgba; + + // TODO moe this property somewhere else! + this.defaultMaskStack = []; } bind(renderTexture) @@ -32,6 +35,7 @@ { this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + this.renderer.stencil.setMaskStack(renderTexture.baseTexture.stencilMaskStack); } else { @@ -41,6 +45,7 @@ tempRect.height = this.renderer.height; // TODO store this.. this.renderer.projection.update(tempRect, tempRect, true); + this.renderer.stencil.setMaskStack(this.defaultMaskStack); } const glShader = this.renderer.shader.getGLShader() diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 7588dbc..eb6f498 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -66,7 +66,7 @@ initFromOptions(options) { - const gl = glCore.createContext(this.renderer.view, this.options); + const gl = glCore.createContext(this.renderer.view, options); this.initFromContext(gl); } diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..528c0b8 100644 --- a/src/core/renderers/webgl/systems/MaskSystem.js +++ b/src/core/renderers/webgl/systems/MaskSystem.js @@ -20,7 +20,7 @@ this.scissorData = null; this.scissorRenderTarget = null; - this.enableScissor = true; + this.enableScissor = false; this.alphaMaskPool = []; this.alphaMaskIndex = 0; @@ -32,7 +32,7 @@ * @param {PIXI.DisplayObject} target - Display Object to push the mask to * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - pushMask(target, maskData) + push(target, maskData) { // TODO the root check means scissor rect will not // be used on render textures more info here: @@ -76,7 +76,7 @@ * @param {PIXI.DisplayObject} target - Display Object to pop the mask from * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - popMask(target, maskData) + pop(target, maskData) { if (maskData.texture) { @@ -135,7 +135,7 @@ */ pushStencilMask(maskData) { - this.renderer.currentRenderer.stop(); + this.renderer.batch.flush(); this.renderer.stencil.pushStencil(maskData); } @@ -145,7 +145,7 @@ */ popStencilMask() { - this.renderer.currentRenderer.stop(); + // this.renderer.currentRenderer.stop(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..d27802b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -19,6 +19,9 @@ super(renderer); this.clearColor = renderer._backgroundColorRgba; + + // TODO moe this property somewhere else! + this.defaultMaskStack = []; } bind(renderTexture) @@ -32,6 +35,7 @@ { this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + this.renderer.stencil.setMaskStack(renderTexture.baseTexture.stencilMaskStack); } else { @@ -41,6 +45,7 @@ tempRect.height = this.renderer.height; // TODO store this.. this.renderer.projection.update(tempRect, tempRect, true); + this.renderer.stencil.setMaskStack(this.defaultMaskStack); } const glShader = this.renderer.shader.getGLShader() diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..b04d71b 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -21,7 +21,7 @@ * * @param {PIXI.Graphics[]} stencilMaskStack - The mask stack */ - setMaskStack(stencilMaskStack) + setMaskStack(stencilMaskStack) { this.stencilMaskStack = stencilMaskStack; @@ -44,9 +44,9 @@ */ pushStencil(graphics) { - this.renderer.setObjectRenderer(this.renderer.plugins.graphics); + this.renderer.batch.setObjectRenderer(this.renderer.plugins.graphics); - this.renderer._activeRenderTarget.attachStencilBuffer(); +// this.renderer._activeRenderTarget.attachStencilBuffer(); const gl = this.renderer.gl; const sms = this.stencilMaskStack; @@ -75,7 +75,7 @@ */ popStencil() { - this.renderer.setObjectRenderer(this.renderer.plugins.graphics); + this.renderer.batch.setObjectRenderer(this.renderer.plugins.graphics); const gl = this.renderer.gl; const sms = this.stencilMaskStack; diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..f99168d 100644 --- a/src/core/display/Container.js +++ b/src/core/display/Container.js @@ -424,7 +424,7 @@ */ renderAdvancedWebGL(renderer) { - renderer.flush(); + renderer.batch.flush(); const filters = this._filters; const mask = this._mask; @@ -455,7 +455,7 @@ if (mask) { - renderer.mask.pushMask(this, this._mask); + renderer.mask.push(this, this._mask); } // add this object to the batch, only rendered if it has a texture. @@ -467,11 +467,11 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { - renderer.mask.popMask(this, this._mask); + renderer.mask.pop(this, this._mask); } if (filters && this._enabledFilters && this._enabledFilters.length) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 7588dbc..eb6f498 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -66,7 +66,7 @@ initFromOptions(options) { - const gl = glCore.createContext(this.renderer.view, this.options); + const gl = glCore.createContext(this.renderer.view, options); this.initFromContext(gl); } diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..528c0b8 100644 --- a/src/core/renderers/webgl/systems/MaskSystem.js +++ b/src/core/renderers/webgl/systems/MaskSystem.js @@ -20,7 +20,7 @@ this.scissorData = null; this.scissorRenderTarget = null; - this.enableScissor = true; + this.enableScissor = false; this.alphaMaskPool = []; this.alphaMaskIndex = 0; @@ -32,7 +32,7 @@ * @param {PIXI.DisplayObject} target - Display Object to push the mask to * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - pushMask(target, maskData) + push(target, maskData) { // TODO the root check means scissor rect will not // be used on render textures more info here: @@ -76,7 +76,7 @@ * @param {PIXI.DisplayObject} target - Display Object to pop the mask from * @param {PIXI.Sprite|PIXI.Graphics} maskData - The masking data. */ - popMask(target, maskData) + pop(target, maskData) { if (maskData.texture) { @@ -135,7 +135,7 @@ */ pushStencilMask(maskData) { - this.renderer.currentRenderer.stop(); + this.renderer.batch.flush(); this.renderer.stencil.pushStencil(maskData); } @@ -145,7 +145,7 @@ */ popStencilMask() { - this.renderer.currentRenderer.stop(); + // this.renderer.currentRenderer.stop(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..d27802b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -19,6 +19,9 @@ super(renderer); this.clearColor = renderer._backgroundColorRgba; + + // TODO moe this property somewhere else! + this.defaultMaskStack = []; } bind(renderTexture) @@ -32,6 +35,7 @@ { this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + this.renderer.stencil.setMaskStack(renderTexture.baseTexture.stencilMaskStack); } else { @@ -41,6 +45,7 @@ tempRect.height = this.renderer.height; // TODO store this.. this.renderer.projection.update(tempRect, tempRect, true); + this.renderer.stencil.setMaskStack(this.defaultMaskStack); } const glShader = this.renderer.shader.getGLShader() diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..b04d71b 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -21,7 +21,7 @@ * * @param {PIXI.Graphics[]} stencilMaskStack - The mask stack */ - setMaskStack(stencilMaskStack) + setMaskStack(stencilMaskStack) { this.stencilMaskStack = stencilMaskStack; @@ -44,9 +44,9 @@ */ pushStencil(graphics) { - this.renderer.setObjectRenderer(this.renderer.plugins.graphics); + this.renderer.batch.setObjectRenderer(this.renderer.plugins.graphics); - this.renderer._activeRenderTarget.attachStencilBuffer(); +// this.renderer._activeRenderTarget.attachStencilBuffer(); const gl = this.renderer.gl; const sms = this.stencilMaskStack; @@ -75,7 +75,7 @@ */ popStencil() { - this.renderer.setObjectRenderer(this.renderer.plugins.graphics); + this.renderer.batch.setObjectRenderer(this.renderer.plugins.graphics); const gl = this.renderer.gl; const sms = this.stencilMaskStack; diff --git a/src/core/textures/BaseRenderTexture.js b/src/core/textures/BaseRenderTexture.js index 87838f3..3e4e0cb 100644 --- a/src/core/textures/BaseRenderTexture.js +++ b/src/core/textures/BaseRenderTexture.js @@ -75,6 +75,13 @@ this.frameBuffer = new FrameBuffer(width, height) .addColorTexture(0, this); + + /** + * The data structure for the stencil masks + * + * @member {PIXI.Graphics[]} + */ + this.stencilMaskStack = []; } /**