modern-canvas 0.14.4 → 0.14.5

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.
@@ -8,8 +8,10 @@ export declare class GlScissorSystem extends GlSystem {
8
8
  refCount: number;
9
9
  rect?: RectangleLike;
10
10
  }>;
11
- onRenderTargetChange(renderTarget: RenderTargetLike | null): void;
11
+ protected _setup(): void;
12
+ protected _updateRenderTarget: (renderTarget: RenderTargetLike | null) => void;
12
13
  push(rect: RectangleLike): void;
13
14
  pop(): void;
14
15
  bind(rect?: RectangleLike | null): void;
16
+ destroy(): void;
15
17
  }
@@ -48,8 +48,10 @@ export declare class GlStencilSystem extends GlSystem {
48
48
  'greater': number;
49
49
  'greater-equal': number;
50
50
  };
51
- onUpdateContext(gl: GlRenderingContext): void;
51
+ protected _updateContext(gl: GlRenderingContext): void;
52
+ protected _setup(): void;
52
53
  reset(): void;
53
- onRenderTargetChange(renderTarget: RenderTargetLike | null): void;
54
+ protected _updateRenderTarget: (renderTarget: RenderTargetLike | null) => void;
54
55
  bind(stencilMode: StencilMode, refCount: number): void;
56
+ destroy(): void;
55
57
  }
@@ -1,9 +1,20 @@
1
1
  import type { RectangleLike } from '../../../math';
2
2
  import type { RenderTargetLike, TextureLike } from '../../shared';
3
3
  import type { GlRenderer } from '../GlRenderer';
4
+ import type { GlSystemEvents } from '../system';
5
+ import type { GlRenderingContext } from '../types';
4
6
  import { Projection2D } from '../../../math';
5
7
  import { GlSystem } from '../system';
6
8
  import { GlRenderTarget } from './GlRenderTarget';
