@esotericsoftware/spine-webgl 4.2.6 → 4.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,6 +37,7 @@ export declare class GLTexture extends Texture implements Disposable, Restorable
37
37
  constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps?: boolean);
38
38
  setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
39
39
  static validateMagFilter(magFilter: TextureFilter): TextureFilter.Nearest | TextureFilter.Linear;
40
+ static usesMipMaps(filter: TextureFilter): boolean;
40
41
  setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void;
41
42
  update(useMipMaps: boolean): void;
42
43
  restore(): void;
package/dist/GLTexture.js CHANGED
@@ -44,6 +44,9 @@ export class GLTexture extends Texture {
44
44
  this.bind();
45
45
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);
46
46
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter));
47
+ this.useMipMaps = GLTexture.usesMipMaps(minFilter);
48
+ if (this.useMipMaps)
49
+ gl.generateMipmap(gl.TEXTURE_2D);
47
50
  }
48
51
  static validateMagFilter(magFilter) {
49
52
  switch (magFilter) {
@@ -57,6 +60,18 @@ export class GLTexture extends Texture {
57
60
  return magFilter;
58
61
  }
59
62
  }
63
+ static usesMipMaps(filter) {
64
+ switch (filter) {
65
+ case TextureFilter.MipMap:
66
+ case TextureFilter.MipMapLinearLinear:
67
+ case TextureFilter.MipMapLinearNearest:
68
+ case TextureFilter.MipMapNearestLinear:
69
+ case TextureFilter.MipMapNearestNearest:
70
+ return true;
71
+ default:
72
+ return false;
73
+ }
74
+ }
60
75
  setWraps(uWrap, vWrap) {
61
76
  let gl = this.context.gl;
62
77
  this.bind();
@@ -100,4 +115,4 @@ export class GLTexture extends Texture {
100
115
  }
101
116
  }
102
117
  GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false;
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR0xUZXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0dMVGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLE9BQU8sRUFBMEIsYUFBYSxFQUFlLE1BQU0sOEJBQThCLENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXZELE1BQU0sT0FBTyxTQUFVLFNBQVEsT0FBTztJQVFyQyxZQUFhLE9BQTZELEVBQUUsS0FBcUMsRUFBRSxhQUFzQixLQUFLO1FBQzdJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQVBOLFlBQU8sR0FBd0IsSUFBSSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBTTFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxZQUFZLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBRSxTQUF3QixFQUFFLFNBQXdCO1FBQzdELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFB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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR0xUZXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0dMVGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLE9BQU8sRUFBMEIsYUFBYSxFQUFlLE1BQU0sOEJBQThCLENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXZELE1BQU0sT0FBTyxTQUFVLFNBQVEsT0FBTztJQVFyQyxZQUFhLE9BQTZELEVBQUUsS0FBcUMsRUFBRSxhQUFzQixLQUFLO1FBQzdJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQVBOLFlBQU8sR0FBd0IsSUFBSSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBTTFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxZQUFZLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBRSxTQUF3QixFQUFFLFNBQXdCO1FBQzdELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFB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
@@ -3916,6 +3916,18 @@ var spine = (() => {
3916
3916
  if (!this.region)
3917
3917
  throw new Error("Region not set.");
3918
3918
  let region = this.region;
3919
+ let uvs = this.uvs;
3920
+ if (region == null) {
3921
+ uvs[0] = 0;
3922
+ uvs[1] = 0;
3923
+ uvs[2] = 0;
3924
+ uvs[3] = 1;
3925
+ uvs[4] = 1;
3926
+ uvs[5] = 1;
3927
+ uvs[6] = 1;
3928
+ uvs[7] = 0;
3929
+ return;
3930
+ }
3919
3931
  let regionScaleX = this.width / this.region.originalWidth * this.scaleX;
3920
3932
  let regionScaleY = this.height / this.region.originalHeight * this.scaleY;
3921
3933
  let localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;
@@ -3943,16 +3955,15 @@ var spine = (() => {
3943
3955
  offset[5] = localY2Cos + localX2Sin;
3944
3956
  offset[6] = localX2Cos - localYSin;
3945
3957
  offset[7] = localYCos + localX2Sin;
3946
- let uvs = this.uvs;
3947
3958
  if (region.degrees == 90) {
3959
+ uvs[0] = region.u2;
3960
+ uvs[1] = region.v2;
3948
3961
  uvs[2] = region.u;
3949
3962
  uvs[3] = region.v2;
3950
3963
  uvs[4] = region.u;
3951
3964
  uvs[5] = region.v;
3952
3965
  uvs[6] = region.u2;
3953
3966
  uvs[7] = region.v;
3954
- uvs[0] = region.u2;
3955
- uvs[1] = region.v2;
3956
3967
  } else {
3957
3968
  uvs[0] = region.u;
3958
3969
  uvs[1] = region.v2;
@@ -4321,23 +4332,62 @@ var spine = (() => {
4321
4332
  }
4322
4333
  let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
4323
4334
  let pid = 1 / (pa * pd - pb * pc);
4335
+ let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
4324
4336
  let dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
4325
- this.ax = dx * pd * pid - dy * pb * pid;
4326
- this.ay = dy * pa * pid - dx * pc * pid;
4327
- let ia = pid * pd;
4328
- let id = pid * pa;
4329
- let ib = pid * pb;
4330
- let ic = pid * pc;
4331
- let ra = ia * this.a - ib * this.c;
4332
- let rb = ia * this.b - ib * this.d;
4333
- let rc = id * this.c - ic * this.a;
4334
- let rd = id * this.d - ic * this.b;
4337
+ this.ax = dx * ia - dy * ib;
4338
+ this.ay = dy * id - dx * ic;
4339
+ let ra, rb, rc, rd;
4340
+ if (this.data.transformMode == TransformMode.OnlyTranslation) {
4341
+ ra = this.a;
4342
+ rb = this.b;
4343
+ rc = this.c;
4344
+ rd = this.d;
4345
+ } else {
4346
+ switch (this.data.transformMode) {
4347
+ case TransformMode.NoRotationOrReflection: {
4348
+ let s2 = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
4349
+ let sa = pa / this.skeleton.scaleX;
4350
+ let sc = pc / this.skeleton.scaleY;
4351
+ pb = -sc * s2 * this.skeleton.scaleX;
4352
+ pd = sa * s2 * this.skeleton.scaleY;
4353
+ pid = 1 / (pa * pd - pb * pc);
4354
+ ia = pd * pid;
4355
+ ib = pb * pid;
4356
+ break;
4357
+ }
4358
+ case TransformMode.NoScale:
4359
+ case TransformMode.NoScaleOrReflection:
4360
+ let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);
4361
+ pa = (pa * cos + pb * sin) / this.skeleton.scaleX;
4362
+ pc = (pc * cos + pd * sin) / this.skeleton.scaleY;
4363
+ let s = Math.sqrt(pa * pa + pc * pc);
4364
+ if (s > 1e-5)
4365
+ s = 1 / s;
4366
+ pa *= s;
4367
+ pc *= s;
4368
+ s = Math.sqrt(pa * pa + pc * pc);
4369
+ if (this.data.transformMode == TransformMode.NoScale && pid < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))
4370
+ s = -s;
4371
+ let r = MathUtils.PI / 2 + Math.atan2(pc, pa);
4372
+ pb = Math.cos(r) * s;
4373
+ pd = Math.sin(r) * s;
4374
+ pid = 1 / (pa * pd - pb * pc);
4375
+ ia = pd * pid;
4376
+ ib = pb * pid;
4377
+ ic = pc * pid;
4378
+ id = pa * pid;
4379
+ }
4380
+ ra = ia * this.a - ib * this.c;
4381
+ rb = ia * this.b - ib * this.d;
4382
+ rc = id * this.c - ic * this.a;
4383
+ rd = id * this.d - ic * this.b;
4384
+ }
4335
4385
  this.ashearX = 0;
4336
4386
  this.ascaleX = Math.sqrt(ra * ra + rc * rc);
4337
4387
  if (this.ascaleX > 1e-4) {
4338
4388
  let det = ra * rd - rb * rc;
4339
4389
  this.ascaleY = det / this.ascaleX;
4340
- this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;
4390
+ this.ashearY = -Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;
4341
4391
  this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;
4342
4392
  } else {
4343
4393
  this.ascaleX = 0;
@@ -9319,6 +9369,9 @@ var spine = (() => {
9319
9369
  this.bind();
9320
9370
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);
9321
9371
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, _GLTexture.validateMagFilter(magFilter));
9372
+ this.useMipMaps = _GLTexture.usesMipMaps(minFilter);
9373
+ if (this.useMipMaps)
9374
+ gl.generateMipmap(gl.TEXTURE_2D);
9322
9375
  }
9323
9376
  static validateMagFilter(magFilter) {
9324
9377
  switch (magFilter) {
@@ -9332,6 +9385,18 @@ var spine = (() => {
9332
9385
  return magFilter;
9333
9386
  }
9334
9387
  }
9388
+ static usesMipMaps(filter) {
9389
+ switch (filter) {
9390
+ case TextureFilter.MipMap:
9391
+ case TextureFilter.MipMapLinearLinear:
9392
+ case TextureFilter.MipMapLinearNearest:
9393
+ case TextureFilter.MipMapNearestLinear:
9394
+ case TextureFilter.MipMapNearestNearest:
9395
+ return true;
9396
+ default:
9397
+ return false;
9398
+ }
9399
+ }
9335
9400
  setWraps(uWrap, vWrap) {
9336
9401
  let gl = this.context.gl;
9337
9402
  this.bind();