@lightningjs/renderer 0.9.3 → 1.0.0-rc.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 (295) hide show
  1. package/README.md +0 -82
  2. package/dist/exports/index.d.ts +40 -3
  3. package/dist/exports/index.js +35 -3
  4. package/dist/exports/index.js.map +1 -1
  5. package/dist/src/core/CoreNode.d.ts +462 -46
  6. package/dist/src/core/CoreNode.js +171 -103
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreShaderManager.d.ts +19 -8
  9. package/dist/src/core/CoreShaderManager.js +21 -21
  10. package/dist/src/core/CoreShaderManager.js.map +1 -1
  11. package/dist/src/core/CoreTextNode.d.ts +30 -4
  12. package/dist/src/core/CoreTextNode.js +24 -1
  13. package/dist/src/core/CoreTextNode.js.map +1 -1
  14. package/dist/src/core/CoreTextureManager.d.ts +31 -82
  15. package/dist/src/core/CoreTextureManager.js +39 -126
  16. package/dist/src/core/CoreTextureManager.js.map +1 -1
  17. package/dist/src/core/Stage.d.ts +67 -9
  18. package/dist/src/core/Stage.js +174 -30
  19. package/dist/src/core/Stage.js.map +1 -1
  20. package/dist/src/core/TextureMemoryManager.d.ts +97 -8
  21. package/dist/src/core/TextureMemoryManager.js +142 -19
  22. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  23. package/dist/src/core/animations/CoreAnimation.d.ts +14 -6
  24. package/dist/src/core/animations/CoreAnimation.js +136 -44
  25. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  26. package/dist/src/core/lib/ImageWorker.js +59 -52
  27. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  28. package/dist/src/core/lib/utils.d.ts +1 -0
  29. package/dist/src/core/lib/utils.js +3 -2
  30. package/dist/src/core/lib/utils.js.map +1 -1
  31. package/dist/src/core/platform.js +7 -1
  32. package/dist/src/core/platform.js.map +1 -1
  33. package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
  34. package/dist/src/core/renderers/CoreContextTexture.js +7 -1
  35. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  36. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
  37. package/dist/src/core/renderers/CoreRenderer.js +0 -1
  38. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  39. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
  40. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
  41. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
  43. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
  44. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
  49. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/newShader/abcMock.js +2 -0
  54. package/dist/src/core/renderers/webgl/newShader/abcMock.js.map +1 -0
  55. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
  56. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
  57. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
  59. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
  60. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
  61. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
  63. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
  65. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
  66. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
  67. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
  68. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
  69. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
  70. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  71. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
  72. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
  74. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
  76. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
  77. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
  78. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  79. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
  80. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
  82. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
  83. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
  84. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
  85. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  87. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
  88. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  89. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
  90. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
  91. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  92. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
  93. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  94. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
  95. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
  96. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  97. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
  98. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
  99. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
  101. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  102. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
  103. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  104. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
  105. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  106. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  107. package/dist/src/core/textures/ColorTexture.js +1 -1
  108. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  109. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  110. package/dist/src/core/textures/NoiseTexture.js +3 -0
  111. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  112. package/dist/src/core/textures/SubTexture.d.ts +2 -2
  113. package/dist/src/core/textures/SubTexture.js +5 -1
  114. package/dist/src/core/textures/SubTexture.js.map +1 -1
  115. package/dist/src/core/textures/Texture.d.ts +23 -2
  116. package/dist/src/core/textures/Texture.js +32 -3
  117. package/dist/src/core/textures/Texture.js.map +1 -1
  118. package/dist/src/core/utils.d.ts +7 -0
  119. package/dist/src/core/utils.js +12 -10
  120. package/dist/src/core/utils.js.map +1 -1
  121. package/dist/src/effectsMock.d.ts +13 -0
  122. package/dist/src/effectsMock.js +62 -0
  123. package/dist/src/effectsMock.js.map +1 -0
  124. package/dist/src/main-api/DynamicShaderController.d.ts +28 -0
  125. package/dist/src/main-api/DynamicShaderController.js +55 -0
  126. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  127. package/dist/src/main-api/INode.d.ts +43 -463
  128. package/dist/src/main-api/INode.js +1 -19
  129. package/dist/src/main-api/INode.js.map +1 -1
  130. package/dist/src/main-api/Inspector.d.ts +10 -10
  131. package/dist/src/main-api/Inspector.js +18 -15
  132. package/dist/src/main-api/Inspector.js.map +1 -1
  133. package/dist/src/main-api/Renderer.d.ts +28 -24
  134. package/dist/src/main-api/Renderer.js +22 -103
  135. package/dist/src/main-api/Renderer.js.map +1 -1
  136. package/dist/src/main-api/ShaderController.d.ts +31 -0
  137. package/dist/src/main-api/ShaderController.js +37 -0
  138. package/dist/src/main-api/ShaderController.js.map +1 -0
  139. package/dist/src/test.js +4 -0
  140. package/dist/src/test.js.map +1 -0
  141. package/dist/src/utils.d.ts +1 -0
  142. package/dist/src/utils.js +7 -0
  143. package/dist/src/utils.js.map +1 -1
  144. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  145. package/exports/index.ts +60 -3
  146. package/package.json +8 -7
  147. package/src/core/CoreNode.test.ts +93 -0
  148. package/src/core/CoreNode.ts +675 -187
  149. package/src/core/CoreShaderManager.ts +63 -31
  150. package/src/core/CoreTextNode.ts +41 -9
  151. package/src/core/CoreTextureManager.ts +55 -175
  152. package/src/core/Stage.ts +199 -43
  153. package/src/core/TextureMemoryManager.ts +231 -22
  154. package/src/core/animations/CoreAnimation.ts +193 -68
  155. package/src/core/lib/ImageWorker.ts +79 -52
  156. package/src/core/lib/utils.ts +5 -2
  157. package/src/core/platform.ts +8 -1
  158. package/src/core/renderers/CoreContextTexture.ts +9 -2
  159. package/src/core/renderers/CoreRenderer.ts +5 -2
  160. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
  161. package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
  162. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
  163. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
  164. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
  165. package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
  166. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
  167. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
  168. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
  169. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
  170. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
  171. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
  172. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
  173. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
  174. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
  175. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
  176. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
  177. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
  178. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
  179. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
  180. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
  181. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
  182. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
  183. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
  184. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
  185. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
  186. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
  187. package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
  188. package/src/core/textures/ColorTexture.ts +1 -1
  189. package/src/core/textures/ImageTexture.ts +1 -1
  190. package/src/core/textures/NoiseTexture.ts +4 -1
  191. package/src/core/textures/SubTexture.ts +7 -7
  192. package/src/core/textures/Texture.ts +46 -3
  193. package/src/core/utils.ts +12 -11
  194. package/src/main-api/DynamicShaderController.ts +97 -0
  195. package/src/main-api/INode.ts +56 -479
  196. package/src/main-api/Inspector.ts +37 -39
  197. package/src/main-api/Renderer.ts +543 -0
  198. package/src/main-api/ShaderController.ts +81 -0
  199. package/src/main-api/utils.ts +45 -0
  200. package/src/utils.ts +8 -0
  201. package/dist/exports/core-api.d.ts +0 -74
  202. package/dist/exports/core-api.js +0 -96
  203. package/dist/exports/core-api.js.map +0 -1
  204. package/dist/exports/main-api.d.ts +0 -30
  205. package/dist/exports/main-api.js +0 -45
  206. package/dist/exports/main-api.js.map +0 -1
  207. package/dist/src/core/CoreExtension.d.ts +0 -12
  208. package/dist/src/core/CoreExtension.js +0 -29
  209. package/dist/src/core/CoreExtension.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -36
  211. package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
  212. package/dist/src/main-api/ICoreDriver.d.ts +0 -24
  213. package/dist/src/main-api/ICoreDriver.js +0 -20
  214. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  215. package/dist/src/main-api/RendererMain.d.ts +0 -378
  216. package/dist/src/main-api/RendererMain.js +0 -367
  217. package/dist/src/main-api/RendererMain.js.map +0 -1
  218. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  219. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  220. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  221. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  222. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  223. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  224. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  225. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  226. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  227. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
  228. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
  229. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  230. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
  231. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
  232. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  233. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  234. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
  235. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  236. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
  237. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
  238. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  239. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
  240. package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
  241. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  242. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  243. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
  244. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  245. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
  246. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
  247. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  248. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
  249. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
  250. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  251. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
  252. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
  253. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  254. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  255. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  256. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  257. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  258. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  259. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  260. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  261. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
  262. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  263. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  264. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
  265. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  266. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
  267. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  268. package/dist/src/render-drivers/utils.d.ts +0 -12
  269. package/dist/src/render-drivers/utils.js +0 -74
  270. package/dist/src/render-drivers/utils.js.map +0 -1
  271. package/exports/core-api.ts +0 -102
  272. package/exports/main-api.ts +0 -60
  273. package/src/core/CoreExtension.ts +0 -32
  274. package/src/main-api/ICoreDriver.ts +0 -68
  275. package/src/main-api/RendererMain.ts +0 -685
  276. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
  277. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
  278. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
  279. package/src/render-drivers/main/MainCoreDriver.ts +0 -159
  280. package/src/render-drivers/main/MainOnlyNode.ts +0 -553
  281. package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
  282. package/src/render-drivers/threadx/NodeStruct.ts +0 -320
  283. package/src/render-drivers/threadx/SharedNode.ts +0 -101
  284. package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
  285. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
  286. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
  287. package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
  288. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
  289. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
  290. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
  291. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
  292. package/src/render-drivers/threadx/worker/renderer.ts +0 -156
  293. package/src/render-drivers/utils.ts +0 -102
  294. /package/dist/src/core/renderers/webgl/newShader/{effectsMock.d.ts → abcMock.d.ts} +0 -0
  295. /package/dist/src/{render-drivers/threadx/worker/renderer.d.ts → test.d.ts} +0 -0
