{"version":3,"file":"SpineTexture.mjs","sources":["../src/SpineTexture.ts"],"sourcesContent":["/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Texture as PixiTexture } from 'pixi.js';\nimport { BlendMode, Texture, TextureFilter, TextureWrap } from '@esotericsoftware/spine-core';\n\nimport type { BLEND_MODES, SCALE_MODE, TextureSource, WRAP_MODE } from 'pixi.js';\n\nexport class SpineTexture extends Texture\n{\n    private static readonly textureMap: Map<TextureSource, SpineTexture> = new Map<TextureSource, SpineTexture>();\n\n    public static from(texture: TextureSource): SpineTexture\n    {\n        if (SpineTexture.textureMap.has(texture))\n        {\n            return SpineTexture.textureMap.get(texture) as SpineTexture;\n        }\n\n        return new SpineTexture(texture);\n    }\n\n    public readonly texture: PixiTexture;\n\n    private constructor(image: TextureSource)\n    {\n        // Todo: maybe add error handling if you feed a video texture to spine?\n        super(image.resource);\n        this.texture = PixiTexture.from(image);\n    }\n\n    public setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void\n    {\n        const style = this.texture.source.style;\n\n        style.minFilter = SpineTexture.toPixiTextureFilter(minFilter);\n        style.magFilter = SpineTexture.toPixiTextureFilter(magFilter);\n        this.texture.source.autoGenerateMipmaps = SpineTexture.toPixiMipMap(minFilter);\n        this.texture.source.updateMipmaps();\n    }\n\n    public setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void\n    {\n        const style = this.texture.source.style;\n\n        style.addressModeU = SpineTexture.toPixiTextureWrap(uWrap);\n        style.addressModeV = SpineTexture.toPixiTextureWrap(vWrap);\n    }\n\n    public dispose(): void\n    {\n        // I am not entirely sure about this...\n        this.texture.destroy();\n    }\n\n    private static toPixiMipMap(filter: TextureFilter): boolean\n    {\n        switch (filter)\n        {\n            case TextureFilter.Nearest:\n            case TextureFilter.Linear:\n                return false;\n\n            case TextureFilter.MipMapNearestLinear:\n            case TextureFilter.MipMapNearestNearest:\n            case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n            case TextureFilter.MipMapLinearNearest:\n                return true;\n\n            default:\n                throw new Error(`Unknown texture filter: ${String(filter)}`);\n        }\n    }\n\n    private static toPixiTextureFilter(filter: TextureFilter): SCALE_MODE\n    {\n        switch (filter)\n        {\n            case TextureFilter.Nearest:\n            case TextureFilter.MipMapNearestLinear:\n            case TextureFilter.MipMapNearestNearest:\n                return 'nearest';\n\n            case TextureFilter.Linear:\n            case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n            case TextureFilter.MipMapLinearNearest:\n                return 'linear';\n\n            default:\n                throw new Error(`Unknown texture filter: ${String(filter)}`);\n        }\n    }\n\n    private static toPixiTextureWrap(wrap: TextureWrap): WRAP_MODE\n    {\n        switch (wrap)\n        {\n            case TextureWrap.ClampToEdge:\n                return 'clamp-to-edge';\n\n            case TextureWrap.MirroredRepeat:\n                return 'mirror-repeat';\n\n            case TextureWrap.Repeat:\n                return 'repeat';\n\n            default:\n                throw new Error(`Unknown texture wrap: ${String(wrap)}`);\n        }\n    }\n\n    public static toPixiBlending(blend: BlendMode): BLEND_MODES\n    {\n        switch (blend)\n        {\n            case BlendMode.Normal:\n                return 'normal';\n\n            case BlendMode.Additive:\n                return 'add';\n\n            case BlendMode.Multiply:\n                return 'multiply';\n\n            case BlendMode.Screen:\n                return 'screen';\n\n            default:\n                throw new Error(`Unknown blendMode: ${String(blend)}`);\n        }\n    }\n}\n"],"names":["PixiTexture"],"mappings":"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"}