@lightningjs/renderer 0.7.5 → 0.8.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 (252) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +233 -221
  4. package/dist/src/common/CommonTypes.d.ts +12 -0
  5. package/dist/src/core/CoreNode.d.ts +83 -9
  6. package/dist/src/core/CoreNode.js +232 -44
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreTextNode.d.ts +6 -1
  9. package/dist/src/core/CoreTextNode.js +33 -20
  10. package/dist/src/core/CoreTextNode.js.map +1 -1
  11. package/dist/src/core/CoreTextureManager.d.ts +3 -1
  12. package/dist/src/core/CoreTextureManager.js +11 -2
  13. package/dist/src/core/CoreTextureManager.js.map +1 -1
  14. package/dist/src/core/Stage.d.ts +6 -0
  15. package/dist/src/core/Stage.js +16 -1
  16. package/dist/src/core/Stage.js.map +1 -1
  17. package/dist/src/core/TextureMemoryManager.d.ts +12 -0
  18. package/dist/src/core/TextureMemoryManager.js +42 -0
  19. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  20. package/dist/src/core/lib/ImageWorker.d.ts +0 -1
  21. package/dist/src/core/lib/ImageWorker.js +55 -40
  22. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  23. package/dist/src/core/lib/RenderCoords.d.ts +13 -0
  24. package/dist/src/core/lib/RenderCoords.js +63 -0
  25. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  26. package/dist/src/core/lib/WebGlContext.d.ts +414 -0
  27. package/dist/src/core/lib/WebGlContext.js +640 -0
  28. package/dist/src/core/lib/WebGlContext.js.map +1 -0
  29. package/dist/src/core/lib/utils.d.ts +1 -0
  30. package/dist/src/core/lib/utils.js +6 -0
  31. package/dist/src/core/lib/utils.js.map +1 -1
  32. package/dist/src/core/platform.js +8 -0
  33. package/dist/src/core/platform.js.map +1 -1
  34. package/dist/src/core/renderers/CoreContextTexture.d.ts +5 -1
  35. package/dist/src/core/renderers/CoreContextTexture.js +3 -1
  36. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +2 -1
  38. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +2 -2
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +3 -1
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +26 -6
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +4 -2
  45. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +9 -0
  47. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +14 -0
  48. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  49. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +47 -47
  50. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
  51. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
  52. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
  53. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +49 -49
  54. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
  55. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +5 -5
  56. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
  57. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
  59. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
  60. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
  61. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
  62. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +44 -57
  63. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  65. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +33 -39
  66. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  67. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
  68. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
  69. package/dist/src/core/scene/Scene.d.ts +59 -0
  70. package/dist/src/core/scene/Scene.js +106 -0
  71. package/dist/src/core/scene/Scene.js.map +1 -0
  72. package/dist/src/core/text-rendering/TrFontManager.js +30 -25
  73. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +2 -0
  75. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +26 -2
  76. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  77. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +8 -0
  78. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +34 -6
  79. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  80. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.d.ts +8 -0
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js +29 -0
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js.map +1 -0
  83. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +1 -3
  84. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  85. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.d.ts +19 -0
  86. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js +84 -0
  87. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js.map +1 -0
  88. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.d.ts +8 -0
  89. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js +40 -0
  90. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js.map +1 -0
  91. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.d.ts +2 -0
  92. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js +41 -0
  93. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js.map +1 -0
  94. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.d.ts +1 -0
  95. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js +4 -0
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js.map +1 -0
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.d.ts +1 -0
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js +2 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js.map +1 -0
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +20 -0
  101. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +55 -0
  102. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +1 -0
  103. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.d.ts +9 -0
  104. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js +32 -0
  105. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js.map +1 -0
  106. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +31 -0
  107. package/dist/src/core/text-rendering/renderers/TextRenderer.js +26 -0
  108. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  109. package/dist/src/core/textures/ImageTexture.js +16 -2
  110. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  111. package/dist/src/core/textures/Texture.d.ts +27 -2
  112. package/dist/src/core/textures/Texture.js +30 -1
  113. package/dist/src/core/textures/Texture.js.map +1 -1
  114. package/dist/src/core/utils.d.ts +1 -1
  115. package/dist/src/main-api/ICoreDriver.d.ts +1 -0
  116. package/dist/src/main-api/Inspector.js +2 -1
  117. package/dist/src/main-api/Inspector.js.map +1 -1
  118. package/dist/src/main-api/RendererMain.d.ts +15 -0
  119. package/dist/src/main-api/RendererMain.js +7 -1
  120. package/dist/src/main-api/RendererMain.js.map +1 -1
  121. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +1 -0
  122. package/dist/src/render-drivers/main/MainCoreDriver.js +8 -0
  123. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
  124. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +5 -0
  125. package/dist/src/render-drivers/main/MainOnlyNode.js +26 -0
  126. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  127. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -0
  128. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  129. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +2 -0
  130. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -1
  131. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +3 -0
  132. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  133. package/dist/src/render-drivers/threadx/worker/renderer.js +2 -0
  134. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  135. package/dist/src/utils.d.ts +6 -0
  136. package/dist/src/utils.js +9 -1
  137. package/dist/src/utils.js.map +1 -1
  138. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  139. package/exports/core-api.ts +102 -102
  140. package/exports/main-api.ts +60 -60
  141. package/exports/utils.ts +41 -41
  142. package/package.json +1 -1
  143. package/scripts/please-use-pnpm.js +13 -13
  144. package/src/common/CommonTypes.ts +132 -113
  145. package/src/common/EventEmitter.ts +77 -77
  146. package/src/common/IAnimationController.ts +29 -29
  147. package/src/core/CoreExtension.ts +32 -32
  148. package/src/core/CoreNode.ts +1199 -955
  149. package/src/core/CoreShaderManager.ts +243 -243
  150. package/src/core/CoreTextNode.ts +400 -391
  151. package/src/core/CoreTextureManager.ts +339 -326
  152. package/src/core/Stage.ts +375 -354
  153. package/src/core/TextureMemoryManager.ts +66 -0
  154. package/src/core/animations/AnimationManager.ts +38 -38
  155. package/src/core/animations/CoreAnimation.ts +181 -181
  156. package/src/core/animations/CoreAnimationController.ts +148 -148
  157. package/src/core/lib/ContextSpy.ts +41 -41
  158. package/src/core/lib/ImageWorker.ts +149 -135
  159. package/src/core/lib/Matrix3d.ts +290 -290
  160. package/src/core/lib/RenderCoords.ts +86 -0
  161. package/src/core/lib/WebGlContextWrapper.ts +992 -992
  162. package/src/core/lib/textureCompression.ts +152 -152
  163. package/src/core/lib/utils.ts +250 -241
  164. package/src/core/platform.ts +54 -46
  165. package/src/core/renderers/CoreContextTexture.ts +35 -30
  166. package/src/core/renderers/CoreRenderOp.ts +22 -22
  167. package/src/core/renderers/CoreRenderer.ts +63 -63
  168. package/src/core/renderers/CoreShader.ts +41 -41
  169. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +42 -37
  170. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +261 -230
  171. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +107 -107
  172. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +528 -520
  173. package/src/core/renderers/webgl/WebGlCoreShader.ts +337 -337
  174. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  175. package/src/core/renderers/webgl/internal/RendererUtils.ts +148 -131
  176. package/src/core/renderers/webgl/internal/ShaderUtils.ts +136 -136
  177. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  178. package/src/core/renderers/webgl/shaders/DefaultShader.ts +95 -95
  179. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
  180. package/src/core/renderers/webgl/shaders/DynamicShader.ts +474 -474
  181. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +161 -161
  182. package/src/core/renderers/webgl/shaders/SdfShader.ts +174 -174
  183. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
  184. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +86 -86
  185. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
  186. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
  187. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
  188. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +33 -33
  189. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +135 -135
  190. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +145 -145
  191. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
  192. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +160 -176
  193. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +153 -159
  194. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +186 -186
  195. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +121 -121
  196. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +114 -114
  197. package/src/core/text-rendering/TextTextureRendererUtils.ts +189 -189
  198. package/src/core/text-rendering/TrFontManager.ts +170 -166
  199. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +141 -141
  200. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
  201. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
  202. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +169 -169
  203. package/src/core/text-rendering/font-face-types/TrFontFace.ts +105 -105
  204. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +77 -77
  205. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +780 -751
  206. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +741 -741
  207. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +812 -778
  208. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
  209. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
  210. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
  211. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
  212. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +84 -84
  213. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
  214. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
  215. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +391 -393
  216. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
  217. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +51 -51
  218. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
  219. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
  220. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
  221. package/src/core/text-rendering/renderers/TextRenderer.ts +548 -504
  222. package/src/core/textures/ColorTexture.ts +86 -86
  223. package/src/core/textures/ImageTexture.ts +154 -140
  224. package/src/core/textures/NoiseTexture.ts +96 -96
  225. package/src/core/textures/SubTexture.ts +143 -143
  226. package/src/core/textures/Texture.ts +261 -218
  227. package/src/core/utils.ts +224 -224
  228. package/src/env.d.ts +7 -7
  229. package/src/main-api/ICoreDriver.ts +68 -66
  230. package/src/main-api/INode.ts +499 -499
  231. package/src/main-api/Inspector.ts +440 -439
  232. package/src/main-api/RendererMain.ts +676 -652
  233. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +45 -45
  234. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +154 -154
  235. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +54 -54
  236. package/src/render-drivers/main/MainCoreDriver.ts +158 -148
  237. package/src/render-drivers/main/MainOnlyNode.ts +500 -466
  238. package/src/render-drivers/main/MainOnlyTextNode.ts +261 -261
  239. package/src/render-drivers/threadx/NodeStruct.ts +300 -300
  240. package/src/render-drivers/threadx/SharedNode.ts +97 -97
  241. package/src/render-drivers/threadx/TextNodeStruct.ts +211 -211
  242. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +287 -285
  243. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +99 -99
  244. package/src/render-drivers/threadx/ThreadXMainNode.ts +192 -192
  245. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +85 -85
  246. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +112 -110
  247. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +245 -238
  248. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +149 -149
  249. package/src/render-drivers/threadx/worker/renderer.ts +153 -151
  250. package/src/render-drivers/utils.ts +97 -97
  251. package/src/utils.ts +216 -207
  252. package/COPYING +0 -1