@@ -18,19 +18,13 @@
18
18
  */
19
19
 
20
20
  import { EventEmitter } from '../../../common/EventEmitter.js';
21
- import { assertTruthy, mergeColorAlphaPremultiplied } from '../../../utils.js';
21
+ import { assertTruthy } from '../../../utils.js';
22
+ import type { CoreNode } from '../../CoreNode.js';
23
+ import type { CoreTextNode } from '../../CoreTextNode.js';
22
24
  import type { Stage } from '../../Stage.js';
23
- import type { Matrix3d } from '../../lib/Matrix3d.js';
24
25
  import {
25
- intersectRect,
26
- type Bound,
27
- intersectBound,
28
26
  getNormalizedRgbaComponents,
29
- type Rect,
30
27
  getNormalizedAlphaComponent,
31
- type BoundWithValid,
32
- createBound,
33
- type RectWithValid,
34
28
  } from '../../lib/utils.js';
35
29
  import type { ImageTexture } from '../../textures/ImageTexture.js';
36
30
  import { TrFontManager, type FontFamilyMap } from '../TrFontManager.js';
@@ -62,13 +56,6 @@ declare module './TextRenderer.js' {
62
56
  }
63
57
  }
64
58
 
65
- interface CanvasPageInfo {
66
- texture: ImageTexture | undefined;
67
- lineNumStart: number;
68
- lineNumEnd: number;
69
- valid: boolean;
70
- }
71
-
72
59
  function getFontCssString(props: TrProps): string {
73
60
  const { fontFamily, fontStyle, fontWeight, fontStretch, fontSize } = props;
74
61
  return [fontStyle, fontWeight, fontStretch, `${fontSize}px`, fontFamily].join(
@@ -77,9 +64,8 @@ function getFontCssString(props: TrProps): string {
77
64
  }
78
65
 
79
66
  export interface CanvasTextRendererState extends TextRendererState {
67
+ node: CoreTextNode;
80
68
  props: TrProps;
81
-
82
- fontFaceLoadedHandler: (() => void) | undefined;
83
69
  fontInfo:
84
70
  | {
85
71
  fontFace: WebTrFontFace;
@@ -87,28 +73,16 @@ export interface CanvasTextRendererState extends TextRendererState {
87
73
  loaded: boolean;
88
74
  }
89
75
  | undefined;
90
- canvasPages: [CanvasPageInfo, CanvasPageInfo, CanvasPageInfo] | undefined;
76
+ textureNode: CoreNode | undefined;
91
77
  lightning2TextRenderer: LightningTextTextureRenderer;
92
78
  renderInfo: RenderInfo | undefined;
93
- renderWindow: Bound | undefined;
94
- visibleWindow: BoundWithValid;
95
79
  }
96
80
 
97
- /**
98
- * Ephemeral bounds object used for intersection calculations
99
- *
100
- * @remarks
101
- * Used to avoid creating a new object every time we need to intersect
102
- * element bounds.
103
- */
104
- const tmpElementBounds = createBound(0, 0, 0, 0);
105
-
106
81
  export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
107
82
  protected canvas: OffscreenCanvas | HTMLCanvasElement;
108
83
  protected context:
109
84
  | OffscreenCanvasRenderingContext2D
110
85
  | CanvasRenderingContext2D;
111
- private rendererBounds: Bound;
112
86
  /**
113
87
  * Font family map used to store web font faces that were added to the
114
88
  * canvas text renderer.
@@ -124,25 +98,21 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
124
98
  this.canvas = document.createElement('canvas');
125
99
  }
126
100
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
127
- let context = this.canvas.getContext('2d') as
128
- | OffscreenCanvasRenderingContext2D
129
- | CanvasRenderingContext2D
130
- | null;
101
+ let context = this.canvas.getContext('2d', {
102
+ willReadFrequently: true,
103
+ }) as OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;
131
104
  if (!context) {
132
105
  // A browser may appear to support OffscreenCanvas but not actually support the Canvas '2d' context
133
106
  // Here we try getting the context again after falling back to an HTMLCanvasElement.
134
107
  // See: https://github.com/lightning-js/renderer/issues/26#issuecomment-1750438486
135
108
  this.canvas = document.createElement('canvas');
136
- context = this.canvas.getContext('2d');
109
+ context = this.canvas.getContext('2d', {
110
+ willReadFrequently: true,
111
+ });
137
112
  }
138
113
  assertTruthy(context);
139
114
  this.context = context;
140
- this.rendererBounds = {
141
- x1: 0,
142
- y1: 0,
143
- x2: this.stage.options.appWidth,
144
- y2: this.stage.options.appHeight,
145
- };
115
+
146
116
  // Install the default 'san-serif' font face
147
117
  this.addFontFace(
148
118
  new WebTrFontFace({
@@ -197,11 +167,9 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
197
167
  },
198
168
  x: (state, value) => {
199
169
  state.props.x = value;
200
- this.invalidateVisibleWindowCache(state);
201
170
  },
202
171
  y: (state, value) => {
203
172
  state.props.y = value;
204
- this.invalidateVisibleWindowCache(state);
205
173
  },
206
174
  contain: (state, value) => {
207
175
  state.props.contain = value;
@@ -252,9 +220,6 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
252
220
  state.props.overflowSuffix = value;
253
221
  this.invalidateLayoutCache(state);
254
222
  },
255
- // debug: (state, value) => {
256
- // state.props.debug = value;
257
- // },
258
223
  };
259
224
  }
260
225
 
@@ -296,31 +261,26 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
296
261
  faceSet.add(fontFace);
297
262
  }
298
263
 
299
- override createState(props: TrProps): CanvasTextRendererState {
264
+ override createState(
265
+ props: TrProps,
266
+ node: CoreTextNode,
267
+ ): CanvasTextRendererState {
300
268
  return {
269
+ node,
301
270
  props,
302
271
  status: 'initialState',
303
272
  updateScheduled: false,
304
273
  emitter: new EventEmitter(),
305
- canvasPages: undefined,
274
+ textureNode: undefined,
306
275
  lightning2TextRenderer: new LightningTextTextureRenderer(
307
276
  this.canvas,
308
277
  this.context,
309
278
  ),
310
- renderWindow: undefined,
311
- visibleWindow: {
312
- x1: 0,
313
- y1: 0,
314
- x2: 0,
315
- y2: 0,
316
- valid: false,
317
- },
318
279
  renderInfo: undefined,
319
280
  forceFullLayoutCalc: false,
320
281
  textW: 0,
321
282
  textH: 0,
322
283
  fontInfo: undefined,
323
- fontFaceLoadedHandler: undefined,
324
284
  isRenderable: false,
325
285
  debugData: {
326
286
  updateCount: 0,
@@ -338,30 +298,20 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
338
298
  // On the first update call we need to set the status to loading
339
299
  if (state.status === 'initialState') {
340
300
  this.setStatus(state, 'loading');
301
+ // check if we're on screen
302
+ // if (this.isValidOnScreen(state) === true) {
303
+ // this.setStatus(state, 'loading');
304
+ // }
305
+ }
306
+
307
+ if (state.status === 'loaded') {
308
+ // If we're loaded, we don't need to do anything
309
+ return;
341
310
  }
342
311
 
343
312
  // If fontInfo is invalid, we need to establish it
344
313
  if (!state.fontInfo) {
345
- const cssString = getFontCssString(state.props);
346
- const trFontFace = TrFontManager.resolveFontFace(
347
- this.fontFamilyArray,
348
- state.props,
349
- ) as WebTrFontFace | undefined;
350
- assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
351
- state.fontInfo = {
352
- fontFace: trFontFace,
353
- cssString: cssString,
354
- // TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
355
- loaded: false,
356
- };
357
- // If font is not loaded, set up a handler to update the font info when the font loads
358
- if (!state.fontInfo.loaded) {
359
- globalFontSet
360
- .load(cssString)
361
- .then(this.onFontLoaded.bind(this, state, cssString))
362
- .catch(this.onFontLoadError.bind(this, state, cssString));
363
- return;
364
- }
314
+ return this.loadFont(state);
365
315
  }
366
316
 
367
317
  // If we're waiting for a font face to load, don't render anything
@@ -370,402 +320,145 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
370
320
  }
371
321
 
372
322
  if (!state.renderInfo) {
373
- state.lightning2TextRenderer.settings = {
374
- text: state.props.text,
375
- textAlign: state.props.textAlign,
376
- fontFamily: state.props.fontFamily,
377
- trFontFace: state.fontInfo.fontFace,
378
- fontSize: state.props.fontSize,
379
- fontStyle: [
380
- state.props.fontStretch,
381
- state.props.fontStyle,
382
- state.props.fontWeight,
383
- ].join(' '),
384
- textColor: getNormalizedRgbaComponents(state.props.color),
385
- offsetY: state.props.offsetY,
386
- wordWrap: state.props.contain !== 'none',
387
- wordWrapWidth:
388
- state.props.contain === 'none' ? undefined : state.props.width,
389
- letterSpacing: state.props.letterSpacing,
390
- lineHeight: state.props.lineHeight ?? null,
391
- maxLines: state.props.maxLines,
392
- maxHeight:
393
- state.props.contain === 'both'
394
- ? state.props.height - state.props.offsetY
395
- : null,
396
- textBaseline: state.props.textBaseline,
397
- verticalAlign: state.props.verticalAlign,
398
- overflowSuffix: state.props.overflowSuffix,
399
- w: state.props.contain !== 'none' ? state.props.width : undefined,
400
- };
401
- // const renderInfoCalculateTime = performance.now();
402
- state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
403
- // console.log(
404
- // 'Render info calculated in',
405
- // performance.now() - renderInfoCalculateTime,
406
- // 'ms',
407
- // );
323
+ state.renderInfo = this.calculateRenderInfo(state);
408
324
  state.textH = state.renderInfo.lineHeight * state.renderInfo.lines.length;
409
325
  state.textW = state.renderInfo.width;
410
-
411
- // Invalidate renderWindow because the renderInfo changed
412
- state.renderWindow = undefined;
326
+ this.renderSingleCanvasPage(state);
413
327
  }
414
328
 
415
- const { x, y, width, height, scrollY, contain } = state.props;
416
- const { visibleWindow } = state;
417
- let { renderWindow, canvasPages } = state;
418
-
419
- if (!visibleWindow.valid) {
420
- // Figure out whats actually in the bounds of the renderer/canvas (visibleWindow)
421
- const elementBounds = createBound(
422
- x,
423
- y,
424
- contain !== 'none' ? x + width : Infinity,
425
- contain === 'both' ? y + height : Infinity,
426
- tmpElementBounds,
427
- );
428
- /**
429
- * Area that is visible on the screen.
430
- */
431
- intersectBound(this.rendererBounds, elementBounds, visibleWindow);
432
- visibleWindow.valid = true;
433
- }
329
+ // handle scrollable text !!!
330
+ // if (state.isScrollable === true) {
331
+ // return this.renderScrollableCanvasPages(state);
332
+ // }
434
333
 
435
- const visibleWindowHeight = visibleWindow.y2 - visibleWindow.y1;
334
+ // handle single page text
335
+ }
436
336
 
437
- const maxLinesPerCanvasPage = Math.ceil(
438
- visibleWindowHeight / state.renderInfo.lineHeight,
439
- );
337
+ renderSingleCanvasPage(state: CanvasTextRendererState): void {
338
+ assertTruthy(state.renderInfo);
339
+ const node = state.node;
440
340
 
441
- if (visibleWindowHeight === 0) {
442
- // Nothing to render. Clear any canvasPages and existing renderWindow
443
- // Return early.
444
- canvasPages = undefined;
445
- renderWindow = undefined;
446
- this.setStatus(state, 'loaded');
447
- return;
448
- } else if (renderWindow && canvasPages) {
449
- // Return early if we're still viewing inside the established render window
450
- // No need to re-render what we've already rendered
451
- const renderWindowScreenX1 = x + renderWindow.x1;
452
- const renderWindowScreenY1 = y - scrollY + renderWindow.y1;
453
- const renderWindowScreenX2 = x + renderWindow.x2;
454
- const renderWindowScreenY2 = y - scrollY + renderWindow.y2;
455
-
456
- if (
457
- renderWindowScreenX1 <= visibleWindow.x1 &&
458
- renderWindowScreenX2 >= visibleWindow.x2 &&
459
- renderWindowScreenY1 <= visibleWindow.y1 &&
460
- renderWindowScreenY2 >= visibleWindow.y2
341
+ const texture = this.stage.txManager.loadTexture('ImageTexture', {
342
+ src: function (
343
+ this: CanvasTextRenderer,
344
+ lightning2TextRenderer: LightningTextTextureRenderer,
345
+ renderInfo: RenderInfo,
461
346
  ) {
462
- this.setStatus(state, 'loaded');
463
- return;
464
- }
465
- if (renderWindowScreenY2 < visibleWindow.y2) {
466
- // We've scrolled up, so we need to render the next page
467
- renderWindow.y1 += maxLinesPerCanvasPage * state.renderInfo.lineHeight;
468
- renderWindow.y2 += maxLinesPerCanvasPage * state.renderInfo.lineHeight;
469
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
470
- canvasPages.push(canvasPages.shift()!);
471
- canvasPages[2].lineNumStart =
472
- canvasPages[1].lineNumStart + maxLinesPerCanvasPage;
473
- canvasPages[2].lineNumEnd =
474
- canvasPages[2].lineNumStart + maxLinesPerCanvasPage;
475
- canvasPages[2].valid = false;
476
- } else if (renderWindowScreenY1 > visibleWindow.y1) {
477
- // We've scrolled down, so we need to render the previous page
478
- renderWindow.y1 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
479
- renderWindow.y2 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
480
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
481
- canvasPages.unshift(canvasPages.pop()!);
482
- canvasPages[0].lineNumStart =
483
- canvasPages[1].lineNumStart - maxLinesPerCanvasPage;
484
- canvasPages[0].lineNumEnd =
485
- canvasPages[0].lineNumStart + maxLinesPerCanvasPage;
486
- canvasPages[0].valid = false;
487
- }
488
- } else {
489
- const pageHeight = state.renderInfo.lineHeight * maxLinesPerCanvasPage;
490
- const page1Block = Math.ceil(scrollY / pageHeight);
491
- const page1LineStart = page1Block * maxLinesPerCanvasPage;
492
- const page0LineStart = page1LineStart - maxLinesPerCanvasPage;
493
- const page2LineStart = page1LineStart + maxLinesPerCanvasPage;
494
-
495
- // We haven't rendered anything yet, so we need to render the first page
496
- // If canvasPages already exist, let's re-use the textures
497
- canvasPages = [
498
- {
499
- texture: canvasPages?.[0].texture,
500
- lineNumStart: page0LineStart,
501
- lineNumEnd: page0LineStart + maxLinesPerCanvasPage,
502
- valid: false,
503
- },
504
- {
505
- texture: canvasPages?.[1].texture,
506
- lineNumStart: page1LineStart,
507
- lineNumEnd: page1LineStart + maxLinesPerCanvasPage,
508
- valid: false,
509
- },
510
- {
511
- texture: canvasPages?.[2].texture,
512
- lineNumStart: page2LineStart,
513
- lineNumEnd: page2LineStart + maxLinesPerCanvasPage,
514
- valid: false,
515
- },
516
- ];
517
- state.canvasPages = canvasPages;
518
-
519
- const scrollYNearestPage = page1Block * pageHeight;
520
-
521
- renderWindow = {
522
- x1: 0,
523
- y1: scrollYNearestPage - pageHeight,
524
- x2: width,
525
- y2: scrollYNearestPage + pageHeight * 2,
526
- };
527
- }
528
-
529
- state.renderWindow = renderWindow;
530
-
531
- const pageDrawTime = performance.now();
532
- for (const pageInfo of canvasPages) {
533
- if (pageInfo.valid) continue;
534
- if (pageInfo.lineNumStart < 0) {
535
- pageInfo.texture?.setRenderableOwner(state, false);
536
- pageInfo.texture = this.stage.txManager.loadTexture('ImageTexture', {
537
- src: '',
347
+ // load the canvas texture
348
+ assertTruthy(renderInfo);
349
+ lightning2TextRenderer.draw(renderInfo, {
350
+ lines: renderInfo.lines,
351
+ lineWidths: renderInfo.lineWidths,
538
352
  });
539
- pageInfo.texture.setRenderableOwner(state, state.isRenderable);
540
- pageInfo.valid = true;
541
- continue;
542
- }
543
- state.lightning2TextRenderer.draw(state.renderInfo, {
544
- lines: state.renderInfo.lines.slice(
545
- pageInfo.lineNumStart,
546
- pageInfo.lineNumEnd,
547
- ),
548
- lineWidths: state.renderInfo.lineWidths.slice(
549
- pageInfo.lineNumStart,
550
- pageInfo.lineNumEnd,
551
- ),
552
- });
553
- if (!(this.canvas.width === 0 || this.canvas.height === 0)) {
554
- pageInfo.texture?.setRenderableOwner(state, false);
555
- pageInfo.texture = this.stage.txManager.loadTexture(
556
- 'ImageTexture',
557
- {
558
- src: this.context.getImageData(
559
- 0,
560
- 0,
561
- this.canvas.width,
562
- this.canvas.height,
563
- ),
564
- },
565
- {
566
- preload: true,
567
- },
353
+ if (this.canvas.width === 0 || this.canvas.height === 0) {
354
+ return null;
355
+ }
356
+ return this.context.getImageData(
357
+ 0,
358
+ 0,
359
+ this.canvas.width,
360
+ this.canvas.height,
568
361
  );
569
- pageInfo.texture.setRenderableOwner(state, state.isRenderable);
570
- }
571
- pageInfo.valid = true;
362
+ }.bind(this, state.lightning2TextRenderer, state.renderInfo),
363
+ });
364
+ if (state.textureNode) {
365
+ // Use the existing texture node
366
+ state.textureNode.texture = texture;
367
+ } else {
368
+ // Create a new texture node
369
+ const textureNode = this.stage.createNode({
370
+ parent: node,
371
+ texture,
372
+ autosize: true,
373
+ // The alpha channel of the color is ignored when rasterizing the text
374
+ // texture so we need to pass it directly to the texture node.
375
+ alpha: getNormalizedAlphaComponent(state.props.color),
376
+ });
377
+ state.textureNode = textureNode;
572
378
  }
573
- // console.log('pageDrawTime', performance.now() - pageDrawTime, 'ms');
574
379
 
575
- // Report final status
576
380
  this.setStatus(state, 'loaded');
577
381
  }
578
382
 
579
- override renderQuads(
580
- state: CanvasTextRendererState,
581
- transform: Matrix3d,
582
- clippingRect: RectWithValid,
583
- alpha: number,
584
- ): void {
585
- const { stage } = this;
586
-
587
- const { canvasPages, textW = 0, textH = 0, renderWindow } = state;
588
-
589
- if (!canvasPages || !renderWindow) return;
590
-
591
- const { x, y, scrollY, contain, width, height /*, debug*/ } = state.props;
592
-
593
- const elementRect = {
594
- x: x,
595
- y: y,
596
- width: contain !== 'none' ? width : textW,
597
- height: contain === 'both' ? height : textH,
383
+ loadFont = (state: CanvasTextRendererState): void => {
384
+ const cssString = getFontCssString(state.props);
385
+ const trFontFace = TrFontManager.resolveFontFace(
386
+ this.fontFamilyArray,
387
+ state.props,
388
+ ) as WebTrFontFace | undefined;
389
+ assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
390
+ state.fontInfo = {
391
+ fontFace: trFontFace,
392
+ cssString: cssString,
393
+ // TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
394
+ loaded: false,
598
395
  };
599
-
600
- const visibleRect = intersectRect(
601
- {
602
- x: 0,
603
- y: 0,
604
- width: stage.options.appWidth,
605
- height: stage.options.appHeight,
606
- },
607
- elementRect,
608
- );
609
-
610
- // if (!debug.disableScissor) {
611
- // renderer.enableScissor(
612
- // visibleRect.x,
613
- // visibleRect.y,
614
- // visibleRect.w,
615
- // visibleRect.h,
616
- // );
617
- // }
618
-
619
- assertTruthy(canvasPages, 'canvasPages is not defined');
620
- assertTruthy(renderWindow, 'renderWindow is not defined');
621
-
622
- const renderWindowHeight = renderWindow.y2 - renderWindow.y1;
623
- const pageSize = renderWindowHeight / 3.0;
624
-
625
- const { zIndex, color } = state.props;
626
-
627
- // Color alpha of text is not properly rendered to the Canvas texture, so we
628
- // need to apply it here.
629
- const combinedAlpha = alpha * getNormalizedAlphaComponent(color);
630
- const quadColor = mergeColorAlphaPremultiplied(0xffffffff, combinedAlpha);
631
- if (canvasPages[0].valid) {
632
- this.stage.renderer.addQuad({
633
- alpha: combinedAlpha,
634
- clippingRect,
635
- colorBl: quadColor,
636
- colorBr: quadColor,
637
- colorTl: quadColor,
638
- colorTr: quadColor,
639
- width: canvasPages[0].texture?.dimensions?.width || 0,
640
- height: canvasPages[0].texture?.dimensions?.height || 0,
641
- texture: canvasPages[0].texture!,
642
- textureOptions: {},
643
- shader: null,
644
- shaderProps: null,
645
- zIndex,
646
- tx: transform.tx,
647
- ty: transform.ty - scrollY + renderWindow.y1,
648
- ta: transform.ta,
649
- tb: transform.tb,
650
- tc: transform.tc,
651
- td: transform.td,
652
- });
653
- }
654
- if (canvasPages[1].valid) {
655
- this.stage.renderer.addQuad({
656
- alpha: combinedAlpha,
657
- clippingRect,
658
- colorBl: quadColor,
659
- colorBr: quadColor,
660
- colorTl: quadColor,
661
- colorTr: quadColor,
662
- width: canvasPages[1].texture?.dimensions?.width || 0,
663
- height: canvasPages[1].texture?.dimensions?.height || 0,
664
- texture: canvasPages[1].texture!,
665
- textureOptions: {},
666
- shader: null,
667
- shaderProps: null,
668
- zIndex,
669
- tx: transform.tx,
670
- ty: transform.ty - scrollY + renderWindow.y1 + pageSize,
671
- ta: transform.ta,
672
- tb: transform.tb,
673
- tc: transform.tc,
674
- td: transform.td,
675
- });
676
- }
677
- if (canvasPages[2].valid) {
678
- this.stage.renderer.addQuad({
679
- alpha: combinedAlpha,
680
- clippingRect,
681
- colorBl: quadColor,
682
- colorBr: quadColor,
683
- colorTl: quadColor,
684
- colorTr: quadColor,
685
- width: canvasPages[2].texture?.dimensions?.width || 0,
686
- height: canvasPages[2].texture?.dimensions?.height || 0,
687
- texture: canvasPages[2].texture!,
688
- textureOptions: {},
689
- shader: null,
690
- shaderProps: null,
691
- zIndex,
692
- tx: transform.tx,
693
- ty: transform.ty - scrollY + renderWindow.y1 + pageSize + pageSize,
694
- ta: transform.ta,
695
- tb: transform.tb,
696
- tc: transform.tc,
697
- td: transform.td,
698
- });
396
+ // If font is not loaded, set up a handler to update the font info when the font loads
397
+ if (!state.fontInfo.loaded) {
398
+ globalFontSet
399
+ .load(cssString)
400
+ .then(this.onFontLoaded.bind(this, state, cssString))
401
+ .catch(this.onFontLoadError.bind(this, state, cssString));
402
+ return;
699
403
  }
700
-
701
- // renderer.disableScissor();
702
-
703
- // if (debug.showElementRect) {
704
- // this.renderer.drawBorder(
705
- // Colors.Blue,
706
- // elementRect.x,
707
- // elementRect.y,
708
- // elementRect.w,
709
- // elementRect.h,
710
- // );
711
- // }
712
-
713
- // if (debug.showVisibleRect) {
714
- // this.renderer.drawBorder(
715
- // Colors.Green,
716
- // visibleRect.x,
717
- // visibleRect.y,
718
- // visibleRect.w,
719
- // visibleRect.h,
720
- // );
721
- // }
722
-
723
- // if (debug.showRenderWindow && renderWindow) {
724
- // this.renderer.drawBorder(
725
- // Colors.Red,
726
- // x + renderWindow.x1,
727
- // y + renderWindow.y1 - scrollY,
728
- // x + renderWindow.x2 - (x + renderWindow.x1),
729
- // y + renderWindow.y2 - scrollY - (y + renderWindow.y1 - scrollY),
730
- // );
731
- // }
404
+ };
405
+
406
+ calculateRenderInfo(state: CanvasTextRendererState): RenderInfo {
407
+ state.lightning2TextRenderer.settings = {
408
+ text: state.props.text,
409
+ textAlign: state.props.textAlign,
410
+ fontFamily: state.props.fontFamily,
411
+ trFontFace: state.fontInfo?.fontFace,
412
+ fontSize: state.props.fontSize,
413
+ fontStyle: [
414
+ state.props.fontStretch,
415
+ state.props.fontStyle,
416
+ state.props.fontWeight,
417
+ ].join(' '),
418
+ textColor: getNormalizedRgbaComponents(state.props.color),
419
+ offsetY: state.props.offsetY,
420
+ wordWrap: state.props.contain !== 'none',
421
+ wordWrapWidth:
422
+ state.props.contain === 'none' ? undefined : state.props.width,
423
+ letterSpacing: state.props.letterSpacing,
424
+ lineHeight: state.props.lineHeight ?? null,
425
+ maxLines: state.props.maxLines,
426
+ maxHeight:
427
+ state.props.contain === 'both'
428
+ ? state.props.height - state.props.offsetY
429
+ : null,
430
+ textBaseline: state.props.textBaseline,
431
+ verticalAlign: state.props.verticalAlign,
432
+ overflowSuffix: state.props.overflowSuffix,
433
+ w: state.props.contain !== 'none' ? state.props.width : undefined,
434
+ };
435
+ state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
436
+ return state.renderInfo;
732
437
  }
733
438
 
734
- override setIsRenderable(
735
- state: CanvasTextRendererState,
736
- renderable: boolean,
737
- ): void {
738
- super.setIsRenderable(state, renderable);
739
- // Set state object owner from any canvas page textures
740
- state.canvasPages?.forEach((pageInfo) => {
741
- pageInfo.texture?.setRenderableOwner(state, renderable);
742
- });
439
+ override renderQuads(): void {
440
+ // Do nothing. The renderer will render the child node(s) that were created
441
+ // in the state update.
442
+ return;
743
443
  }
744
444
 
745
445
  override destroyState(state: CanvasTextRendererState): void {
446
+ if (state.status === 'destroyed') {
447
+ return;
448
+ }
746
449
  super.destroyState(state);
747
- // Remove state object owner from any canvas page textures
748
- state.canvasPages?.forEach((pageInfo) => {
749
- pageInfo.texture?.setRenderableOwner(state, false);
750
- });
751
- }
752
- //#endregion Overrides
753
450
 
754
- /**
755
- * Invalidate the visible window stored in the state. This will cause a new
756
- * visible window to be calculated on the next update.
757
- *
758
- * @param state
759
- */
760
- protected invalidateVisibleWindowCache(state: CanvasTextRendererState): void {
761
- state.visibleWindow.valid = false;
762
- this.setStatus(state, 'loading');
763
- this.scheduleUpdateState(state);
451
+ if (state.textureNode) {
452
+ state.textureNode.destroy();
453
+ delete state.textureNode;
454
+ }
455
+ delete state.renderInfo;
764
456
  }
457
+ //#endregion Overrides
765
458
 
766
459
  /**
767
460
  * Invalidate the layout cache stored in the state. This will cause the text
768
- * to be re-layed out on the next update.
461
+ * to be re-rendered on the next update.
769
462
  *
770
463
  * @remarks
771
464
  * This also invalidates the visible window cache.
@@ -774,7 +467,6 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
774
467
  */
775
468
  private invalidateLayoutCache(state: CanvasTextRendererState): void {
776
469
  state.renderInfo = undefined;
777
- state.visibleWindow.valid = false;
778
470
  this.setStatus(state, 'loading');
779
471
  this.scheduleUpdateState(state);
780
472
  }