@lightningjs/renderer 3.0.0-beta1 → 3.0.0-beta11

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 (490) hide show
  1. package/README.md +13 -27
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +1 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/core/CoreNode.d.ts +45 -69
  15. package/dist/src/core/CoreNode.js +323 -305
  16. package/dist/src/core/CoreNode.js.map +1 -1
  17. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  18. package/dist/src/core/CoreShaderManager.js.map +1 -1
  19. package/dist/src/core/CoreTextNode.d.ts +61 -87
  20. package/dist/src/core/CoreTextNode.js +276 -235
  21. package/dist/src/core/CoreTextNode.js.map +1 -1
  22. package/dist/src/core/CoreTextureManager.d.ts +9 -11
  23. package/dist/src/core/CoreTextureManager.js +80 -91
  24. package/dist/src/core/CoreTextureManager.js.map +1 -1
  25. package/dist/src/core/Stage.d.ts +75 -31
  26. package/dist/src/core/Stage.js +270 -136
  27. package/dist/src/core/Stage.js.map +1 -1
  28. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  29. package/dist/src/core/TextureMemoryManager.js +112 -78
  30. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  31. package/dist/src/core/animations/CoreAnimation.js +5 -0
  32. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  34. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  35. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.js +3 -2
  37. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  38. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  39. package/dist/src/core/lib/RenderCoords.js +43 -55
  40. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  41. package/dist/src/core/lib/WebGlContextWrapper.d.ts +51 -2
  42. package/dist/src/core/lib/WebGlContextWrapper.js +92 -22
  43. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  44. package/dist/src/core/lib/colorCache.d.ts +1 -0
  45. package/dist/src/core/lib/colorCache.js +19 -0
  46. package/dist/src/core/lib/colorCache.js.map +1 -0
  47. package/dist/src/core/lib/colorParser.d.ts +21 -0
  48. package/dist/src/core/lib/colorParser.js +72 -0
  49. package/dist/src/core/lib/colorParser.js.map +1 -0
  50. package/dist/src/core/lib/utils.d.ts +3 -0
  51. package/dist/src/core/lib/utils.js +42 -0
  52. package/dist/src/core/lib/utils.js.map +1 -1
  53. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  54. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  55. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  56. package/dist/src/core/platform.js +29 -4
  57. package/dist/src/core/platform.js.map +1 -1
  58. package/dist/src/core/platforms/Platform.d.ts +37 -0
  59. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  60. package/dist/src/core/platforms/Platform.js.map +1 -0
  61. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  62. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  63. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  64. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -1
  65. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -2
  66. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  67. package/dist/src/core/renderers/CoreShaderNode.d.ts +3 -3
  68. package/dist/src/core/renderers/CoreShaderNode.js +8 -2
  69. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  70. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -1
  71. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +7 -6
  72. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  74. package/dist/src/core/renderers/canvas/CanvasRenderer.js +10 -21
  75. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  76. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  77. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  78. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +2 -2
  79. package/dist/src/core/renderers/canvas/CanvasTexture.js +11 -9
  80. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  81. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  82. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  83. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  84. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  85. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  86. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  88. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  89. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +5 -6
  90. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +30 -18
  91. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  92. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +5 -2
  93. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  94. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +3 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +3 -0
  97. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  98. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +5 -6
  99. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +30 -21
  100. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  101. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +10 -2
  102. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +37 -19
  103. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  105. package/dist/src/core/renderers/webgl/WebGlRenderer.js +144 -117
  106. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -1
  108. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  109. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -3
  111. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +55 -31
  112. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  113. package/dist/src/core/shaders/canvas/Border.js +1 -1
  114. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  115. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  116. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  117. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  118. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  120. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  125. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  126. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  127. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  128. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  129. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  130. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  131. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  132. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  133. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  134. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  135. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  136. package/dist/src/core/shaders/utils.d.ts +5 -0
  137. package/dist/src/core/shaders/utils.js +41 -0
  138. package/dist/src/core/shaders/utils.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Border.js +57 -34
  140. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  141. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  142. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  143. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  144. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  145. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  146. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  147. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +79 -36
  148. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  149. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +92 -42
  150. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  151. package/dist/src/core/shaders/webgl/SdfShader.js +1 -1
  152. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  153. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  154. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  155. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +41 -0
  156. package/dist/src/core/text-rendering/CanvasFontHandler.js +159 -0
  157. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  158. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +22 -0
  159. package/dist/src/core/text-rendering/CanvasTextRenderer.js +366 -0
  160. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  161. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +152 -0
  162. package/dist/src/core/text-rendering/SdfFontHandler.js +368 -0
  163. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  164. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  165. package/dist/src/core/text-rendering/SdfTextRenderer.js +355 -0
  166. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  167. package/dist/src/core/text-rendering/TextRenderer.d.ts +351 -0
  168. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  169. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  170. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  171. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  172. package/dist/src/core/text-rendering/Utils.js +212 -0
  173. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  175. package/dist/src/{main-api/texture-usage-trackers/TextureUsageTracker.js → core/text-rendering/canvas/Settings.js} +3 -11
  176. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  177. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  178. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  179. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  180. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  181. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  182. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  183. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  184. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  185. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  188. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  189. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +30 -34
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  193. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  194. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  195. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  196. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  197. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  198. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  199. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  200. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  201. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  202. package/dist/src/core/text-rendering/sdf/Utils.js +304 -0
  203. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  204. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  205. package/dist/src/core/{CoreExtension.js → text-rendering/sdf/index.js} +3 -12
  206. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  207. package/dist/src/core/textures/ImageTexture.d.ts +4 -3
  208. package/dist/src/core/textures/ImageTexture.js +36 -9
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +21 -2
  211. package/dist/src/core/textures/Texture.js +37 -6
  212. package/dist/src/core/textures/Texture.js.map +1 -1
  213. package/dist/src/core/utils.d.ts +1 -1
  214. package/dist/src/main-api/INode.d.ts +2 -2
  215. package/dist/src/main-api/Inspector.d.ts +6 -1
  216. package/dist/src/main-api/Inspector.js +43 -7
  217. package/dist/src/main-api/Inspector.js.map +1 -1
  218. package/dist/src/main-api/Renderer.d.ts +122 -46
  219. package/dist/src/main-api/Renderer.js +174 -37
  220. package/dist/src/main-api/Renderer.js.map +1 -1
  221. package/dist/src/utils.d.ts +1 -6
  222. package/dist/src/utils.js +2 -9
  223. package/dist/src/utils.js.map +1 -1
  224. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  225. package/exports/canvas.ts +1 -1
  226. package/exports/index.ts +1 -8
  227. package/exports/utils.ts +7 -1
  228. package/exports/webgl.ts +3 -1
  229. package/package.json +2 -3
  230. package/src/core/CoreNode.test.ts +0 -1
  231. package/src/core/CoreNode.ts +403 -388
  232. package/src/core/CoreShaderManager.ts +5 -10
  233. package/src/core/CoreTextNode.ts +337 -302
  234. package/src/core/CoreTextureManager.ts +78 -110
  235. package/src/core/Stage.ts +344 -178
  236. package/src/core/TextureMemoryManager.ts +150 -100
  237. package/src/core/animations/CoreAnimation.ts +7 -0
  238. package/src/core/animations/CoreAnimationController.ts +13 -4
  239. package/src/core/lib/ImageWorker.ts +9 -2
  240. package/src/core/lib/RenderCoords.ts +52 -67
  241. package/src/core/lib/WebGlContextWrapper.ts +125 -68
  242. package/src/core/lib/colorCache.ts +20 -0
  243. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  244. package/src/core/lib/utils.ts +51 -0
  245. package/src/core/lib/validateImageBitmap.ts +17 -6
  246. package/src/core/platforms/Platform.ts +77 -0
  247. package/src/core/platforms/web/WebPlatform.ts +121 -0
  248. package/src/core/renderers/CoreContextTexture.ts +1 -1
  249. package/src/core/renderers/CoreRenderer.ts +5 -2
  250. package/src/core/renderers/CoreShaderNode.ts +10 -6
  251. package/src/core/renderers/canvas/CanvasRenderer.ts +12 -28
  252. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  253. package/src/core/renderers/canvas/CanvasTexture.ts +17 -14
  254. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +5 -0
  255. package/src/core/renderers/webgl/WebGlCtxTexture.ts +52 -43
  256. package/src/core/renderers/webgl/WebGlRenderOp.ts +46 -24
  257. package/src/core/renderers/webgl/WebGlRenderer.ts +177 -145
  258. package/src/core/renderers/webgl/WebGlShaderNode.ts +7 -5
  259. package/src/core/renderers/webgl/WebGlShaderProgram.ts +68 -37
  260. package/src/core/shaders/canvas/Border.ts +1 -4
  261. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  262. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  263. package/src/core/shaders/canvas/RoundedWithBorder.ts +17 -11
  264. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  265. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  266. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  267. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  268. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  269. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  270. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  271. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  272. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  273. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  274. package/src/core/shaders/webgl/Border.ts +57 -37
  275. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  276. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  277. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  278. package/src/core/shaders/webgl/RoundedWithBorder.ts +80 -39
  279. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +92 -50
  280. package/src/core/shaders/webgl/SdfShader.ts +1 -4
  281. package/src/core/text-rendering/CanvasFontHandler.ts +210 -0
  282. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -0
  283. package/src/core/text-rendering/SdfFontHandler.ts +554 -0
  284. package/src/core/text-rendering/SdfTextRenderer.ts +466 -0
  285. package/src/core/text-rendering/TextRenderer.ts +406 -0
  286. package/src/core/text-rendering/{TextTextureRendererUtils.ts → Utils.ts} +5 -11
  287. package/src/core/text-rendering/canvas/Settings.ts +99 -0
  288. package/src/core/text-rendering/canvas/Utils.test.ts +206 -0
  289. package/src/core/text-rendering/canvas/Utils.ts +178 -0
  290. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -0
  291. package/src/core/text-rendering/canvas/draw.ts +165 -0
  292. package/src/core/text-rendering/sdf/Utils.test.ts +402 -0
  293. package/src/core/text-rendering/sdf/Utils.ts +436 -0
  294. package/src/core/text-rendering/sdf/index.ts +20 -0
  295. package/src/core/textures/ImageTexture.ts +69 -27
  296. package/src/core/textures/Texture.ts +50 -6
  297. package/src/main-api/INode.ts +4 -3
  298. package/src/main-api/Inspector.ts +53 -8
  299. package/src/main-api/Renderer.ts +311 -87
  300. package/src/utils.ts +10 -10
  301. package/dist/exports/core-api.d.ts +0 -74
  302. package/dist/exports/core-api.js +0 -96
  303. package/dist/exports/core-api.js.map +0 -1
  304. package/dist/exports/main-api.d.ts +0 -30
  305. package/dist/exports/main-api.js +0 -45
  306. package/dist/exports/main-api.js.map +0 -1
  307. package/dist/src/core/CoreExtension.d.ts +0 -12
  308. package/dist/src/core/CoreExtension.js.map +0 -1
  309. package/dist/src/core/CoreStuff.js +0 -138
  310. package/dist/src/core/CoreStuff.js.map +0 -1
  311. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  312. package/dist/src/core/CoreTexturizer.js +0 -47
  313. package/dist/src/core/CoreTexturizer.js.map +0 -1
  314. package/dist/src/core/LngNode.d.ts +0 -736
  315. package/dist/src/core/LngNode.js +0 -1174
  316. package/dist/src/core/LngNode.js.map +0 -1
  317. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  318. package/dist/src/core/Matrix2DContext.js +0 -45
  319. package/dist/src/core/Matrix2DContext.js.map +0 -1
  320. package/dist/src/core/ShaderNode.d.ts +0 -10
  321. package/dist/src/core/ShaderNode.js +0 -30
  322. package/dist/src/core/ShaderNode.js.map +0 -1
  323. package/dist/src/core/TextNode.d.ts +0 -103
  324. package/dist/src/core/TextNode.js +0 -331
  325. package/dist/src/core/TextNode.js.map +0 -1
  326. package/dist/src/core/lib/Coords.d.ts +0 -14
  327. package/dist/src/core/lib/Coords.js +0 -55
  328. package/dist/src/core/lib/Coords.js.map +0 -1
  329. package/dist/src/core/lib/glm/common.d.ts +0 -162
  330. package/dist/src/core/lib/glm/common.js +0 -81
  331. package/dist/src/core/lib/glm/common.js.map +0 -1
  332. package/dist/src/core/lib/glm/index.d.ts +0 -11
  333. package/dist/src/core/lib/glm/index.js +0 -30
  334. package/dist/src/core/lib/glm/index.js.map +0 -1
  335. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  336. package/dist/src/core/lib/glm/mat2.js +0 -396
  337. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  338. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  339. package/dist/src/core/lib/glm/mat2d.js +0 -442
  340. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  341. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  342. package/dist/src/core/lib/glm/mat3.js +0 -680
  343. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  344. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  345. package/dist/src/core/lib/glm/mat4.js +0 -1802
  346. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  347. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  348. package/dist/src/core/lib/glm/quat.js +0 -693
  349. package/dist/src/core/lib/glm/quat.js.map +0 -1
  350. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  351. package/dist/src/core/lib/glm/quat2.js +0 -754
  352. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  353. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  354. package/dist/src/core/lib/glm/vec2.js +0 -569
  355. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  356. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  357. package/dist/src/core/lib/glm/vec3.js +0 -720
  358. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  359. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  360. package/dist/src/core/lib/glm/vec4.js +0 -608
  361. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  362. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  363. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  364. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  365. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  366. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  367. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  368. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  369. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  370. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  371. package/dist/src/core/scene/Scene.d.ts +0 -59
  372. package/dist/src/core/scene/Scene.js +0 -106
  373. package/dist/src/core/scene/Scene.js.map +0 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  377. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  378. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  379. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  380. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  381. package/dist/src/main-api/IShaderController.d.ts +0 -14
  382. package/dist/src/main-api/IShaderController.js +0 -30
  383. package/dist/src/main-api/IShaderController.js.map +0 -1
  384. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  385. package/dist/src/main-api/IShaderNode.js +0 -19
  386. package/dist/src/main-api/IShaderNode.js.map +0 -1
  387. package/dist/src/main-api/RendererMain.d.ts +0 -375
  388. package/dist/src/main-api/RendererMain.js +0 -365
  389. package/dist/src/main-api/RendererMain.js.map +0 -1
  390. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  391. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  392. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  393. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  394. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  395. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  396. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  397. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  398. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  399. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  400. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  401. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  402. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  403. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  404. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  405. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  406. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  407. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  408. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  409. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  410. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  411. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  412. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  413. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  414. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  415. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  416. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  417. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  418. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  419. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  420. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  421. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  422. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  423. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  424. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  425. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  426. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  427. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  428. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  429. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  430. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  431. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  432. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  433. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  434. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  435. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  436. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  437. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  438. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  439. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  440. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  441. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  442. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  443. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  444. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  445. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  446. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  447. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  448. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  449. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  450. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  451. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  452. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  453. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  454. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  455. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  456. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  457. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  458. package/dist/src/render-drivers/utils.d.ts +0 -12
  459. package/dist/src/render-drivers/utils.js +0 -69
  460. package/dist/src/render-drivers/utils.js.map +0 -1
  461. package/scripts/please-use-pnpm.js +0 -13
  462. package/src/core/platform.ts +0 -64
  463. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  464. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  465. package/src/core/text-rendering/TrFontManager.ts +0 -183
  466. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  467. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  468. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  469. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  470. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  471. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  472. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  473. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  474. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  475. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  476. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  477. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  478. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  479. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  480. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  481. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  489. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  490. /package/dist/src/core/{CoreStuff.d.ts → shaders/webgl/Spinner.d.ts} +0 -0
