@lightningtv/renderer 2.16.1 → 3.2.3

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 (625) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +22 -28
  3. package/dist/exports/canvas-shaders.js +0 -16
  4. package/dist/exports/canvas-shaders.js.map +1 -1
  5. package/dist/exports/canvas.d.ts +8 -2
  6. package/dist/exports/canvas.js +8 -20
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +18 -13
  9. package/dist/exports/index.js +9 -27
  10. package/dist/exports/index.js.map +1 -1
  11. package/dist/exports/inspector.js +0 -18
  12. package/dist/exports/inspector.js.map +1 -1
  13. package/dist/exports/utils.d.ts +2 -1
  14. package/dist/exports/utils.js +2 -19
  15. package/dist/exports/utils.js.map +1 -1
  16. package/dist/exports/webgl-shaders.js +0 -16
  17. package/dist/exports/webgl-shaders.js.map +1 -1
  18. package/dist/exports/webgl.d.ts +11 -2
  19. package/dist/exports/webgl.js +11 -20
  20. package/dist/exports/webgl.js.map +1 -1
  21. package/dist/src/common/CommonTypes.d.ts +15 -3
  22. package/dist/src/common/CommonTypes.js +0 -18
  23. package/dist/src/common/CommonTypes.js.map +1 -1
  24. package/dist/src/common/EventEmitter.js +0 -18
  25. package/dist/src/common/EventEmitter.js.map +1 -1
  26. package/dist/src/common/IEventEmitter.js +0 -16
  27. package/dist/src/common/IEventEmitter.js.map +1 -1
  28. package/dist/src/core/Autosizer.d.ts +35 -0
  29. package/dist/src/core/Autosizer.js +178 -0
  30. package/dist/src/core/Autosizer.js.map +1 -0
  31. package/dist/src/core/CoreNode.d.ts +138 -105
  32. package/dist/src/core/CoreNode.js +805 -526
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +29 -73
  35. package/dist/src/core/CoreShaderManager.js +92 -97
  36. package/dist/src/core/CoreShaderManager.js.map +1 -1
  37. package/dist/src/core/CoreTextNode.d.ts +75 -87
  38. package/dist/src/core/CoreTextNode.js +380 -258
  39. package/dist/src/core/CoreTextNode.js.map +1 -1
  40. package/dist/src/core/CoreTextureManager.d.ts +18 -3
  41. package/dist/src/core/CoreTextureManager.js +63 -107
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +82 -55
  44. package/dist/src/core/Stage.js +410 -247
  45. package/dist/src/core/Stage.js.map +1 -1
  46. package/dist/src/core/TextureError.d.ts +11 -0
  47. package/dist/src/core/TextureError.js +37 -0
  48. package/dist/src/core/TextureError.js.map +1 -0
  49. package/dist/src/core/TextureMemoryManager.d.ts +4 -3
  50. package/dist/src/core/TextureMemoryManager.js +103 -135
  51. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  52. package/dist/src/core/animations/AnimationManager.js +0 -18
  53. package/dist/src/core/animations/AnimationManager.js.map +1 -1
  54. package/dist/src/core/animations/CoreAnimation.d.ts +3 -4
  55. package/dist/src/core/animations/CoreAnimation.js +9 -76
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.js +0 -18
  58. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  59. package/dist/src/core/lib/ContextSpy.js +0 -18
  60. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  61. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  62. package/dist/src/core/lib/ImageWorker.js +31 -30
  63. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  64. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  65. package/dist/src/core/lib/Matrix3d.js +7 -19
  66. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  67. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  68. package/dist/src/core/lib/RenderCoords.js +27 -55
  69. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  70. package/dist/src/core/lib/WebGlContextWrapper.d.ts +147 -59
  71. package/dist/src/core/lib/WebGlContextWrapper.js +252 -158
  72. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  73. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  74. package/dist/src/core/lib/collectionUtils.js +82 -0
  75. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  76. package/dist/src/core/lib/colorCache.d.ts +1 -0
  77. package/dist/src/core/lib/colorCache.js +19 -0
  78. package/dist/src/core/lib/colorCache.js.map +1 -0
  79. package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +2 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +15 -19
  81. package/dist/src/core/lib/colorParser.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  83. package/dist/src/core/lib/textureCompression.js +320 -86
  84. package/dist/src/core/lib/textureCompression.js.map +1 -1
  85. package/dist/src/core/lib/textureSvg.js +0 -18
  86. package/dist/src/core/lib/textureSvg.js.map +1 -1
  87. package/dist/src/core/lib/utils.d.ts +8 -2
  88. package/dist/src/core/lib/utils.js +21 -20
  89. package/dist/src/core/lib/utils.js.map +1 -1
  90. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  91. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  92. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  93. package/dist/src/core/platforms/Platform.d.ts +5 -0
  94. package/dist/src/core/platforms/Platform.js +0 -18
  95. package/dist/src/core/platforms/Platform.js.map +1 -1
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +39 -7
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  100. package/dist/src/core/renderers/CoreContextTexture.js +0 -18
  101. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  102. package/dist/src/core/renderers/CoreRenderOp.js +0 -18
  103. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/CoreRenderer.d.ts +25 -23
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -24
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  108. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  109. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
  111. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
  112. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +86 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +2 -17
  116. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  117. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  118. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -31
  119. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  121. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  122. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  124. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  125. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  128. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -67
  131. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +31 -19
  133. package/dist/src/core/renderers/webgl/WebGlRenderer.js +297 -200
  134. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
  136. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -5
  138. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +61 -34
  139. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  140. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  141. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  142. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  143. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  144. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  145. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
  146. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -18
  147. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  148. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  149. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  150. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  151. package/dist/src/core/shaders/canvas/Border.js +67 -41
  152. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  154. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  155. package/dist/src/core/shaders/canvas/LinearGradient.js +2 -18
  156. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  157. package/dist/src/core/shaders/canvas/RadialGradient.js +5 -21
  158. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  159. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  160. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  161. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  162. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +40 -26
  163. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +43 -23
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +4 -18
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  169. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  170. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  171. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  172. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  173. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  174. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -2
  175. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -26
  176. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  177. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  178. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -18
  179. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  181. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  182. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  183. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  184. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RoundedTemplate.js +0 -16
  186. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  187. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  188. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  189. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -2
  190. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  191. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  192. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  193. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  194. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  195. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/utils.js +0 -16
  197. package/dist/src/core/shaders/utils.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Border.js +75 -31
  199. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/Default.js +6 -41
  201. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/HolePunch.js +2 -18
  203. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/LinearGradient.js +68 -30
  205. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/RadialGradient.js +52 -45
  207. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  208. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  209. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  210. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +110 -48
  211. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  212. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +114 -54
  213. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  214. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  215. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  217. package/dist/src/core/shaders/webgl/SdfShader.js +7 -35
  218. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  219. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  220. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  221. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  222. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  223. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  224. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  225. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  226. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  228. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  229. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  230. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  231. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  232. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  233. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  234. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  235. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  236. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  237. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  238. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  239. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  240. package/dist/src/core/text-rendering/Utils.js +66 -0
  241. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  242. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  243. package/dist/src/core/textures/ColorTexture.js +3 -22
  244. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  245. package/dist/src/core/textures/ImageTexture.d.ts +10 -3
  246. package/dist/src/core/textures/ImageTexture.js +33 -62
  247. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  248. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  249. package/dist/src/core/textures/NoiseTexture.js +8 -26
  250. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  251. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  252. package/dist/src/core/textures/RenderTexture.js +12 -30
  253. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  254. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  255. package/dist/src/core/textures/SubTexture.js +19 -55
  256. package/dist/src/core/textures/SubTexture.js.map +1 -1
  257. package/dist/src/core/textures/Texture.d.ts +80 -16
  258. package/dist/src/core/textures/Texture.js +131 -37
  259. package/dist/src/core/textures/Texture.js.map +1 -1
  260. package/dist/src/core/utils.d.ts +2 -1
  261. package/dist/src/core/utils.js +1 -19
  262. package/dist/src/core/utils.js.map +1 -1
  263. package/dist/src/main-api/INode.d.ts +9 -9
  264. package/dist/src/main-api/INode.js.map +1 -1
  265. package/dist/src/main-api/Inspector.d.ts +135 -2
  266. package/dist/src/main-api/Inspector.js +507 -30
  267. package/dist/src/main-api/Inspector.js.map +1 -1
  268. package/dist/src/main-api/Renderer.d.ts +246 -162
  269. package/dist/src/main-api/Renderer.js +192 -152
  270. package/dist/src/main-api/Renderer.js.map +1 -1
  271. package/dist/src/utils.d.ts +23 -4
  272. package/dist/src/utils.js +50 -27
  273. package/dist/src/utils.js.map +1 -1
  274. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  275. package/dist/tsconfig.tsbuildinfo +1 -1
  276. package/exports/canvas-shaders.ts +11 -0
  277. package/exports/canvas.ts +8 -20
  278. package/exports/index.ts +24 -44
  279. package/exports/inspector.ts +0 -19
  280. package/exports/utils.ts +7 -19
  281. package/exports/webgl-shaders.ts +12 -0
  282. package/exports/webgl.ts +15 -20
  283. package/package.json +23 -20
  284. package/src/common/CommonTypes.ts +20 -22
  285. package/src/common/EventEmitter.ts +0 -19
  286. package/src/common/IAnimationController.ts +0 -18
  287. package/src/common/IEventEmitter.ts +0 -17
  288. package/src/core/Autosizer.ts +205 -0
  289. package/src/core/CoreNode.test.ts +378 -46
  290. package/src/core/CoreNode.ts +1007 -659
  291. package/src/core/CoreShaderManager.ts +128 -250
  292. package/src/core/CoreTextNode.ts +457 -321
  293. package/src/core/CoreTextureManager.ts +94 -115
  294. package/src/core/Stage.ts +516 -312
  295. package/src/core/TextureError.ts +46 -0
  296. package/src/core/TextureMemoryManager.ts +139 -175
  297. package/src/core/animations/AnimationManager.ts +0 -19
  298. package/src/core/animations/CoreAnimation.ts +16 -96
  299. package/src/core/animations/CoreAnimationController.ts +0 -19
  300. package/src/core/lib/ContextSpy.ts +0 -19
  301. package/src/core/lib/ImageWorker.ts +43 -31
  302. package/src/core/lib/Matrix3d.ts +7 -20
  303. package/src/core/lib/RenderCoords.ts +36 -67
  304. package/src/core/lib/WebGlContextWrapper.ts +353 -237
  305. package/src/core/lib/collectionUtils.ts +99 -0
  306. package/src/core/lib/colorCache.ts +20 -0
  307. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +16 -19
  308. package/src/core/lib/textureCompression.ts +434 -94
  309. package/src/core/lib/textureSvg.ts +0 -19
  310. package/src/core/lib/utils.ts +31 -19
  311. package/src/core/lib/validateImageBitmap.ts +17 -6
  312. package/src/core/platforms/Platform.ts +64 -0
  313. package/src/core/platforms/web/WebPlatform.ts +132 -0
  314. package/src/core/renderers/CoreContextTexture.ts +1 -19
  315. package/src/core/renderers/CoreRenderOp.ts +0 -19
  316. package/src/core/renderers/CoreRenderer.ts +34 -49
  317. package/src/core/renderers/CoreShaderNode.ts +202 -0
  318. package/src/core/renderers/CoreShaderProgram.ts +4 -0
  319. package/src/core/renderers/canvas/CanvasRenderer.ts +270 -0
  320. package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
  321. package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +15 -27
  322. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  323. package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +15 -36
  324. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
  325. package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +89 -70
  326. package/src/core/renderers/webgl/WebGlRenderer.ts +850 -0
  327. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -0
  328. package/src/core/renderers/webgl/WebGlShaderProgram.ts +356 -0
  329. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  330. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  331. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -24
  332. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  333. package/src/core/shaders/canvas/Border.ts +119 -0
  334. package/src/core/shaders/canvas/HolePunch.ts +38 -0
  335. package/src/core/shaders/canvas/LinearGradient.ts +54 -0
  336. package/src/core/shaders/canvas/RadialGradient.ts +82 -0
  337. package/src/core/shaders/canvas/Rounded.ts +38 -0
  338. package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
  339. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
  340. package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
  341. package/src/core/shaders/canvas/Shadow.ts +35 -0
  342. package/src/core/shaders/canvas/utils/render.ts +143 -0
  343. package/src/core/shaders/templates/BorderTemplate.ts +128 -0
  344. package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
  345. package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
  346. package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
  347. package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
  348. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
  349. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
  350. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
  351. package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
  352. package/src/core/shaders/utils.ts +30 -0
  353. package/src/core/shaders/webgl/Border.ts +159 -0
  354. package/src/core/shaders/webgl/Default.ts +52 -0
  355. package/src/core/shaders/webgl/HolePunch.ts +58 -0
  356. package/src/core/shaders/webgl/LinearGradient.ts +119 -0
  357. package/src/core/shaders/webgl/RadialGradient.ts +91 -0
  358. package/src/core/shaders/webgl/Rounded.ts +97 -0
  359. package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
  360. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -0
  361. package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
  362. package/src/core/shaders/webgl/SdfShader.ts +104 -0
  363. package/src/core/shaders/webgl/Shadow.ts +119 -0
  364. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  365. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  366. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  367. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  368. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  369. package/src/core/text-rendering/TextRenderer.ts +426 -0
  370. package/src/core/text-rendering/Utils.ts +80 -0
  371. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  372. package/src/core/textures/ColorTexture.ts +7 -24
  373. package/src/core/textures/ImageTexture.ts +72 -78
  374. package/src/core/textures/NoiseTexture.ts +14 -31
  375. package/src/core/textures/RenderTexture.ts +18 -35
  376. package/src/core/textures/SubTexture.ts +25 -65
  377. package/src/core/textures/Texture.ts +182 -53
  378. package/src/core/utils.ts +9 -26
  379. package/src/main-api/INode.ts +10 -29
  380. package/src/main-api/Inspector.ts +794 -38
  381. package/src/main-api/Renderer.ts +476 -274
  382. package/src/utils.ts +83 -29
  383. package/dist/src/core/animations/SimpleAnimation.d.ts +0 -28
  384. package/dist/src/core/animations/SimpleAnimation.js +0 -96
  385. package/dist/src/core/animations/SimpleAnimation.js.map +0 -1
  386. package/dist/src/core/platform.d.ts +0 -10
  387. package/dist/src/core/platform.js +0 -81
  388. package/dist/src/core/platform.js.map +0 -1
  389. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  390. package/dist/src/core/renderers/CoreShader.js +0 -28
  391. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  393. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  394. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  395. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  396. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -124
  397. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  398. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  399. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  400. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  401. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  402. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  403. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  404. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  405. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  406. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  407. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  408. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  409. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  410. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  411. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -56
  412. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -239
  413. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  414. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  415. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  416. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  417. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  418. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
  419. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  420. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  421. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
  422. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  423. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
  424. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -118
  425. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  426. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  427. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  428. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  429. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  430. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  431. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  432. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  433. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  434. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  435. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  436. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  437. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  438. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  439. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  440. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  441. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  442. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  443. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  444. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  445. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  446. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  447. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  448. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  449. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  450. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  451. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  452. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  453. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  454. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  455. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  456. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  457. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  458. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  460. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  461. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  463. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  464. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  465. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  466. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  467. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  468. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  469. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  470. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  471. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  472. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  473. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  474. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  475. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  476. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  477. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  478. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  479. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  480. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  481. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  482. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  483. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  484. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  485. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  486. package/dist/src/core/shaders/templates/shaderUtils.d.ts +0 -5
  487. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  488. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  489. package/dist/src/core/shaders/webgl/Magnifier.d.ts +0 -46
  490. package/dist/src/core/shaders/webgl/Magnifier.js +0 -107
  491. package/dist/src/core/shaders/webgl/Magnifier.js.map +0 -1
  492. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +0 -3
  493. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +0 -218
  494. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +0 -1
  495. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  496. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  497. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  498. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  499. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  500. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  501. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  502. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  503. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  504. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  505. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  506. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  507. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  508. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  509. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  510. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  511. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  512. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  513. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  514. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  515. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  516. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  517. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  518. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  519. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  520. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  521. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  522. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  523. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  524. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  525. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  526. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  527. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  528. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  529. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  530. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  531. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  532. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  533. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  534. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  535. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  536. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  537. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  538. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  539. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  540. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  541. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  542. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  543. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  544. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  545. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  546. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  547. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  548. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  549. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  550. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  551. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  552. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  553. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  554. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  555. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  556. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  557. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  558. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  559. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  560. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  561. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  562. package/dist/src/main-api/DynamicShaderController.js +0 -58
  563. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  564. package/dist/src/main-api/ShaderController.d.ts +0 -31
  565. package/dist/src/main-api/ShaderController.js +0 -37
  566. package/dist/src/main-api/ShaderController.js.map +0 -1
  567. package/scripts/please-use-pnpm.js +0 -13
  568. package/src/core/platform.ts +0 -100
  569. package/src/core/renderers/CoreShader.ts +0 -41
  570. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
  571. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -231
  572. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +0 -48
  573. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +0 -50
  574. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +0 -125
  575. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +0 -821
  576. package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -365
  577. package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
  578. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
  579. package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
  580. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
  581. package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
  582. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
  583. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
  584. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
  585. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
  586. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
  587. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
  588. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
  589. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
  590. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
  591. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
  592. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
  593. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
  594. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
  595. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
  596. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
  597. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  598. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  599. package/src/core/text-rendering/TrFontManager.ts +0 -183
  600. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  601. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  602. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  603. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  604. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  605. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  606. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  607. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  608. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -808
  609. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -853
  610. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  611. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  612. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  613. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  614. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  615. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  616. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  617. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  618. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  619. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  620. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  621. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  622. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  623. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -557
  624. package/src/main-api/DynamicShaderController.ts +0 -104
  625. package/src/main-api/ShaderController.ts +0 -80
