diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/textures/resources/BufferResource.js b/src/core/textures/resources/BufferResource.js index b872455..8300d13 100644 --- a/src/core/textures/resources/BufferResource.js +++ b/src/core/textures/resources/BufferResource.js @@ -6,6 +6,8 @@ { super(source); + this.uploadable = false; + this.load = new Promise((resolve, reject) => { resolve(this); diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/textures/resources/BufferResource.js b/src/core/textures/resources/BufferResource.js index b872455..8300d13 100644 --- a/src/core/textures/resources/BufferResource.js +++ b/src/core/textures/resources/BufferResource.js @@ -6,6 +6,8 @@ { super(source); + this.uploadable = false; + this.load = new Promise((resolve, reject) => { resolve(this); diff --git a/src/core/textures/resources/ImageResource.js b/src/core/textures/resources/ImageResource.js index 17a8635..58856c1 100644 --- a/src/core/textures/resources/ImageResource.js +++ b/src/core/textures/resources/ImageResource.js @@ -21,6 +21,7 @@ } + if(source.complete && source.src) { this.loaded = true; @@ -28,12 +29,13 @@ source.onerror = null; this.width = source.width; this.height = source.height; + console.log("image") resolve(this); } - source.onerror = () => { - reject('unable to load "' + source.src + '" resource cannot be found') - } + // source.onerror = () => { + // reject('unable to load "' + source.src + '" resource cannot be found') + //} }) } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/textures/resources/BufferResource.js b/src/core/textures/resources/BufferResource.js index b872455..8300d13 100644 --- a/src/core/textures/resources/BufferResource.js +++ b/src/core/textures/resources/BufferResource.js @@ -6,6 +6,8 @@ { super(source); + this.uploadable = false; + this.load = new Promise((resolve, reject) => { resolve(this); diff --git a/src/core/textures/resources/ImageResource.js b/src/core/textures/resources/ImageResource.js index 17a8635..58856c1 100644 --- a/src/core/textures/resources/ImageResource.js +++ b/src/core/textures/resources/ImageResource.js @@ -21,6 +21,7 @@ } + if(source.complete && source.src) { this.loaded = true; @@ -28,12 +29,13 @@ source.onerror = null; this.width = source.width; this.height = source.height; + console.log("image") resolve(this); } - source.onerror = () => { - reject('unable to load "' + source.src + '" resource cannot be found') - } + // source.onerror = () => { + // reject('unable to load "' + source.src + '" resource cannot be found') + //} }) } diff --git a/src/core/textures/resources/TextureResource.js b/src/core/textures/resources/TextureResource.js index 31bf7f9..6f73793 100644 --- a/src/core/textures/resources/TextureResource.js +++ b/src/core/textures/resources/TextureResource.js @@ -18,4 +18,9 @@ // create a prommise.. this.load = null; } + + destroy() + { + console.warn(this, ' has no destroy function') + } } \ No newline at end of file diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/textures/resources/BufferResource.js b/src/core/textures/resources/BufferResource.js index b872455..8300d13 100644 --- a/src/core/textures/resources/BufferResource.js +++ b/src/core/textures/resources/BufferResource.js @@ -6,6 +6,8 @@ { super(source); + this.uploadable = false; + this.load = new Promise((resolve, reject) => { resolve(this); diff --git a/src/core/textures/resources/ImageResource.js b/src/core/textures/resources/ImageResource.js index 17a8635..58856c1 100644 --- a/src/core/textures/resources/ImageResource.js +++ b/src/core/textures/resources/ImageResource.js @@ -21,6 +21,7 @@ } + if(source.complete && source.src) { this.loaded = true; @@ -28,12 +29,13 @@ source.onerror = null; this.width = source.width; this.height = source.height; + console.log("image") resolve(this); } - source.onerror = () => { - reject('unable to load "' + source.src + '" resource cannot be found') - } + // source.onerror = () => { + // reject('unable to load "' + source.src + '" resource cannot be found') + //} }) } diff --git a/src/core/textures/resources/TextureResource.js b/src/core/textures/resources/TextureResource.js index 31bf7f9..6f73793 100644 --- a/src/core/textures/resources/TextureResource.js +++ b/src/core/textures/resources/TextureResource.js @@ -18,4 +18,9 @@ // create a prommise.. this.load = null; } + + destroy() + { + console.warn(this, ' has no destroy function') + } } \ No newline at end of file diff --git a/src/mesh/RawMesh.js b/src/mesh/RawMesh.js index 2f68e6b..fe14e65 100644 --- a/src/mesh/RawMesh.js +++ b/src/mesh/RawMesh.js @@ -92,7 +92,7 @@ */ _renderWebGL(renderer) { - renderer.setObjectRenderer(renderer.plugins[this.pluginName]); + renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]); renderer.plugins[this.pluginName].render(this); } diff --git a/src/core/display/Container.js b/src/core/display/Container.js index 8abd8be..0021c76 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; @@ -467,7 +467,7 @@ this.children[i].renderWebGL(renderer); } - renderer.flush(); + renderer.batch.flush(); if (mask) { diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index 712e179..22f78e0 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -100,7 +100,7 @@ this.globalUniforms = new UniformGroup({ projectionMatrix:new Matrix() - }, true) + }, false) this.addSystem(MaskSystem) .addSystem(ContextSystem) diff --git a/src/core/renderers/webgl/systems/MaskSystem.js b/src/core/renderers/webgl/systems/MaskSystem.js index 1a55dad..d83ddd9 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; @@ -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.batch.flush(); this.renderer.stencil.popStencil(); } diff --git a/src/core/renderers/webgl/systems/NewTextureSystem.js b/src/core/renderers/webgl/systems/NewTextureSystem.js index d654e09..bf113ce 100644 --- a/src/core/renderers/webgl/systems/NewTextureSystem.js +++ b/src/core/renderers/webgl/systems/NewTextureSystem.js @@ -241,8 +241,6 @@ { texture = texture.baseTexture || texture; - console.log(" >>>>> DISPOSE >>>>> "); - if (texture._glTextures[this.renderer.CONTEXT_UID]) { this.unbind(texture); diff --git a/src/core/renderers/webgl/systems/RenderTextureSystem.js b/src/core/renderers/webgl/systems/RenderTextureSystem.js index d4a7d70..a670a5b 100644 --- a/src/core/renderers/webgl/systems/RenderTextureSystem.js +++ b/src/core/renderers/webgl/systems/RenderTextureSystem.js @@ -25,25 +25,29 @@ { // TODO - do we want this?? if(this.renderTexture === renderTexture)return; - this.renderTexture = renderTexture; + const renderer = this.renderer; + if(renderTexture) { - this.renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); - this.renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + renderer.framebuffer.bind(renderTexture.baseTexture.frameBuffer); + renderer.projection.update(renderTexture.frame, renderTexture.frame, false); + + renderer.stencil.stencilMaskStack = renderTexture.stencilMaskStack; } else { - this.renderer.framebuffer.bind(null); + renderer.framebuffer.bind(null); - tempRect.width = this.renderer.width; - tempRect.height = this.renderer.height; + tempRect.width = renderer.width; + tempRect.height = renderer.height; // TODO store this.. - this.renderer.projection.update(tempRect, tempRect, true); + renderer.projection.update(tempRect, tempRect, true); + renderer.stencil.stencilMaskStack = renderer.stencil.defaultStencilStack; } - const glShader = this.renderer.shader.getGLShader() + const glShader = renderer.shader.getGLShader() if (glShader) { diff --git a/src/core/renderers/webgl/systems/StencilSystem.js b/src/core/renderers/webgl/systems/StencilSystem.js index 3ecd92d..ac5ed0f 100644 --- a/src/core/renderers/webgl/systems/StencilSystem.js +++ b/src/core/renderers/webgl/systems/StencilSystem.js @@ -14,6 +14,7 @@ { super(renderer); this.stencilMaskStack = null; + this.defaultStencilStack = []; } /** @@ -44,9 +45,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 +76,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/BaseTexture.js b/src/core/textures/BaseTexture.js index 64945b6..2d62c23 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -120,32 +120,23 @@ { // TODO currently a resource can only be set once.. + if(this.resource) + { + this.resource.resourceUpdated.remove(this); + } + + this.resource = resource; - this.resource.load - .then((resource) => { + resource.resourceUpdated.add(this); //calls resourceUpaded - if(this.resource === resource) - { - if(resource.width !== -1 && resource.hight !== -1) - { - this.width = resource.width / this.resolution; - this.height = resource.height / this.resolution; - } + if(resource.loaded) + { + this.resourceLoaded(resource) + } - this.validate(); - - if(this.valid) - { - this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); - - // we have not swapped half way! - this.dirtyId++; - this.emit('loaded', this); - } - } - - }) + resource.load + .then(this.resourceLoaded.bind(this)) .catch((reason)=>{ // failed to load - maybe resource was destroyed before it loaded. @@ -153,7 +144,34 @@ }) - this.resource.resourceUpdated.add(this); //calls resourceUpaded + } + + resourceLoaded(resource) + { + console.log(this) + console.log("****** LOADED...") + if(resource === resource) + { + if(resource.width !== -1 && resource.hight !== -1) + { + this.width = resource.width / this.resolution; + this.height = resource.height / this.resolution; + } + + console.log(this.width, this.height) + this.validate(); + + if(this.valid) + { + this.isPowerOfTwo = bitTwiddle.isPow2(this.realWidth) && bitTwiddle.isPow2(this.realHeight); + + // we have not swapped half way! + this.dirtyId++; + + this.emit('loaded', this); + } + } + } resourceUpdated() @@ -269,7 +287,7 @@ if (!baseTexture) { baseTexture = new BaseTexture(source); - baseTexture.cacheId + baseTexture.cacheId = cacheId; BaseTextureCache[cacheId] = baseTexture; } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index 1d30d8f..fcea0d0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -171,12 +171,12 @@ } /** - * Called when the base texture is loaded + * Called when the base texture is updated * * @private * @param {PIXI.BaseTexture} baseTexture - The base texture. */ - onBaseTextureLoaded(baseTexture) + onBaseTextureUpdated(baseTexture) { this._updateID++; @@ -188,26 +188,10 @@ else { this.frame = this._frame; + // TODO maybe watch out for the no frame option + // updating the texture will should update the frame if it was set to no frame.. } - this.baseTexture.on('update', this.onBaseTextureUpdated, this); - this.emit('update', this); - } - - /** - * Called when the base texture is updated - * - * @private - * @param {PIXI.BaseTexture} baseTexture - The base texture. - */ - onBaseTextureUpdated(baseTexture) - { - - this._updateID++; - - this._frame.width = baseTexture.width; - this._frame.height = baseTexture.height; - this.emit('update', this); } @@ -233,7 +217,6 @@ } this.baseTexture.off('update', this.onBaseTextureUpdated, this); - this.baseTexture.off('loaded', this.onBaseTextureLoaded, this); this.baseTexture = null; } @@ -308,9 +291,14 @@ if (!texture) { texture = new Texture(new BaseTexture(source)); + texture.baseTexture.cacheId = cacheId; TextureCache[cacheId] = texture; + BaseTextureCache[cacheId] = texture.baseTexture; } - + else + { + console.log(texture.baseTexture.width) + } // lets assume its a base texture! return texture; } @@ -327,13 +315,15 @@ */ static fromLoader(source, imageUrl, name) { + console.log('added from loader...') const resource = new ImageResource(source);//.from(imageUrl, crossorigin);// document.createElement('img'); + console.log('base resource ' + resource.width); const baseTexture = new BaseTexture(resource, settings.SCALE_MODE, getResolutionOfUrl(imageUrl)); - console.log(baseTexture) + console.log('base width ' + baseTexture.width); const texture = new Texture(baseTexture); // No name, use imageUrl instead diff --git a/src/core/textures/resources/BufferResource.js b/src/core/textures/resources/BufferResource.js index b872455..8300d13 100644 --- a/src/core/textures/resources/BufferResource.js +++ b/src/core/textures/resources/BufferResource.js @@ -6,6 +6,8 @@ { super(source); + this.uploadable = false; + this.load = new Promise((resolve, reject) => { resolve(this); diff --git a/src/core/textures/resources/ImageResource.js b/src/core/textures/resources/ImageResource.js index 17a8635..58856c1 100644 --- a/src/core/textures/resources/ImageResource.js +++ b/src/core/textures/resources/ImageResource.js @@ -21,6 +21,7 @@ } + if(source.complete && source.src) { this.loaded = true; @@ -28,12 +29,13 @@ source.onerror = null; this.width = source.width; this.height = source.height; + console.log("image") resolve(this); } - source.onerror = () => { - reject('unable to load "' + source.src + '" resource cannot be found') - } + // source.onerror = () => { + // reject('unable to load "' + source.src + '" resource cannot be found') + //} }) } diff --git a/src/core/textures/resources/TextureResource.js b/src/core/textures/resources/TextureResource.js index 31bf7f9..6f73793 100644 --- a/src/core/textures/resources/TextureResource.js +++ b/src/core/textures/resources/TextureResource.js @@ -18,4 +18,9 @@ // create a prommise.. this.load = null; } + + destroy() + { + console.warn(this, ' has no destroy function') + } } \ No newline at end of file diff --git a/src/mesh/RawMesh.js b/src/mesh/RawMesh.js index 2f68e6b..fe14e65 100644 --- a/src/mesh/RawMesh.js +++ b/src/mesh/RawMesh.js @@ -92,7 +92,7 @@ */ _renderWebGL(renderer) { - renderer.setObjectRenderer(renderer.plugins[this.pluginName]); + renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]); renderer.plugins[this.pluginName].render(this); } diff --git a/src/mesh/webgl/MeshRenderer.js b/src/mesh/webgl/MeshRenderer.js index 9af0f53..f741797 100644 --- a/src/mesh/webgl/MeshRenderer.js +++ b/src/mesh/webgl/MeshRenderer.js @@ -30,7 +30,7 @@ * * @private */ - onContextChange() + contextChange() { this.gl = this.renderer.gl; this.CONTEXT_UID = this.renderer.CONTEXT_UID; @@ -47,14 +47,14 @@ const glShader = this.renderer.shader.bind(mesh.shader, true); // set the shader props.. - if (glShader.uniformData.translationMatrix) - { + //if (glShader.uniformData.translationMatrix) + //{ // the transform! - glShader.uniforms.translationMatrix = mesh.transform.worldTransform.toArray(true); - } + // glShader.uniforms.translationMatrix = mesh.transform.worldTransform.toArray(true); + //} // set unifomrs.. - this.renderer.shaderManager.syncUniformGroup(mesh.shader.uniformGroup); + this.renderer.shader.syncUniformGroup(mesh.shader.uniformGroup); // sync uniforms.. this.renderer.state.setState(mesh.state);