9
+ export interface GlRenderTargetSystemEvents extends GlSystemEvents {
10
+ updateRenderTarget: [renderTarget: RenderTargetLike | null];
11
+ }
12
+ export interface GlRenderTargetSystem {
13
+ on: <K extends keyof GlRenderTargetSystemEvents & string>(event: K, listener: (...args: GlRenderTargetSystemEvents[K]) => void) => this;
14
+ once: <K extends keyof GlRenderTargetSystemEvents & string>(event: K, listener: (...args: GlRenderTargetSystemEvents[K]) => void) => this;
15
+ off: <K extends keyof GlRenderTargetSystemEvents & string>(event: K, listener: (...args: GlRenderTargetSystemEvents[K]) => void) => this;
16
+ emit: <K extends keyof GlRenderTargetSystemEvents & string>(event: K, ...args: GlRenderTargetSystemEvents[K]) => this;
17
+ }
7
18
  export declare class GlRenderTargetSystem extends GlSystem {
8
19
  install(renderer: GlRenderer): void;
9
20
  readonly renderTargets: Map<number, RenderTargetLike>;
@@ -13,7 +24,7 @@ export declare class GlRenderTargetSystem extends GlSystem {
13
24
  protected _hasMRT: boolean;
14
25
  protected _writeDepthTexture: boolean;
15
26
  projectionMatrix: Projection2D;
16
- onUpdateContext(): void;
27
+ protected _updateContext(gl: GlRenderingContext): void;
17
28
  bind(renderTarget: RenderTargetLike | null, frame?: RectangleLike): void;
18
29
  unbind(): void;
19
30
  getGlRenderTarget(renderTarget: RenderTargetLike): GlRenderTarget;
@@ -31,7 +31,7 @@ export declare class GlStateSystem extends GlSystem {
31
31
  boundBlendMode?: string;
32
32
  blendModes: Record<GlBlendMode, any>;
33
33
  defaultState: GlState;
34
- onUpdateContext(gl: GlRenderingContext): void;
34
+ protected _updateContext(gl: GlRenderingContext): void;
35
35
  toggle(boundPoint: number, enable: boolean): void;
36
36
  setBlend(value: boolean): void;
37
37
  setOffsets(value: boolean): void;
@@ -1,12 +1,24 @@
1
+ import type { ObservableEvents } from 'modern-idoc';
1
2
  import type { GlRenderer } from '../GlRenderer';
2
3
  import type { GlRenderingContext } from '../types';
3
- export declare abstract class GlSystem {
4
+ import { Observable } from 'modern-idoc';
5
+ export interface GlSystemEvents extends ObservableEvents {
6
+ updateContext: [gl: GlRenderingContext];
7
+ setup: [];
8
+ }
9
+ export interface GlSystem {
10
+ on: <K extends keyof GlSystemEvents & string>(event: K, listener: (...args: GlSystemEvents[K]) => void) => this;
11
+ once: <K extends keyof GlSystemEvents & string>(event: K, listener: (...args: GlSystemEvents[K]) => void) => this;
12
+ off: <K extends keyof GlSystemEvents & string>(event: K, listener: (...args: GlSystemEvents[K]) => void) => this;
13
+ emit: <K extends keyof GlSystemEvents & string>(event: K, ...args: GlSystemEvents[K]) => this;
14
+ }
15
+ export declare abstract class GlSystem extends Observable {
4
16
  protected _renderer: GlRenderer;
5
17
  protected get _gl(): GlRenderingContext;
6
- get gl(): GlRenderingContext;
18
+ constructor();
7
19
  install(renderer: GlRenderer): void;
8
- onUpdateContext(gl: GlRenderingContext): void;
20
+ protected _updateContext(gl: GlRenderingContext): void;
21
+ protected _setup(): void;
9
22
  flush(): void;
10
23
  reset(): void;
11
- destroy(): void;
12
24
  }
@@ -17,7 +17,7 @@ export declare class GlTextureSystem extends GlSystem {
17
17
  protected _location: GlTextureLocation;
18
18
  current: (TextureLike | null)[];
19
19
  install(renderer: GlRenderer): void;
20
- onUpdateContext(gl: GlRenderingContext): void;
20
+ protected _updateContext(gl: GlRenderingContext): void;
21
21
  getGlTexture(texture: TextureLike): GlTexture;
22
22
  protected _createGlTexture(texture: TextureLike): GlTexture;
23
23
  bind(texture?: TextureLike | null, location?: number): void;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defineProperty as ts, Observable as we, Reactivable as rs, parseColor as ai, property as h, isGradient as ni, isColorFillObject as Nr, clearUndef as ss, idGenerator as is, normalizeFill as li, isNone as V, normalizeBackground as ci, normalizeForeground as hi, normalizeOutline as ui, normalizeShadow as di, normalizeShape as fi, getDefaultStyle as pi, normalizeText as _i, normalizeTextContent as mi, getDefaultTextStyle as gi, getDefaultLayoutStyle as vi, RawWeakMap as bi } from "modern-idoc";
1
+ import { defineProperty as ts, Observable as he, Reactivable as rs, parseColor as ai, property as h, isGradient as ni, isColorFillObject as Nr, clearUndef as ss, idGenerator as is, normalizeFill as li, isNone as V, normalizeBackground as ci, normalizeForeground as hi, normalizeOutline as ui, normalizeShadow as di, normalizeShape as fi, getDefaultStyle as pi, normalizeText as _i, normalizeTextContent as mi, getDefaultTextStyle as gi, getDefaultLayoutStyle as vi, RawWeakMap as bi } from "modern-idoc";
2
2
  import { fonts as yi } from "modern-font";
3
3
  import { extend as xi } from "colord";
4
4
  import wi from "colord/plugins/names";
@@ -183,7 +183,7 @@ function as(r, e, t = {}) {
183
183
  }
184
184
  return n;
185
185
  }
186
- const Ii = "WebGL2RenderingContext" in globalThis, Mi = "ImageBitmap" in globalThis, Ni = "ResizeObserver" in globalThis, et = "PointerEvent" in globalThis, ki = "WheelEvent" in globalThis, dc = "MouseEvent" in globalThis, ve = "ontouchstart" in globalThis, Ui = "onclick" in globalThis, fc = "createImageBitmap" in globalThis, ns = "AudioContext" in globalThis, ls = "webkitAudioContext" in globalThis, cs = "OfflineAudioContext" in globalThis, Bi = "webkitOfflineAudioContext" in globalThis, Li = ns || ls, pr = typeof window < "u", Fi = typeof navigator < "u" && navigator?.userAgent?.indexOf("Mac") >= 0, hs = globalThis.devicePixelRatio || 1, us = (r) => r !== null && typeof r == "object" && r.nodeType === 1, zi = (r) => us(r) && r.tagName === "VIDEO", pc = (r) => us(r) && r.tagName === "IMG";
186
+ const Ii = "WebGL2RenderingContext" in globalThis, Mi = "ImageBitmap" in globalThis, Ni = "ResizeObserver" in globalThis, et = "PointerEvent" in globalThis, ki = "WheelEvent" in globalThis, dc = "MouseEvent" in globalThis, be = "ontouchstart" in globalThis, Ui = "onclick" in globalThis, fc = "createImageBitmap" in globalThis, ns = "AudioContext" in globalThis, ls = "webkitAudioContext" in globalThis, cs = "OfflineAudioContext" in globalThis, Bi = "webkitOfflineAudioContext" in globalThis, Li = ns || ls, pr = typeof window < "u", Fi = typeof navigator < "u" && navigator?.userAgent?.indexOf("Mac") >= 0, hs = globalThis.devicePixelRatio || 1, us = (r) => r !== null && typeof r == "object" && r.nodeType === 1, zi = (r) => us(r) && r.tagName === "VIDEO", pc = (r) => us(r) && r.tagName === "IMG";
187
187
  function Gi(r) {
188
188
  return typeof r == "object" && r !== null && r.nodeType === 1 && r.tagName === "CANVAS";
189
189
  }
@@ -342,7 +342,7 @@ const Ki = {
342
342
  touchmove: "pointermove",
343
343
  touchcancel: "pointercancel"
344
344
  };
345
- class Zi extends we {
345
+ class Zi extends he {
346
346
  /**
347
347
  * Current event
348
348
  */
@@ -364,17 +364,17 @@ class Zi extends we {
364
364
  if (!this.setuped || !this.target)
365
365
  return;
366
366
  const e = this.target.style;
367
- globalThis.navigator.msPointerEnabled ? (e.msContentZooming = "", e.msTouchAction = "") : et && (e.touchAction = ""), et ? (this.target.removeEventListener("pointerdown", this._onPointerDown), this.target.removeEventListener("pointerleave", this._onPointerOver), this.target.removeEventListener("pointerover", this._onPointerOver), this.target.removeEventListener("pointermove", this._onPointerMove), this.target.removeEventListener("pointerup", this._onPointerUp)) : (this.target.removeEventListener("mousedown", this._onPointerDown), this.target.removeEventListener("mouseout", this._onPointerOver), this.target.removeEventListener("mouseover", this._onPointerOver), this.target.removeEventListener("mousemove", this._onPointerMove), this.target.removeEventListener("mouseup", this._onPointerUp)), ve && (this.target.removeEventListener("touchstart", this._onPointerDown), this.target.removeEventListener("touchmove", this._onPointerMove), this.target.removeEventListener("touchend", this._onPointerUp)), this.target.removeEventListener("wheel", this._onWheel), document.removeEventListener("keydown", this._onKeyDown), document.removeEventListener("keypress", this._onKeyPress), document.removeEventListener("keyup", this._onKeyUp), this.target = void 0, this.setuped = !1;
367
+ globalThis.navigator.msPointerEnabled ? (e.msContentZooming = "", e.msTouchAction = "") : et && (e.touchAction = ""), et ? (this.target.removeEventListener("pointerdown", this._onPointerDown), this.target.removeEventListener("pointerleave", this._onPointerOver), this.target.removeEventListener("pointerover", this._onPointerOver), this.target.removeEventListener("pointermove", this._onPointerMove), this.target.removeEventListener("pointerup", this._onPointerUp)) : (this.target.removeEventListener("mousedown", this._onPointerDown), this.target.removeEventListener("mouseout", this._onPointerOver), this.target.removeEventListener("mouseover", this._onPointerOver), this.target.removeEventListener("mousemove", this._onPointerMove), this.target.removeEventListener("mouseup", this._onPointerUp)), be && (this.target.removeEventListener("touchstart", this._onPointerDown), this.target.removeEventListener("touchmove", this._onPointerMove), this.target.removeEventListener("touchend", this._onPointerUp)), this.target.removeEventListener("wheel", this._onWheel), document.removeEventListener("keydown", this._onKeyDown), document.removeEventListener("keypress", this._onKeyPress), document.removeEventListener("keyup", this._onKeyUp), this.target = void 0, this.setuped = !1;
368
368
  }
369
369
  addEventListeners() {
370
370
  if (this.setuped || !this.target)
371
371
  return;
372
372
  const e = this.target.style;
373
- e && (globalThis.navigator.msPointerEnabled ? (e.msContentZooming = "none", e.msTouchAction = "none") : et && (e.touchAction = "none")), et ? (this.target.addEventListener("pointerdown", this._onPointerDown), this.target.addEventListener("pointerleave", this._onPointerOver), this.target.addEventListener("pointerover", this._onPointerOver), this.target.addEventListener("pointermove", this._onPointerMove), this.target.addEventListener("pointerup", this._onPointerUp)) : (this.target.addEventListener("mousedown", this._onPointerDown), this.target.addEventListener("mouseout", this._onPointerOver), this.target.addEventListener("mouseover", this._onPointerOver), this.target.addEventListener("mousemove", this._onPointerMove), this.target.addEventListener("mouseup", this._onPointerUp)), ve && (this.target.addEventListener("touchstart", this._onPointerDown), this.target.addEventListener("touchmove", this._onPointerMove), this.target.addEventListener("touchend", this._onPointerUp)), this.target.addEventListener("wheel", this._onWheel), document.addEventListener("keydown", this._onKeyDown), document.addEventListener("keypress", this._onKeyPress), document.addEventListener("keyup", this._onKeyUp), this.setuped = !0;
373
+ e && (globalThis.navigator.msPointerEnabled ? (e.msContentZooming = "none", e.msTouchAction = "none") : et && (e.touchAction = "none")), et ? (this.target.addEventListener("pointerdown", this._onPointerDown), this.target.addEventListener("pointerleave", this._onPointerOver), this.target.addEventListener("pointerover", this._onPointerOver), this.target.addEventListener("pointermove", this._onPointerMove), this.target.addEventListener("pointerup", this._onPointerUp)) : (this.target.addEventListener("mousedown", this._onPointerDown), this.target.addEventListener("mouseout", this._onPointerOver), this.target.addEventListener("mouseover", this._onPointerOver), this.target.addEventListener("mousemove", this._onPointerMove), this.target.addEventListener("mouseup", this._onPointerUp)), be && (this.target.addEventListener("touchstart", this._onPointerDown), this.target.addEventListener("touchmove", this._onPointerMove), this.target.addEventListener("touchend", this._onPointerUp)), this.target.addEventListener("wheel", this._onWheel), document.addEventListener("keydown", this._onKeyDown), document.addEventListener("keypress", this._onKeyPress), document.addEventListener("keyup", this._onKeyUp), this.setuped = !0;
374
374
  }
375
375
  normalize(e) {
376
376
  const t = [];
377
- if (ve && e instanceof globalThis.TouchEvent)
377
+ if (be && e instanceof globalThis.TouchEvent)
378
378
  for (let s = 0, i = e.changedTouches.length; s < i; s++) {
379
379
  const o = e.changedTouches[s];
380
380
  typeof o.button > "u" && (o.button = 0), typeof o.buttons > "u" && (o.buttons = 1), typeof o.isPrimary > "u" && (o.isPrimary = e.touches.length === 1 && e.type === "touchstart"), typeof o.width > "u" && (o.width = o.radiusX || 1), typeof o.height > "u" && (o.height = o.radiusY || 1), typeof o.tiltX > "u" && (o.tiltX = 0), typeof o.tiltY > "u" && (o.tiltY = 0), typeof o.pointerType > "u" && (o.pointerType = "touch"), typeof o.pointerId > "u" && (o.pointerId = o.identifier || 0), typeof o.pressure > "u" && (o.pressure = o.force || 0.5), typeof o.twist > "u" && (o.twist = 0), typeof o.tangentialPressure > "u" && (o.tangentialPressure = 0), typeof o.layerX > "u" && (o.layerX = o.offsetX = o.clientX), typeof o.layerY > "u" && (o.layerY = o.offsetY = o.clientY), o.type = e.type, t.push(o);
@@ -451,7 +451,7 @@ class Zi extends we {
451
451
  this.event?.cursor && this.setCursor(this.event.cursor);
452
452
  };
453
453
  _onPointerDown = (e) => {
454
- if (ve && e.pointerType === "touch")
454
+ if (be && e.pointerType === "touch")
455
455
  return;
456
456
  const t = this.normalize(e);
457
457
  for (let s = 0, i = t.length; s < i; s++)
@@ -459,7 +459,7 @@ class Zi extends we {
459
459
  this.event?.cursor && this.setCursor(this.event.cursor);
460
460
  };
461
461
  _onPointerOver = (e) => {
462
- if (!this.enableClickEvent || ve && e.pointerType === "touch")
462
+ if (!this.enableClickEvent || be && e.pointerType === "touch")
463
463
  return;
464
464
  const t = this.normalize(e);
465
465
  for (let s = 0, i = t.length; s < i; s++)
@@ -467,7 +467,7 @@ class Zi extends we {
467
467
  this.event?.cursor && this.setCursor(this.event.cursor);
468
468
  };
469
469
  _onPointerMove = (e) => {
470
- if (!this.enableMoveEvent || ve && e.pointerType === "touch")
470
+ if (!this.enableMoveEvent || be && e.pointerType === "touch")
471
471
  return;
472
472
  const t = this.normalize(e);
473
473
  for (let s = 0, i = t.length; s < i; s++)
@@ -475,7 +475,7 @@ class Zi extends we {
475
475
  this.event?.cursor && this.setCursor(this.event.cursor);
476
476
  };
477
477
  _onPointerUp = (e) => {
478
- if (!this.enableClickEvent || ve && e.pointerType === "touch")
478
+ if (!this.enableClickEvent || be && e.pointerType === "touch")
479
479
  return;
480
480
  let t = e.target;
481
481
  e.composedPath && e.composedPath().length > 0 && (t = e.composedPath()[0]);
@@ -516,7 +516,7 @@ class Pe extends rs {
516
516
  class Ji extends Pe {
517
517
  //
518
518
  }
519
- class he extends Ji {
519
+ class ue extends Ji {
520
520
  //
521
521
  }
522
522
  xi([wi]);
@@ -596,7 +596,7 @@ class oe {
596
596
  return [this.r, this.g, this.b, this.a];
597
597
  }
598
598
  }
599
- class ee extends we {
599
+ class ee extends he {
600
600
  constructor(e) {
601
601
  super(), this.dim = e;
602
602
  }
@@ -706,7 +706,7 @@ class ee extends we {
706
706
  return this.toArray();
707
707
  }
708
708
  }
709
- class ae extends we {
709
+ class ae extends he {
710
710
  constructor(e, t, s) {
711
711
  super(), this.rows = e, this.cols = t, s ? this.set(s) : this.identity();
712
712
  }
@@ -1560,7 +1560,7 @@ class io {
1560
1560
  byteLength = 0;
1561
1561
  dirty = !0;
1562
1562
  }
1563
- var be = /* @__PURE__ */ ((r) => (r[r.mapRead = 1] = "mapRead", r[r.mapWrite = 2] = "mapWrite", r[r.copySrc = 4] = "copySrc", r[r.copyDst = 8] = "copyDst", r[r.index = 16] = "index", r[r.vertex = 32] = "vertex", r[r.uniform = 64] = "uniform", r[r.storage = 128] = "storage", r[r.indirect = 256] = "indirect", r[r.queryResolve = 512] = "queryResolve", r[r.static = 1024] = "static", r))(be || {}), oo = Object.defineProperty, ms = (r, e, t, s) => {
1563
+ var ye = /* @__PURE__ */ ((r) => (r[r.mapRead = 1] = "mapRead", r[r.mapWrite = 2] = "mapWrite", r[r.copySrc = 4] = "copySrc", r[r.copyDst = 8] = "copyDst", r[r.index = 16] = "index", r[r.vertex = 32] = "vertex", r[r.uniform = 64] = "uniform", r[r.storage = 128] = "storage", r[r.indirect = 256] = "indirect", r[r.queryResolve = 512] = "queryResolve", r[r.static = 1024] = "static", r))(ye || {}), oo = Object.defineProperty, ms = (r, e, t, s) => {
1564
1564
  for (var i = void 0, o = r.length - 1, a; o >= 0; o--)
1565
1565
  (a = r[o]) && (i = a(e, t, i) || i);
1566
1566
  return i && oo(e, t, i), i;
@@ -1590,25 +1590,25 @@ function ao(r, e) {
1590
1590
  let t = Lr[r];
1591
1591
  return t === void 0 && (Zt[e] === void 0 && (Zt[e] = 1), Lr[r] = t = Zt[e]++), t;
1592
1592
  }
1593
- class q {
1593
+ class q extends he {
1594
1594
  get _gl() {
1595
1595
  return this._renderer.gl;
1596
1596
  }
1597
- get gl() {
1598
- return this._renderer.gl;
1597
+ constructor() {
1598
+ super(), this.on("updateContext", this._updateContext.bind(this)), this.on("setup", this._setup.bind(this));
1599
1599
  }
1600
1600
  install(e) {
1601
1601
  this._renderer = e;
1602
1602
  }
1603
1603
  // eslint-disable-next-line unused-imports/no-unused-vars
1604
- onUpdateContext(e) {
1604
+ _updateContext(e) {
1605
+ }
1606
+ _setup() {
1605
1607
  }
1606
1608
  flush() {
1607
1609
  }
1608
1610
  reset() {
1609
1611
  }
1610
- destroy() {
1611
- }
1612
1612
  }
1613
1613
  class no extends q {
1614
1614
  install(e) {
@@ -1622,7 +1622,7 @@ class no extends q {
1622
1622
  _createGlBuffer(e) {
1623
1623
  const t = this._gl, s = new io(t.createBuffer());
1624
1624
  let i = it.arrayBuffer;
1625
- return e.usage & be.index ? i = it.elementArrayBuffer : e.usage & be.uniform && (i = it.uniformBuffer), s.target = i, this.glBuffers.set(e.instanceId, s), this.buffers.get(e.instanceId) || ("on" in e && (e.on("updateProperty", (o) => {
1625
+ return e.usage & ye.index ? i = it.elementArrayBuffer : e.usage & ye.uniform && (i = it.uniformBuffer), s.target = i, this.glBuffers.set(e.instanceId, s), this.buffers.get(e.instanceId) || ("on" in e && (e.on("updateProperty", (o) => {
1626
1626
  switch (o) {
1627
1627
  case "usage":
1628
1628
  case "data":
@@ -1644,7 +1644,7 @@ class no extends q {
1644
1644
  s.dirty = !1;
1645
1645
  const { _gl: i } = this, { usage: o, data: a } = e;
1646
1646
  i.bindBuffer(s.target, s.native);
1647
- const n = o & be.static ? i.STATIC_DRAW : i.DYNAMIC_DRAW;
1647
+ const n = o & ye.static ? i.STATIC_DRAW : i.DYNAMIC_DRAW;
1648
1648
  if (a)
1649
1649
  if (s.byteLength >= a.byteLength) {
1650
1650
  const l = a.length * a.BYTES_PER_ELEMENT;
@@ -1970,7 +1970,7 @@ class xo extends q {
1970
1970
  return e.uniforms = c, t.deleteShader(i), t.deleteShader(o), s;
1971
1971
  }
1972
1972
  _createGlShader(e, t) {
1973
- const s = this.gl, i = s.createShader(t);
1973
+ const s = this._gl, i = s.createShader(t);
1974
1974
  if (!i)
1975
1975
  throw new Error("Failed to create shader");
1976
1976
  if (s.shaderSource(i, e), s.compileShader(i), !s.getShaderParameter(i, s.COMPILE_STATUS))
@@ -2144,8 +2144,8 @@ class Po extends q {
2144
2144
  boundBlendMode;
2145
2145
  blendModes;
2146
2146
  defaultState = new ze({ blend: !0 });
2147
- onUpdateContext(e) {
2148
- super.onUpdateContext(e), this.blendModes = wo(e);
2147
+ _updateContext(e) {
2148
+ super._updateContext(e), this.blendModes = wo(e);
2149
2149
  }
2150
2150
  toggle(e, t) {
2151
2151
  this._renderer.gl[t ? "enable" : "disable"](e);
@@ -2280,11 +2280,11 @@ ${Array.from({ length: e }, (l, c) => {
2280
2280
  })
2281
2281
  }, i = {
2282
2282
  instanceId: rt(),
2283
- usage: be.vertex,
2283
+ usage: ye.vertex,
2284
2284
  data: new Float32Array()
2285
2285
  }, o = {
2286
2286
  instanceId: rt(),
2287
- usage: be.index,
2287
+ usage: ye.index,
2288
2288
  data: new Uint32Array()
2289
2289
  }, a = {
2290
2290
  instanceId: rt(),
@@ -2326,15 +2326,15 @@ ${Array.from({ length: e }, (l, c) => {
2326
2326
  const d = [];
2327
2327
  let f = 0;
2328
2328
  for (let p = s.length, _ = { id: ++f }, g = [], v = /* @__PURE__ */ new Map(), w = 0, S = 0, O = 0; O < p; O++) {
2329
- const k = s[O].texture, me = O === p - 1;
2329
+ const k = s[O].texture, ge = O === p - 1;
2330
2330
  if (!k || v.has(k)) {
2331
- if (!me)
2331
+ if (!ge)
2332
2332
  continue;
2333
2333
  } else
2334
2334
  g.push(k), v.set(k, w++);
2335
- if (me || w >= i) {
2335
+ if (ge || w >= i) {
2336
2336
  _.textures = g, _.textureLocationMap = v, w = 0, _.start = u;
2337
- for (let ge = S; ge <= O; ge++) {
2337
+ for (let ve = S; ve <= O; ve++) {
2338
2338
  const {
2339
2339
  indices: Or,
2340
2340
  vertices: jt,
@@ -2344,8 +2344,8 @@ ${Array.from({ length: e }, (l, c) => {
2344
2344
  blendMode: Mr = lt.normal,
2345
2345
  clipOutsideUv: ei,
2346
2346
  roundPixels: ti
2347
- } = s[ge];
2348
- S < ge && _.blendMode !== Mr && (_.size = u - _.start, d.push(_), S = ge, _ = { id: ++f }, _.textures = g, _.start = u);
2347
+ } = s[ve];
2348
+ S < ve && _.blendMode !== Mr && (_.size = u - _.start, d.push(_), S = ve, _ = { id: ++f }, _.textures = g, _.start = u);
2349
2349
  const { width: Wt, height: qt } = Qs, ri = c / this._vertexSize, si = (Ir ? v.get(Ir) : 255) ?? 255, ii = ti ? 1 : 0, oi = ei ? 1 : 0;
2350
2350
  let xt, wt;
2351
2351
  for (let Yt = jt.length, Q = 0; Q < Yt; Q += 2) {
@@ -2365,8 +2365,8 @@ ${Array.from({ length: e }, (l, c) => {
2365
2365
  for (let p = d.length, _ = 0; _ < p; _++) {
2366
2366
  const g = d[_], { start: v = 0, textures: w, textureLocationMap: S } = g;
2367
2367
  for (let O = w.length, k = 0; k < O; k++) {
2368
- const me = w[k], ge = S.get(me);
2369
- ge !== void 0 && this._renderer.texture.bind(me, ge);
2368
+ const ge = w[k], ve = S.get(ge);
2369
+ ve !== void 0 && this._renderer.texture.bind(ge, ve);
2370
2370
  }
2371
2371
  this._state.blendMode = g.blendMode, this._renderer.state.bind(this._state), m.draw({
2372
2372
  size: g.size,
@@ -2827,8 +2827,8 @@ class Uo extends q {
2827
2827
  install(e) {
2828
2828
  super.install(e), e.texture = this;
2829
2829
  }
2830
- onUpdateContext(e) {
2831
- super.onUpdateContext(e), Object.keys(this._mapFormatToInternalFormat).length || (this._mapFormatToInternalFormat = Ao(e, this._renderer.extensions), this._mapFormatToType = Co(e), this._mapFormatToFormat = Ro(e)), this.maxTextureSize = e.getParameter(e.MAX_TEXTURE_SIZE), this.maxTextureImageUnits = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);
2830
+ _updateContext(e) {
2831
+ super._updateContext(e), Object.keys(this._mapFormatToInternalFormat).length || (this._mapFormatToInternalFormat = Ao(e, this._renderer.extensions), this._mapFormatToType = Co(e), this._mapFormatToFormat = Ro(e)), this.maxTextureSize = e.getParameter(e.MAX_TEXTURE_SIZE), this.maxTextureImageUnits = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);
2832
2832
  for (let t = 0; t < this.maxTextureImageUnits; t++)
2833
2833
  this.unbind(t);
2834
2834
  }
@@ -2836,7 +2836,7 @@ class Uo extends q {
2836
2836
  return this.glTextures.get(e.instanceId) || this._createGlTexture(e);
2837
2837
  }
2838
2838
  _createGlTexture(e) {
2839
- const t = this.gl, s = new To(t.createTexture());
2839
+ const t = this._gl, s = new To(t.createTexture());
2840
2840
  if (t.bindTexture(s.target, s.native), s.type = this._mapFormatToType[e.format], s.internalFormat = this._mapFormatToInternalFormat[e.format], s.format = this._mapFormatToFormat[e.format], this.glTextures.set(e.instanceId, s), e.mipmap && (this._renderer.supports.nonPowOf2mipmaps || e.isPowerOfTwo)) {
2841
2841
  const i = Math.max(e.width, e.height);
2842
2842
  e.mipLevelCount = Math.floor(Math.log2(i)) + 1;
@@ -3162,14 +3162,17 @@ class Vo extends q {
3162
3162
  refCount: 0
3163
3163
  }
3164
3164
  };
3165
- onRenderTargetChange(e) {
3165
+ _setup() {
3166
+ super._setup(), this._renderer.renderTarget.on("updateRenderTarget", this._updateRenderTarget);
3167
+ }
3168
+ _updateRenderTarget = (e) => {
3166
3169
  if (e) {
3167
3170
  let t = this.current[e.instanceId];
3168
3171
  t || (t = this.current[e.instanceId] = {
3169
3172
  refCount: 0
3170
3173
  }), t.rect && t.refCount > 0 ? this.bind(t.rect) : this.bind(null);
3171
3174
  }
3172
- }
3175
+ };
3173
3176
  push(e) {
3174
3177
  const t = this._gl;
3175
3178
  t.enable(t.SCISSOR_TEST);
@@ -3193,6 +3196,9 @@ class Vo extends q {
3193
3196
  } else
3194
3197
  t.disable(t.SCISSOR_TEST);
3195
3198
  }
3199
+ destroy() {
3200
+ super.destroy(), this._renderer.renderTarget.off("updateRenderTarget", this._updateRenderTarget);
3201
+ }
3196
3202
  }
3197
3203
  const Ie = [];
3198
3204
  Ie[D.none] = {};
@@ -3259,8 +3265,8 @@ class $o extends q {
3259
3265
  };
3260
3266
  _passOpMap;
3261
3267
  _compareMap;
3262
- onUpdateContext(e) {
3263
- super.onUpdateContext(e), this._compareMap = {
3268
+ _updateContext(e) {
3269
+ super._updateContext(e), this._compareMap = {
3264
3270
  always: e.ALWAYS,
3265
3271
  never: e.NEVER,
3266
3272
  equal: e.EQUAL,
@@ -3280,10 +3286,13 @@ class $o extends q {
3280
3286
  "decrement-wrap": e.DECR_WRAP
3281
3287
  }, this.reset();
3282
3288
  }
3289
+ _setup() {
3290
+ super._setup(), this._renderer.renderTarget.on("updateRenderTarget", this._updateRenderTarget);
3291
+ }
3283
3292
  reset() {
3284
3293
  this._cache.enabled = !1, this._cache.stencilMode = D.none, this._cache.refCount = 0;
3285
3294
  }
3286
- onRenderTargetChange(e) {
3295
+ _updateRenderTarget = (e) => {
3287
3296
  if (e) {
3288
3297
  let t = this.current[e.instanceId];
3289
3298
  t || (t = this.current[e.instanceId] = {
@@ -3291,7 +3300,7 @@ class $o extends q {
3291
3300
  refCount: 0
3292
3301
  }), this.bind(t.stencilMode, t.refCount);
3293
3302
  }
3294
- }
3303
+ };
3295
3304
  bind(e, t) {
3296
3305
  const s = this.current[this._renderer.renderTarget.current?.instanceId ?? -1], i = this._gl, o = Ie[e], a = this._cache;
3297
3306
  if (s.stencilMode = e, s.refCount = t, e === D.disabled) {
@@ -3300,6 +3309,9 @@ class $o extends q {
3300
3309
  }
3301
3310
  this._cache.enabled || (this._cache.enabled = !0, i.enable(i.STENCIL_TEST)), (e !== a.stencilMode || a.refCount !== t) && (a.stencilMode = e, a.refCount = t, o.stencilBack && (i.stencilFunc(this._compareMap[o.stencilBack.compare], t, 255), i.stencilOp(i.KEEP, i.KEEP, this._passOpMap[o.stencilBack.passOp])));
3302
3311
  }
3312
+ destroy() {
3313
+ super.destroy(), this._renderer.renderTarget.off("updateRenderTarget", this._updateRenderTarget);
3314
+ }
3303
3315
  }
3304
3316
  class Ho extends q {
3305
3317
  current = new Fe(0, 0, 0, 0);
@@ -3333,15 +3345,13 @@ class jo extends q {
3333
3345
  _hasMRT = !0;
3334
3346
  _writeDepthTexture = !0;
3335
3347
  projectionMatrix = new ro();
3336
- onUpdateContext() {
3337
- if (this._hasMRT = !0, this._writeDepthTexture = !0, this._renderer.version === 1) {
3338
- const e = this._renderer.gl, t = this._renderer.extensions.drawBuffers, s = this._renderer.extensions.depthTexture;
3348
+ _updateContext(e) {
3349
+ if (super._updateContext(e), this._hasMRT = !0, this._writeDepthTexture = !0, this._renderer.version === 1) {
3350
+ const t = this._renderer.extensions.drawBuffers, s = this._renderer.extensions.depthTexture;
3339
3351
  t ? e.drawBuffers = (i) => t.drawBuffersWEBGL(i) : (this._hasMRT = !1, e.drawBuffers = () => {
3340
3352
  }), s || (this._writeDepthTexture = !1);
3341
- } else {
3342
- const e = this._renderer.gl;
3353
+ } else
3343
3354
  this._msaaSamples = e.getInternalformatParameter(e.RENDERBUFFER, e.RGBA8, e.SAMPLES);
3344
- }
3345
3355
  }
3346
3356
  bind(e, t) {
3347
3357
  const s = this._gl, i = this.current !== e;
@@ -3362,7 +3372,7 @@ class jo extends q {
3362
3372
  width: this._renderer.screen.width * this._renderer.pixelRatio,
3363
3373
  height: this._renderer.screen.height * this._renderer.pixelRatio
3364
3374
  });
3365
- i && (this._renderer.scissor.onRenderTargetChange(this.current), this._renderer.stencil.onRenderTargetChange(this.current));
3375
+ i && this.emit("updateRenderTarget", this.current);
3366
3376
  }
3367
3377
  unbind() {
3368
3378
  return this.bind(null);
@@ -3541,7 +3551,7 @@ class Wo extends mr {
3541
3551
  constructor(e = $i(), t) {
3542
3552
  if (super(), !e)
3543
3553
  throw new Error("Failed to createHTMLCanvas");
3544
- Gi(e) ? this._setupContext(e, t) : (this.gl = e, this.version = Vi(this.gl) ? 2 : 1), this._setupBindPoints()._setupExtensions()._setupPolyfill()._setupSupports(), this._systems.forEach((s) => s.install(this)), this._systems.forEach((s) => s.onUpdateContext(this.gl));
3554
+ Gi(e) ? this._setupContext(e, t) : (this.gl = e, this.version = Vi(this.gl) ? 2 : 1), this._setupBindPoints()._setupExtensions()._setupPolyfill()._setupSupports(), this._systems.forEach((s) => s.install(this)), this._systems.forEach((s) => s.emit("updateContext", this.gl)), this._systems.forEach((s) => s.emit("setup"));
3545
3555
  }
3546
3556
  _setupContext(e, t) {
3547
3557
  this.view = e;
@@ -3621,7 +3631,7 @@ class Wo extends mr {
3621
3631
  }, 0);
3622
3632
  }
3623
3633
  _contextRestored() {
3624
- this.contextLost = !1, this._setupExtensions(), this._systems.forEach((e) => e.onUpdateContext(this.gl));
3634
+ this.contextLost = !1, this._setupExtensions(), this._systems.forEach((e) => e.emit("updateContext", this.gl));
3625
3635
  }
3626
3636
  resize(e, t, s = !0) {
3627
3637
  super.resize(e, t, s), this.viewport.bind({
@@ -3673,13 +3683,13 @@ var Yo = Object.defineProperty, bs = (r, e, t, s) => {
3673
3683
  (a = r[o]) && (i = a(e, t, i) || i);
3674
3684
  return i && Yo(e, t, i), i;
3675
3685
  };
3676
- class We extends he {
3686
+ class We extends ue {
3677
3687
  constructor(e) {
3678
3688
  super(), this.setProperties(e);
3679
3689
  }
3680
3690
  }
3681
3691
  bs([
3682
- h({ fallback: be.index })
3692
+ h({ fallback: ye.index })
3683
3693
  ], We.prototype, "usage");
3684
3694
  bs([
3685
3695
  h({ default: () => new Uint32Array() })
@@ -3689,7 +3699,7 @@ var Ko = Object.defineProperty, zt = (r, e, t, s) => {
3689
3699
  (a = r[o]) && (i = a(e, t, i) || i);
3690
3700
  return i && Ko(e, t, i), i;
3691
3701
  };
3692
- class Ne extends he {
3702
+ class Ne extends ue {
3693
3703
  constructor(e = {}) {
3694
3704
  super(), this.setProperties(e);
3695
3705
  }
@@ -3714,29 +3724,29 @@ var Zo = Object.defineProperty, ys = (r, e, t, s) => {
3714
3724
  (a = r[o]) && (i = a(e, t, i) || i);
3715
3725
  return i && Zo(e, t, i), i;
3716
3726
  };
3717
- class ye extends he {
3727
+ class xe extends ue {
3718
3728
  constructor(e) {
3719
3729
  super(), this.setProperties(e);
3720
3730
  }
3721
3731
  }
3722
3732
  ys([
3723
- h({ fallback: be.vertex })
3724
- ], ye.prototype, "usage");
3733
+ h({ fallback: ye.vertex })
3734
+ ], xe.prototype, "usage");
3725
3735
  ys([
3726
3736
  h({ default: () => new Float32Array() })
3727
- ], ye.prototype, "data");
3737
+ ], xe.prototype, "data");
3728
3738
  var Jo = Object.defineProperty, ke = (r, e, t, s) => {
3729
3739
  for (var i = void 0, o = r.length - 1, a; o >= 0; o--)
3730
3740
  (a = r[o]) && (i = a(e, t, i) || i);
3731
3741
  return i && Jo(e, t, i), i;
3732
3742
  };
3733
- class H extends he {
3743
+ class H extends ue {
3734
3744
  constructor(e) {
3735
3745
  super(), this.setProperties(e);
3736
3746
  }
3737
3747
  }
3738
3748
  ke([
3739
- h({ default: () => new ye() })
3749
+ h({ default: () => new xe() })
3740
3750
  ], H.prototype, "buffer");
3741
3751
  ke([
3742
3752
  h({ fallback: "float32" })
@@ -3763,7 +3773,7 @@ class bc extends Ne {
3763
3773
  attributes: {
3764
3774
  position: new H({
3765
3775
  format: "float32x2",
3766
- buffer: new ye({
3776
+ buffer: new xe({
3767
3777
  data: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1])
3768
3778
  })
3769
3779
  })
@@ -3786,7 +3796,7 @@ function ta() {
3786
3796
  tint: new Float32Array([1, 1, 1, 1])
3787
3797
  };
3788
3798
  }
3789
- class E extends he {
3799
+ class E extends ue {
3790
3800
  static instance = new this();
3791
3801
  glProgram;
3792
3802
  constructor(e = {}) {
@@ -3931,13 +3941,13 @@ class P extends Ne {
3931
3941
  attributes: {
3932
3942
  position: new H({
3933
3943
  format: "float32x2",
3934
- buffer: new ye({
3944
+ buffer: new xe({
3935
3945
  data: new Float32Array([-1, -1, 1, -1, 1, 1, -1, 1])
3936
3946
  })
3937
3947
  }),
3938
3948
  uv: new H({
3939
3949
  format: "float32x2",
3940
- buffer: new ye({
3950
+ buffer: new xe({
3941
3951
  data: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1])
3942
3952
  })
3943
3953
  })
@@ -3952,7 +3962,7 @@ class yc extends Ne {
3952
3962
  positionBuffer;
3953
3963
  uvBuffer;
3954
3964
  constructor(e) {
3955
- const t = new ye({ data: new Float32Array() }), s = new ye({ data: new Float32Array() });
3965
+ const t = new xe({ data: new Float32Array() }), s = new xe({ data: new Float32Array() });
3956
3966
  super({
3957
3967
  ...e,
3958
3968
  attributes: {
@@ -3969,12 +3979,12 @@ class yc extends Ne {
3969
3979
  }), this.positionBuffer = t, this.uvBuffer = s;
3970
3980
  }
3971
3981
  }
3972
- var oa = Object.defineProperty, aa = Object.getOwnPropertyDescriptor, ue = (r, e, t, s) => {
3982
+ var oa = Object.defineProperty, aa = Object.getOwnPropertyDescriptor, de = (r, e, t, s) => {
3973
3983
  for (var i = s > 1 ? void 0 : s ? aa(e, t) : e, o = r.length - 1, a; o >= 0; o--)
3974
3984
  (a = r[o]) && (i = (s ? a(e, t, i) : a(i)) || i);
3975
3985
  return s && i && oa(e, t, i), i;
3976
3986
  };
3977
- let X = class extends he {
3987
+ let X = class extends ue {
3978
3988
  get valid() {
3979
3989
  return !!(this.width && this.height);
3980
3990
  }
@@ -3985,31 +3995,31 @@ let X = class extends he {
3985
3995
  return this.valid ? (r.renderTarget.bind(this, e), !0) : !1;
3986
3996
  }
3987
3997
  };
3988
- ue([
3998
+ de([
3989
3999
  h({ fallback: !1 })
3990
4000
  ], X.prototype, "isRoot", 2);
3991
- ue([
4001
+ de([
3992
4002
  h({ fallback: 0 })
3993
4003
  ], X.prototype, "x", 2);
3994
- ue([
4004
+ de([
3995
4005
  h({ fallback: 0 })
3996
4006
  ], X.prototype, "y", 2);
3997
- ue([
4007
+ de([
3998
4008
  h({ fallback: 0 })
3999
4009
  ], X.prototype, "width", 2);
4000
- ue([
4010
+ de([
4001
4011
  h({ fallback: 0 })
4002
4012
  ], X.prototype, "height", 2);
4003
- ue([
4013
+ de([
4004
4014
  h({ fallback: 0 })
4005
4015
  ], X.prototype, "mipLevel", 2);
4006
- ue([
4016
+ de([
4007
4017
  h({ fallback: !1 })
4008
4018
  ], X.prototype, "msaa", 2);
4009
- ue([
4019
+ de([
4010
4020
  h({ default: () => [new x()] })
4011
4021
  ], X.prototype, "colorTextures", 2);
4012
- X = ue([
4022
+ X = de([
4013
4023
  b("RenderTarget")
4014
4024
  ], X);
4015
4025
  var na = Object.defineProperty, N = (r, e, t, s) => {
@@ -4017,7 +4027,7 @@ var na = Object.defineProperty, N = (r, e, t, s) => {
4017
4027
  (a = r[o]) && (i = a(e, t, i) || i);
4018
4028
  return i && na(e, t, i), i;
4019
4029
  };
4020
- class x extends he {
4030
+ class x extends ue {
4021
4031
  static get EMPTY() {
4022
4032
  return new this({ width: 1, height: 1 });
4023
4033
  }
@@ -4132,7 +4142,7 @@ N([
4132
4142
  N([
4133
4143
  h({ fallback: !1 })
4134
4144
  ], x.prototype, "isPowerOfTwo");
4135
- class la extends he {
4145
+ class la extends ue {
4136
4146
  frames;
4137
4147
  frameIndex = 0;
4138
4148
  get currentFrame() {
@@ -4209,7 +4219,7 @@ class Gt extends x {
4209
4219
  if (!o)
4210
4220
  throw new Error("Failed to parse linear gradient, get canvas context is null.");
4211
4221
  const { angle: a = 0, stops: n } = e, l = t, c = s, u = l / 2, d = c / 2, f = (a + 90) * Math.PI / 180, m = Math.sin(f), p = -Math.cos(f), _ = Math.abs(l * Math.sin(f)) + Math.abs(c * Math.cos(f)), g = u - m * (_ / 2), v = d - p * (_ / 2), w = u + m * (_ / 2), S = d + p * (_ / 2), O = o.createLinearGradient(g, v, w, S);
4212
- for (const me of n) O.addColorStop(me.offset, me.color);
4222
+ for (const ge of n) O.addColorStop(ge.offset, ge.color);
4213
4223
  o.fillStyle = O, o.fillRect(0, 0, l, c);
4214
4224
  const k = o.getImageData(0, 0, i.width, i.height);
4215
4225
  return {
@@ -4543,7 +4553,7 @@ class _a extends Pe {
4543
4553
  return { internalKey: `____${e}` };
4544
4554
  }
4545
4555
  }
4546
- var ma = Object.defineProperty, ga = Object.getOwnPropertyDescriptor, de = (r, e, t, s) => {
4556
+ var ma = Object.defineProperty, ga = Object.getOwnPropertyDescriptor, fe = (r, e, t, s) => {
4547
4557
  for (var i = s > 1 ? void 0 : s ? ga(e, t) : e, o = r.length - 1, a; o >= 0; o--)
4548
4558
  (a = r[o]) && (i = (s ? a(e, t, i) : a(i)) || i);
4549
4559
  return s && i && ma(e, t, i), i;
@@ -4909,31 +4919,31 @@ let M = class extends Pe {
4909
4919
  return s?.forEach((n) => a.appendChild(this.parse(n))), a;
4910
4920
  }
4911
4921
  };
4912
- de([
4922
+ fe([
4913
4923
  h({ fallback: is() })
4914
4924
  ], M.prototype, "id", 2);
4915
- de([
4925
+ fe([
4916
4926
  h({ fallback: is() })
4917
4927
  ], M.prototype, "name", 2);
4918
- de([
4928
+ fe([
4919
4929
  h({ fallback: "inherit" })
4920
4930
  ], M.prototype, "processMode", 2);
4921
- de([
4931
+ fe([
4922
4932
  h({ fallback: "default" })
4923
4933
  ], M.prototype, "processSortMode", 2);
4924
- de([
4934
+ fe([
4925
4935
  h({ fallback: "inherit" })
4926
4936
  ], M.prototype, "renderMode", 2);
4927
- de([
4937
+ fe([
4928
4938
  h({ fallback: "inherit" })
4929
4939
  ], M.prototype, "inputMode", 2);
4930
- de([
4940
+ fe([
4931
4941
  h({ fallback: "default" })
4932
4942
  ], M.prototype, "internalMode", 2);
4933
- de([
4943
+ fe([
4934
4944
  h({ internal: !0 })
4935
4945
  ], M.prototype, "mask", 2);
4936
- M = de([
4946
+ M = fe([
4937
4947
  b("Node")
4938
4948
  ], M);
4939
4949
  var ba = Object.defineProperty, ya = Object.getOwnPropertyDescriptor, qe = (r, e, t, s) => {
@@ -5322,6 +5332,7 @@ let T = class extends Y {
5322
5332
  break;
5323
5333
  }
5324
5334
  }
5335
+ _rect = { x: 0, y: 0, width: 0, height: 0 };
5325
5336
  _processParent() {
5326
5337
  const r = this._tree?.renderStack;
5327
5338
  if (!r)
@@ -5331,10 +5342,33 @@ let T = class extends Y {
5331
5342
  return;
5332
5343
  const t = e.calls;
5333
5344
  let s, i;
5334
- t.forEach((o, a) => {
5335
- const n = o.renderable;
5336
- (n.equal(this._parent) || n.parent?.equal(this._parent)) && (n.needsRender && (this.needsRender = !0), s = s ?? a, i = a);
5337
- }), !(s === void 0 || i === void 0) && (this.needsRender ? (t.splice(i + 1, 0, r.createCall(this)), t.splice(s, 0, r.createCall(this))) : t.splice(s, i + 1, r.createCall(this)));
5345
+ const o = {
5346
+ minX: Number.MAX_SAFE_INTEGER,
5347
+ minY: Number.MAX_SAFE_INTEGER,
5348
+ maxX: 0,
5349
+ maxY: 0
5350
+ };
5351
+ if (t.forEach((n, l) => {
5352
+ const c = n.renderable;
5353
+ if (c.equal(this._parent) || c.parent?.equal(this._parent)) {
5354
+ if (c.needsRender && (this.needsRender = !0), "getRect" in c) {
5355
+ const u = c.getRect(), d = {
5356
+ x: [u.x, u.x + u.width],
5357
+ y: [u.y, u.y + u.height]
5358
+ };
5359
+ o.minX = Math.min(...d.x), o.maxX = Math.max(...d.x), o.minY = Math.min(...d.y), o.maxY = Math.max(...d.y);
5360
+ }
5361
+ s = s ?? l, i = l;
5362
+ }
5363
+ }), s === void 0 || i === void 0)
5364
+ return;
5365
+ const a = {
5366
+ x: o.minX,
5367
+ y: o.minY,
5368
+ width: o.maxX - o.minX,
5369
+ height: o.maxY - o.minY
5370
+ };
5371
+ a.width === Number.MAX_SAFE_INTEGER || a.height === Number.MAX_SAFE_INTEGER || (!this.needsRender && (this._rect.width !== a.width || this._rect.height !== a.height) && (this.needsRender = !0), this.needsRender ? (t.splice(i + 1, 0, r.createCall(this)), t.splice(s, 0, r.createCall(this))) : t.splice(s, i + 1, r.createCall(this)), this._rect = a);
5338
5372
  }
5339
5373
  _processChildren() {
5340
5374
  this.children.length && (super.emit("process"), this._tree?.renderStack.push(this));
@@ -5370,9 +5404,8 @@ let T = class extends Y {
5370
5404
  }
5371
5405
  }
5372
5406
  _renderParentOrChildren(r) {
5373
- const e = this._tree?.getCurrentViewport();
5374
- let t = { x: 0, y: 0, width: 0, height: 0 };
5375
- this._parent && "getRect" in this._parent ? t = this._parent.getRect() : e && (t.width = e.width, t.height = e.height), this.needsRender ? this._renderId % 2 === 0 ? (this._renderViewport = e, t.width && t.height && this.viewport1.resize(t.width, t.height), this.viewport1.canvasTransform.identity().translate(-t.x, -t.y), this.viewport1.renderStart(r)) : e && e.equal(this.viewport1) && this._renderViewport && !this._renderViewport.equal(this.viewport1) && (this.apply(r, this.viewport1, {
5407
+ const e = this._tree?.getCurrentViewport(), t = this._rect;
5408
+ this.needsRender ? (this._renderId % 2 === 0 ? (this._renderViewport = e, t.width && t.height && this.viewport1.resize(t.width, t.height), this.viewport1.canvasTransform.identity().translate(-t.x, -t.y), this.viewport1.renderStart(r)) : e && e.equal(this.viewport1) && this._renderViewport && !this._renderViewport.equal(this.viewport1) && (this.apply(r, this.viewport1, {
5376
5409
  redraw: !0,
5377
5410
  target: this._effectMode === "parent" ? this._parent ?? void 0 : void 0
5378
5411
  }), this._renderViewport.activate(r), this._renderViewport = void 0, r.batch2D.render({
@@ -5389,7 +5422,7 @@ let T = class extends Y {
5389
5422
  uvs: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),
5390
5423
  indices: new Uint32Array([0, 1, 2, 0, 2, 3]),
5391
5424
  texture: this.viewport1.texture
5392
- }), this.needsRender = !1) : r.batch2D.render({
5425
+ }), this.needsRender = !1), this._renderId++) : r.batch2D.render({
5393
5426
  vertices: new Float32Array([
5394
5427
  t.x,
5395
5428
  t.y,
@@ -5408,10 +5441,10 @@ let T = class extends Y {
5408
5441
  _render(r) {
5409
5442
  switch (this._effectMode) {
5410
5443
  case "before":
5411
- this._renderBefore(r);
5444
+ this._renderBefore(r), this._renderId++;
5412
5445
  break;
5413
5446
  case "transition":
5414
- this._renderTransition(r);
5447
+ this._renderTransition(r), this._renderId++;
5415
5448
  break;
5416
5449
  case "parent":
5417
5450
  case "children":
@@ -5419,7 +5452,6 @@ let T = class extends Y {
5419
5452
  this._renderParentOrChildren(r);
5420
5453
  break;
5421
5454
  }
5422
- this.needsRender && this._renderId++;
5423
5455
  }
5424
5456
  apply(r, e, t) {
5425
5457
  this.material && (t?.redraw ? e.redraw(r, () => {
@@ -5553,7 +5585,7 @@ var Ia = Object.defineProperty, Ee = (r, e, t, s) => {
5553
5585
  (a = r[o]) && (i = a(e, t, i) || i);
5554
5586
  return i && Ia(e, t, i), i;
5555
5587
  };
5556
- class fe extends _r {
5588
+ class pe extends _r {
5557
5589
  input = new Zi();
5558
5590
  renderStack = new Ra();
5559
5591
  root = new or().setTree(this);
@@ -5602,28 +5634,28 @@ class fe extends _r {
5602
5634
  }
5603
5635
  Ee([
5604
5636
  h({ alias: "root.msaa" })
5605
- ], fe.prototype, "msaa");
5637
+ ], pe.prototype, "msaa");
5606
5638
  Ee([
5607
5639
  h({ fallback: !1 })
5608
- ], fe.prototype, "pixelate");
5640
+ ], pe.prototype, "pixelate");
5609
5641
  Ee([
5610
5642
  h({ fallback: !1 })
5611
- ], fe.prototype, "roundPixels");
5643
+ ], pe.prototype, "roundPixels");
5612
5644
  Ee([
5613
5645
  h()
5614
- ], fe.prototype, "backgroundColor");
5646
+ ], pe.prototype, "backgroundColor");
5615
5647
  Ee([
5616
5648
  h({ internal: !0, fallback: !1 })
5617
- ], fe.prototype, "debug");
5649
+ ], pe.prototype, "debug");
5618
5650
  Ee([
5619
5651
  h({ internal: !0, fallback: !1 })
5620
- ], fe.prototype, "processPaused");
5652
+ ], pe.prototype, "processPaused");
5621
5653
  Ee([
5622
5654
  h({ internal: !0, default: () => yi })
5623
- ], fe.prototype, "fonts");
5655
+ ], pe.prototype, "fonts");
5624
5656
  Ee([
5625
5657
  h({ internal: !0, default: () => new le() })
5626
- ], fe.prototype, "timeline");
5658
+ ], pe.prototype, "timeline");
5627
5659
  var Ma = Object.getOwnPropertyDescriptor, Na = (r, e, t, s) => {
5628
5660
  for (var i = s > 1 ? void 0 : s ? Ma(e, t) : e, o = r.length - 1, a; o >= 0; o--)
5629
5661
  (a = r[o]) && (i = a(i) || i);
@@ -5990,7 +6022,7 @@ function za(r) {
5990
6022
  }
5991
6023
  });
5992
6024
  }
5993
- var Es = Object.defineProperty, Ga = Object.getOwnPropertyDescriptor, Va = (r, e, t) => e in r ? Es(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t, pe = (r, e, t, s) => {
6025
+ var Es = Object.defineProperty, Ga = Object.getOwnPropertyDescriptor, Va = (r, e, t) => e in r ? Es(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t, _e = (r, e, t, s) => {
5994
6026
  for (var i = s > 1 ? void 0 : s ? Ga(e, t) : e, o = r.length - 1, a; o >= 0; o--)
5995
6027
  (a = r[o]) && (i = (s ? a(e, t, i) : a(i)) || i);
5996
6028
  return s && i && Es(e, t, i), i;
@@ -6052,31 +6084,31 @@ void main(void) {
6052
6084
  }`
6053
6085
  }
6054
6086
  }));
6055
- pe([
6087
+ _e([
6056
6088
  h({ fallback: 1 })
6057
6089
  ], W.prototype, "saturation", 2);
6058
- pe([
6090
+ _e([
6059
6091
  h({ fallback: 1 })
6060
6092
  ], W.prototype, "contrast", 2);
6061
- pe([
6093
+ _e([
6062
6094
  h({ fallback: 1 })
6063
6095
  ], W.prototype, "brightness", 2);
6064
- pe([
6096
+ _e([
6065
6097
  h({ fallback: 1 })
6066
6098
  ], W.prototype, "red", 2);
6067
- pe([
6099
+ _e([
6068
6100
  h({ fallback: 1 })
6069
6101
  ], W.prototype, "green", 2);
6070
- pe([
6102
+ _e([
6071
6103
  h({ fallback: 1 })
6072
6104
  ], W.prototype, "blue", 2);
6073
- pe([
6105
+ _e([
6074
6106
  h({ fallback: 1 })
6075
6107
  ], W.prototype, "alpha", 2);
6076
- pe([
6108
+ _e([
6077
6109
  h({ fallback: 1 })
6078
6110
  ], W.prototype, "gamma", 2);
6079
- W = pe([
6111
+ W = _e([
6080
6112
  b("ColorAdjustEffect")
6081
6113
  ], W);
6082
6114
  var Ss = Object.defineProperty, Ha = Object.getOwnPropertyDescriptor, Xa = (r, e, t) => e in r ? Ss(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t, Ts = (r, e, t, s) => {
@@ -7624,13 +7656,13 @@ var Hs = Object.defineProperty, kn = Object.getOwnPropertyDescriptor, Un = (r, e
7624
7656
  (a = r[o]) && (i = (s ? a(e, t, i) : a(i)) || i);
7625
7657
  return s && i && Hs(e, t, i), i;
7626
7658
  }, Bn = (r, e, t) => Un(r, e + "", t);
7627
- let xe = class extends T {
7659
+ let we = class extends T {
7628
7660
  constructor(r, e = []) {
7629
7661
  super(), this.setProperties(r).append(e);
7630
7662
  }
7631
7663
  apply(r, e) {
7632
7664
  e.redraw(r, () => {
7633
- P.draw(r, xe.material, {
7665
+ P.draw(r, we.material, {
7634
7666
  sampler: 0,
7635
7667
  uCenter: [e.width / 2, e.height / 2],
7636
7668
  uInnerRadius: this.innerRadius,
@@ -7641,7 +7673,7 @@ let xe = class extends T {
7641
7673
  });
7642
7674
  }
7643
7675
  };
7644
- Bn(xe, "material", new E({
7676
+ Bn(we, "material", new E({
7645
7677
  gl: {
7646
7678
  vertex: `attribute vec2 position;
7647
7679
  attribute vec2 uv;
@@ -7729,19 +7761,19 @@ void main() {
7729
7761
  }));
7730
7762
  mt([
7731
7763
  h()
7732
- ], xe.prototype, "center", 2);
7764
+ ], we.prototype, "center", 2);
7733
7765
  mt([
7734
7766
  h({ fallback: 20 })
7735
- ], xe.prototype, "innerRadius", 2);
7767
+ ], we.prototype, "innerRadius", 2);
7736
7768
  mt([
7737
7769
  h({ fallback: -1 })
7738
- ], xe.prototype, "radius", 2);
7770
+ ], we.prototype, "radius", 2);
7739
7771
  mt([
7740
7772
  h({ fallback: 0.1 })
7741
- ], xe.prototype, "strength", 2);
7742
- xe = mt([
7773
+ ], we.prototype, "strength", 2);
7774
+ we = mt([
7743
7775
  b("ZoomBlurEffect")
7744
- ], xe);
7776
+ ], we);
7745
7777
  function Mt(r, e) {
7746
7778
  const { x: t, y: s, width: i, height: o } = e;
7747
7779
  let a = !1;
@@ -8127,7 +8159,7 @@ bt([
8127
8159
  bt([
8128
8160
  h()
8129
8161
  ], Qe.prototype, "paths");
8130
- class ar extends he {
8162
+ class ar extends ue {
8131
8163
  constructor(e) {
8132
8164
  super(), this.setProperties(e);
8133
8165
  }
@@ -8141,7 +8173,7 @@ const Wr = {
8141
8173
  };
8142
8174
  for (const r in Wr)
8143
8175
  ts(ar, r, { fallback: Wr[r] });
8144
- var jn = Object.defineProperty, _e = (r, e, t, s) => {
8176
+ var jn = Object.defineProperty, me = (r, e, t, s) => {
8145
8177
  for (var i = void 0, o = r.length - 1, a; o >= 0; o--)
8146
8178
  (a = r[o]) && (i = a(e, t, i) || i);
8147
8179
  return i && jn(e, t, i), i;
@@ -8319,31 +8351,31 @@ class ie extends Pe {
8319
8351
  }
8320
8352
  }
8321
8353
  }
8322
- _e([
8354
+ me([
8323
8355
  h({ fallback: !0 })
8324
8356
  ], ie.prototype, "enabled");
8325
- _e([
8357
+ me([
8326
8358
  h({ fallback: () => [] })
8327
8359
  ], ie.prototype, "content");
8328
- _e([
8360
+ me([
8329
8361
  h({ alias: "parent.style.json" })
8330
8362
  ], ie.prototype, "style");
8331
- _e([
8363
+ me([
8332
8364
  h()
8333
8365
  ], ie.prototype, "effects");
8334
- _e([
8366
+ me([
8335
8367
  h()
8336
8368
  ], ie.prototype, "fill");
8337
- _e([
8369
+ me([
8338
8370
  h()
8339
8371
  ], ie.prototype, "outline");
8340
- _e([
8372
+ me([
8341
8373
  h({ alias: "base.measureDom" })
8342
8374
  ], ie.prototype, "measureDom");
8343
- _e([
8375
+ me([
8344
8376
  h({ alias: "base.fonts" })
8345
8377
  ], ie.prototype, "fonts");
8346
- _e([
8378
+ me([
8347
8379
  h({ fallback: "auto" })
8348
8380
  ], ie.prototype, "drawMode");
8349
8381
  var Wn = Object.getOwnPropertyDescriptor, qn = (r, e, t, s) => {
@@ -9382,7 +9414,7 @@ dt = Ht([
9382
9414
  duration: 2e3
9383
9415
  })
9384
9416
  ], dt);
9385
- class Ar extends we {
9417
+ class Ar extends he {
9386
9418
  static _instance;
9387
9419
  static get instance() {
9388
9420
  return this._instance || (this._instance = new Ar()), this._instance;
@@ -9413,7 +9445,7 @@ class Ar extends we {
9413
9445
  return this.paused = !this.paused, this.refreshPaused(), this.paused;
9414
9446
  }
9415
9447
  }
9416
- class Nt extends we {
9448
+ class Nt extends he {
9417
9449
  static PADDING = 0.1;
9418
9450
  _source = null;
9419
9451
  _audio = null;
@@ -9580,7 +9612,7 @@ class pl {
9580
9612
  return new Nt();
9581
9613
  }
9582
9614
  }
9583
- class Zs extends we {
9615
+ class Zs extends he {
9584
9616
  constructor(e, t) {
9585
9617
  super(), this._input = e, this._output = t;
9586
9618
  }
@@ -9680,7 +9712,7 @@ class Ae extends Zs {
9680
9712
  2,
9681
9713
  cs ? Math.max(8e3, Math.min(96e3, e.sampleRate)) : 44100
9682
9714
  ), s = e.createDynamicsCompressor(), i = e.createAnalyser();
9683
- i.connect(s), s.connect(e.destination), super(i, s), this._context = e, this._offlineContext = t, this._compressor = s, this._analyser = i, this._locked = e.state === "suspended" && (ve || Ui), pr && (this._locked && (this._unlock(), document.addEventListener("mousedown", this._unlock, !0), document.addEventListener("touchstart", this._unlock, !0), document.addEventListener("touchend", this._unlock, !0)), globalThis.addEventListener("focus", this._onFocus), globalThis.addEventListener("blur", this._onBlur));
9715
+ i.connect(s), s.connect(e.destination), super(i, s), this._context = e, this._offlineContext = t, this._compressor = s, this._analyser = i, this._locked = e.state === "suspended" && (be || Ui), pr && (this._locked && (this._unlock(), document.addEventListener("mousedown", this._unlock, !0), document.addEventListener("touchstart", this._unlock, !0), document.addEventListener("touchend", this._unlock, !0)), globalThis.addEventListener("focus", this._onFocus), globalThis.addEventListener("blur", this._onBlur));
9684
9716
  }
9685
9717
  _onFocus() {
9686
9718
  if (!this.autoPause)
@@ -9722,7 +9754,7 @@ class Ae extends Zs {
9722
9754
  e.setValueAtTime ? e.setValueAtTime(t, this._context.currentTime) : e.value = t;
9723
9755
  }
9724
9756
  }
9725
- class gl extends we {
9757
+ class gl extends he {
9726
9758
  _audio = null;
9727
9759
  _sourceNode = null;
9728
9760
  _gain = null;
@@ -10564,7 +10596,7 @@ function ec(r) {
10564
10596
  return e;
10565
10597
  }
10566
10598
  const Rt = "WeakRef" in globalThis;
10567
- class tc extends we {
10599
+ class tc extends he {
10568
10600
  defaultHandler = (e) => e;
10569
10601
  _handlers = /* @__PURE__ */ new Map();
10570
10602
  _handleing = /* @__PURE__ */ new Map();
@@ -10671,7 +10703,7 @@ const Le = {
10671
10703
  preserveDrawingBuffer: !1,
10672
10704
  powerPreference: "default"
10673
10705
  };
10674
- class Cr extends fe {
10706
+ class Cr extends pe {
10675
10707
  renderer;
10676
10708
  get view() {
10677
10709
  return this.renderer.view;
@@ -10876,7 +10908,7 @@ export {
10876
10908
  Pc as AudioSpectrum,
10877
10909
  ft as AudioWaveform,
10878
10910
  nr as BaseElement2D,
10879
- be as BufferUsage,
10911
+ ye as BufferUsage,
10880
10912
  It as Camera2D,
10881
10913
  fa as CanvasContext,
10882
10914
  Ge as CanvasItem,
@@ -10972,7 +11004,7 @@ export {
10972
11004
  Ji as RefCounted,
10973
11005
  X as RenderTarget,
10974
11006
  mr as Renderer,
10975
- he as Resource,
11007
+ ue as Resource,
10976
11008
  ns as SUPPORTS_AUDIO_CONTEXT,
10977
11009
  Ui as SUPPORTS_CLICK_EVENTS,
10978
11010
  fc as SUPPORTS_CREATE_IMAGE_BITMAP,
@@ -10981,13 +11013,13 @@ export {
10981
11013
  cs as SUPPORTS_OFFLINE_AUDIO_CONTEXT,
10982
11014
  et as SUPPORTS_POINTER_EVENTS,
10983
11015
  Ni as SUPPORTS_RESIZE_OBSERVER,
10984
- ve as SUPPORTS_TOUCH_EVENTS,
11016
+ be as SUPPORTS_TOUCH_EVENTS,
10985
11017
  Ii as SUPPORTS_WEBGL2,
10986
11018
  ls as SUPPORTS_WEBKIT_AUDIO_CONTEXT,
10987
11019
  Bi as SUPPORTS_WEBKIT_OFFLINE_AUDIO_CONTEXT,
10988
11020
  Li as SUPPORTS_WEB_AUDIO,
10989
11021
  ki as SUPPORTS_WHEEL_EVENTS,
10990
- fe as SceneTree,
11022
+ pe as SceneTree,
10991
11023
  Yl as TextLoader,
10992
11024
  x as Texture2D,
10993
11025
  Kl as TextureLoader,
@@ -11007,7 +11039,7 @@ export {
11007
11039
  vc as Vector3,
11008
11040
  to as Vector4,
11009
11041
  H as VertexAttribute,
11010
- ye as VertexBuffer,
11042
+ xe as VertexBuffer,
11011
11043
  hr as Video2D,
11012
11044
  Zl as VideoLoader,
11013
11045
  da as VideoTexture,
@@ -11018,7 +11050,7 @@ export {
11018
11050
  gl as WebSound,
11019
11051
  Yi as WheelInputEvent,
11020
11052
  or as Window,
11021
- xe as ZoomBlurEffect,
11053
+ we as ZoomBlurEffect,
11022
11054
  Be as alignMap,
11023
11055
  $ as assets,
11024
11056
  es as boxSizingMap,
@@ -1,4 +1,4 @@
1
- import type { GlRenderer } from '../../core';
1
+ import type { GlRenderer, RectangleLike } from '../../core';
2
2
  import type { Material } from '../resources';
3
3
  import type { Node } from './Node';
4
4
  import type { SceneTree } from './SceneTree';
@@ -42,6 +42,7 @@ export declare class Effect extends TimelineNode {
42
42
  protected _treeExit(oldTree: SceneTree): void;
43
43
  protected _onProcessing(): void;
44
44
  protected _onNodeProcessed(node: Node): void;
45
+ protected _rect: RectangleLike;
45
46
  protected _processParent(): void;
46
47
  protected _processChildren(): void;
47
48
  _onProcess(delta?: number): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-canvas",
3
3
  "type": "module",
4
- "version": "0.14.4",
4
+ "version": "0.14.5",
5
5
  "packageManager": "pnpm@10.19.0",
6
6
  "description": "A JavaScript WebGL rendering engine. only the ESM.",
7
7
  "author": "wxm",