@@ -18,62 +18,55 @@
18
18
  */
19
19
 
20
20
  import type {
21
+ FontHandler,
21
22
  TextRenderer,
22
- TextRendererMap,
23
23
  TrProps,
24
- TextRendererState,
25
- TrFailedEventHandler,
26
- TrLoadedEventHandler,
27
- } from './text-rendering/renderers/TextRenderer.js';
28
- import { CoreNode, UpdateType, type CoreNodeProps } from './CoreNode.js';
24
+ TextLayout,
25
+ TextRenderInfo,
26
+ } from './text-rendering/TextRenderer.js';
27
+ import {
28
+ CoreNode,
29
+ CoreNodeRenderState,
30
+ UpdateType,
31
+ type CoreNodeProps,
32
+ } from './CoreNode.js';
29
33
  import type { Stage } from './Stage.js';
30
- import type { CoreRenderer } from './renderers/CoreRenderer.js';
31
34
  import type {
32
35
  NodeTextFailedPayload,
33
36
  NodeTextLoadedPayload,
37
+ NodeTextureLoadedPayload,
34
38
  } from '../common/CommonTypes.js';
35
39
  import type { RectWithValid } from './lib/utils.js';
36
- import { assertTruthy } from '../utils.js';
37
- import { Matrix3d } from './lib/Matrix3d.js';
38
-
40
+ import type { CoreRenderer } from './renderers/CoreRenderer.js';
41
+ import type { TextureLoadedEventHandler } from './textures/Texture.js';
39
42
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
40
43
  /**
41
44
  * Force Text Node to use a specific Text Renderer
42
- *
43
- * @remarks
44
- * By default, Text Nodes resolve the Text Renderer to use based on the font
45
- * that is matched using the font family and other font selection properties.
46
- *
47
- * If two fonts supported by two separate Text Renderers are matched setting
48
- * this override forces the Text Node to resolve to the Text Renderer defined
49
- * here.
50
- *
51
- * @default null
52
45
  */
