diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 71a992b..aeccf39 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -694,4 +694,52 @@ return baseTexture; } + + /** + * Helper function that creates a base texture based on the source you provide. + * The source can be - image url, image element, canvas element. + * + * @static + * @param {string|HTMLImageElement|HTMLCanvasElement} source - The source to create base texture from. + * @param {number} [scaleMode=PIXI.settings.SCALE_MODE] - See {@link PIXI.SCALE_MODES} for possible values + * @param {number} [sourceScale=(auto)] - Scale for the original image, used with Svg images. + * @return {PIXI.BaseTexture} The new base texture. + */ + static from(source, scaleMode, sourceScale) + { + if (typeof source === 'string') + { + return BaseTexture.fromImage(source, undefined, scaleMode, sourceScale); + } + else if (source instanceof HTMLImageElement) + { + const imageUrl = source.src; + let baseTexture = BaseTextureCache[imageUrl]; + + if (!baseTexture) + { + baseTexture = new BaseTexture(source, scaleMode); + baseTexture.imageUrl = imageUrl; + + if (sourceScale) + { + baseTexture.sourceScale = sourceScale; + } + + // if there is an @2x at the end of the url we are going to assume its a highres image + baseTexture.resolution = getResolutionOfUrl(imageUrl); + + BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; + } + else if (source instanceof HTMLCanvasElement) + { + return BaseTexture.fromCanvas(source, scaleMode); + } + + // lets assume its a base texture! + return source; + } } diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 71a992b..aeccf39 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -694,4 +694,52 @@ return baseTexture; } + + /** + * Helper function that creates a base texture based on the source you provide. + * The source can be - image url, image element, canvas element. + * + * @static + * @param {string|HTMLImageElement|HTMLCanvasElement} source - The source to create base texture from. + * @param {number} [scaleMode=PIXI.settings.SCALE_MODE] - See {@link PIXI.SCALE_MODES} for possible values + * @param {number} [sourceScale=(auto)] - Scale for the original image, used with Svg images. + * @return {PIXI.BaseTexture} The new base texture. + */ + static from(source, scaleMode, sourceScale) + { + if (typeof source === 'string') + { + return BaseTexture.fromImage(source, undefined, scaleMode, sourceScale); + } + else if (source instanceof HTMLImageElement) + { + const imageUrl = source.src; + let baseTexture = BaseTextureCache[imageUrl]; + + if (!baseTexture) + { + baseTexture = new BaseTexture(source, scaleMode); + baseTexture.imageUrl = imageUrl; + + if (sourceScale) + { + baseTexture.sourceScale = sourceScale; + } + + // if there is an @2x at the end of the url we are going to assume its a highres image + baseTexture.resolution = getResolutionOfUrl(imageUrl); + + BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; + } + else if (source instanceof HTMLCanvasElement) + { + return BaseTexture.fromCanvas(source, scaleMode); + } + + // lets assume its a base texture! + return source; + } } diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index d510075..5a12dd4 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -393,7 +393,7 @@ } else if (source instanceof HTMLImageElement) { - return new Texture(new BaseTexture(source)); + return new Texture(BaseTexture.from(source)); } else if (source instanceof HTMLCanvasElement) {