@lightningjs/renderer 0.3.3 → 0.3.4

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.
Files changed (38) hide show
  1. package/dist/src/core/CoreTextureManager.d.ts +4 -3
  2. package/dist/src/core/CoreTextureManager.js +7 -4
  3. package/dist/src/core/CoreTextureManager.js.map +1 -1
  4. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +36 -1
  5. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  6. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +2 -2
  7. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +6 -1
  8. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  9. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -1
  10. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  11. package/dist/src/core/textures/SubTexture.d.ts +2 -2
  12. package/dist/src/main-api/INode.d.ts +5 -5
  13. package/dist/src/main-api/RendererMain.d.ts +88 -8
  14. package/dist/src/main-api/RendererMain.js +22 -6
  15. package/dist/src/main-api/RendererMain.js.map +1 -1
  16. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +7 -7
  17. package/dist/src/render-drivers/main/MainOnlyNode.js +8 -1
  18. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  19. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +8 -7
  20. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +11 -1
  21. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
  22. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -1
  23. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  24. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  25. package/package.json +1 -1
  26. package/src/core/CoreTextureManager.ts +7 -6
  27. package/src/core/renderers/webgl/shaders/DynamicShader.ts +42 -2
  28. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +9 -3
  29. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +6 -4
  30. package/src/core/textures/SubTexture.ts +2 -2
  31. package/src/main-api/INode.ts +5 -5
  32. package/src/main-api/RendererMain.ts +125 -23
  33. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +45 -0
  34. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +154 -0
  35. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +54 -0
  36. package/src/render-drivers/main/MainOnlyNode.ts +16 -9
  37. package/src/render-drivers/threadx/ThreadXMainNode.ts +20 -9
  38. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +5 -9
@@ -30,8 +30,8 @@ import { CoreAnimationController } from '../../core/animations/CoreAnimationCont
30
30
  import { CoreNode } from '../../core/CoreNode.js';
31
31
  import type {
32
32
  RendererMain,
33
- ShaderDesc,
34
- TextureDesc,
33
+ ShaderRef,
34
+ TextureRef,
35
35
  } from '../../main-api/RendererMain.js';
36
36
  import type { IAnimationSettings } from '../../core/animations/CoreAnimation.js';
37
37
  import { EventEmitter } from '../../common/EventEmitter.js';