package/README.md CHANGED
@@ -1,221 +1,233 @@
1
- # Lightning 3 Renderer (Beta)
2
-
3
- **Warning: This is beta software and all of the exposed APIs are subject to
4
- breaking changes**
5
-
6
- A powerful 2D scene renderer designed for rendering highly performant user
7
- interfaces on web browsers running on embedded devices using WebGL.
8
-
9
- The Renderer is not designed for direct application development but instead
10
- to provide a lightweight API for front-end application frameworks like Bolt and
11
- Solid.
12
-
13
- ## Setup & Commands
14
-
15
- ```
16
- # Install renderer + example dependencies
17
- pnpm install
18
-
19
- # Build Renderer
20
- pnpm build
21
-
22
- # Build Renderer (watch mode)
23
- pnpm watch
24
-
25
- # Run unit tests
26
- pnpm test
27
-
28
- # Run Visual Regression Tests
29
- pnpm test:visual
30
-
31
- # Build API Documentation (builds into ./typedocs folder)
32
- pnpm typedoc
33
-
34
- # Launch Example Tests in dev mode (includes Build Renderer (watch mode))
35
- pnpm start
36
-
37
- # Launch Example Tests in production mode
38
- # IMPORTANT: To run test examples on embedded devices that use older browser versions
39
- # you MUST run the examples in this mode.
40
- pnpm start:prod
41
- ```
42
-
43
- ## Example Tests
44
-
45
- The Example Tests sub-project define a set of tests for various Renderer
46
- features. This is NOT an automated test. The command below will launch a
47
- web server which can be accessed by a web browser for manual testing. However,
48
- many of the Example Tests define Snapshots for the Visual Regression Test Runner
49
- (see below).
50
-
51
- The Example Tests can be launched with:
52
-
53
- ```
54
- pnpm start
55
- ```
56
-
57
- See [examples/README.md](./examples/README.md) for more info.
58
-
59
- ## Visual Regression Tests
60
-
61
- In order to prevent bugs on existing Renderer features when new features or bug
62
- fixes are added, the Renderer includes a Visual Regression Test Runner along
63
- with a set of certified snapshot files that are checked into the repository.
64
-
65
- These tests can be launched with:
66
-
67
- ```
68
- pnpm test:visual
69
- ```
70
-
71
- The captured Snapshots of these tests are optionally defined in the individual
72
- Example Tests.
73
-
74
- See [visual-regression/README.md](./visual-regression/README.md) for more info.
75
-
76
- ## Release Procedure
77
-
78
- See [RELEASE.md](./RELEASE.md)
79
-
80
- ## Main Space vs Core Space
81
-
82
- The Lightning 3 Renderer runs code in two logically seperate environments:
83
- the **Main Space** and the **Core Space**.
84
-
85
- Users of the Renderer will write most of their code for the Main Space using
86
- the **Main API**. This is code that will always run on the browser's main thread
87
- and includes initializing the Renderer, creating/modifying/destroying nodes,
88
- controlling animations, etc.
89
-
90
- The Core Space is where the actual rendering of each UI frame happens and is
91
- mostly meant to be transparent to users of the Renderer. However, the Core Space
92
- is where all of the code that must be tightly coupled to the rendering process
93
- must be loaded and run. The Core Space is extendible by users by writing
94
- **Core Extensions** via the **Core API**. This allows for users to develop their
95
- own shaders, textures, text renderers, dynamic shader effects, and more. Fonts
96
- used in an application must be loaded in this way too. The Core Space exists
97
- seperately from the Main Space because it is allowed to execute on the page's
98
- main thread OR a Web Worker thread. A **Core Driver** (see below) is used to
99
- bridge the Main Space with the Core Space.
100
-
101
- ## Core Drivers
102
-
103
- The Lightning 3 Renderer is designed to be able to use a single thread or
104
- multiple web worker threads based on the configuration of a **Core Driver**.
105
-
106
- A Core Driver essentially acts as a bridge between the Main and Core spaces
107
- defined above.
108
-
109
- The Renderer comes with two Core Drivers: the Main Core Driver for single
110
- threaded rendering and the ThreadX Core Driver for multi-threaded rendering.
111
-
112
- NOTE: The ThreadX Core Driver is experimental and even when the Renderer
113
- graduates from beta may still not be ready for production use.
114
-
115
- ### Main Core Driver
116
-
117
- The Main Core Driver renders your application on the web page's main thread.
118
-
119
- It can be configured into the Renderer like so:
120
-
121
- ```ts
122
- import { MainCoreDriver, RendererMain } from '@lightningjs/renderer';
123
-
124
- const renderer = new RendererMain(
125
- {
126
- // App Config
127
- },
128
- 'app', // App div ID
129
- new MainCoreDriver(), // Main Render driver
130
- );
131
-
132
- // ...
133
- ```
134
-
135
- ### ThreadX Core Driver
136
-
137
- The ThreadX Core Driver renders your application on a seperately spawned
138
- Web Worker thread.
139
-
140
- It can be configured into the Renderer like so:
141
-
142
- ```ts
143
- import {
144
- ThreadXCoreDriver,
145
- RendererMain,
146
- } from '@lightningjs/renderer';
147
-
148
- // The `@lightningjs/vite-plugin-import-chunk-url` Vite plugin is required for this:
149
- import coreWorkerUrl from './common/CoreWorker.js?importChunkUrl';
150
-
151
- const renderer = new RendererMain(
152
- {
153
- // App Config
154
- },
155
- 'app', // App div ID
156
- new ThreadXCoreDriver({
157
- coreWorkerUrl,
158
- });
159
- );
160
- ```
161
-
162
- ## Core Extensions
163
-
164
- To load fonts, and/or other custom code into the Core Space, you must write a
165
- Core Extension and pass it via dynamically importable URL to the initialization
166
- of the Renderer.
167
-
168
- Just like with loading the ThreadX Core Web Worker for the ThreadX, you import
169
- your core extension using the `@lightningjs/vite-plugin-import-chunk-url` plugin so that
170
- it's code is bundled and loaded seperately from your main app's bundle.
171
-
172
- You can write a Core Extension by extending the CoreExtension class from the
173
- Core API like so:
174
-
175
- ```ts
176
- import {
177
- CoreExtension,
178
- WebTrFontFace,
179
- SdfTrFontFace,
180
- type Stage,
181
- } from '@lightning/renderer/core';
182
-
183
- export default class MyCoreExtension extends CoreExtension {
184
- async run(stage: Stage) {
185
- // Load fonts into core
186
- stage.fontManager.addFontFace(
187
- new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
188
- );
189
-
190
- stage.fontManager.addFontFace(
191
- new SdfTrFontFace(
192
- 'Ubuntu',
193
- {},
194
- 'msdf',
195
- stage,
196
- '/fonts/Ubuntu-Regular.msdf.png',
197
- '/fonts/Ubuntu-Regular.msdf.json',
198
- ),
199
- );
200
- }
201
- }
202
- ```
203
-
204
- And then in your application's main entry point you can import it using
205
- `@lightningjs/vite-plugin-import-chunk-url`:
206
-
207
- ```ts
208
- import coreExtensionModuleUrl from './MyCoreExtension.js?importChunkUrl';
209
-
210
- // Set up driver, etc.
211
-
212
- // Initialize the Renderer
213
- const renderer = new RendererMain(
214
- {
215
- // Other Renderer Config...
216
- coreExtensionModule: coreExtensionModuleUrl,
217
- },
218
- 'app',
219
- driver,
220
- );
221
- ```
1
+ # Lightning 3 Renderer (Beta)
2
+
3
+ **Warning: This is beta software and all of the exposed APIs are subject to
4
+ breaking changes**
5
+
6
+ A powerful 2D scene renderer designed for rendering highly performant user
7
+ interfaces on web browsers running on embedded devices using WebGL.
8
+
9
+ The Renderer is not designed for direct application development but instead
10
+ to provide a lightweight API for front-end application frameworks like Bolt and
11
+ Solid.
12
+
13
+ ## Setup & Commands
14
+
15
+ ```
16
+ # Install renderer + example dependencies
17
+ pnpm install
18
+
19
+ # Build Renderer
20
+ pnpm build
21
+
22
+ # Build Renderer (watch mode)
23
+ pnpm watch
24
+
25
+ # Run unit tests
26
+ pnpm test
27
+
28
+ # Run Visual Regression Tests
29
+ pnpm test:visual
30
+
31
+ # Build API Documentation (builds into ./typedocs folder)
32
+ pnpm typedoc
33
+
34
+ # Launch Example Tests in dev mode (includes Build Renderer (watch mode))
35
+ pnpm start
36
+
37
+ # Launch Example Tests in production mode
38
+ # IMPORTANT: To run test examples on embedded devices that use older browser versions
39
+ # you MUST run the examples in this mode.
40
+ pnpm start:prod
41
+ ```
42
+
43
+ ## Browser Targets
44
+
45
+ The Lightning 3 Renderer's goal is to work with the following browser versions and above:
46
+
47
+ - Chrome v38 (Released October 7, 2014)
48
+
49
+ 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.
50
+
51
+ ## Example Tests
52
+
53
+ The Example Tests sub-project define a set of tests for various Renderer
54
+ features. This is NOT an automated test. The command below will launch a
55
+ web server which can be accessed by a web browser for manual testing. However,
56
+ many of the Example Tests define Snapshots for the Visual Regression Test Runner
57
+ (see below).
58
+
59
+ The Example Tests can be launched with:
60
+
61
+ ```
62
+ pnpm start
63
+ ```
64
+
65
+ See [examples/README.md](./examples/README.md) for more info.
66
+
67
+ ## Visual Regression Tests
68
+
69
+ In order to prevent bugs on existing Renderer features when new features or bug
70
+ fixes are added, the Renderer includes a Visual Regression Test Runner along
71
+ with a set of certified snapshot files that are checked into the repository.
72
+
73
+ These tests can be launched with:
74
+
75
+ ```
76
+ pnpm test:visual
77
+ ```
78
+
79
+ The captured Snapshots of these tests are optionally defined in the individual
80
+ Example Tests.
81
+
82
+ See [visual-regression/README.md](./visual-regression/README.md) for more info.
83
+
84
+ ## Manual Regression Tests
85
+
86
+ See [docs/ManualRegressionTests.md].
87
+
88
+ ## Release Procedure
89
+
90
+ See [RELEASE.md](./RELEASE.md)
91
+
92
+ ## Main Space vs Core Space
93
+
94
+ The Lightning 3 Renderer runs code in two logically seperate environments:
95
+ the **Main Space** and the **Core Space**.
96
+
97
+ Users of the Renderer will write most of their code for the Main Space using
98
+ the **Main API**. This is code that will always run on the browser's main thread
99
+ and includes initializing the Renderer, creating/modifying/destroying nodes,
100
+ controlling animations, etc.
101
+
102
+ The Core Space is where the actual rendering of each UI frame happens and is
103
+ mostly meant to be transparent to users of the Renderer. However, the Core Space
104
+ is where all of the code that must be tightly coupled to the rendering process
105
+ must be loaded and run. The Core Space is extendible by users by writing
106
+ **Core Extensions** via the **Core API**. This allows for users to develop their
107
+ own shaders, textures, text renderers, dynamic shader effects, and more. Fonts
108
+ used in an application must be loaded in this way too. The Core Space exists
109
+ seperately from the Main Space because it is allowed to execute on the page's
110
+ main thread OR a Web Worker thread. A **Core Driver** (see below) is used to
111
+ bridge the Main Space with the Core Space.
112
+
113
+ ## Core Drivers
114
+
115
+ The Lightning 3 Renderer is designed to be able to use a single thread or
116
+ multiple web worker threads based on the configuration of a **Core Driver**.
117
+
118
+ A Core Driver essentially acts as a bridge between the Main and Core spaces
119
+ defined above.
120
+
121
+ The Renderer comes with two Core Drivers: the Main Core Driver for single
122
+ threaded rendering and the ThreadX Core Driver for multi-threaded rendering.
123
+
124
+ NOTE: The ThreadX Core Driver is experimental and even when the Renderer
125
+ graduates from beta may still not be ready for production use.
126
+
127
+ ### Main Core Driver
128
+
129
+ The Main Core Driver renders your application on the web page's main thread.
130
+
131
+ It can be configured into the Renderer like so:
132
+
133
+ ```ts
134
+ import { MainCoreDriver, RendererMain } from '@lightningjs/renderer';
135
+
136
+ const renderer = new RendererMain(
137
+ {
138
+ // App Config
139
+ },
140
+ 'app', // App div ID
141
+ new MainCoreDriver(), // Main Render driver
142
+ );
143
+
144
+ // ...
145
+ ```
146
+
147
+ ### ThreadX Core Driver
148
+
149
+ The ThreadX Core Driver renders your application on a seperately spawned
150
+ Web Worker thread.
151
+
152
+ It can be configured into the Renderer like so:
153
+
154
+ ```ts
155
+ import {
156
+ ThreadXCoreDriver,
157
+ RendererMain,
158
+ } from '@lightningjs/renderer';
159
+
160
+ // The `@lightningjs/vite-plugin-import-chunk-url` Vite plugin is required for this:
161
+ import coreWorkerUrl from './common/CoreWorker.js?importChunkUrl';
162
+
163
+ const renderer = new RendererMain(
164
+ {
165
+ // App Config
166
+ },
167
+ 'app', // App div ID
168
+ new ThreadXCoreDriver({
169
+ coreWorkerUrl,
170
+ });
171
+ );
172
+ ```
173
+
174
+ ## Core Extensions
175
+
176
+ To load fonts, and/or other custom code into the Core Space, you must write a
177
+ Core Extension and pass it via dynamically importable URL to the initialization
178
+ of the Renderer.
179
+
180
+ Just like with loading the ThreadX Core Web Worker for the ThreadX, you import
181
+ your core extension using the `@lightningjs/vite-plugin-import-chunk-url` plugin so that
182
+ it's code is bundled and loaded seperately from your main app's bundle.
183
+
184
+ You can write a Core Extension by extending the CoreExtension class from the
185
+ Core API like so:
186
+
187
+ ```ts
188
+ import {
189
+ CoreExtension,
190
+ WebTrFontFace,
191
+ SdfTrFontFace,
192
+ type Stage,
193
+ } from '@lightning/renderer/core';
194
+
195
+ export default class MyCoreExtension extends CoreExtension {
196
+ async run(stage: Stage) {
197
+ // Load fonts into core
198
+ stage.fontManager.addFontFace(
199
+ new WebTrFontFace('Ubuntu', {}, '/fonts/Ubuntu-Regular.ttf'),
200
+ );
201
+
202
+ stage.fontManager.addFontFace(
203
+ new SdfTrFontFace(
204
+ 'Ubuntu',
205
+ {},
206
+ 'msdf',
207
+ stage,
208
+ '/fonts/Ubuntu-Regular.msdf.png',
209
+ '/fonts/Ubuntu-Regular.msdf.json',
210
+ ),
211
+ );
212
+ }
213
+ }
214
+ ```
215
+
216
+ And then in your application's main entry point you can import it using
217
+ `@lightningjs/vite-plugin-import-chunk-url`:
218
+
219
+ ```ts
220
+ import coreExtensionModuleUrl from './MyCoreExtension.js?importChunkUrl';
221
+
222
+ // Set up driver, etc.
223
+
224
+ // Initialize the Renderer
225
+ const renderer = new RendererMain(
226
+ {
227
+ // Other Renderer Config...
228
+ coreExtensionModule: coreExtensionModuleUrl,
229
+ },
230
+ 'app',
231
+ driver,
232
+ );
233
+ ```
@@ -1,3 +1,4 @@
1
+ import type { CoreNodeRenderState } from '../core/CoreNode.js';
1
2
  /**
2
3
  * Types shared between Main Space and Core Space
3
4
  *
@@ -44,6 +45,12 @@ export type NodeTextureFailedPayload = {
44
45
  type: 'texture';
45
46
  error: Error;
46
47
  };
48
+ /**
49
+ * Payload for when texture failed to load
50
+ */
51
+ export type NodeTextureFreedPayload = {
52
+ type: 'texture';
53
+ };
47
54
  /**
48
55
  * Combined type for all failed payloads
49
56
  */