53
- textRendererOverride: keyof TextRendererMap | null;
46
+ textRendererOverride?: string | null;
47
+ forceLoad: boolean;
54
48
  }
55
49
 
56
- /**
57
- * An CoreNode in the Renderer scene graph that renders text.
58
- *
59
- * @remarks
60
- * A Text Node is the second graphical building block of the Renderer scene
61
- * graph. It renders text using a specific text renderer that is automatically
62
- * chosen based on the font requested and what type of fonts are installed
63
- * into an app.
64
- *
65
- * The text renderer can be overridden by setting the `textRendererOverride`
66
- *
67
- * The `texture` and `shader` properties are managed by loaded text renderer and
68
- * should not be set directly.
69
- *
70
- * For non-text rendering, see {@link CoreNode}.
71
- */
72
50
  export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
73
- textRenderer: TextRenderer;
74
- trState: TextRendererState;
75
- private _textRendererOverride: CoreTextNodeProps['textRendererOverride'] =
76
- null;
51
+ private textRenderer: TextRenderer;
52
+ private fontHandler: FontHandler;
53
+
54
+ private _layoutGenerated = false;
55
+ private _waitingForFont = false;
56
+
57
+ // SDF layout caching for performance
58
+ private _cachedLayout: TextLayout | null = null;
59
+ private _lastVertexBuffer: Float32Array | null = null;
60
+
61
+ // Text renderer properties - stored directly on the node
62
+ private textProps: CoreTextNodeProps;
63
+
64
+ private _renderInfo: TextRenderInfo = {
65
+ width: 0,
66
+ height: 0,
67
+ };
68
+
69
+ private _type: 'sdf' | 'canvas' = 'sdf'; // Default to SDF renderer
77
70
 
