diff --git a/src/core/renderers/webgl/RenderTextureManager.js b/src/core/renderers/webgl/RenderTextureManager.js deleted file mode 100644 index e922209..0000000 --- a/src/core/renderers/webgl/RenderTextureManager.js +++ /dev/null @@ -1,113 +0,0 @@ -var GLTexture = require('pixi-gl-core').GLTexture, - utils = require('../../utils'), - RenderTarget = require('./utils/RenderTarget'); - -/** - * Helper class to create a webGL Texture - * - * @class - * @memberof PIXI - * @param gl {WebGLRenderingContext} - */ - -var RenderTextureManager = function(renderer) -{ - this.renderer = renderer - this.gl = renderer.gl; - - // track textures in the renderer so we can no longer listen to them on destruction. - this._managedTextures = []; -} - -/** - * Updates and/or Creates a WebGL texture for the renderer's context. - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to update - */ -RenderTextureManager.prototype.updateTexture = function(texture) -{ - texture = texture.baseTexture || texture; - - var renderTarget = texture._glRenderTargets[this.renderer.CONTEXT_UID]; - - if (!renderTarget) - { - - renderTarget = new RenderTarget(this.gl, texture.width, texture.height, texture.scaleMode, texture.resolution); - - texture._glTextures[this.renderer.CONTEXT_UID] = renderTarget.texture; - texture._glRenderTargets[this.renderer.CONTEXT_UID] = renderTarget; - - texture.on('update', this.updateTexture, this); - texture.on('dispose', this.destroyTexture, this); - - this._managedTextures.push(texture); - - - } - renderTarget.resize(texture.width, texture.height); - - return renderTarget; -} - -/** - * Deletes the texture from WebGL - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to destroy - */ -RenderTextureManager.prototype.destroyTexture = function(texture, _skipRemove) -{ - texture = texture.baseTexture || texture; - - var gl = this.gl; - if (texture._glRenderTargets[this.renderer.CONTEXT_UID]) - { - texture._glTextures[this.renderer.CONTEXT_UID] = null; - texture._glRenderTargets[this.renderer.CONTEXT_UID].destroy(); - - //.destroy(); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - - - delete texture._glTextures[this.renderer.CONTEXT_UID]; - - if (!_skipRemove) - { - var i = this._managedTextures.indexOf(texture); - if (i !== -1) { - utils.removeItems(this._managedTextures, i, 1); - } - } - } -} - -RenderTextureManager.prototype.removeAll = function() -{ - // empty all the old gl textures as they are useless now - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - if (texture._glTextures[this.renderer.CONTEXT_UID]) - { - delete texture._glTextures[this.renderer.CONTEXT_UID]; - } - } -} - -RenderTextureManager.prototype.destroy = function() -{ - // destroy managed textures - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - this.destroyTexture(texture, true); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - } - - this._managedTextures = null; -} - -module.exports = RenderTextureManager; - diff --git a/src/core/renderers/webgl/RenderTextureManager.js b/src/core/renderers/webgl/RenderTextureManager.js deleted file mode 100644 index e922209..0000000 --- a/src/core/renderers/webgl/RenderTextureManager.js +++ /dev/null @@ -1,113 +0,0 @@ -var GLTexture = require('pixi-gl-core').GLTexture, - utils = require('../../utils'), - RenderTarget = require('./utils/RenderTarget'); - -/** - * Helper class to create a webGL Texture - * - * @class - * @memberof PIXI - * @param gl {WebGLRenderingContext} - */ - -var RenderTextureManager = function(renderer) -{ - this.renderer = renderer - this.gl = renderer.gl; - - // track textures in the renderer so we can no longer listen to them on destruction. - this._managedTextures = []; -} - -/** - * Updates and/or Creates a WebGL texture for the renderer's context. - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to update - */ -RenderTextureManager.prototype.updateTexture = function(texture) -{ - texture = texture.baseTexture || texture; - - var renderTarget = texture._glRenderTargets[this.renderer.CONTEXT_UID]; - - if (!renderTarget) - { - - renderTarget = new RenderTarget(this.gl, texture.width, texture.height, texture.scaleMode, texture.resolution); - - texture._glTextures[this.renderer.CONTEXT_UID] = renderTarget.texture; - texture._glRenderTargets[this.renderer.CONTEXT_UID] = renderTarget; - - texture.on('update', this.updateTexture, this); - texture.on('dispose', this.destroyTexture, this); - - this._managedTextures.push(texture); - - - } - renderTarget.resize(texture.width, texture.height); - - return renderTarget; -} - -/** - * Deletes the texture from WebGL - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to destroy - */ -RenderTextureManager.prototype.destroyTexture = function(texture, _skipRemove) -{ - texture = texture.baseTexture || texture; - - var gl = this.gl; - if (texture._glRenderTargets[this.renderer.CONTEXT_UID]) - { - texture._glTextures[this.renderer.CONTEXT_UID] = null; - texture._glRenderTargets[this.renderer.CONTEXT_UID].destroy(); - - //.destroy(); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - - - delete texture._glTextures[this.renderer.CONTEXT_UID]; - - if (!_skipRemove) - { - var i = this._managedTextures.indexOf(texture); - if (i !== -1) { - utils.removeItems(this._managedTextures, i, 1); - } - } - } -} - -RenderTextureManager.prototype.removeAll = function() -{ - // empty all the old gl textures as they are useless now - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - if (texture._glTextures[this.renderer.CONTEXT_UID]) - { - delete texture._glTextures[this.renderer.CONTEXT_UID]; - } - } -} - -RenderTextureManager.prototype.destroy = function() -{ - // destroy managed textures - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - this.destroyTexture(texture, true); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - } - - this._managedTextures = null; -} - -module.exports = RenderTextureManager; - diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index eb78645..65d462a 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -1,5 +1,6 @@ var GLTexture = require('pixi-gl-core').GLTexture, CONST = require('../../const'), + RenderTarget = require('./utils/RenderTarget'), utils = require('../../utils'); /** @@ -17,7 +18,6 @@ // track textures in the renderer so we can no longer listen to them on destruction. this._managedTextures = []; - } TextureManager.prototype.bindTexture = function(texture) @@ -40,18 +40,30 @@ { texture = texture.baseTexture || texture; + var isRenderTexture = !!texture._glRenderTargets; + if (!texture.hasLoaded) { return; } - var glTexture = texture._glTextures[this.renderer.CONTEXT_UID]; if (!glTexture) { - glTexture = new GLTexture(this.gl); - glTexture.premultiplyAlpha = true; + if(isRenderTexture) + { + renderTarget = new RenderTarget(this.gl, texture.width, texture.height, texture.scaleMode, texture.resolution); + texture._glRenderTargets[this.renderer.CONTEXT_UID] = renderTarget; + glTexture = renderTarget.texture; + } + else + { + glTexture = new GLTexture(this.gl); + glTexture.premultiplyAlpha = true; + glTexture.upload(texture.source); + } + texture._glTextures[this.renderer.CONTEXT_UID] = glTexture; texture.on('update', this.updateTexture, this); @@ -72,9 +84,10 @@ } } - glTexture.upload(texture.source); - - + if(isRenderTexture) + { + renderTarget.resize(texture.width, texture.height); + } return glTexture; } diff --git a/src/core/renderers/webgl/RenderTextureManager.js b/src/core/renderers/webgl/RenderTextureManager.js deleted file mode 100644 index e922209..0000000 --- a/src/core/renderers/webgl/RenderTextureManager.js +++ /dev/null @@ -1,113 +0,0 @@ -var GLTexture = require('pixi-gl-core').GLTexture, - utils = require('../../utils'), - RenderTarget = require('./utils/RenderTarget'); - -/** - * Helper class to create a webGL Texture - * - * @class - * @memberof PIXI - * @param gl {WebGLRenderingContext} - */ - -var RenderTextureManager = function(renderer) -{ - this.renderer = renderer - this.gl = renderer.gl; - - // track textures in the renderer so we can no longer listen to them on destruction. - this._managedTextures = []; -} - -/** - * Updates and/or Creates a WebGL texture for the renderer's context. - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to update - */ -RenderTextureManager.prototype.updateTexture = function(texture) -{ - texture = texture.baseTexture || texture; - - var renderTarget = texture._glRenderTargets[this.renderer.CONTEXT_UID]; - - if (!renderTarget) - { - - renderTarget = new RenderTarget(this.gl, texture.width, texture.height, texture.scaleMode, texture.resolution); - - texture._glTextures[this.renderer.CONTEXT_UID] = renderTarget.texture; - texture._glRenderTargets[this.renderer.CONTEXT_UID] = renderTarget; - - texture.on('update', this.updateTexture, this); - texture.on('dispose', this.destroyTexture, this); - - this._managedTextures.push(texture); - - - } - renderTarget.resize(texture.width, texture.height); - - return renderTarget; -} - -/** - * Deletes the texture from WebGL - * - * @param texture {PIXI.BaseTexture|PIXI.Texture} the texture to destroy - */ -RenderTextureManager.prototype.destroyTexture = function(texture, _skipRemove) -{ - texture = texture.baseTexture || texture; - - var gl = this.gl; - if (texture._glRenderTargets[this.renderer.CONTEXT_UID]) - { - texture._glTextures[this.renderer.CONTEXT_UID] = null; - texture._glRenderTargets[this.renderer.CONTEXT_UID].destroy(); - - //.destroy(); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - - - delete texture._glTextures[this.renderer.CONTEXT_UID]; - - if (!_skipRemove) - { - var i = this._managedTextures.indexOf(texture); - if (i !== -1) { - utils.removeItems(this._managedTextures, i, 1); - } - } - } -} - -RenderTextureManager.prototype.removeAll = function() -{ - // empty all the old gl textures as they are useless now - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - if (texture._glTextures[this.renderer.CONTEXT_UID]) - { - delete texture._glTextures[this.renderer.CONTEXT_UID]; - } - } -} - -RenderTextureManager.prototype.destroy = function() -{ - // destroy managed textures - for (var i = 0; i < this._managedTextures.length; ++i) - { - var texture = this._managedTextures[i]; - this.destroyTexture(texture, true); - texture.off('update', this.updateTexture, this); - texture.off('dispose', this.destroyTexture, this); - } - - this._managedTextures = null; -} - -module.exports = RenderTextureManager; - diff --git a/src/core/renderers/webgl/TextureManager.js b/src/core/renderers/webgl/TextureManager.js index eb78645..65d462a 100644 --- a/src/core/renderers/webgl/TextureManager.js +++ b/src/core/renderers/webgl/TextureManager.js @@ -1,5 +1,6 @@ var GLTexture = require('pixi-gl-core').GLTexture, CONST = require('../../const'), + RenderTarget = require('./utils/RenderTarget'), utils = require('../../utils'); /** @@ -17,7 +18,6 @@ // track textures in the renderer so we can no longer listen to them on destruction. this._managedTextures = []; - } TextureManager.prototype.bindTexture = function(texture) @@ -40,18 +40,30 @@ { texture = texture.baseTexture || texture; + var isRenderTexture = !!texture._glRenderTargets; + if (!texture.hasLoaded) { return; } - var glTexture = texture._glTextures[this.renderer.CONTEXT_UID]; if (!glTexture) { - glTexture = new GLTexture(this.gl); - glTexture.premultiplyAlpha = true; + if(isRenderTexture) + { + renderTarget = new RenderTarget(this.gl, texture.width, texture.height, texture.scaleMode, texture.resolution); + texture._glRenderTargets[this.renderer.CONTEXT_UID] = renderTarget; + glTexture = renderTarget.texture; + } + else + { + glTexture = new GLTexture(this.gl); + glTexture.premultiplyAlpha = true; + glTexture.upload(texture.source); + } + texture._glTextures[this.renderer.CONTEXT_UID] = glTexture; texture.on('update', this.updateTexture, this); @@ -72,9 +84,10 @@ } } - glTexture.upload(texture.source); - - + if(isRenderTexture) + { + renderTarget.resize(texture.width, texture.height); + } return glTexture; } diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js index e58c07f..70ebb57 100644 --- a/src/core/renderers/webgl/WebGLRenderer.js +++ b/src/core/renderers/webgl/WebGLRenderer.js @@ -5,7 +5,6 @@ RenderTarget = require('./utils/RenderTarget'), ObjectRenderer = require('./utils/ObjectRenderer'), TextureManager = require('./TextureManager'), - RenderTextureManager = require('./RenderTextureManager'), WebGLState = require('./WebGLState'), createContext = require('pixi-gl-core').createContext, mapWebGLDrawModesToPixi = require('./utils/mapWebGLDrawModesToPixi'), @@ -151,7 +150,6 @@ // create a texture manager... this.textureManager = new TextureManager(this); - this.renderTextureManager = new RenderTextureManager(this); this.state.resetToDefault(); @@ -276,11 +274,10 @@ if(!baseTexture._glRenderTargets[this.CONTEXT_UID]) { - this.renderTextureManager.updateTexture(baseTexture); + this.textureManager.updateTexture(baseTexture); } renderTarget = baseTexture._glRenderTargets[this.CONTEXT_UID]; - renderTarget.setFrame(renderTexture.frame); } else