@@ -56,6 +63,11 @@ export type NodeLoadedEventHandler = (target: any, payload: NodeLoadedPayload) =
56
63
  * Event handler for when the texture/text of a node has failed to load
57
64
  */
58
65
  export type NodeFailedEventHandler = (target: any, payload: NodeFailedPayload) => void;
66
+ export type NodeRenderStatePayload = {
67
+ type: 'renderState';
68
+ payload: CoreNodeRenderState;
69
+ };
70
+ export type NodeRenderStateEventHandler = (target: any, payload: NodeRenderStatePayload) => void;
59
71
  /**
60
72
  * Event payload for when an FpsUpdate event is emitted by either the Stage or
61
73
  * MainRenderer
@@ -5,8 +5,15 @@ import type { CoreShader } from './renderers/CoreShader.js';
5
5
  import type { Stage } from './Stage.js';
6
6
  import type { Texture } from './textures/Texture.js';
7
7
  import { EventEmitter } from '../common/EventEmitter.js';
8
- import { type RectWithValid } from './lib/utils.js';
8
+ import { type Bound, type RectWithValid } from './lib/utils.js';
9
9
  import { Matrix3d } from './lib/Matrix3d.js';
10
+ import { RenderCoords } from './lib/RenderCoords.js';
11
+ export declare enum CoreNodeRenderState {
12
+ Init = 0,
13
+ OutOfBounds = 2,
14
+ InBounds = 4,
15
+ InViewport = 8
16
+ }
10
17
  export interface CoreNodeProps {
11
18
  id: number;
12
19
  x: number;
@@ -42,46 +49,96 @@ export interface CoreNodeProps {
42
49
  rotation: number;
43
50
  }
44
51
  type ICoreNode = Omit<CoreNodeProps, 'texture' | 'textureOptions' | 'shader' | 'shaderProps'>;
45
- declare enum UpdateType {
52
+ export declare enum UpdateType {
46
53
  /**
47
54
  * Child updates
48
55
  */