78
71
  constructor(
79
72
  stage: Stage,
@@ -81,368 +74,410 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
81
74
  textRenderer: TextRenderer,
82
75
  ) {
83
76
  super(stage, props);
84
- this._textRendererOverride = props.textRendererOverride;
85
77
  this.textRenderer = textRenderer;
86
- const textRendererState = this.createState({
87
- x: this.absX,
88
- y: this.absY,
89
- width: props.width,
90
- height: props.height,
91
- textAlign: props.textAlign,
92
- color: props.color,
93
- zIndex: props.zIndex,
94
- contain: props.contain,
95
- scrollable: props.scrollable,
96
- scrollY: props.scrollY,
97
- offsetY: props.offsetY,
98
- letterSpacing: props.letterSpacing,
99
- debug: props.debug,
100
- fontFamily: props.fontFamily,
101
- fontSize: props.fontSize,
102
- fontStretch: props.fontStretch,
103
- fontStyle: props.fontStyle,
104
- fontWeight: props.fontWeight,
105
- text: props.text,
106
- lineHeight: props.lineHeight,
107
- maxLines: props.maxLines,
108
- textBaseline: props.textBaseline,
109
- verticalAlign: props.verticalAlign,
110
- overflowSuffix: props.overflowSuffix,
111
- });
112
-
113
- this.trState = textRendererState;
114
- }
115
-
116
- private onTextLoaded: TrLoadedEventHandler = () => {
117
- const { contain } = this;
118
- const setWidth = this.trState.props.width;
119
- const setHeight = this.trState.props.height;
120
- const calcWidth = this.trState.textW || 0;
121
- const calcHeight = this.trState.textH || 0;
122
-
123
- if (contain === 'both') {
124
- this.props.width = setWidth;
125
- this.props.height = setHeight;
126
- } else if (contain === 'width') {
127
- this.props.width = setWidth;
128
- this.props.height = calcHeight;
129
- } else if (contain === 'none') {
130
- this.props.width = calcWidth;
131
- this.props.height = calcHeight;
132
- }
133
- this.updateLocalTransform();
78
+ this.fontHandler = textRenderer.font;
79
+ this._type = textRenderer.type;
134
80
 
135
- // Incase the RAF loop has been stopped already before text was loaded,
136
- // we request a render so it can be drawn.
137
- this.stage.requestRender();
138
- this.emit('loaded', {
139
- type: 'text',
140
- dimensions: {
141
- width: this.trState.textW || 0,
142
- height: this.trState.textH || 0,
143
- },
144
- } satisfies NodeTextLoadedPayload);
145
- };
146
-
147
- private onTextFailed: TrFailedEventHandler = (target, error) => {
148
- this.emit('failed', {
149
- type: 'text',
150
- error,
151
- } satisfies NodeTextFailedPayload);
152
- };
81
+ // Initialize text properties from props
82
+ // Props are guaranteed to have all defaults resolved by Stage.createTextNode
83
+ this.textProps = props;
153
84
 
154
- override get width(): number {
155
- return this.props.width;
85
+ this.setUpdateType(UpdateType.All);
156
86
  }
157
87
 
