@lightningjs/renderer 1.0.1 → 2.0.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 (87) hide show
  1. package/README.md +17 -0
  2. package/dist/exports/canvas.d.ts +18 -0
  3. package/dist/exports/canvas.js +37 -0
  4. package/dist/exports/canvas.js.map +1 -0
  5. package/dist/exports/index.d.ts +2 -4
  6. package/dist/exports/index.js +1 -3
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/inspector.d.ts +1 -0
  9. package/dist/exports/inspector.js +20 -0
  10. package/dist/exports/inspector.js.map +1 -0
  11. package/dist/exports/webgl.d.ts +19 -0
  12. package/dist/exports/webgl.js +38 -0
  13. package/dist/exports/webgl.js.map +1 -0
  14. package/dist/src/common/EventEmitter.d.ts +1 -1
  15. package/dist/src/common/IAnimationController.d.ts +1 -1
  16. package/dist/src/common/IEventEmitter.d.ts +8 -0
  17. package/dist/src/common/IEventEmitter.js +18 -0
  18. package/dist/src/common/IEventEmitter.js.map +1 -0
  19. package/dist/src/core/CoreNode.d.ts +58 -0
  20. package/dist/src/core/CoreNode.js +57 -1
  21. package/dist/src/core/CoreNode.js.map +1 -1
  22. package/dist/src/core/CoreTextNode.d.ts +2 -2
  23. package/dist/src/core/CoreTextNode.js +20 -30
  24. package/dist/src/core/CoreTextNode.js.map +1 -1
  25. package/dist/src/core/Stage.d.ts +11 -5
  26. package/dist/src/core/Stage.js +54 -26
  27. package/dist/src/core/Stage.js.map +1 -1
  28. package/dist/src/core/TextureMemoryManager.js +4 -2
  29. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  30. package/dist/src/core/animations/CoreAnimation.js +1 -1
  31. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  32. package/dist/src/core/lib/ImageWorker.d.ts +1 -1
  33. package/dist/src/core/lib/ImageWorker.js +25 -3
  34. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  35. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  36. package/dist/src/core/lib/textureSvg.js +63 -0
  37. package/dist/src/core/lib/textureSvg.js.map +1 -0
  38. package/dist/src/core/text-rendering/TrFontManager.js +11 -4
  39. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
  40. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +13 -5
  41. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  42. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +1 -0
  43. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +1 -0
  44. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  45. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +1 -0
  46. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +1 -0
  47. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  48. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -0
  49. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  50. package/dist/src/core/textures/ImageTexture.d.ts +52 -0
  51. package/dist/src/core/textures/ImageTexture.js +78 -31
  52. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  53. package/dist/src/core/textures/Texture.d.ts +1 -0
  54. package/dist/src/core/textures/Texture.js +1 -0
  55. package/dist/src/core/textures/Texture.js.map +1 -1
  56. package/dist/src/main-api/Inspector.js +2 -2
  57. package/dist/src/main-api/Inspector.js.map +1 -1
  58. package/dist/src/main-api/Renderer.d.ts +50 -8
  59. package/dist/src/main-api/Renderer.js +8 -7
  60. package/dist/src/main-api/Renderer.js.map +1 -1
  61. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -0
  63. package/exports/canvas.ts +37 -0
  64. package/exports/index.ts +3 -3
  65. package/exports/inspector.ts +20 -0
  66. package/exports/webgl.ts +38 -0
  67. package/package.json +5 -7
  68. package/src/common/EventEmitter.ts +1 -1
  69. package/src/common/IAnimationController.ts +1 -1
  70. package/src/common/IEventEmitter.ts +28 -0
  71. package/src/core/CoreNode.test.ts +1 -0
  72. package/src/core/CoreNode.ts +120 -1
  73. package/src/core/CoreTextNode.ts +58 -65
  74. package/src/core/Stage.ts +88 -36
  75. package/src/core/TextureMemoryManager.ts +4 -2
  76. package/src/core/animations/CoreAnimation.ts +2 -1
  77. package/src/core/lib/ImageWorker.ts +44 -7
  78. package/src/core/lib/textureSvg.ts +78 -0
  79. package/src/core/text-rendering/TrFontManager.ts +15 -4
  80. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +15 -8
  81. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +2 -0
  82. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -0
  83. package/src/core/text-rendering/renderers/TextRenderer.ts +1 -0
  84. package/src/core/textures/ImageTexture.ts +159 -35
  85. package/src/core/textures/Texture.ts +2 -0
  86. package/src/main-api/Inspector.ts +2 -2
  87. package/src/main-api/Renderer.ts +59 -15
@@ -21,7 +21,6 @@
21
21
  import type { EffectMap, ShaderMap } from '../core/CoreShaderManager.js';
22
22
  import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
23
23
  import { EventEmitter } from '../common/EventEmitter.js';
24
- import { Inspector } from './Inspector.js';
25
24
  import { assertTruthy, isProductionEnvironment } from '../utils.js';
26
25
  import { Stage } from '../core/Stage.js';
27
26
  import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
@@ -40,6 +39,11 @@ import type {
40
39
  EffectDescUnion,
41
40
  } from '../core/renderers/webgl/shaders/effects/ShaderEffect.js';
42
41
  import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
42
+ import type { CanvasTextRenderer } from '../core/text-rendering/renderers/CanvasTextRenderer.js';
43
+ import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
44
+ import type { WebGlCoreRenderer } from '../core/renderers/webgl/WebGlCoreRenderer.js';
45
+ import type { CanvasCoreRenderer } from '../core/renderers/canvas/CanvasCoreRenderer.js';
46
+ import type { Inspector } from './Inspector.js';
43
47
 