49
56
  Children = 1,
50
57
  /**
51
58
  * Scale/Rotate transform update
59
+ *
60
+ * @remarks
61
+ * CoreNode Properties Updated:
62
+ * - `scaleRotateTransform`
52
63
  */
53
64
  ScaleRotate = 2,
54
65
  /**
55
66
  * Translate transform update (x/y/width/height/pivot/mount)
67
+ *
68
+ * @remarks
69
+ * CoreNode Properties Updated:
70
+ * - `localTransform`
56
71
  */
57
72
  Local = 4,
58
73
  /**
59
- * Global transform update
74
+ * Global Transform update
75
+ *
76
+ * @remarks
77
+ * CoreNode Properties Updated:
78
+ * - `globalTransform`
79
+ * - `renderCoords`
80
+ * - `renderBound`
60
81
  */
61
82
  Global = 8,
62
83
  /**
63
84
  * Clipping rect update
85
+ *
86
+ * @remarks
87
+ * CoreNode Properties Updated:
88
+ * - `clippingRect`
64
89
  */
65
90
  Clipping = 16,
66
91
  /**
67
92
  * Calculated ZIndex update
93
+ *
94
+ * @remarks
95
+ * CoreNode Properties Updated:
96
+ * - `calcZIndex`
68
97
  */
