@lightningjs/renderer 2.9.0-beta2 → 2.9.0-beta3

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 (189) hide show
  1. package/COPYING +1 -0
  2. package/LICENSE +202 -202
  3. package/NOTICE +3 -3
  4. package/README.md +147 -147
  5. package/dist/src/core/CoreNode.d.ts +2 -1
  6. package/dist/src/core/CoreNode.js +54 -43
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreTextureManager.d.ts +61 -15
  9. package/dist/src/core/CoreTextureManager.js +179 -104
  10. package/dist/src/core/CoreTextureManager.js.map +1 -1
  11. package/dist/src/core/Stage.d.ts +7 -0
  12. package/dist/src/core/Stage.js +33 -1
  13. package/dist/src/core/Stage.js.map +1 -1
  14. package/dist/src/core/TextureMemoryManager.js +2 -5
  15. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  16. package/dist/src/core/lib/ImageWorker.js +31 -28
  17. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  18. package/dist/src/core/lib/WebGlContextWrapper.d.ts +1 -0
  19. package/dist/src/core/lib/WebGlContextWrapper.js +2 -0
  20. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  21. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  22. package/dist/src/core/renderers/CoreContextTexture.js +1 -0
  23. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  24. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +1 -1
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +13 -5
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  27. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +6 -8
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  29. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +3 -1
  30. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  31. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +1 -2
  32. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +26 -24
  33. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  34. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -1
  35. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +7 -17
  36. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +45 -45
  38. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
  39. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
  40. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
  41. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +62 -62
  42. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
  43. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +6 -6
  44. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
  45. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
  46. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
  47. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
  48. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
  49. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
  50. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +22 -22
  51. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +28 -28
  52. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +10 -10
  53. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
  54. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
  55. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +3 -5
  56. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  57. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +2 -1
  58. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  59. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  60. package/dist/src/core/textures/ColorTexture.js +2 -1
  61. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  62. package/dist/src/core/textures/ImageTexture.d.ts +8 -1
  63. package/dist/src/core/textures/ImageTexture.js +39 -1
  64. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  65. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  66. package/dist/src/core/textures/NoiseTexture.js +2 -1
  67. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  68. package/dist/src/core/textures/RenderTexture.d.ts +1 -1
  69. package/dist/src/core/textures/RenderTexture.js +2 -1
  70. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  71. package/dist/src/core/textures/SubTexture.d.ts +1 -1
  72. package/dist/src/core/textures/SubTexture.js +21 -4
  73. package/dist/src/core/textures/SubTexture.js.map +1 -1
  74. package/dist/src/core/textures/Texture.d.ts +43 -21
  75. package/dist/src/core/textures/Texture.js +105 -33
  76. package/dist/src/core/textures/Texture.js.map +1 -1
  77. package/dist/src/main-api/Renderer.d.ts +18 -0
  78. package/dist/src/main-api/Renderer.js +6 -4
  79. package/dist/src/main-api/Renderer.js.map +1 -1
  80. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  81. package/exports/canvas.ts +39 -39
  82. package/exports/index.ts +89 -89
  83. package/exports/inspector.ts +24 -24
  84. package/exports/utils.ts +44 -44
  85. package/exports/webgl.ts +38 -38
  86. package/package.json +1 -1
  87. package/scripts/please-use-pnpm.js +13 -13
  88. package/src/common/CommonTypes.ts +139 -139
  89. package/src/common/EventEmitter.ts +77 -77
  90. package/src/common/IAnimationController.ts +92 -92
  91. package/src/common/IEventEmitter.ts +28 -28
  92. package/src/core/CoreNode.test.ts +95 -95
  93. package/src/core/CoreNode.ts +2282 -2258
  94. package/src/core/CoreShaderManager.ts +292 -292
  95. package/src/core/CoreTextNode.ts +450 -450
  96. package/src/core/CoreTextureManager.ts +522 -432
  97. package/src/core/Stage.ts +699 -652
  98. package/src/core/TextureMemoryManager.ts +277 -279
  99. package/src/core/animations/AnimationManager.ts +38 -38
  100. package/src/core/animations/CoreAnimation.ts +340 -340
  101. package/src/core/animations/CoreAnimationController.ts +157 -157
  102. package/src/core/lib/ContextSpy.ts +41 -41
  103. package/src/core/lib/ImageWorker.ts +270 -267
  104. package/src/core/lib/Matrix3d.ts +244 -244
  105. package/src/core/lib/RenderCoords.ts +86 -86
  106. package/src/core/lib/WebGlContextWrapper.ts +1322 -1320
  107. package/src/core/lib/textureCompression.ts +152 -152
  108. package/src/core/lib/textureSvg.ts +78 -78
  109. package/src/core/lib/utils.ts +306 -306
  110. package/src/core/platform.ts +61 -61
  111. package/src/core/renderers/CoreContextTexture.ts +43 -42
  112. package/src/core/renderers/CoreRenderOp.ts +22 -22
  113. package/src/core/renderers/CoreRenderer.ts +114 -114
  114. package/src/core/renderers/CoreShader.ts +41 -41
  115. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +364 -353
  116. package/src/core/renderers/canvas/CanvasCoreTexture.ts +150 -149
  117. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -231
  118. package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -69
  119. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -48
  120. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +79 -79
  121. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -48
  122. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +298 -290
  123. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -125
  124. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +805 -817
  125. package/src/core/renderers/webgl/WebGlCoreShader.ts +362 -362
  126. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  127. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -143
  128. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  129. package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -93
  130. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
  131. package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -580
  132. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -167
  133. package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -204
  134. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
  135. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -87
  136. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
  137. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
  138. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
  139. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -159
  140. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -127
  141. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -148
  142. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
  143. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -157
  144. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -171
  145. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -168
  146. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -187
  147. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -110
  148. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -196
  149. package/src/core/text-rendering/TextRenderingUtils.ts +36 -36
  150. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -263
  151. package/src/core/text-rendering/TrFontManager.ts +183 -183
  152. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +169 -171
  153. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
  154. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
  155. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -171
  156. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -187
  157. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +89 -89
  158. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -507
  159. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +798 -798
  160. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -853
  161. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
  162. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
  163. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
  164. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
  165. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -117
  166. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
  167. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
  168. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +403 -403
  169. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
  170. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -52
  171. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
  172. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
  173. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
  174. package/src/core/text-rendering/renderers/TextRenderer.ts +557 -557
  175. package/src/core/textures/ColorTexture.ts +102 -100
  176. package/src/core/textures/ImageTexture.ts +378 -337
  177. package/src/core/textures/NoiseTexture.ts +104 -101
  178. package/src/core/textures/RenderTexture.ts +85 -83
  179. package/src/core/textures/SubTexture.ts +171 -146
  180. package/src/core/textures/Texture.ts +407 -318
  181. package/src/core/utils.ts +227 -227
  182. package/src/env.d.ts +7 -7
  183. package/src/main-api/DynamicShaderController.ts +104 -104
  184. package/src/main-api/INode.ts +101 -101
  185. package/src/main-api/Inspector.ts +505 -505
  186. package/src/main-api/Renderer.ts +693 -670
  187. package/src/main-api/ShaderController.ts +80 -80
  188. package/src/main-api/utils.ts +45 -45
  189. package/src/utils.ts +248 -248
