UNPKG

@esotericsoftware/spine-pixi-v8

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