69
98
  CalculatedZIndex = 32,
70
99
  /**
71
100
  * Z-Index Sorted Children update
101
+ *
102
+ * @remarks
103
+ * CoreNode Properties Updated:
104
+ * - `children` (sorts children by their `calcZIndex`)
72
105
  */
73
106
  ZIndexSortedChildren = 64,
74
107
  /**
75
- * Premultiplied Colors
108
+ * Premultiplied Colors update
109
+ *
110
+ * @remarks
111
+ * CoreNode Properties Updated:
112
+ * - `premultipliedColorTl`
113
+ * - `premultipliedColorTr`
114
+ * - `premultipliedColorBl`
115
+ * - `premultipliedColorBr`
76
116
  */
77
117
  PremultipliedColors = 128,
78
118
  /**
79
- * World Alpha
119
+ * World Alpha update
80
120
  *
81
121
  * @remarks
82
- * World Alpha = Parent World Alpha * Alpha
122
+ * CoreNode Properties Updated:
123
+ * - `worldAlpha` = `parent.worldAlpha` * `alpha`
83
124
  */
84
125
  WorldAlpha = 256,
126
+ /**
127
+ * Render State update
128
+ *
129
+ * @remarks
130
+ * CoreNode Properties Updated:
131
+ * - `renderState`
132
+ */
133
+ RenderState = 512,
134
+ /**
135
+ * Is Renderable update
136
+ *
137
+ * @remarks
138
+ * CoreNode Properties Updated:
139
+ * - `isRenderable`
140
+ */
141
+ IsRenderable = 1024,
85
142
  /**
86
143
  * None
87
144
  */