package/src/core/Stage.ts CHANGED
@@ -1,23 +1,10 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
- import { startLoop, getTimeStamp } from './platform.js';
20
- import { assertTruthy, setPremultiplyMode } from '../utils.js';
1
+ import {
2
+ assertTruthy,
3
+ CALCULATE_FPS,
4
+ isProductionEnvironment,
5
+ setPremultiplyMode,
6
+ USE_RTT,
7
+ } from '../utils.js';
21
8
  import { AnimationManager } from './animations/AnimationManager.js';
22
9
  import {
23
10
  UpdateType,
@@ -26,13 +13,14 @@ import {
26
13
  type CoreNodeProps,
27
14
  } from './CoreNode.js';
28
15
  import { CoreTextureManager } from './CoreTextureManager.js';
29
- import { TrFontManager } from './text-rendering/TrFontManager.js';
30
- import { CoreShaderManager, type ShaderMap } from './CoreShaderManager.js';
16
+ import { CoreShaderManager } from './CoreShaderManager.js';
31
17
  import {
32
- TextRenderer,
33
- type TextRendererMap,
18
+ type FontHandler,
19
+ type FontLoadOptions,
20
+ type TextRenderer,
21
+ type TextRenderers,
34
22
  type TrProps,
35
- } from './text-rendering/renderers/TextRenderer.js';
23
+ } from './text-rendering/TextRenderer.js';
36
24
 