158
- override set width(value: number) {
159
- this.props.width = value;
160
- this.textRenderer.set.width(this.trState, value);
88
+ protected override onTextureLoaded: TextureLoadedEventHandler = (
89
+ _,
90
+ dimensions,
91
+ ) => {
92
+ // If parent has a render texture, flag that we need to update
93
+ if (this.parentHasRenderTexture) {
94
+ this.notifyParentRTTOfUpdate();
95
+ }
161
96
 
162
- // If not containing, we must update the local transform to account for the
163
- // new width
164
- if (this.contain === 'none') {
165
- this.setUpdateType(UpdateType.Local);
97
+ // ignore 1x1 pixel textures
98
+ if (dimensions.width > 1 && dimensions.height > 1) {
99
+ this.emit('loaded', {
100
+ type: 'texture',
101
+ dimensions,
102
+ } satisfies NodeTextureLoadedPayload);
166
103
  }
167
- }
168
104
 
169
- override get height(): number {
170
- return this.props.height;
171
- }
105
+ this.width = this._renderInfo.width;
106
+ this.height = this._renderInfo.height;
172
107
 
173
- override set height(value: number) {
174
- this.props.height = value;
175
- this.textRenderer.set.height(this.trState, value);
108
+ // Texture was loaded. In case the RAF loop has already stopped, we request
109
+ // a render to ensure the texture is rendered.
110
+ this.stage.requestRender();
111
+ };
176
112
 
177
- // If not containing in the horizontal direction, we must update the local
178
- // transform to account for the new height
179
- if (this.contain !== 'both') {
180
- this.setUpdateType(UpdateType.Local);
113
+ allowTextGeneration() {
114
+ const p = this.props.parent;
115
+ if (p === null) {
116
+ return false;
181
117
  }
118
+ if (p.worldAlpha > 0 && p.renderState > CoreNodeRenderState.OutOfBounds) {
119
+ return true;
120
+ }
121
+ return false;
182
122
  }
183
123
 
184
- override get color(): number {
185
- return this.trState.props.color;
186
- }
124
+ /**
125
+ * Override CoreNode's update method to handle text-specific updates
126
+ */
127
+ override update(delta: number, parentClippingRect: RectWithValid): void {
128
+ if (
129
+ (this.textProps.forceLoad === true ||
130
+ this.allowTextGeneration() === true) &&
131
+ this._layoutGenerated === false
132
+ ) {
133
+ if (this.fontHandler.isFontLoaded(this.textProps.fontFamily) === true) {
134
+ this._waitingForFont = false;
135
+ this._cachedLayout = null; // Invalidate cached layout
136
+ this._lastVertexBuffer = null; // Invalidate last vertex buffer
137
+ const resp = this.textRenderer.renderText(this.stage, this.textProps);
138
+ this.handleRenderResult(resp);
139
+ this._layoutGenerated = true;
140
+ } else if (this._waitingForFont === false) {
141
+ this.fontHandler.waitingForFont(this.textProps.fontFamily, this);
142
+ this._waitingForFont = true;
143
+ }
144
+ }
187
145
 
188
- override set color(value: number) {
189
- this.textRenderer.set.color(this.trState, value);
146
+ // First run the standard CoreNode update
147
+ super.update(delta, parentClippingRect);
190
148
  }
191
149
 
192
- get text(): string {
193
- return this.trState.props.text;
194
- }
150
+ /**
151
+ * Override is renderable check for SDF text nodes
152
+ */
153
+ override updateIsRenderable(): void {
154
+ // SDF text nodes are always renderable if they have a valid layout
155
+ if (this._type === 'canvas') {
156
+ super.updateIsRenderable();
157
+ return;
158
+ }
195
159
 
196
- set text(value: string) {
197
- this.textRenderer.set.text(this.trState, value);
160
+ // For SDF, check if we have a cached layout
161
+ this.setRenderable(this._cachedLayout !== null);
198
162
  }
199
163
 
200
- get textRendererOverride(): CoreTextNodeProps['textRendererOverride'] {
201
- return this._textRendererOverride;
202
- }
164
+ /**
165
+ * Handle the result of text rendering for both Canvas and SDF renderers
166
+ */
167
+ private handleRenderResult(result: TextRenderInfo): void {
168
+ // Host paths on top
169
+ const textRendererType = this._type;
170
+ let width = result.width;
171
+ let height = result.height;
172
+
173
+ // Handle Canvas renderer (uses ImageData)
174
+ if (textRendererType === 'canvas') {
175
+ if (result.imageData === undefined) {
176
+ this.emit('failed', {
177
+ type: 'text',
178
+ error: new Error(
179
+ 'Canvas text rendering failed, no image data returned',
180
+ ),
181
+ } satisfies NodeTextFailedPayload);
182
+ return;
183
+ }
203
184
 
204
- set textRendererOverride(value: CoreTextNodeProps['textRendererOverride']) {
205
- this._textRendererOverride = value;
206
- this.textRenderer.destroyState(this.trState);
185
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
186
+ premultiplyAlpha: true,
187
+ src: result.imageData as ImageData,
188
+ });
207
189
 
208
- const textRenderer = this.stage.resolveTextRenderer(
209
- this.trState.props,
210
- this._textRendererOverride,
211
- );
190
+ // It isn't renderable until the texture is loaded we have to set it to false here to avoid it
191
+ // being detected as a renderable default color node in the next frame
192
+ // it will be corrected once the texture is loaded
193
+ this.setRenderable(false);
212
194
 
213
- if (!textRenderer) {
214
- console.warn(
215
- 'Text Renderer not found for font',
216
- this.trState.props.fontFamily,
217
- );
218
- return;
195
+ if (this.renderState > CoreNodeRenderState.OutOfBounds) {
196
+ // We do want the texture to load immediately
197
+ this.texture.setRenderableOwner(this, true);
198
+ }
219
199
  }
220
200
 
221
- this.textRenderer = textRenderer;
222
- this.trState = this.createState(this.trState.props);
223
- }
201
+ // Handle SDF renderer (uses layout caching)
202
+ if (textRendererType === 'sdf') {
203
+ this._cachedLayout = result.layout || null;
204
+ this.setRenderable(true);
205
+ this.props.width = width;
206
+ this.props.height = height;
207
+ this.setUpdateType(UpdateType.Local);
208
+ }
224
209
 
225
- get fontSize(): CoreTextNodeProps['fontSize'] {
226
- return this.trState.props.fontSize;
210
+ this._renderInfo = result;
211
+ this.emit('loaded', {
212
+ type: 'text',
213
+ dimensions: {
214
+ width: width,
215
+ height: height,
216
+ },
217
+ } satisfies NodeTextLoadedPayload);
227
218
  }
228
219
 
229
- set fontSize(value: CoreTextNodeProps['fontSize']) {
230
- this.textRenderer.set.fontSize(this.trState, value);
231
- }
220
+ /**
221
+ * Override renderQuads to handle SDF vs Canvas rendering
222
+ */
223
+ override renderQuads(renderer: CoreRenderer): void {
224
+ if (this.parentHasRenderTexture === true) {
225
+ const rtt = renderer.renderToTextureActive;
226
+ if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
227
+ return;
228
+ }
232
229
 
233
- get fontFamily(): CoreTextNodeProps['fontFamily'] {
234
- return this.trState.props.fontFamily;
235
- }
230
+ // Canvas renderer: use standard texture rendering via CoreNode
231
+ if (this._type === 'canvas') {
232
+ super.renderQuads(renderer);
233
+ return;
234
+ }
236
235
 
237
- set fontFamily(value: CoreTextNodeProps['fontFamily']) {
238
- this.textRenderer.set.fontFamily(this.trState, value);
239
- }
236
+ // Early return if no cached data
237
+ if (!this._cachedLayout) {
238
+ return;
239
+ }
240
240
 
241
- get fontStretch(): CoreTextNodeProps['fontStretch'] {
242
- return this.trState.props.fontStretch;
243
- }
241
+ if (this._lastVertexBuffer === null) {
242
+ this._lastVertexBuffer = this.textRenderer.addQuads(this._cachedLayout);
243
+ }
244
244
 
245
- set fontStretch(value: CoreTextNodeProps['fontStretch']) {
246
- this.textRenderer.set.fontStretch(this.trState, value);
245
+ const props = this.textProps;
246
+ this.textRenderer.renderQuads(
247
+ renderer,
248
+ this._cachedLayout as TextLayout,
249
+ this._lastVertexBuffer!,
250
+ {
251
+ fontFamily: this.textProps.fontFamily,
252
+ fontSize: props.fontSize,
253
+ color: this.props.color || 0xffffffff,
254
+ offsetY: props.offsetY,
255
+ worldAlpha: this.worldAlpha,
256
+ globalTransform: this.globalTransform!.getFloatArr(),
257
+ clippingRect: this.clippingRect,
258
+ width: this.props.width,
259
+ height: this.props.height,
260
+ parentHasRenderTexture: this.parentHasRenderTexture,
261
+ framebufferDimensions:
262
+ this.parentHasRenderTexture === true
263
+ ? this.parentFramebufferDimensions
264
+ : null,
265
+ stage: this.stage,
266
+ },
267
+ );
247
268
  }
248
269
 
249
- get fontStyle(): CoreTextNodeProps['fontStyle'] {
250
- return this.trState.props.fontStyle;
251
- }
270
+ override destroy(): void {
271
+ if (this._waitingForFont === true) {
272
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
273
+ }
252
274
 
253
- set fontStyle(value: CoreTextNodeProps['fontStyle']) {
254
- this.textRenderer.set.fontStyle(this.trState, value);
255
- }
275
+ // Clear cached layout and vertex buffer
276
+ this._cachedLayout = null;
277
+ this._lastVertexBuffer = null;
256
278
 
257
- get fontWeight(): CoreTextNodeProps['fontWeight'] {
258
- return this.trState.props.fontWeight;
259
- }
279
+ this.fontHandler = null!; // Clear reference to avoid memory leaks
280
+ this.textRenderer = null!; // Clear reference to avoid memory leaks
260
281
 
261
- set fontWeight(value: CoreTextNodeProps['fontWeight']) {
262
- this.textRenderer.set.fontWeight(this.trState, value);
282
+ super.destroy();
263
283
  }
264
284
 
265
- get textAlign(): CoreTextNodeProps['textAlign'] {
266
- return this.trState.props.textAlign;
285
+ get maxWidth() {
286
+ return this.textProps.maxWidth;
267
287
  }
268
288
 
269
- set textAlign(value: CoreTextNodeProps['textAlign']) {
270
- this.textRenderer.set.textAlign(this.trState, value);
289
+ set maxWidth(value: number) {
290
+ if (this.textProps.maxWidth !== value) {
291
+ this.textProps.maxWidth = value;
292
+ this._layoutGenerated = false;
293
+ this.setUpdateType(UpdateType.Local);
294
+ }
271
295
  }
272
296
 
273
- get contain(): CoreTextNodeProps['contain'] {
274
- return this.trState.props.contain;
297
+ // Property getters and setters
298
+ get maxHeight() {
299
+ return this.textProps.maxHeight;
275
300
  }
276
301
 
277
- set contain(value: CoreTextNodeProps['contain']) {
278
- this.textRenderer.set.contain(this.trState, value);
302
+ set maxHeight(value: number) {
303
+ if (this.textProps.maxHeight !== value) {
304
+ this.textProps.maxHeight = value;
305
+ this._layoutGenerated = false;
306
+ this.setUpdateType(UpdateType.Local);
307
+ }
279
308
  }
280
309
 
281
- get scrollable(): CoreTextNodeProps['scrollable'] {
282
- return this.trState.props.scrollable;
310
+ get text(): string {
311
+ return this.textProps.text;
283
312
  }
284
313
 
285
- set scrollable(value: CoreTextNodeProps['scrollable']) {
286
- this.textRenderer.set.scrollable(this.trState, value);
314
+ set text(value: string) {
315
+ if (this.textProps.text !== value) {
316
+ this.textProps.text = value;
317
+ this._layoutGenerated = false;
318
+ this.setUpdateType(UpdateType.Local);
319
+ }
287
320
  }
288
321
 
289
- get scrollY(): CoreTextNodeProps['scrollY'] {
290
- return this.trState.props.scrollY;
322
+ get fontSize(): number {
323
+ return this.textProps.fontSize;
291
324
  }
292
325
 
293
- set scrollY(value: CoreTextNodeProps['scrollY']) {
294
- this.textRenderer.set.scrollY(this.trState, value);
326
+ set fontSize(value: number) {
327
+ if (this.textProps.fontSize !== value) {
328
+ this.textProps.fontSize = value;
329
+ this._layoutGenerated = false;
330
+ this.setUpdateType(UpdateType.Local);
331
+ }
295
332
  }
296
333
 
297
- get offsetY(): CoreTextNodeProps['offsetY'] {
298
- return this.trState.props.offsetY;
334
+ get fontFamily(): string {
335
+ return this.textProps.fontFamily;
299
336
  }
300
337
 
301
- set offsetY(value: CoreTextNodeProps['offsetY']) {
302
- this.textRenderer.set.offsetY(this.trState, value);
338
+ set fontFamily(value: string) {
339
+ if (this.textProps.fontFamily !== value) {
340
+ if (this._waitingForFont === true) {
341
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
342
+ }
343
+ this.textProps.fontFamily = value;
344
+ this._layoutGenerated = true;
345
+ this.setUpdateType(UpdateType.Local);
346
+ }
303
347
  }
304
348
 
305
- get letterSpacing(): CoreTextNodeProps['letterSpacing'] {
306
- return this.trState.props.letterSpacing;
349
+ get fontStyle(): TrProps['fontStyle'] {
350
+ return this.textProps.fontStyle;
307
351
  }
308
352
 
309
- set letterSpacing(value: CoreTextNodeProps['letterSpacing']) {
310
- this.textRenderer.set.letterSpacing(this.trState, value);
353
+ set fontStyle(value: TrProps['fontStyle']) {
354
+ if (this.textProps.fontStyle !== value) {
355
+ this.textProps.fontStyle = value;
356
+ this._layoutGenerated = true;
357
+ this.setUpdateType(UpdateType.Local);
358
+ }
311
359
  }
312
360
 
313
- get lineHeight(): CoreTextNodeProps['lineHeight'] {
314
- return this.trState.props.lineHeight;
361
+ get textAlign(): TrProps['textAlign'] {
362
+ return this.textProps.textAlign;
315
363
  }
316
364
 
317
- set lineHeight(value: CoreTextNodeProps['lineHeight']) {
318
- this.textRenderer.set.lineHeight(this.trState, value);
365
+ set textAlign(value: TrProps['textAlign']) {
366
+ if (this.textProps.textAlign !== value) {
367
+ this.textProps.textAlign = value;
368
+ this._layoutGenerated = false;
369
+ this.setUpdateType(UpdateType.Local);
370
+ }
319
371
  }
320
372
 
321
- get maxLines(): CoreTextNodeProps['maxLines'] {
322
- return this.trState.props.maxLines;
373
+ get letterSpacing(): number {
374
+ return this.textProps.letterSpacing;
323
375
  }
324
376
 
325
- set maxLines(value: CoreTextNodeProps['maxLines']) {
326
- this.textRenderer.set.maxLines(this.trState, value);
377
+ set letterSpacing(value: number) {
378
+ if (this.textProps.letterSpacing !== value) {
379
+ this.textProps.letterSpacing = value;
380
+ this._layoutGenerated = false;
381
+ this.setUpdateType(UpdateType.Local);
382
+ }
327
383
  }
328
384
 
329
- get textBaseline(): CoreTextNodeProps['textBaseline'] {
330
- return this.trState.props.textBaseline;
385
+ get lineHeight(): number {
386
+ return this.textProps.lineHeight;
331
387
  }
332
388
 
333
- set textBaseline(value: CoreTextNodeProps['textBaseline']) {
334
- this.textRenderer.set.textBaseline(this.trState, value);
389
+ set lineHeight(value: number) {
390
+ if (this.textProps.lineHeight !== value) {
391
+ this.textProps.lineHeight = value;
392
+ this._layoutGenerated = false;
393
+ this.setUpdateType(UpdateType.Local);
394
+ }
335
395
  }
336
396
 
337
- get verticalAlign(): CoreTextNodeProps['verticalAlign'] {
338
- return this.trState.props.verticalAlign;
397
+ get maxLines(): number {
398
+ return this.textProps.maxLines;
339
399
  }
340
400
 
341
- set verticalAlign(value: CoreTextNodeProps['verticalAlign']) {
342
- this.textRenderer.set.verticalAlign(this.trState, value);
401
+ set maxLines(value: number) {
402
+ if (this.textProps.maxLines !== value) {
403
+ this.textProps.maxLines = value;
404
+ this._layoutGenerated = false;
405
+ this.setUpdateType(UpdateType.Local);
406
+ }
343
407
  }
344
408
 
345
- get overflowSuffix(): CoreTextNodeProps['overflowSuffix'] {
346
- return this.trState.props.overflowSuffix;
409
+ get textBaseline(): TrProps['textBaseline'] {
410
+ return this.textProps.textBaseline;
347
411
  }
348
412
 
349
- set overflowSuffix(value: CoreTextNodeProps['overflowSuffix']) {
350
- this.textRenderer.set.overflowSuffix(this.trState, value);
413
+ set textBaseline(value: TrProps['textBaseline']) {
414
+ if (this.textProps.textBaseline !== value) {
415
+ this.textProps.textBaseline = value;
416
+ this._layoutGenerated = false;
417
+ this.setUpdateType(UpdateType.Local);
418
+ }
351
419
  }
352
420
 
353
- get debug(): CoreTextNodeProps['debug'] {
354
- return this.trState.props.debug;
421
+ get verticalAlign(): TrProps['verticalAlign'] {
422
+ return this.textProps.verticalAlign;
355
423
  }
356
424
 
357
- set debug(value: CoreTextNodeProps['debug']) {
358
- this.textRenderer.set.debug(this.trState, value);
425
+ set verticalAlign(value: TrProps['verticalAlign']) {
426
+ if (this.textProps.verticalAlign !== value) {
427
+ this.textProps.verticalAlign = value;
428
+ this._layoutGenerated = false;
429
+ this.setUpdateType(UpdateType.Local);
430
+ }
359
431
  }
360
432
 
361
- override update(delta: number, parentClippingRect: RectWithValid) {
362
- super.update(delta, parentClippingRect);
363
-
364
- assertTruthy(this.globalTransform);
365
-
366
- // globalTransform is updated in super.update(delta)
367
- this.textRenderer.set.x(this.trState, this.globalTransform.tx);
368
- this.textRenderer.set.y(this.trState, this.globalTransform.ty);
433
+ get overflowSuffix(): string {
434
+ return this.textProps.overflowSuffix;
369
435
  }
370
436
 
371
- override checkBasicRenderability() {
372
- if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
373
- return false;
374
- }
375
-
376
- if (this.trState && this.trState.props.text !== '') {
377
- return true;
437
+ set overflowSuffix(value: string) {
438
+ if (this.textProps.overflowSuffix !== value) {
439
+ this.textProps.overflowSuffix = value;
440
+ this._layoutGenerated = false;
441
+ this.setUpdateType(UpdateType.Local);
378
442
  }
379
-
380
- return false;
381
443
  }
382
444
 
383
- override setRenderable(isRenderable: boolean) {
384
- super.setRenderable(isRenderable);
385
- this.textRenderer.setIsRenderable(this.trState, isRenderable);
445
+ get wordBreak(): TrProps['wordBreak'] {
446
+ return this.textProps.wordBreak;
386
447
  }
387
448
 
388
- override renderQuads(renderer: CoreRenderer) {
389
- assertTruthy(this.globalTransform);
390
-
391
- // If the text renderer does not support rendering quads, fallback to the
392
- // default renderQuads method
393
- if (!this.textRenderer.renderQuads) {
394
- super.renderQuads(renderer);
395
- return;
449
+ set wordBreak(value: TrProps['wordBreak']) {
450
+ if (this.textProps.wordBreak !== value) {
451
+ this.textProps.wordBreak = value;
452
+ this._layoutGenerated = false;
453
+ this.setUpdateType(UpdateType.Local);
396
454
  }
455
+ }
397
456
 
398
- // If the text renderer does support rendering quads, use it...
399
-
400
- // Prevent quad rendering if parent has a render texture
401
- // and this node is not the render texture
402
- if (this.parentHasRenderTexture) {
403
- if (!renderer.renderToTextureActive) {
404
- return;
405
- }
406
- // Prevent quad rendering if parent render texture is not the active render texture
407
- if (this.parentRenderTexture !== renderer.activeRttNode) {
408
- return;
409
- }
410
- }
457
+ get offsetY(): number {
458
+ return this.textProps.offsetY;
459
+ }
411
460
 
412
- if (this.parentHasRenderTexture && this.props.parent?.rtt) {
413
- this.globalTransform = Matrix3d.identity();
414
- if (this.localTransform) {
415
- this.globalTransform.multiply(this.localTransform);
416
- }
461
+ set offsetY(value: number) {
462
+ if (this.textProps.offsetY !== value) {
463
+ this.textProps.offsetY = value;
464
+ this._layoutGenerated = false;
465
+ this.setUpdateType(UpdateType.Local);
417
466
  }
418
-
419
- assertTruthy(this.globalTransform);
420
-
421
- this.textRenderer.renderQuads(this);
422
467
  }
423
468
 
424
- /**
425
- * Destroy the node and cleanup all resources
426
- */
427
- override destroy(): void {
428
- super.destroy();
429
-
430
- this.textRenderer.destroyState(this.trState);
469
+ get forceLoad() {
470
+ return this.textProps.forceLoad;
431
471
  }
432
472
 
433
- /**
434
- * Resolve a text renderer and a new state based on the current text renderer props provided
435
- * @param props
436
- * @returns
437
- */
438
- private createState(props: TrProps) {
439
- const textRendererState = this.textRenderer.createState(props, this);
440
-
441
- textRendererState.emitter.on('loaded', this.onTextLoaded);
442
- textRendererState.emitter.on('failed', this.onTextFailed);
443
-
444
- this.textRenderer.scheduleUpdateState(textRendererState);
473
+ set forceLoad(value: boolean) {
474
+ if (this.textProps.forceLoad !== value) {
475
+ this.textProps.forceLoad = value;
476
+ this.setUpdateType(UpdateType.Local);
477
+ }
478
+ }
445
479
 
446
- return textRendererState;
480
+ get renderInfo(): TextRenderInfo {
481
+ return this._renderInfo;
447
482
  }
448
483
  }