@lightningjs/renderer 2.1.2 → 2.3.0

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 (138) hide show
  1. package/README.md +1 -4
  2. package/dist/exports/core-api.d.ts +74 -0
  3. package/dist/exports/core-api.js +96 -0
  4. package/dist/exports/core-api.js.map +1 -0
  5. package/dist/exports/index.d.ts +1 -0
  6. package/dist/exports/index.js +1 -0
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/main-api.d.ts +30 -0
  9. package/dist/exports/main-api.js +45 -0
  10. package/dist/exports/main-api.js.map +1 -0
  11. package/dist/src/common/IAnimationController.d.ts +1 -1
  12. package/dist/src/core/CoreExtension.d.ts +12 -0
  13. package/dist/src/core/CoreExtension.js +29 -0
  14. package/dist/src/core/CoreExtension.js.map +1 -0
  15. package/dist/src/core/CoreNode.d.ts +1 -1
  16. package/dist/src/core/CoreNode.js +45 -46
  17. package/dist/src/core/CoreNode.js.map +1 -1
  18. package/dist/src/core/CoreShaderManager.js +1 -0
  19. package/dist/src/core/CoreShaderManager.js.map +1 -1
  20. package/dist/src/core/Stage.d.ts +1 -0
  21. package/dist/src/core/Stage.js +2 -1
  22. package/dist/src/core/Stage.js.map +1 -1
  23. package/dist/src/core/animations/CoreAnimationController.js +3 -2
  24. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  25. package/dist/src/core/lib/WebGlContextWrapper.d.ts +144 -2
  26. package/dist/src/core/lib/WebGlContextWrapper.js +211 -20
  27. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  28. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  29. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  30. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +4 -3
  31. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  32. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +1 -1
  33. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +8 -18
  34. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  35. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +1 -1
  36. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +2 -1
  38. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +55 -2
  39. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +1 -1
  41. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +6 -6
  43. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +2 -0
  45. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  46. package/dist/src/core/text-rendering/renderers/TextRenderer.js +12 -9
  47. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  48. package/dist/src/core/utils.d.ts +1 -1
  49. package/dist/src/main-api/ICoreDriver.d.ts +24 -0
  50. package/dist/src/main-api/ICoreDriver.js +20 -0
  51. package/dist/src/main-api/ICoreDriver.js.map +1 -0
  52. package/dist/src/main-api/Inspector.js +9 -0
  53. package/dist/src/main-api/Inspector.js.map +1 -1
  54. package/dist/src/main-api/Renderer.d.ts +10 -0
  55. package/dist/src/main-api/Renderer.js +2 -0
  56. package/dist/src/main-api/Renderer.js.map +1 -1
  57. package/dist/src/main-api/RendererMain.d.ts +378 -0
  58. package/dist/src/main-api/RendererMain.js +367 -0
  59. package/dist/src/main-api/RendererMain.js.map +1 -0
  60. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +9 -0
  61. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +38 -0
  62. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +1 -0
  63. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +56 -0
  64. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +101 -0
  65. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -0
  66. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +32 -0
  67. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +28 -0
  68. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +1 -0
  69. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +21 -0
  70. package/dist/src/render-drivers/main/MainCoreDriver.js +115 -0
  71. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -0
  72. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +101 -0
  73. package/dist/src/render-drivers/main/MainOnlyNode.js +425 -0
  74. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -0
  75. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +47 -0
  76. package/dist/src/render-drivers/main/MainOnlyTextNode.js +204 -0
  77. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -0
  78. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +93 -0
  79. package/dist/src/render-drivers/threadx/NodeStruct.js +290 -0
  80. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -0
  81. package/dist/src/render-drivers/threadx/SharedNode.d.ts +40 -0
  82. package/dist/src/render-drivers/threadx/SharedNode.js +61 -0
  83. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -0
  84. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +44 -0
  85. package/dist/src/render-drivers/threadx/TextNodeStruct.js +203 -0
  86. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -0
  87. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +25 -0
  88. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +232 -0
  89. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -0
  90. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +24 -0
  91. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +113 -0
  92. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +1 -0
  93. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +46 -0
  94. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +160 -0
  95. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -0
  96. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +28 -0
  97. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +55 -0
  98. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -0
  99. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +70 -0
  100. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +32 -0
  101. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -0
  102. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +19 -0
  103. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +184 -0
  104. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -0
  105. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +27 -0
  106. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +109 -0
  107. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -0
  108. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +1 -0
  109. package/dist/src/render-drivers/threadx/worker/renderer.js +147 -0
  110. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -0
  111. package/dist/src/render-drivers/utils.d.ts +12 -0
  112. package/dist/src/render-drivers/utils.js +74 -0
  113. package/dist/src/render-drivers/utils.js.map +1 -0
  114. package/dist/src/utils.d.ts +1 -1
  115. package/dist/src/utils.js +2 -2
  116. package/dist/src/utils.js.map +1 -1
  117. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -0
  119. package/exports/index.ts +1 -0
  120. package/package.json +1 -1
  121. package/src/common/IAnimationController.ts +5 -1
  122. package/src/core/CoreNode.ts +57 -55
  123. package/src/core/CoreShaderManager.ts +1 -0
  124. package/src/core/Stage.ts +3 -0
  125. package/src/core/animations/CoreAnimationController.ts +3 -2
  126. package/src/core/lib/WebGlContextWrapper.ts +288 -26
  127. package/src/core/renderers/CoreRenderer.ts +1 -0
  128. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +8 -3
  129. package/src/core/renderers/webgl/WebGlCoreShader.ts +21 -28
  130. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +1 -1
  131. package/src/core/renderers/webgl/shaders/DynamicShader.ts +75 -3
  132. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +4 -1
  133. package/src/core/renderers/webgl/shaders/SdfShader.ts +21 -6
  134. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +3 -0
  135. package/src/core/text-rendering/renderers/TextRenderer.ts +18 -18
  136. package/src/main-api/Inspector.ts +12 -0
  137. package/src/main-api/Renderer.ts +13 -0
  138. package/src/utils.ts +2 -1