@@ -89,7 +146,7 @@ declare enum UpdateType {
89
146
  /**
90
147
  * All
91
148
  */
92
- All = 511
149
+ All = 2047
93
150
  }
94
151
  export declare class CoreNode extends EventEmitter implements ICoreNode {
95
152
  protected stage: Stage;
@@ -99,20 +156,25 @@ export declare class CoreNode extends EventEmitter implements ICoreNode {
99
156
  globalTransform?: Matrix3d;
100
157
  scaleRotateTransform?: Matrix3d;
101
158
  localTransform?: Matrix3d;
159
+ renderCoords?: RenderCoords;
160
+ renderBound?: Bound;
161
+ strictBound?: Bound;
162
+ preloadBound?: Bound;
102
163
  clippingRect: RectWithValid;
103
164
  isRenderable: boolean;
165
+ renderState: CoreNodeRenderState;
104
166
  worldAlpha: number;
105
167
  premultipliedColorTl: number;
106
168
  premultipliedColorTr: number;
107
169
  premultipliedColorBl: number;
108
170
  premultipliedColorBr: number;
109
171
  calcZIndex: number;
110
- private isComplex;
111
172
  constructor(stage: Stage, props: CoreNodeProps);
112
173
  loadTexture<Type extends keyof TextureMap>(textureType: Type, props: ExtractProps<TextureMap[Type]>, options?: TextureOptions | null): void;
113
174
  unloadTexture(): void;
114
175
  private onTextureLoaded;
115
176
  private onTextureFailed;
177
+ private onTextureFreed;
116
178
  loadShader<Type extends keyof ShaderMap>(shaderType: Type, props: ExtractProps<ShaderMap[Type]>): void;
117
179
  /**
118
180
  * Change types types is used to determine the scope of the changes being applied
@@ -131,7 +193,19 @@ export declare class CoreNode extends EventEmitter implements ICoreNode {
131
193
  * @param delta
132
194
  */
133
195
  update(delta: number, parentClippingRect: RectWithValid): void;
134
- checkIsRenderable(): boolean;
196
+ checkRenderProps(): boolean;
197
+ checkRenderBounds(): CoreNodeRenderState;
198
+ updateRenderState(): void;
199
+ setRenderState(state: CoreNodeRenderState): void;
200
+ /**
201
+ * This function updates the `isRenderable` property based on certain conditions.
202
+ *
203
+ * @returns
204
+ */
205
+ updateIsRenderable(): void;
206
+ onChangeIsRenderable(isRenderable: boolean): void;
207
+ calculateRenderCoords(): void;
208
+ updateBoundingRect(): void;
135
209
  /**
136
210
  * This function calculates the clipping rectangle for a node.
137
211
  *