package/README.md CHANGED
@@ -1,147 +1,147 @@
1
- # Lightning 3 Renderer
2
-
3
- A powerful 2D scene renderer designed for rendering highly performant user
4
- interfaces on web browsers running on embedded devices using WebGL.
5
-
6
- The Renderer is part of the [LightningJS](https://lightningjs.io) project. While it is possible to use the renderer directly, it is not recommended. Instead, Lightning 3 works best when combined with [Blits](https://lightningjs.io/v3-docs/blits/getting_started/intro.html).
7
-
8
- ## Setup & Commands
9
-
10
- ```
11
- # Install renderer + example dependencies
12
- pnpm install
13
-
14
- # Build Renderer
15
- pnpm build
16
-
17
- # Build Renderer (watch mode)
18
- pnpm watch
19
-
20
- # Run unit tests
21
- pnpm test
22
-
23
- # Run Visual Regression Tests
24
- pnpm test:visual
25
-
26
- # Build API Documentation (builds into ./typedocs folder)
27
- pnpm typedoc
28
-
29
- # Launch Example Tests in dev mode (includes Build Renderer (watch mode))
30
- pnpm start
31
-
32
- # Launch Example Tests in production mode
33
- # IMPORTANT: To run test examples on embedded devices that use older browser versions
34
- # you MUST run the examples in this mode.
35
- pnpm start:prod
36
- ```
37
-
38
- ## Browser Targets
39
-
40
- The Lightning 3 Renderer's goal is to work with the following browser versions and above:
41
-
42
- - Chrome v38 (Released October 7, 2014)
43
-
44
- Any JavaScript language features or browser APIs that cannot be automatically transpiled or polyfilled by industry standard transpilers (such as Babel) to target these versions must be carefully considered before use.
45
-
46
- For a more detailed and comprehensive list of browsers and their features please see [browsers](./BROWSERS.md).
47
-
48
- ## Example Tests
49
-
50
- The Example Tests sub-project define a set of tests for various Renderer
51
- features. This is NOT an automated test. The command below will launch a
52
- web server which can be accessed by a web browser for manual testing. However,
53
- many of the Example Tests define Snapshots for the Visual Regression Test Runner
54
- (see below).
55
-
56
- The Example Tests can be launched with:
57
-
58
- ```
59
- pnpm start
60
- ```
61
-
62
- A hosted version can be found [here](https://lightning-js.github.io/renderer/).
63
-
64
- This supports modern browsers as well as Chrome 38 and above through a legacy build.
65
-
66
- See [examples/README.md](./examples/README.md) for more info.
67
-
68
- ## Visual Regression Tests
69
-
70
- In order to prevent bugs on existing Renderer features when new features or bug
71
- fixes are added, the Renderer includes a Visual Regression Test Runner along
72
- with a set of certified snapshot files that are checked into the repository.
73
-
74
- These tests can be launched with:
75
-
76
- ```
77
- pnpm test:visual
78
- ```
79
-
80
- The captured Snapshots of these tests are optionally defined in the individual
81
- Example Tests.
82
-
83
- See [visual-regression/README.md](./visual-regression/README.md) for more info.
84
-
85
- ## Manual Regression Tests
86
-
87
- See [docs/ManualRegressionTests.md].
88
-
89
- ## Release Procedure
90
-
91
- See [RELEASE.md](./RELEASE.md)
92
-
93
- ## Installing Fonts
94
-
95
- Fonts can be installed into the Font Manager exposed by the Renderer's Stage.
96
- There are two types of fonts that you can install, Web/Canvas2D fonts (WebTrFontFace)
97
- and SDF fonts (SdfTrFontFace). Install that fonts that your applications needs
98
- at start up so they are ready when your application is rendered.
99
-
100
- ```ts
101
- import {
102
- RendererMain,
103
- WebTrFontFace,
104
- SdfTrFontFace,
105
- } from '@lightningjs/renderer';
106
-
107
- import {
108
- WebGlCoreRenderer,
109
- SdfTextRenderer,
110
- } from '@lightningjs/renderer/webgl';
111
- import { CanvasTextRenderer } from '@lightningjs/renderer/canvas';
112
-
113
- const renderer = new RendererMain(
114
- {
115
- appWidth: 1920,
116
- appHeight: 1080,
117
- renderEngine: WebGlCoreRenderer,
118
- fontEngines: [SdfTextRenderer, CanvasTextRenderer],
119
- // ...Other Renderer Config
120
- },
121
- 'app', // id of div to insert Canvas.
122
- );
123
-
124
- // Load fonts into renderer
125
- renderer.stage.fontManager.addFontFace(
126
- new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
127
- );
128
-
129
- renderer.stage.fontManager.addFontFace(
130
- new SdfTrFontFace(
131
- 'Ubuntu',
132
- {},
133
- 'msdf',
134
- stage,
135
- '/fonts/Ubuntu-Regular.msdf.png',
136
- '/fonts/Ubuntu-Regular.msdf.json',
137
- ),
138
- );
139
- ```
140
-
141
- Please note that the WebGL renderer supports both SDF Fonts and Web Fonts, however the
142
- Canvas renderer only supports Web Fonts:
143
-
144
- | Font Type Renderer | SDF Font | Web Font |
145
- | ------------------ | -------- | -------- |
146
- | WebGL | Y | Y |
147
- | Canvas | N | Y |
1
+ # Lightning 3 Renderer
2
+
3
+ A powerful 2D scene renderer designed for rendering highly performant user
4
+ interfaces on web browsers running on embedded devices using WebGL.
5
+
6
+ The Renderer is part of the [LightningJS](https://lightningjs.io) project. While it is possible to use the renderer directly, it is not recommended. Instead, Lightning 3 works best when combined with [Blits](https://lightningjs.io/v3-docs/blits/getting_started/intro.html).
7
+
8
+ ## Setup & Commands
9
+
10
+ ```
11
+ # Install renderer + example dependencies
12
+ pnpm install
13
+
14
+ # Build Renderer
15
+ pnpm build
16
+
17
+ # Build Renderer (watch mode)
18
+ pnpm watch
19
+
20
+ # Run unit tests
21
+ pnpm test
22
+
23
+ # Run Visual Regression Tests
24
+ pnpm test:visual
25
+
26
+ # Build API Documentation (builds into ./typedocs folder)
27
+ pnpm typedoc
28
+
29
+ # Launch Example Tests in dev mode (includes Build Renderer (watch mode))
30
+ pnpm start
31
+
32
+ # Launch Example Tests in production mode
33
+ # IMPORTANT: To run test examples on embedded devices that use older browser versions
34
+ # you MUST run the examples in this mode.
35
+ pnpm start:prod
36
+ ```
37
+
38
+ ## Browser Targets
39
+
40
+ The Lightning 3 Renderer's goal is to work with the following browser versions and above:
41
+
42
+ - Chrome v38 (Released October 7, 2014)
43
+
44
+ Any JavaScript language features or browser APIs that cannot be automatically transpiled or polyfilled by industry standard transpilers (such as Babel) to target these versions must be carefully considered before use.
45
+
46
+ For a more detailed and comprehensive list of browsers and their features please see [browsers](./BROWSERS.md).
47
+
48
+ ## Example Tests
49
+
50
+ The Example Tests sub-project define a set of tests for various Renderer
51
+ features. This is NOT an automated test. The command below will launch a
52
+ web server which can be accessed by a web browser for manual testing. However,
53
+ many of the Example Tests define Snapshots for the Visual Regression Test Runner
54
+ (see below).
55
+
56
+ The Example Tests can be launched with:
57
+
58
+ ```
59
+ pnpm start
60
+ ```
61
+
62
+ A hosted version can be found [here](https://lightning-js.github.io/renderer/).
63
+
64
+ This supports modern browsers as well as Chrome 38 and above through a legacy build.
65
+
66
+ See [examples/README.md](./examples/README.md) for more info.
67
+
68
+ ## Visual Regression Tests
69
+
70
+ In order to prevent bugs on existing Renderer features when new features or bug
71
+ fixes are added, the Renderer includes a Visual Regression Test Runner along
72
+ with a set of certified snapshot files that are checked into the repository.
73
+
74
+ These tests can be launched with:
75
+
76
+ ```
77
+ pnpm test:visual
78
+ ```
79
+
80
+ The captured Snapshots of these tests are optionally defined in the individual
81
+ Example Tests.
82
+
83
+ See [visual-regression/README.md](./visual-regression/README.md) for more info.
84
+
85
+ ## Manual Regression Tests
86
+
87
+ See [docs/ManualRegressionTests.md].
88
+
89
+ ## Release Procedure
90
+
91
+ See [RELEASE.md](./RELEASE.md)
92
+
93
+ ## Installing Fonts
94
+
95
+ Fonts can be installed into the Font Manager exposed by the Renderer's Stage.
96
+ There are two types of fonts that you can install, Web/Canvas2D fonts (WebTrFontFace)
97
+ and SDF fonts (SdfTrFontFace). Install that fonts that your applications needs
98
+ at start up so they are ready when your application is rendered.
99
+
100
+ ```ts
101
+ import {
102
+ RendererMain,
103
+ WebTrFontFace,
104
+ SdfTrFontFace,
105
+ } from '@lightningjs/renderer';
106
+
107
+ import {
108
+ WebGlCoreRenderer,
109
+ SdfTextRenderer,
110
+ } from '@lightningjs/renderer/webgl';
111
+ import { CanvasTextRenderer } from '@lightningjs/renderer/canvas';
112
+
113
+ const renderer = new RendererMain(
114
+ {
115
+ appWidth: 1920,
116
+ appHeight: 1080,
117
+ renderEngine: WebGlCoreRenderer,
118
+ fontEngines: [SdfTextRenderer, CanvasTextRenderer],
119
+ // ...Other Renderer Config
120
+ },
121
+ 'app', // id of div to insert Canvas.
122
+ );
123
+
124
+ // Load fonts into renderer
125
+ renderer.stage.fontManager.addFontFace(
126
+ new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
127
+ );
128
+
129
+ renderer.stage.fontManager.addFontFace(
130
+ new SdfTrFontFace(
131
+ 'Ubuntu',
132
+ {},
133
+ 'msdf',
134
+ stage,
135
+ '/fonts/Ubuntu-Regular.msdf.png',
136
+ '/fonts/Ubuntu-Regular.msdf.json',
137
+ ),
138
+ );
139
+ ```
140
+
141
+ Please note that the WebGL renderer supports both SDF Fonts and Web Fonts, however the
142
+ Canvas renderer only supports Web Fonts:
143
+
144
+ | Font Type Renderer | SDF Font | Web Font |
145
+ | ------------------ | -------- | -------- |
146
+ | WebGL | Y | Y |
147
+ | Canvas | N | Y |
@@ -1,7 +1,7 @@
1
1
  import type { TextureOptions } from './CoreTextureManager.js';
2
2
  import type { CoreRenderer } from './renderers/CoreRenderer.js';
3
3
  import type { Stage } from './Stage.js';
4
- import type { Texture } from './textures/Texture.js';
4
+ import { type Texture } from './textures/Texture.js';
5
5
  import type { Dimensions } from '../common/CommonTypes.js';
6
6
  import { EventEmitter } from '../common/EventEmitter.js';
7
7
  import { type Bound, type RectWithValid } from './lib/utils.js';
@@ -657,6 +657,7 @@ export declare class CoreNode extends EventEmitter {
657
657
  rttParent: CoreNode | null;
658
658
  constructor(stage: Stage, props: CoreNodeProps);
659
659
  loadTexture(): void;
660
+ createDefaultTexture(): void;
660
661
  unloadTexture(): void;
661
662
  autosizeNode(dimensions: Dimensions): void;
662
663
  private onTextureLoaded;
@@ -17,6 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import { assertTruthy, getNewId, mergeColorAlphaPremultiplied, } from '../utils.js';
20
+ import {} from './textures/Texture.js';
20
21
  import { EventEmitter } from '../common/EventEmitter.js';
21
22
  import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
22
23
  import { Matrix3d } from './lib/Matrix3d.js';
@@ -206,6 +207,7 @@ export class CoreNode extends EventEmitter {
206
207
  UpdateType.Local |
207
208
  UpdateType.RenderBounds |
208
209
  UpdateType.RenderState);
210
+ this.createDefaultTexture();
209
211
  }
210
212
  //#region Textures
211
213
  loadTexture() {
@@ -217,10 +219,6 @@ export class CoreNode extends EventEmitter {
217
219
  // synchronous task after calling loadTexture()
218
220
  queueMicrotask(() => {
219
221
  texture.preventCleanup = this.props.preventCleanup;
220
- // Preload texture if required
221
- if (this.textureOptions.preload) {
222
- texture.ctxTexture.load();
223
- }
224
222
  texture.on('loaded', this.onTextureLoaded);
225
223
  texture.on('failed', this.onTextureFailed);
226
224
  texture.on('freed', this.onTextureFreed);
@@ -246,6 +244,15 @@ export class CoreNode extends EventEmitter {
246
244
  }
247
245
  });
248
246
  }
247
+ createDefaultTexture() {
248
+ // load default texture if no texture is set
249
+ if (this.stage.defaultTexture !== null &&
250
+ this.props.src === null &&
251
+ this.props.texture === null &&
252
+ this.props.rtt === false) {
253
+ this.texture = this.stage.defaultTexture;
254
+ }
255
+ }
249
256
  unloadTexture() {
250
257
  if (this.texture !== null) {
251
258
  this.texture.off('loaded', this.onTextureLoaded);
@@ -262,6 +269,7 @@ export class CoreNode extends EventEmitter {
262
269
  }
263
270
  onTextureLoaded = (_, dimensions) => {
264
271
  this.autosizeNode(dimensions);
272
+ this.setUpdateType(UpdateType.IsRenderable);
265
273
  // Texture was loaded. In case the RAF loop has already stopped, we request
266
274
  // a render to ensure the texture is rendered.
267
275
  this.stage.requestRender();
@@ -269,16 +277,20 @@ export class CoreNode extends EventEmitter {
269
277
  if (this.parentHasRenderTexture) {
270
278
  this.notifyParentRTTOfUpdate();
271
279
  }
272
- this.emit('loaded', {
273
- type: 'texture',
274
- dimensions,
275
- });
280
+ // ignore 1x1 pixel textures
281
+ if (dimensions.width > 1 && dimensions.height > 1) {
282
+ this.emit('loaded', {
283
+ type: 'texture',
284
+ dimensions,
285
+ });
286
+ }
276
287
  // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
277
288
  if (this.props.textureOptions?.resizeMode?.type === 'contain') {
278
289
  this.setUpdateType(UpdateType.Local);
279
290
  }
280
291
  };
281
292
  onTextureFailed = (_, error) => {
293
+ this.setUpdateType(UpdateType.IsRenderable);
282
294
  // If parent has a render texture, flag that we need to update
283
295
  if (this.parentHasRenderTexture) {
284
296
  this.notifyParentRTTOfUpdate();
@@ -289,6 +301,7 @@ export class CoreNode extends EventEmitter {
289
301
  });
290
302
  };
291
303
  onTextureFreed = () => {
304
+ this.setUpdateType(UpdateType.IsRenderable);
292
305
  // If parent has a render texture, flag that we need to update
293
306
  if (this.parentHasRenderTexture) {
294
307
  this.notifyParentRTTOfUpdate();
@@ -549,8 +562,11 @@ export class CoreNode extends EventEmitter {
549
562
  }
550
563
  //check if CoreNode is renderable based on props
551
564
  hasRenderableProperties() {
552
- if (this.props.texture) {
553
- return true;
565
+ if (this.texture !== null) {
566
+ if (this.texture.state === 'loaded') {
567
+ return true;
568
+ }
569
+ return false;
554
570
  }
555
571
  if (!this.props.width || !this.props.height) {
556
572
  return false;
@@ -558,7 +574,7 @@ export class CoreNode extends EventEmitter {
558
574
  if (this.props.shader !== this.stage.defShaderCtr) {
559
575
  return true;
560
576
  }
561
- if (this.props.clipping) {
577
+ if (this.props.clipping === true) {
562
578
  return true;
563
579
  }
564
580
  if (this.props.color !== 0) {
@@ -566,28 +582,14 @@ export class CoreNode extends EventEmitter {
566
582
  }
567
583
  // Consider removing these checks and just using the color property check above.
568
584
  // Maybe add a forceRender prop for nodes that should always render.
569
- if (this.props.colorTop !== 0) {
570
- return true;
571
- }
572
- if (this.props.colorBottom !== 0) {
573
- return true;
574
- }
575
- if (this.props.colorLeft !== 0) {
576
- return true;
577
- }
578
- if (this.props.colorRight !== 0) {
579
- return true;
580
- }
581
- if (this.props.colorTl !== 0) {
582
- return true;
583
- }
584
- if (this.props.colorTr !== 0) {
585
- return true;
586
- }
587
- if (this.props.colorBl !== 0) {
588
- return true;
589
- }
590
- if (this.props.colorBr !== 0) {
585
+ if (this.props.colorTop !== 0 ||
586
+ this.props.colorBottom !== 0 ||
587
+ this.props.colorLeft !== 0 ||
588
+ this.props.colorRight !== 0 ||
589
+ this.props.colorTl !== 0 ||
590
+ this.props.colorTr !== 0 ||
591
+ this.props.colorBl !== 0 ||
592
+ this.props.colorBr !== 0) {
591
593
  return true;
592
594
  }
593
595
  return false;
@@ -691,6 +693,13 @@ export class CoreNode extends EventEmitter {
691
693
  else {
692
694
  newIsRenderable = this.renderState > CoreNodeRenderState.OutOfBounds;
693
695
  }
696
+ // If the texture is not loaded and the node is renderable, load the texture
697
+ // this only needs to happen once or until the texture is no longer loaded
698
+ if (this.texture !== null &&
699
+ this.texture.state === 'freed' &&
700
+ this.renderState > CoreNodeRenderState.OutOfBounds) {
701
+ this.stage.txManager.loadTexture(this.texture);
702
+ }
694
703
  if (this.isRenderable !== newIsRenderable) {
695
704
  this.isRenderable = newIsRenderable;
696
705
  this.onChangeIsRenderable(newIsRenderable);
@@ -813,6 +822,7 @@ export class CoreNode extends EventEmitter {
813
822
  }
814
823
  assertTruthy(this.globalTransform);
815
824
  assertTruthy(this.renderCoords);
825
+ assertTruthy(this.texture);
816
826
  // add to list of renderables to be sorted before rendering
817
827
  renderer.addQuad({
818
828
  width: this.props.width,
@@ -886,11 +896,10 @@ export class CoreNode extends EventEmitter {
886
896
  this.props.width = value;
887
897
  this.setUpdateType(UpdateType.Local);
888
898
  if (this.props.rtt) {
889
- this.texture = this.stage.txManager.loadTexture('RenderTexture', {
899
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
890
900
  width: this.width,
891
901
  height: this.height,
892
902
  });
893
- this.textureOptions.preload = true;
894
903
  this.setUpdateType(UpdateType.RenderTexture);
895
904
  }
896
905
  }
@@ -903,11 +912,10 @@ export class CoreNode extends EventEmitter {
903
912
  this.props.height = value;
904
913
  this.setUpdateType(UpdateType.Local);
905
914
  if (this.props.rtt) {
906
- this.texture = this.stage.txManager.loadTexture('RenderTexture', {
915
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
907
916
  width: this.width,
908
917
  height: this.height,
909
918
  });
910
- this.textureOptions.preload = true;
911
919
  this.setUpdateType(UpdateType.RenderTexture);
912
920
  }
913
921
  }
@@ -1195,11 +1203,12 @@ export class CoreNode extends EventEmitter {
1195
1203
  }
1196
1204
  }
1197
1205
  initRenderTexture() {
1198
- this.texture = this.stage.txManager.loadTexture('RenderTexture', {
1206
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1199
1207
  width: this.width,
1200
1208
  height: this.height,
1201
1209
  });
1202
- this.textureOptions.preload = true;
1210
+ // call load immediately to ensure the texture is created
1211
+ this.stage.txManager.loadTexture(this.texture, true);
1203
1212
  this.stage.renderer?.renderToTexture(this); // Only this RTT node
1204
1213
  }
1205
1214
  cleanupRenderTexture() {
@@ -1263,7 +1272,7 @@ export class CoreNode extends EventEmitter {
1263
1272
  this.texture = null;
1264
1273
  return;
1265
1274
  }
1266
- this.texture = this.stage.txManager.loadTexture('ImageTexture', {
1275
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
1267
1276
  src: imageUrl,
1268
1277
  width: this.props.width,
1269
1278
  height: this.props.height,
@@ -1345,10 +1354,14 @@ export class CoreNode extends EventEmitter {
1345
1354
  this.unloadTexture();
1346
1355
  }
1347
1356
  this.props.texture = value;
1348
- if (value) {
1357
+ if (value !== null) {
1349
1358
  value.setRenderableOwner(this, this.isRenderable);
1350
1359
  this.loadTexture();
1351
1360
  }
1361
+ else {
1362
+ // If the texture is null, create a default texture
1363
+ this.createDefaultTexture();
1364
+ }
1352
1365
  this.setUpdateType(UpdateType.IsRenderable);
1353
1366
  }
1354
1367
  set textureOptions(value) {
@@ -1370,9 +1383,7 @@ export class CoreNode extends EventEmitter {
1370
1383
  }
1371
1384
  animate(props, settings) {
1372
1385
  const animation = new CoreAnimation(this, props, settings);
1373
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
1374
1386
  const controller = new CoreAnimationController(this.stage.animationManager, animation);
1375
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
1376
1387
  return controller;
1377
1388
  }
1378
1389
  flush() {