@@ -431,24 +431,24 @@ export abstract class TextRenderer<
431
431
  };
432
432
  // For each prop setter add a wrapper method that checks if the prop is
433
433
  // different before calling the setter
434
- this.set = Object.freeze(
435
- Object.fromEntries(
436
- Object.entries(propSetters).map(([key, setter]) => {
437
- return [
438
- key as keyof TrProps,
439
- (state: StateT, value: TrProps[keyof TrProps]) => {
440
- if (state.props[key as keyof TrProps] !== value) {
441
- setter(state, value as never);
442
- // Assume any prop change will require a render
443
- // This is required because otherwise a paused RAF will result
444
- // in renders when text props are changed.
445
- this.stage.requestRender();
446
- }
447
- },
448
- ];
449
- }),
450
- ),
451
- ) as typeof this.set;
434
+ const propSet = {};
435
+ Object.keys(propSetters).forEach((key) => {
436
+ Object.defineProperty(propSet, key, {
437
+ value: (state: StateT, value: TrProps[keyof TrProps]) => {
438
+ // Check if the current prop value is different before calling the setter
439
+ if (state.props[key as keyof TrProps] !== value) {
440
+ propSetters[key as keyof TrPropSetters](state, value as never);
441
+
442
+ // Assume any prop change will require a render
443
+ // This ensures that renders are triggered appropriately even with RAF paused
444
+ this.stage.requestRender();
445
+ }
446
+ },
447
+ writable: false, // Prevents property from being changed
448
+ configurable: false, // Prevents property from being deleted
449
+ });
450
+ });
451
+ this.set = propSet as Readonly<TrPropSetters<StateT>>;
452
452
  }
453
453
 
454
454
  setStatus(state: StateT, status: StateT['status'], error?: Error) {
@@ -246,6 +246,18 @@ export class Inspector {
246
246
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
247
247
  (node as any).div = div;
248
248
 
249
+ node.on('inViewport', () => {
250
+ div.setAttribute('state', 'inViewport');
251
+ });
252
+
253
+ node.on('inBounds', () => {
254
+ div.setAttribute('state', 'inBounds');
255
+ });
256
+
257
+ node.on('outOfBounds', () => {
258
+ div.setAttribute('state', 'outOfBounds');
259
+ });
260
+
249
261
  return this.createProxy(node, div);
250
262
  }
251
263
 
@@ -245,6 +245,17 @@ export interface RendererMainSettings {
245
245
  *
246
246
  */
247
247
  fontEngines: (typeof SdfTextRenderer | typeof CanvasTextRenderer)[];
248
+
249
+ /**
250
+ * Force WebGL2
251
+ *
252
+ * @remarks
253
+ * Force the renderer to use WebGL2. This can be used to force the renderer to
254
+ * use WebGL2 even if the browser supports WebGL1.
255
+ *
256
+ * @defaultValue `false`
257
+ */
258
+ forceWebGL2?: boolean;
248
259
  }
249
260
 
250
261
  /**
@@ -330,6 +341,7 @@ export class RendererMain extends EventEmitter {
330
341
  numImageWorkers:
331
342
  settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
332
343
  enableContextSpy: settings.enableContextSpy ?? false,
344
+ forceWebGL2: settings.forceWebGL2 ?? false,
333
345
  inspector: settings.inspector ?? false,
334
346
  renderEngine: settings.renderEngine,
335
347
  quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
@@ -366,6 +378,7 @@ export class RendererMain extends EventEmitter {
366
378
  deviceLogicalPixelRatio: this.settings.deviceLogicalPixelRatio,
367
379
  devicePhysicalPixelRatio: this.settings.devicePhysicalPixelRatio,
368
380
  enableContextSpy: this.settings.enableContextSpy,
381
+ forceWebGL2: this.settings.forceWebGL2,
369
382
  fpsUpdateInterval: this.settings.fpsUpdateInterval,
370
383
  numImageWorkers: this.settings.numImageWorkers,
371
384
  renderEngine: this.settings.renderEngine,
package/src/utils.ts CHANGED
@@ -21,6 +21,7 @@ import type { ContextSpy } from './core/lib/ContextSpy.js';
21
21
 
22
22
  export function createWebGLContext(
23
23
  canvas: HTMLCanvasElement | OffscreenCanvas,
24
+ forceWebGL2 = false,
24
25
  contextSpy: ContextSpy | null,
25
26
  ): WebGLRenderingContext {
26
27
  const config: WebGLContextAttributes = {
@@ -38,7 +39,7 @@ export function createWebGLContext(
38
39
  const gl =
39
40
  // TODO: Remove this assertion once this issue is fixed in TypeScript
40
41
  // https://github.com/microsoft/TypeScript/issues/53614
41
- (canvas.getContext('webgl', config) ||
42
+ (canvas.getContext(forceWebGL2 ? 'webgl2' : 'webgl', config) ||
42
43
  canvas.getContext(
43
44
  'experimental-webgl' as 'webgl',
44
45
  config,