@@ -54,8 +54,8 @@ export class MainOnlyNode extends EventEmitter implements INode {
54
54
  protected _children: MainOnlyNode[] = [];
55
55
  protected _src = '';
56
56
  protected _parent: MainOnlyNode | null = null;
57
- protected _texture: TextureDesc | null = null;
58
- protected _shader: ShaderDesc | null = null;
57
+ protected _texture: TextureRef | null = null;
58
+ protected _shader: ShaderRef | null = null;
59
59
 
60
60
  constructor(
61
61
  props: INodeWritableProps,
@@ -357,20 +357,26 @@ export class MainOnlyNode extends EventEmitter implements INode {
357
357
  this.texture = null;
358
358
  return;
359
359
  }
360
- this.texture = this.rendererMain.makeTexture('ImageTexture', {
360
+ this.texture = this.rendererMain.createTexture('ImageTexture', {
361
361
  src: imageUrl,
362
362
  });
363
363
  }
364
364
 
365
365
  //#region Texture
366
- get texture(): TextureDesc | null {
366
+ get texture(): TextureRef | null {
367
367
  return this._texture;
368
368
  }
369
369
 
370
- set texture(texture: TextureDesc | null) {
370
+ set texture(texture: TextureRef | null) {
371
371
  if (this._texture === texture) {
372
372
  return;
373
373
  }
374
+ if (this._texture) {
375
+ this.rendererMain.textureTracker.decrementTextureRefCount(this._texture);
376
+ }
377
+ if (texture) {
378
+ this.rendererMain.textureTracker.incrementTextureRefCount(texture);
379
+ }
374
380
  this._texture = texture;
375
381
  if (texture) {
376
382
  this.coreNode.loadTexture(texture.txType, texture.props, texture.options);
@@ -388,11 +394,11 @@ export class MainOnlyNode extends EventEmitter implements INode {
388
394
  };
389
395
  //#endregion Texture
390
396
 
391
- get shader(): ShaderDesc | null {
397
+ get shader(): ShaderRef | null {
392
398
  return this._shader;
393
399
  }
394
400
 
395
- set shader(shader: ShaderDesc | null) {
401
+ set shader(shader: ShaderRef | null) {
396
402
  if (this._shader === shader) {
397
403
  return;
398
404
  }
@@ -405,6 +411,7 @@ export class MainOnlyNode extends EventEmitter implements INode {
405
411
  destroy(): void {
406
412
  this.emit('beforeDestroy', {});
407
413
  this.parent = null;
414
+ this.texture = null;
408
415
  this.emit('afterDestroy', {});
409
416
  this.removeAllListeners();
410
417
  }
@@ -21,8 +21,8 @@ import type { IAnimationController } from '../../common/IAnimationController.js'
21
21
  import type { INode, INodeAnimatableProps } from '../../main-api/INode.js';
22
22
  import type {
23
23
  RendererMain,
24
- ShaderDesc,
25
- TextureDesc,
24
+ ShaderRef,
25
+ TextureRef,
26
26
  } from '../../main-api/RendererMain.js';
27
27
  import { assertTruthy } from '../../utils.js';
28
28
  import type { NodeStruct } from './NodeStruct.js';
@@ -34,8 +34,8 @@ export class ThreadXMainNode extends SharedNode implements INode {
34
34
  private nextAnimationId = 1;
35
35
  protected _parent: ThreadXMainNode | null = null;
36
36
  protected _children: ThreadXMainNode[] = [];
37
- protected _texture: TextureDesc | null = null;
38
- protected _shader: ShaderDesc | null = null;
37
+ protected _texture: TextureRef | null = null;
38
+ protected _shader: ShaderRef | null = null;
39
39
  private _src = '';
40
40
 
41
41
  /**
@@ -59,14 +59,20 @@ export class ThreadXMainNode extends SharedNode implements INode {
59
59
  super(sharedNodeStruct, extendedCurProps);
60
60
  }
61
61
 
62
- get texture(): TextureDesc | null {
62
+ get texture(): TextureRef | null {
63
63
  return this._texture;
64
64
  }
65
65
 
66
- set texture(texture: TextureDesc | null) {
66
+ set texture(texture: TextureRef | null) {
67
67
  if (this._texture === texture) {
68
68
  return;
69
69
  }
70
+ if (this._texture) {
71
+ this.rendererMain.textureTracker.decrementTextureRefCount(this._texture);
72
+ }
73
+ if (texture) {
74
+ this.rendererMain.textureTracker.incrementTextureRefCount(texture);
75
+ }
70
76
  this._texture = texture;
71
77
  if (texture) {
72
78
  this.emit('loadTexture', texture as unknown as Record<string, unknown>);
@@ -75,11 +81,11 @@ export class ThreadXMainNode extends SharedNode implements INode {
75
81
  }
76
82
  }
77
83
 
78
- get shader(): ShaderDesc | null {
84
+ get shader(): ShaderRef | null {
79
85
  return this._shader;
80
86
  }
81
87
 
82
- set shader(shader: ShaderDesc | null) {
88
+ set shader(shader: ShaderRef | null) {
83
89
  if (this._shader === shader) {
84
90
  return;
85
91
  }
@@ -113,7 +119,7 @@ export class ThreadXMainNode extends SharedNode implements INode {
113
119
  this.texture = null;
114
120
  return;
115
121
  }
116
- this.texture = this.rendererMain.makeTexture('ImageTexture', {
122
+ this.texture = this.rendererMain.createTexture('ImageTexture', {
117
123
  src: imageUrl,
118
124
  });
119
125
  }
@@ -148,4 +154,9 @@ export class ThreadXMainNode extends SharedNode implements INode {
148
154
  get props() {
149
155
  return this.curProps;
150
156
  }
157
+
158
+ override destroy() {
159
+ super.destroy();
160
+ this.texture = null;
161
+ }
151
162
  }
@@ -28,10 +28,7 @@ import { CoreAnimation } from '../../../core/animations/CoreAnimation.js';
28
28
  import { CoreAnimationController } from '../../../core/animations/CoreAnimationController.js';
29
29
  import type { Texture } from '../../../core/textures/Texture.js';
30
30
  import { CoreNode } from '../../../core/CoreNode.js';
31
- import type {
32
- ShaderDesc,
33
- TextureDesc,
34
- } from '../../../main-api/RendererMain.js';
31
+ import type { ShaderRef, TextureRef } from '../../../main-api/RendererMain.js';
35
32
  import type { IAnimationSettings } from '../../../core/animations/CoreAnimation.js';
36
33
  import type { Dimensions } from '../../../common/CommonTypes.js';
37
34
 
@@ -112,19 +109,18 @@ export class ThreadXRendererNode extends SharedNode {
112
109
  });
113
110
  this.on(
114
111
  'loadTexture',
115
- (target: ThreadXRendererNode, textureDesc: TextureDesc) => {
116
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
112
+ (target: ThreadXRendererNode, textureDesc: TextureRef) => {
117
113
  this.coreNode.loadTexture(
118
114
  textureDesc.txType,
119
- textureDesc.props as any,
115
+ textureDesc.props,
120
116
  textureDesc.options,
121
117
  );
122
118
  },
123
119
  );
124
120
  this.on(
125
121
  'loadShader',
126
- (target: ThreadXRendererNode, shaderDesc: ShaderDesc) => {
127
- this.coreNode.loadShader(shaderDesc.shType, shaderDesc.props as any);
122
+ (target: ThreadXRendererNode, shaderDesc: ShaderRef) => {
123
+ this.coreNode.loadShader(shaderDesc.shType, shaderDesc.props);
128
124
  },
129
125
  );
130
126
  this.on('unloadTexture', (target: ThreadXRendererNode) => {