From 702bc9b69f92d224ec9377596def8f6434383d0b Mon Sep 17 00:00:00 2001 From: Felipe Alfonso Date: Mon, 19 Sep 2016 20:54:06 -0300 Subject: [PATCH] fixed issues with conflict resolving --- src/pixi/renderers/webgl/WebGLRenderer.js | 75 +++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/pixi/renderers/webgl/WebGLRenderer.js b/src/pixi/renderers/webgl/WebGLRenderer.js index 744c09b65..1e468c34e 100644 --- a/src/pixi/renderers/webgl/WebGLRenderer.js +++ b/src/pixi/renderers/webgl/WebGLRenderer.js @@ -28,6 +28,8 @@ PIXI.WebGLRenderer = function(game) { PIXI.defaultRenderer = this; } + this.extensions = {}; + /** * @property type * @type Number @@ -247,6 +249,17 @@ PIXI.WebGLRenderer.prototype.initContext = function() // now resize and we are good to go! this.resize(this.width, this.height); + + // Load WebGL extension + this.extensions.compression = {}; + + etc1 = gl.getExtension('WEBGL_compressed_texture_etc1') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_etc1'); + pvrtc = gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'); + s3tc = gl.getExtension('WEBGL_compressed_texture_s3tc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'); + + if (etc1) this.extensions.compression.ETC1 = etc1; + if (pvrtc) this.extensions.compression.PVRTC = pvrtc; + if (s3tc) this.extensions.compression.S3TC = s3tc; }; /** @@ -426,6 +439,65 @@ PIXI.WebGLRenderer.prototype.resize = function(width, height) this.projection.y = -this.height / 2 / this.resolution; }; +/** + * Updates and creates a WebGL compressed texture for the renderers context. + * + * @method updateCompressedTexture + * @param texture {Texture} the texture to update + * @return {boolean} True if the texture was successfully bound, otherwise false. + */ +PIXI.WebGLRenderer.prototype.updateCompressedTexture = function (texture) { + if (!texture.hasLoaded) + { + return false; + } + var gl = this.gl; + var textureMetaData = texture.source; + + if (!texture._glTextures[gl.id]) + { + texture._glTextures[gl.id] = gl.createTexture(); + } + gl.activeTexture(gl.TEXTURE0 + texture.textureIndex); + + gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]); + + gl.compressedTexImage2D( + gl.TEXTURE_2D, + 0, + textureMetaData.glExtensionFormat, + textureMetaData.width, + textureMetaData.height, + 0, + textureMetaData.textureData + ); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + + if (texture.mipmap && PIXI.isPowerOfTwo(texture.width, texture.height)) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR_MIPMAP_LINEAR : gl.NEAREST_MIPMAP_NEAREST); + gl.generateMipmap(gl.TEXTURE_2D); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, texture.scaleMode === PIXI.scaleModes.LINEAR ? gl.LINEAR : gl.NEAREST); + } + + if (!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + texture._dirty[gl.id] = false; + return true; +}; + /** * Updates and Creates a WebGL texture for the renderers context. * @@ -439,6 +511,9 @@ PIXI.WebGLRenderer.prototype.updateTexture = function(texture) { return false; } + if (texture.source.compressionAlgorithm) { + return this.updateCompressedTexture(texture); + } var gl = this.gl;