44
48
  /**
45
49
  * An immutable reference to a specific Shader type
@@ -181,21 +185,29 @@ export interface RendererMainSettings {
181
185
  numImageWorkers?: number;
182
186
 
183
187
  /**
184
- * Enable inspector
188
+ * DOM Inspector
185
189
  *
186
190
  * @remarks
187
- * When enabled the renderer will spawn a inspector. The inspector will
188
- * replicate the state of the Nodes created in the renderer and allow
189
- * inspection of the state of the nodes.
191
+ * The inspector will replicate the state of the Nodes created
192
+ * in the renderer and allow inspection of the state of the nodes.
190
193
  *
191
- * @defaultValue `false` (disabled)
192
194
  */
193
- enableInspector?: boolean;
195
+ inspector: typeof Inspector | undefined;
194
196
 
195
197
  /**
196
- * Renderer mode
198
+ * Renderer Engine
199
+ *
200
+ * @remarks
201
+ * The renderer engine to use. Spawns a WebGL or Canvas renderer.
202
+ * WebGL is more performant and supports more features. Canvas is
203
+ * supported on most platforms.
204
+ *
205
+ * Note: When using CanvasCoreRenderer you can only use
206
+ * CanvasTextRenderer. The WebGLCoreRenderer supports
207
+ * both CanvasTextRenderer and SdfTextRenderer for Text Rendering.
208
+ *
197
209
  */
198
- renderMode?: 'webgl' | 'canvas';
210
+ renderEngine: typeof CanvasCoreRenderer | typeof WebGlCoreRenderer;
199
211
 
200
212
  /**
201
213
  * Quad buffer size in bytes
@@ -203,6 +215,36 @@ export interface RendererMainSettings {
203
215
  * @defaultValue 4 * 1024 * 1024
204
216
  */
205
217
  quadBufferSize?: number;
218
+
219
+ /**
220
+ * Font Engines
221
+ *
222
+ * @remarks
223
+ * The font engines to use for text rendering. CanvasTextRenderer is supported
224
+ * on all platforms. SdfTextRenderer is a more performant renderer.
225
+ * When using `renderEngine=CanvasCoreRenderer` you can only use `CanvasTextRenderer`.
226
+ * The `renderEngine=WebGLCoreRenderer` supports both `CanvasTextRenderer` and `SdfTextRenderer`.
227
+ *
228
+ * This setting is used to enable tree shaking of unused font engines. Please
229
+ * import your font engine(s) as follows:
230
+ * ```
231
+ * import { CanvasTextRenderer } from '@lightning/renderer/canvas';
232
+ * import { SdfTextRenderer } from '@lightning/renderer/webgl';
233
+ * ```
234
+ *
235
+ * If both CanvasTextRenderer and SdfTextRenderer are provided, the first renderer
236
+ * provided will be asked first if it can render the font. If it cannot render the
237
+ * font, the next renderer will be asked. If no renderer can render the font, the
238
+ * text will not be rendered.
239
+ *
240
+ * **Note** that if you have fonts available in both engines the second font engine
241
+ * will not be used. This is because the first font engine will always be asked first.
242
+ *
243
+ * @defaultValue '[]'
244
+ *
245
+ *
246
+ */
247
+ fontEngines: (typeof SdfTextRenderer | typeof CanvasTextRenderer)[];
206
248
  }
207
249
 
208
250
  /**
@@ -288,9 +330,10 @@ export class RendererMain extends EventEmitter {
288
330
  numImageWorkers:
289
331
  settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
290
332
  enableContextSpy: settings.enableContextSpy ?? false,
291
- enableInspector: settings.enableInspector ?? false,
292
- renderMode: settings.renderMode ?? 'webgl',
333
+ inspector: settings.inspector,
334
+ renderEngine: settings.renderEngine,
293
335
  quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
336
+ fontEngines: settings.fontEngines,
294
337
  };
295
338
  this.settings = resolvedSettings;
296
339
 
@@ -299,7 +342,7 @@ export class RendererMain extends EventEmitter {
299
342
  appHeight,
300
343
  deviceLogicalPixelRatio,
301
344
  devicePhysicalPixelRatio,
302
- enableInspector,
345
+ inspector,
303
346
  } = resolvedSettings;
304
347
 
305
348
  const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
@@ -325,10 +368,11 @@ export class RendererMain extends EventEmitter {
325
368
  enableContextSpy: this.settings.enableContextSpy,
326
369
  fpsUpdateInterval: this.settings.fpsUpdateInterval,
327
370
  numImageWorkers: this.settings.numImageWorkers,
328
- renderMode: this.settings.renderMode,
371
+ renderEngine: this.settings.renderEngine,
329
372
  textureMemory: resolvedTxSettings,
330
373
  eventBus: this,
331
374
  quadBufferSize: this.settings.quadBufferSize,
375
+ fontEngines: this.settings.fontEngines,
332
376
  });
333
377
 
334
378
  // Extract the root node
@@ -351,8 +395,8 @@ export class RendererMain extends EventEmitter {
351
395
  targetEl.appendChild(canvas);
352
396
 
353
397
  // Initialize inspector (if enabled)
354
- if (enableInspector && !isProductionEnvironment()) {
355
- this.inspector = new Inspector(canvas, resolvedSettings);
398
+ if (inspector && !isProductionEnvironment()) {
399
+ this.inspector = new inspector(canvas, resolvedSettings);
356
400
  }
357
401
  }
358
402