37
25
  import { EventEmitter } from '../common/EventEmitter.js';
38
26
  import { ContextSpy } from './lib/ContextSpy.js';
@@ -45,47 +33,32 @@ import {
45
33
  TextureMemoryManager,
46
34
  type TextureMemoryManagerSettings,
47
35
  } from './TextureMemoryManager.js';
48
- import type { CoreRendererOptions } from './renderers/CoreRenderer.js';
49
36
  import { CoreRenderer } from './renderers/CoreRenderer.js';
50
- import type { WebGlCoreRenderer } from './renderers/webgl/WebGlCoreRenderer.js';
51
- import type { CanvasCoreRenderer } from './renderers/canvas/CanvasCoreRenderer.js';
52
- import type { BaseShaderController } from '../main-api/ShaderController.js';
53
37
  import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
54
38
  import { santizeCustomDataMap } from '../main-api/utils.js';
55
- import type { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
56
- import type { CanvasTextRenderer } from './text-rendering/renderers/CanvasTextRenderer.js';
57
- import {
58
- createBound,
59
- createPreloadBounds,
60
- pointInBound,
61
- type Bound,
62
- } from './lib/utils.js';
39
+ import { pointInBound } from './lib/utils.js';
40
+ import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
41
+ import { Matrix3d } from './lib/Matrix3d.js';
42
+ import { createBound, createPreloadBounds, type Bound } from './lib/utils.js';
63
43
  import type { Texture } from './textures/Texture.js';
64
44
  import { ColorTexture } from './textures/ColorTexture.js';
65
-
66
- export interface StageOptions {
67
- appWidth: number;
68
- appHeight: number;
45
+ import type { Platform } from './platforms/Platform.js';
46
+ import type { WebPlatform } from './platforms/web/WebPlatform.js';
47
+ import type { RendererMainSettings } from '../main-api/Renderer.js';
48
+
49
+ export type StageOptions = Omit<
50
+ RendererMainSettings,
51
+ 'inspector' | 'platform' | 'maxRetryCount'
52
+ > & {
69
53
  textureMemory: TextureMemoryManagerSettings;
70
- boundsMargin: number | [number, number, number, number];
71
- deviceLogicalPixelRatio: number;
72
- devicePhysicalPixelRatio: number;
73
54
  canvas: HTMLCanvasElement | OffscreenCanvas;
74
- clearColor: number;
75
55
  fpsUpdateInterval: number;
76
- targetFPS: number;
77
- enableContextSpy: boolean;
78
- forceWebGL2: boolean;
79
- numImageWorkers: number;
80
- renderEngine: typeof WebGlCoreRenderer | typeof CanvasCoreRenderer;
81
56
  eventBus: EventEmitter;
82
- quadBufferSize: number;
83
- fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
57
+ platform: Platform | WebPlatform;
84
58
  inspector: boolean;
85
- strictBounds: boolean;
86
- textureProcessingTimeLimit: number;
87
- createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
88
- }
59
+ maxRetryCount: number;
60
+ enableClear: boolean;
61
+ };
89
62
 
90
63
  export type StageFpsUpdateHandler = (
91
64
  stage: Stage,
@@ -96,12 +69,12 @@ export type StageFrameTickHandler = (
96
69
  stage: Stage,
97
70
  frameTickData: FrameTickPayload,
98
71
  ) => void;
72
+
99
73
  export interface Point {
100
74
  x: number;
101
75
  y: number;
102
76
  }
103
77
 
104
- const bufferMemory = 2e6;
105
78
  const autoStart = true;
106
79
 
107
80
  export class Stage {
@@ -109,18 +82,21 @@ export class Stage {
109
82
  public readonly animationManager: AnimationManager;
110
83
  public readonly txManager: CoreTextureManager;
111
84
  public readonly txMemManager: TextureMemoryManager;
112
- public readonly fontManager: TrFontManager;
113
- public readonly textRenderers: Partial<TextRendererMap>;
85
+ public readonly textRenderers: Record<string, TextRenderer> = {};
86
+ public readonly fontHandlers: Record<string, FontHandler> = {};
114
87
  public readonly shManager: CoreShaderManager;
115
88
  public readonly renderer: CoreRenderer;
116
89
  public readonly root: CoreNode;
117
90
  public readonly interactiveNodes: Set<CoreNode> = new Set();
118
91
  public boundsMargin: [number, number, number, number];
119
- public readonly defShaderCtr: BaseShaderController;
120
- public readonly strictBound: Bound;
121
- public readonly preloadBound: Bound;
122
- public readonly strictBounds: boolean;
92
+ public readonly defShaderNode: CoreShaderNode | null = null;
93
+ public strictBound: Bound;
94
+ public preloadBound: Bound;
123
95
  public readonly defaultTexture: Texture | null = null;
96
+ public pixelRatio: number;
97
+ public readonly bufferMemory: number = 2e6;
98
+ public readonly platform: Platform | WebPlatform;
99
+ public readonly calculateTextureCoord: boolean;
124
100
 
125
101
  /**
126
102
  * Target frame time in milliseconds (calculated from targetFPS)
@@ -143,24 +119,39 @@ export class Stage {
143
119
  public readonly eventBus: EventEmitter;
144
120
 
145
121
  /// State
122
+ startTime = 0;
146
123
  deltaTime = 0;
147
124
  lastFrameTime = 0;
148
125
  currentFrameTime = 0;
126
+ elapsedTime = 0;
127
+ private timedNodes: CoreNode[] = [];
128
+ private clrColor = 0x00000000;
149
129
  private fpsNumFrames = 0;
150
130
  private fpsElapsedTime = 0;
151
131
  private numQuadsRendered = 0;
152
132
  private renderRequested = false;
133
+ private reprocessFrame = false;
134
+ private reprocessCallback: (() => void) | null = null;
153
135
  private frameEventQueue: [name: string, payload: unknown][] = [];
154
- private fontResolveMap: Record<string, CanvasTextRenderer | SdfTextRenderer> =
155
- {};
156
136
 
157
- /// Debug data
137
+ // Flattened render list optimization
138
+ public renderList: CoreNode[] = [];
139
+ public renderListDirty: boolean = true;
140
+
141
+ // Font resolve optimisation flags
142
+ private hasOnlyOneFontEngine: boolean;
143
+ private hasOnlyCanvasFontEngine: boolean;
144
+ private hasCanvasEngine: boolean;
145
+ private singleFontEngine: TextRenderer | null = null;
146
+ private singleFontHandler: FontHandler | null = null;
147
+
148
+ // Debug data
158
149
  contextSpy: ContextSpy | null = null;
159
150
 
160
151
  /**
161
152
  * Stage constructor
162
153
  */
163
- constructor(readonly options: StageOptions) {
154
+ constructor(public options: StageOptions) {
164
155
  const {
165
156
  canvas,
166
157
  clearColor,
@@ -174,8 +165,19 @@ export class Stage {
174
165
  renderEngine,
175
166
  fontEngines,
176
167
  createImageBitmapSupport,
168
+ platform,
169
+ maxRetryCount,
177
170
  } = options;
178
171
 
172
+ assertTruthy(
173
+ platform !== null,
174
+ 'A CorePlatform is not provided in the options',
175
+ );
176
+
177
+ this.platform = platform;
178
+
179
+ this.startTime = platform.getTimeStamp();
180
+
179
181
  this.eventBus = options.eventBus;
180
182
 
181
183
  // Calculate target frame time from targetFPS option
@@ -184,6 +186,7 @@ export class Stage {
184
186
  this.txManager = new CoreTextureManager(this, {
185
187
  numImageWorkers,
186
188
  createImageBitmapSupport,
189
+ maxRetryCount,
187
190
  });
188
191
 
189
192
  // Wait for the Texture Manager to initialize
@@ -193,10 +196,9 @@ export class Stage {
193
196
  });
194
197
 
195
198
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
196
- this.shManager = new CoreShaderManager();
199
+
197
200
  this.animationManager = new AnimationManager();
198
201
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
199
- this.strictBounds = options.strictBounds;
200
202
 
201
203
  let bm = [0, 0, 0, 0] as [number, number, number, number];
202
204
  if (boundsMargin) {
@@ -210,65 +212,118 @@ export class Stage {
210
212
  this.strictBound = createBound(0, 0, appWidth, appHeight);
211
213
  this.preloadBound = createPreloadBounds(this.strictBound, bm);
212
214
 
213
- const rendererOptions: CoreRendererOptions = {
215
+ this.clrColor = clearColor;
216
+
217
+ this.pixelRatio =
218
+ options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio;
219
+
220
+ this.renderer = new renderEngine({
214
221
  stage: this,
215
222
  canvas,
216
- pixelRatio:
217
- options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio,
218
- clearColor: clearColor ?? 0xff000000,
219
- bufferMemory,
220
- txManager: this.txManager,
221
- txMemManager: this.txMemManager,
222
- shManager: this.shManager,
223
223
  contextSpy: this.contextSpy,
224
224
  forceWebGL2,
225
- };
225
+ });
226
+
227
+ this.shManager = new CoreShaderManager(this);
228
+
229
+ this.defShaderNode = this.renderer.getDefaultShaderNode();
230
+ this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
226
231
 
227
- this.renderer = new renderEngine(rendererOptions);
228
232
  const renderMode = this.renderer.mode || 'webgl';
229
233
 
230
234
  this.createDefaultTexture();
231
- this.defShaderCtr = this.renderer.getDefShaderCtr();
232
235
  setPremultiplyMode(renderMode);
233
236
 
234
237
  // Must do this after renderer is created
235
238
  this.txManager.renderer = this.renderer;
236
239
 
237
240
  // Create text renderers
238
- this.textRenderers = {};
239
- fontEngines.forEach((fontEngineConstructor) => {
240
- const fontEngineInstance = new fontEngineConstructor(this);
241
- const className = fontEngineInstance.type;
241
+ this.hasOnlyOneFontEngine = fontEngines.length === 1;
242
+ this.hasOnlyCanvasFontEngine =
243
+ fontEngines.length === 1 && fontEngines[0]!.type === 'canvas';
244
+ this.hasCanvasEngine = false;
245
+ this.singleFontEngine = this.hasOnlyOneFontEngine
246
+ ? (fontEngines[0] as TextRenderer)
247
+ : null;
248
+ this.singleFontHandler = this.hasOnlyOneFontEngine
249
+ ? (fontEngines[0]?.font as FontHandler)
250
+ : null;
251
+
252
+ if (this.singleFontEngine === null) {
253
+ // Multiple font engines case
254
+ // Filter out incompatible engines first
255
+ const compatibleEngines = fontEngines.filter(
256
+ (fontEngine: TextRenderer) => {
257
+ const type = fontEngine.type;
258
+
259
+ if (type === 'sdf' && renderMode === 'canvas') {
260
+ console.warn(
261
+ 'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
262
+ );
263
+ return false;
264
+ }
265
+
266
+ if (type === 'canvas') {
267
+ this.hasCanvasEngine = true;
268
+ }
269
+
270
+ return true;
271
+ },
272
+ );
273
+
274
+ // Sort engines: SDF first, Canvas last, others in between
275
+ const sortedEngines = compatibleEngines.sort(
276
+ (a: TextRenderer, b: TextRenderer) => {
277
+ if (a.type === 'sdf') return -1;
278
+ if (b.type === 'sdf') return 1;
279
+ if (a.type === 'canvas') return 1;
280
+ if (b.type === 'canvas') return -1;
281
+ return 0;
282
+ },
283
+ );
284
+
285
+ // Initialize engines in sorted order
286
+ sortedEngines.forEach((fontEngine: TextRenderer) => {
287
+ const type = fontEngine.type;
288
+
289
+ // Add to map for type-based access
290
+ this.textRenderers[type] = fontEngine;
291
+ this.textRenderers[type].init(this);
292
+
293
+ this.fontHandlers[type] = fontEngine.font;
294
+ });
295
+ } else {
296
+ // Single font engine case - initialize it directly
297
+ const fontEngine = this.singleFontEngine;
298
+ const type = fontEngine.type;
242
299
 
243
- if (className === 'sdf' && renderMode === 'canvas') {
300
+ // Check compatibility
301
+ if (type === 'sdf' && renderMode === 'canvas') {
244
302
  console.warn(
245
- 'SdfTextRenderer is not compatible with Canvas renderer. Skipping...',
303
+ 'MsdfTextRenderer is not compatible with Canvas renderer. Skipping...',
246
304
  );
247
- return;
248
- }
249
-
250
- if (fontEngineInstance instanceof TextRenderer) {
251
- if (className === 'canvas') {
252
- this.textRenderers['canvas'] =
253
- fontEngineInstance as CanvasTextRenderer;
254
- } else if (className === 'sdf') {
255
- this.textRenderers['sdf'] = fontEngineInstance as SdfTextRenderer;
305
+ } else {
306
+ if (type === 'canvas') {
307
+ this.hasCanvasEngine = true;
256
308
  }
309
+
310
+ // Add to map for type-based access
311
+ this.textRenderers[type] = fontEngine;
312
+ this.fontHandlers[type] = fontEngine.font;
313
+ this.textRenderers[type].init(this);
257
314
  }
258
- });
315
+ }
259
316
 
260
317
  if (Object.keys(this.textRenderers).length === 0) {
261
318
  console.warn('No text renderers available. Your text will not render.');
262
319
  }
263
320
 
264
- this.fontManager = new TrFontManager(this.textRenderers);
265
-
266
321
  // create root node
267
322
  const rootNode = new CoreNode(this, {
268
323
  x: 0,
269
324
  y: 0,
270
- width: appWidth,
271
- height: appHeight,
325
+ w: appWidth,
326
+ h: appHeight,
272
327
  alpha: 1,
273
328
  autosize: false,
274
329
  boundsMargin: null,
@@ -283,7 +338,6 @@ export class Stage {
283
338
  colorBl: 0x00000000,
284
339
  colorBr: 0x00000000,
285
340
  zIndex: 0,
286
- zIndexLocked: 0,
287
341
  scaleX: 1,
288
342
  scaleY: 1,
289
343
  mountX: 0,
@@ -296,23 +350,39 @@ export class Stage {
296
350
  parent: null,
297
351
  texture: null,
298
352
  textureOptions: {},
299
- shader: this.defShaderCtr,
353
+ shader: this.defShaderNode,
300
354
  rtt: false,
301
355
  src: null,
302
356
  scale: 1,
303
- preventCleanup: false,
304
- strictBounds: this.strictBounds,
305
357
  });
306
358
 
307
359
  this.root = rootNode;
308
360
 
361
+ // Initialize root node properties
362
+ rootNode.updateLocalTransform();
363
+ rootNode.globalTransform = Matrix3d.copy(rootNode.localTransform!);
364
+ rootNode.sceneGlobalTransform = Matrix3d.copy(rootNode.localTransform!);
365
+ rootNode.calculateRenderCoords();
366
+ rootNode.updateBoundingRect();
367
+ rootNode.createRenderBounds();
368
+ rootNode.updateRenderState(CoreNodeRenderState.InViewport);
369
+ rootNode.updateIsRenderable();
370
+
371
+ // Initialize premultiplied colors (default is transparent 0x00000000)
372
+ rootNode.premultipliedColorTl =
373
+ rootNode.premultipliedColorTr =
374
+ rootNode.premultipliedColorBl =
375
+ rootNode.premultipliedColorBr =
376
+ 0;
377
+
309
378
  // execute platform start loop
310
- if (autoStart) {
311
- startLoop(this);
379
+ if (autoStart === true) {
380
+ this.platform.startLoop(this);
312
381
  }
313
382
  }
314
383
 
315
384
  setClearColor(color: number) {
385
+ this.clearColor = color;
316
386
  this.renderer.updateClearColor(color);
317
387
  this.renderRequested = true;
318
388
  }
@@ -332,9 +402,10 @@ export class Stage {
332
402
  }
333
403
 
334
404
  updateFrameTime() {
335
- const newFrameTime = getTimeStamp();
405
+ const newFrameTime = this.platform.getTimeStamp();
336
406
  this.lastFrameTime = this.currentFrameTime;
337
407
  this.currentFrameTime = newFrameTime;
408
+ this.elapsedTime = newFrameTime - this.startTime;
338
409
  this.deltaTime = !this.lastFrameTime
339
410
  ? 100 / 6
340
411
  : newFrameTime - this.lastFrameTime;
@@ -353,7 +424,6 @@ export class Stage {
353
424
  * Create default PixelTexture
354
425
  */
355
426
  createDefaultTexture() {
356
- console.log('Creating default texture');
357
427
  (this.defaultTexture as ColorTexture) = this.txManager.createTexture(
358
428
  'ColorTexture',
359
429
  {
@@ -367,7 +437,7 @@ export class Stage {
367
437
  // Mark the default texture as ALWAYS renderable
368
438
  // This prevents it from ever being cleaned up.
369
439
  // Fixes https://github.com/lightning-js/renderer/issues/262
370
- this.defaultTexture.setRenderableOwner(this, true);
440
+ this.defaultTexture.setRenderableOwner('stage', true);
371
441
 
372
442
  // When the default texture is loaded, request a render in case the
373
443
  // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
@@ -379,13 +449,14 @@ export class Stage {
379
449
  /**
380
450
  * Update animations
381
451
  */
382
- updateAnimations() {
452
+ updateAnimations(): boolean {
383
453
  const { animationManager } = this;
384
454
  if (!this.root) {
385
- return;
455
+ return false;
386
456
  }
387
457
  // step animation
388
458
  animationManager.update(this.deltaTime);
459
+ return animationManager.activeAnimations.size > 0;
389
460
  }
390
461
 
391
462
  /**
@@ -402,55 +473,99 @@ export class Stage {
402
473
  /**
403
474
  * Start a new frame draw
404
475
  */
405
- drawFrame() {
406
- const { renderer, renderRequested } = this;
407
- assertTruthy(renderer);
476
+ drawFrame(hasActiveAnimations: boolean = false) {
477
+ const { renderer, renderRequested, root } = this;
408
478
 
409
479
  // Update tree if needed
410
- if (this.root.updateType !== 0) {
411
- this.root.update(this.deltaTime, this.root.clippingRect);
412
- }
480
+ do {
481
+ const forceUpdate = this.reprocessFrame;
482
+ this.reprocessFrame = false;
483
+
484
+ if (root.updateType !== 0 || forceUpdate) {
485
+ root.updateType = 0;
486
+ const childUpdateType = root.childUpdateType;
487
+ root.childUpdateType = 0;
488
+
489
+ for (let i = 0, length = root.children.length; i < length; i++) {
490
+ const child = root.children[i] as CoreNode;
491
+
492
+ if (childUpdateType !== 0) {
493
+ child.setUpdateType(childUpdateType);
494
+ }
495
+
496
+ if (child.updateType === 0) {
497
+ continue;
498
+ }
499
+
500
+ child.update(this.deltaTime, root.clippingRect);
501
+ }
502
+ }
503
+
504
+ if (this.reprocessCallback !== null) {
505
+ this.reprocessCallback();
506
+ this.reprocessCallback = null;
507
+ }
508
+ } while (this.reprocessFrame);
413
509
 
414
510
  // Process some textures asynchronously but don't block the frame
415
511
  // Use a background task to prevent frame drops
416
- this.txManager
417
- .processSome(this.options.textureProcessingTimeLimit)
418
- .catch((err) => {
512
+ if (this.txManager.hasUpdates() === true) {
513
+ const timeLimit = hasActiveAnimations
514
+ ? this.options.textureProcessingTimeLimit / 2
515
+ : this.options.textureProcessingTimeLimit;
516
+
517
+ this.txManager.processSome(timeLimit).catch((err) => {
419
518
  console.error('Error processing textures:', err);
420
519
  });
520
+ }
421
521
 
422
522
  // Reset render operations and clear the canvas
423
523
  renderer.reset();
424
524
 
425
- // Check if we need to cleanup textures
426
- if (this.txMemManager.criticalCleanupRequested === true) {
427
- this.txMemManager.cleanup(false);
428
-
429
- if (this.txMemManager.criticalCleanupRequested === true) {
430
- // If we still need to cleanup, request another but aggressive cleanup
431
- this.txMemManager.cleanup(true);
432
- }
433
- }
434
-
435
525
  // If we have RTT nodes draw them first
436
526
  // So we can use them as textures in the main scene
437
- if (renderer.rttNodes.length > 0) {
527
+ if (USE_RTT && renderer.rttNodes.length > 0) {
438
528
  renderer.renderRTTNodes();
439
529
  }
440
530
 
441
- // Fill quads buffer
442
- this.addQuads(this.root);
531
+ // Update render list if dirty
532
+ if (this.renderListDirty === true) {
533
+ this.renderList.length = 0;
534
+ this.buildRenderList(this.root);
535
+ this.renderListDirty = false;
536
+ } else {
537
+ // Fill quads buffer
538
+ const renderList = this.renderList;
539
+ for (let i = 0, len = renderList.length; i < len; i++) {
540
+ renderList[i]!.renderQuads(renderer);
541
+ }
542
+ }
443
543
 
444
544
  // Perform render pass
445
- renderer?.render();
545
+ renderer.render();
446
546
 
447
- this.calculateFps();
448
- this.calculateQuads();
547
+ if (CALCULATE_FPS) {
548
+ this.calculateFps();
549
+ this.calculateQuads();
550
+ }
449
551
 
450
552
  // Reset renderRequested flag if it was set
451
- if (renderRequested) {
553
+ if (renderRequested === true) {
452
554
  this.renderRequested = false;
453
555
  }
556
+
557
+ if (this.timedNodes.length > 0) {
558
+ for (let key in this.timedNodes) {
559
+ if (this.timedNodes[key]!.isRenderable === true) {
560
+ this.requestRender();
561
+ break;
562
+ }
563
+ }
564
+ }
565
+ // Check if we need to cleanup textures
566
+ if (this.txMemManager.criticalCleanupRequested === true) {
567
+ this.txMemManager.cleanup();
568
+ }
454
569
  }
455
570
 
456
571
  /**
@@ -519,30 +634,38 @@ export class Stage {
519
634
  }
520
635
  }
521
636
 
522
- addQuads(node: CoreNode) {
523
- assertTruthy(this.renderer);
637
+ requestRenderListUpdate() {
638
+ // Notify the renderer that the render list is structurally changing.
639
+ // For the WebGL renderer this resets per-node buffer slot assignments
640
+ // and schedules a full GPU buffer re-upload on the next frame.
641
+ if (this.renderer.invalidateQuadBuffer !== undefined) {
642
+ this.renderer.invalidateQuadBuffer();
643
+ }
644
+ this.renderListDirty = true;
645
+ this.requestRender();
646
+ }
524
647
 
525
- // If the node is renderable and has a loaded texture, render it
648
+ buildRenderList(node: CoreNode) {
649
+ // If the node is renderable and has a loaded texture, add it
526
650
  if (node.isRenderable === true) {
527
651
  node.renderQuads(this.renderer);
652
+ this.renderList.push(node);
528
653
  }
529
654
 
530
- for (let i = 0; i < node.children.length; i++) {
531
- const child = node.children[i];
532
-
533
- if (child === undefined) {
534
- continue;
535
- }
655
+ const children = node.children;
656
+ const len = children.length;
657
+ for (let i = 0; i < len; i++) {
658
+ const child = children[i] as CoreNode;
536
659
 
660
+ // Skip invisible subtrees
537
661
  if (
538
662
  child.worldAlpha === 0 ||
539
- (child.strictBounds === true &&
540
- child.renderState === CoreNodeRenderState.OutOfBounds)
663
+ child.renderState === CoreNodeRenderState.OutOfBounds
541
664
  ) {
542
665
  continue;
543
666
  }
544
667
 
545
- this.addQuads(child);
668
+ this.buildRenderList(child);
546
669
  }
547
670
  }
548
671
 
@@ -553,42 +676,11 @@ export class Stage {
553
676
  this.renderRequested = true;
554
677
  }
555
678
 
556
- /**
557
- * Find all nodes at a given point
558
- * @param data
559
- */
560
- findNodesAtPoint(data: Point): CoreNode[] {
561
- const x = data.x / this.options.deviceLogicalPixelRatio;
562
- const y = data.y / this.options.deviceLogicalPixelRatio;
563
- const nodes: CoreNode[] = [];
564
- for (const node of this.interactiveNodes) {
565
- if (node.isRenderable === false) {
566
- continue;
567
- }
568
- if (pointInBound(x, y, node.renderBound!) === true) {
569
- nodes.push(node);
570
- }
679
+ reprocessUpdates(callback?: () => void) {
680
+ this.reprocessFrame = true;
681
+ if (callback) {
682
+ this.reprocessCallback = callback;
571
683
  }
572
- return nodes;
573
- }
574
-
575
- /**
576
- * Find the top node at a given point
577
- * @param data
578
- * @returns
579
- */
580
- getNodeFromPosition(data: Point): CoreNode | null {
581
- const nodes: CoreNode[] = this.findNodesAtPoint(data);
582
- if (nodes.length === 0) {
583
- return null;
584
- }
585
- let topNode = nodes[0] as CoreNode;
586
- for (let i = 0; i < nodes.length; i++) {
587
- if (nodes[i]!.zIndex > topNode.zIndex) {
588
- topNode = nodes[i]!;
589
- }
590
- }
591
- return topNode || null;
592
684
  }
593
685
 
594
686
  /**
@@ -603,86 +695,52 @@ export class Stage {
603
695
  */
604
696
  resolveTextRenderer(
605
697
  trProps: TrProps,
606
- textRendererOverride: keyof TextRendererMap | null = null,
698
+ textRendererOverride: keyof TextRenderers | null = null,
607
699
  ): TextRenderer | null {
608
- const fontCacheString = `${trProps.fontFamily}${trProps.fontStyle}${
609
- trProps.fontWeight
610
- }${trProps.fontStretch}${textRendererOverride ? textRendererOverride : ''}`;
700
+ // If we have an overide, return it
701
+ if (textRendererOverride !== null) {
702
+ const overrideKey = String(textRendererOverride);
703
+ if (this.textRenderers[overrideKey] === undefined) {
704
+ console.warn(`Text renderer override '${overrideKey}' not found.`);
705
+ return null;
706
+ }
611
707
 
612
- // check our resolve cache first
613
- if (this.fontResolveMap[fontCacheString] !== undefined) {
614
- return this.fontResolveMap[fontCacheString] as unknown as TextRenderer;
708
+ return this.textRenderers[overrideKey];
615
709
  }
616
710
 
617
- // Resolve the text renderer
618
- let rendererId = textRendererOverride;
619
- let overrideFallback = false;
620
-
621
- // Check if the override is valid (if one is provided)
622
- if (rendererId) {
623
- const possibleRenderer = this.textRenderers[rendererId];
624
- if (!possibleRenderer) {
625
- console.warn(`Text renderer override '${rendererId}' not found.`);
626
- rendererId = null;
627
- overrideFallback = true;
628
- } else if (!possibleRenderer.canRenderFont(trProps)) {
629
- console.warn(
630
- `Cannot use override text renderer '${rendererId}' for font`,
631
- trProps,
632
- );
633
- rendererId = null;
634
- overrideFallback = true;
711
+ // If we have only one font engine early return it
712
+ if (this.singleFontEngine !== null) {
713
+ // If we have only one font engine and its the canvas engine, we can just return it
714
+ if (this.hasOnlyCanvasFontEngine === true) {
715
+ return this.singleFontEngine;
635
716
  }
636
- }
637
717
 
638
- if (!rendererId) {
639
- // Iterate through the text renderers and find the first one that can render the font
640
- for (const [trId, tr] of Object.entries(this.textRenderers)) {
641
- if (tr.canRenderFont(trProps)) {
642
- rendererId = trId as keyof TextRendererMap;
643
- break;
644
- }
718
+ // If we have only one font engine and it can render the font, return it
719
+ if (this.singleFontHandler?.canRenderFont(trProps) === true) {
720
+ return this.singleFontEngine;
645
721
  }
646
- if (!rendererId && this.textRenderers.canvas !== undefined) {
647
- // If no renderer can be found, use the canvas renderer
648
- rendererId = 'canvas';
649
- }
650
- }
651
722
 
652
- if (overrideFallback) {
653
- console.warn(`Falling back to text renderer ${String(rendererId)}`);
654
- }
723
+ // If we have only one font engine and it cannot render the font, return null
724
+ console.warn(`Text renderer cannot render font`, trProps);
655
725
 
656
- if (!rendererId) {
657
- // silently fail if no renderer can be found, the error is already created
658
- // at the constructor level
659
726
  return null;
660
727
  }
661
728
 
662
- // By now we are guaranteed to have a valid rendererId (at least Canvas);
663
- const resolvedTextRenderer = this.textRenderers[rendererId];
664
- assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
729
+ // Multi font handling - If we have multiple font engines, we need to resolve the best one
665
730
 
666
- // cache the resolved renderer for future use with these trProps
667
- this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
731
+ // First check SDF
732
+ if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
733
+ return this.textRenderers.sdf || null;
734
+ }
668
735
 
669
- // Need to explicitly cast to TextRenderer because TS doesn't like
670
- // the covariant state argument in the setter method map
671
- return resolvedTextRenderer as unknown as TextRenderer;
672
- }
736
+ // If we have a canvas engine, we can return it (it can render all fonts)
737
+ if (this.hasCanvasEngine === true) {
738
+ return this.textRenderers.canvas || null;
739
+ }
673
740
 
674
- /**
675
- * Create a shader controller instance
676
- *
677
- * @param type
678
- * @param props
679
- * @returns
680
- */
681
- createShaderCtr(
682
- type: keyof ShaderMap,
683
- props: Record<string, unknown>,
684
- ): BaseShaderController {
685
- return this.shManager.loadShader(type, props);
741
+ // If we have no font engines, return null
742
+ console.warn('No text renderers available. Your text will not render.');
743
+ return null;
686
744
  }
687
745
 
688
746
  createNode(props: Partial<CoreNodeProps>) {
@@ -691,34 +749,30 @@ export class Stage {
691
749
  }
692
750
 
693
751
  createTextNode(props: Partial<CoreTextNodeProps>) {
694
- const fontSize = props.fontSize ?? 16;
695
- const resolvedProps = {
696
- ...this.resolveNodeDefaults(props),
697
- text: props.text ?? '',
698
- textRendererOverride: props.textRendererOverride ?? null,
699
- fontSize,
700
- fontFamily: props.fontFamily ?? 'sans-serif',
701
- fontStyle: props.fontStyle ?? 'normal',
702
- fontWeight: props.fontWeight ?? 'normal',
703
- fontStretch: props.fontStretch ?? 'normal',
704
- textAlign: props.textAlign ?? 'left',
705
- contain: props.contain ?? 'none',
706
- scrollable: props.scrollable ?? false,
707
- scrollY: props.scrollY ?? 0,
708
- offsetY: props.offsetY ?? 0,
709
- letterSpacing: props.letterSpacing ?? 0,
710
- lineHeight: props.lineHeight, // `undefined` is a valid value
711
- maxLines: props.maxLines ?? 0,
712
- textBaseline: props.textBaseline ?? 'alphabetic',
713
- verticalAlign: props.verticalAlign ?? 'middle',
714
- overflowSuffix: props.overflowSuffix ?? '...',
715
- debug: props.debug ?? {},
716
- shaderProps: null,
717
- };
752
+ const fontSize = props.fontSize || 16;
753
+ const resolvedProps = this.resolveNodeDefaults(props) as CoreTextNodeProps;
754
+
755
+ resolvedProps.text = props.text ?? '';
756
+ resolvedProps.textRendererOverride = props.textRendererOverride ?? null;
757
+ resolvedProps.fontSize = fontSize;
758
+ resolvedProps.fontFamily = props.fontFamily || 'sans-serif';
759
+ resolvedProps.fontStyle = props.fontStyle || 'normal';
760
+ resolvedProps.textAlign = props.textAlign || 'left';
761
+ resolvedProps.offsetY = props.offsetY || 0;
762
+ resolvedProps.letterSpacing = props.letterSpacing || 0;
763
+ resolvedProps.lineHeight = props.lineHeight || 1.2;
764
+ resolvedProps.maxLines = props.maxLines || 0;
765
+ resolvedProps.verticalAlign = props.verticalAlign || 'top';
766
+ resolvedProps.overflowSuffix = props.overflowSuffix || '...';
767
+ resolvedProps.wordBreak = props.wordBreak || 'break-word';
768
+ resolvedProps.contain = props.contain || 'none';
769
+ resolvedProps.maxWidth = props.maxWidth || 0;
770
+ resolvedProps.maxHeight = props.maxHeight || 0;
771
+ resolvedProps.forceLoad = props.forceLoad || false;
718
772
 
719
773
  const resolvedTextRenderer = this.resolveTextRenderer(
720
774
  resolvedProps,
721
- props.textRendererOverride,
775
+ resolvedProps.textRendererOverride as keyof TextRenderers | null,
722
776
  );
723
777
 
724
778
  if (!resolvedTextRenderer) {
@@ -735,7 +789,84 @@ export class Stage {
735
789
  ? value
736
790
  : [value, value, value, value];
737
791
 
738
- this.root.setUpdateType(UpdateType.RenderBounds);
792
+ this.updateViewportBounds();
793
+ }
794
+
795
+ /**
796
+ * Update the viewport bounds
797
+ */
798
+ updateViewportBounds() {
799
+ const { appWidth, appHeight } = this.options;
800
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
801
+ this.preloadBound = createPreloadBounds(
802
+ this.strictBound,
803
+ this.boundsMargin,
804
+ );
805
+ this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
806
+ this.root.childUpdateType |= UpdateType.RenderBounds;
807
+ }
808
+
809
+ /** Find all nodes at a given point
810
+ * @param data
811
+ */
812
+ findNodesAtPoint(data: Point): CoreNode[] {
813
+ const x = data.x / this.options.deviceLogicalPixelRatio;
814
+ const y = data.y / this.options.deviceLogicalPixelRatio;
815
+ const nodes: CoreNode[] = [];
816
+ for (const node of this.interactiveNodes) {
817
+ if (node.isRenderable === false) {
818
+ continue;
819
+ }
820
+ if (pointInBound(x, y, node.renderBound!) === true) {
821
+ nodes.push(node);
822
+ }
823
+ }
824
+ return nodes;
825
+ }
826
+
827
+ /**
828
+ * Find the top node at a given point
829
+ * @param data
830
+ * @returns
831
+ */
832
+ getNodeFromPosition(data: Point): CoreNode | null {
833
+ const nodes: CoreNode[] = this.findNodesAtPoint(data);
834
+ if (nodes.length === 0) {
835
+ return null;
836
+ }
837
+
838
+ //get last node in array (as top node)
839
+ let topNode = nodes[nodes.length - 1] as CoreNode;
840
+ for (let i = 0; i < nodes.length; i++) {
841
+ if (nodes[i]!.zIndex > topNode.zIndex) {
842
+ topNode = nodes[i]!;
843
+ }
844
+ }
845
+ return topNode || null;
846
+ }
847
+
848
+ /**
849
+ * add node to timeNodes arrays
850
+ * @param node
851
+ * @returns
852
+ */
853
+ trackTimedNode(node: CoreNode) {
854
+ if (this.timedNodes[node.id] !== undefined) {
855
+ return;
856
+ }
857
+ this.timedNodes[node.id] = node;
858
+ }
859
+
860
+ /**
861
+ * remove node from timeNodes arrays
862
+ * @param node
863
+ * @returns
864
+ */
865
+ untrackTimedNode(node: CoreNode) {
866
+ if (this.timedNodes[node.id] === undefined) {
867
+ return;
868
+ }
869
+ delete this.timedNodes[node.id];
739
870
  }
740
871
 
741
872
  /**
@@ -751,66 +882,96 @@ export class Stage {
751
882
  */
752
883
  protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
753
884
  const color = props.color ?? 0xffffffff;
754
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
755
- const colorTr =
756
- props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
757
- const colorBl =
758
- props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
759
- const colorBr =
760
- props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
761
-
762
- let data = {};
763
- if (this.options.inspector === true) {
764
- data = santizeCustomDataMap(props.data ?? {});
885
+ let colorTop = color;
886
+ let colorBottom = color;
887
+ let colorLeft = color;
888
+ let colorRight = color;
889
+ let colorTl = color;
890
+ let colorTr = color;
891
+ let colorBl = color;
892
+ let colorBr = color;
893
+
894
+ // Fast-path: Check if any complex color props are present
895
+ // We check values directly to avoid destructuring
896
+ if (
897
+ props.colorTop !== undefined ||
898
+ props.colorBottom !== undefined ||
899
+ props.colorLeft !== undefined ||
900
+ props.colorRight !== undefined ||
901
+ props.colorTl !== undefined ||
902
+ props.colorTr !== undefined ||
903
+ props.colorBl !== undefined ||
904
+ props.colorBr !== undefined
905
+ ) {
906
+ const {
907
+ colorTop: top,
908
+ colorBottom: bottom,
909
+ colorLeft: left,
910
+ colorRight: right,
911
+ } = props;
912
+
913
+ colorTop = top ?? color;
914
+ colorBottom = bottom ?? color;
915
+ colorLeft = left ?? color;
916
+ colorRight = right ?? color;
917
+
918
+ colorTl = props.colorTl ?? top ?? left ?? color;
919
+ colorTr = props.colorTr ?? top ?? right ?? color;
920
+ colorBl = props.colorBl ?? bottom ?? left ?? color;
921
+ colorBr = props.colorBr ?? bottom ?? right ?? color;
765
922
  }
766
923
 
924
+ const scale = props.scale ?? null;
925
+ const mount = props.mount ?? 0;
926
+ const pivot = props.pivot ?? 0.5;
927
+
928
+ const data =
929
+ !isProductionEnvironment && this.options.inspector
930
+ ? santizeCustomDataMap(props.data ?? {})
931
+ : {};
932
+
767
933
  return {
768
934
  x: props.x ?? 0,
769
935
  y: props.y ?? 0,
770
- width: props.width ?? 0,
771
- height: props.height ?? 0,
936
+ w: props.w ?? 0,
937
+ h: props.h ?? 0,
772
938
  alpha: props.alpha ?? 1,
773
939
  autosize: props.autosize ?? false,
774
940
  boundsMargin: props.boundsMargin ?? null,
775
941
  clipping: props.clipping ?? false,
776
942
  color,
777
- colorTop: props.colorTop ?? color,
778
- colorBottom: props.colorBottom ?? color,
779
- colorLeft: props.colorLeft ?? color,
780
- colorRight: props.colorRight ?? color,
781
- colorBl,
782
- colorBr,
943
+ colorTop,
944
+ colorBottom,
945
+ colorLeft,
946
+ colorRight,
783
947
  colorTl,
784
948
  colorTr,
949
+ colorBl,
950
+ colorBr,
785
951
  zIndex: props.zIndex ?? 0,
786
- zIndexLocked: props.zIndexLocked ?? 0,
787
952
  parent: props.parent ?? null,
788
953
  texture: props.texture ?? null,
789
954
  textureOptions: props.textureOptions ?? {},
790
- shader: props.shader ?? this.defShaderCtr,
791
- // Since setting the `src` will trigger a texture load, we need to set it after
792
- // we set the texture. Otherwise, problems happen.
955
+ shader: props.shader ?? this.defShaderNode,
793
956
  src: props.src ?? null,
794
957
  srcHeight: props.srcHeight,
795
958
  srcWidth: props.srcWidth,
796
959
  srcX: props.srcX,
797
960
  srcY: props.srcY,
798
- scale: props.scale ?? null,
799
- scaleX: props.scaleX ?? props.scale ?? 1,
800
- scaleY: props.scaleY ?? props.scale ?? 1,
801
- mount: props.mount ?? 0,
802
- mountX: props.mountX ?? props.mount ?? 0,
803
- mountY: props.mountY ?? props.mount ?? 0,
804
- pivot: props.pivot ?? 0.5,
805
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
806
- pivotY: props.pivotY ?? props.pivot ?? 0.5,
961
+ scale,
962
+ scaleX: props.scaleX ?? scale ?? 1,
963
+ scaleY: props.scaleY ?? scale ?? 1,
964
+ mount,
965
+ mountX: props.mountX ?? mount,
966
+ mountY: props.mountY ?? mount,
967
+ pivot,
968
+ pivotX: props.pivotX ?? pivot,
969
+ pivotY: props.pivotY ?? pivot,
807
970
  rotation: props.rotation ?? 0,
808
971
  rtt: props.rtt ?? false,
809
- data: data,
810
- preventCleanup: props.preventCleanup ?? false,
972
+ data,
811
973
  imageType: props.imageType,
812
974
  interactive: props.interactive ?? false,
813
- strictBounds: props.strictBounds ?? this.strictBounds,
814
975
  };
815
976
  }
816
977
 
@@ -820,7 +981,50 @@ export class Stage {
820
981
  * @remarks
821
982
  * This method is used to cleanup orphaned textures that are no longer in use.
822
983
  */
823
- cleanup(aggressive: boolean) {
824
- this.txMemManager.cleanup(aggressive);
984
+ cleanup(full: boolean = false) {
985
+ this.txMemManager.cleanup(full);
986
+ }
987
+
988
+ set clearColor(value: number) {
989
+ this.renderer.updateClearColor(value);
990
+ this.renderRequested = true;
991
+ this.clrColor = value;
992
+ }
993
+
994
+ get clearColor() {
995
+ return this.clrColor;
996
+ }
997
+
998
+ /**
999
+ * Load a font using a specific text renderer type
1000
+ *
1001
+ * @remarks
1002
+ * This method allows consumers to explicitly load fonts for a specific
1003
+ * text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
1004
+ * the renderer type to ensure fonts are loaded with the correct pipeline.
1005
+ *
1006
+ * For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
1007
+ * For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
1008
+ *
1009
+ * @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
1010
+ * @param options - Font loading options specific to the renderer type
1011
+ * @returns Promise that resolves when the font is loaded
1012
+ */
1013
+ async loadFont(
1014
+ rendererType: TextRenderers,
1015
+ options: FontLoadOptions,
1016
+ ): Promise<void> {
1017
+ const rendererTypeKey = String(rendererType);
1018
+ const fontHandler = this.fontHandlers[rendererTypeKey];
1019
+
1020
+ if (!fontHandler) {
1021
+ throw new Error(
1022
+ `Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(
1023
+ this.fontHandlers,
1024
+ ).join(', ')}`,
1025
+ );
1026
+ }
1027
+
1028
+ return fontHandler.loadFont(this, options);
825
1029
  }
826
1030
  }