@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
@@ -1,38 +1,19 @@
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 { assertTruthy, CALCULATE_FPS, isProductionEnvironment, setPremultiplyMode, USE_RTT, } from '../utils.js';
21
2
  import { AnimationManager } from './animations/AnimationManager.js';
22
3
  import { UpdateType, CoreNode, CoreNodeRenderState, } from './CoreNode.js';
23
4
  import { CoreTextureManager } from './CoreTextureManager.js';
24
- import { TrFontManager } from './text-rendering/TrFontManager.js';
25
5
  import { CoreShaderManager } from './CoreShaderManager.js';
26
- import { TextRenderer, } from './text-rendering/renderers/TextRenderer.js';
6
+ import {} from './text-rendering/TextRenderer.js';
27
7
  import { EventEmitter } from '../common/EventEmitter.js';
28
8
  import { ContextSpy } from './lib/ContextSpy.js';
29
9
  import { TextureMemoryManager, } from './TextureMemoryManager.js';
30
10
  import { CoreRenderer } from './renderers/CoreRenderer.js';
31
11
  import { CoreTextNode } from './CoreTextNode.js';
32
12
  import { santizeCustomDataMap } from '../main-api/utils.js';
33
- import { createBound, createPreloadBounds, pointInBound, } from './lib/utils.js';
13
+ import { pointInBound } from './lib/utils.js';
14
+ import { Matrix3d } from './lib/Matrix3d.js';
15
+ import { createBound, createPreloadBounds } from './lib/utils.js';
34
16
  import { ColorTexture } from './textures/ColorTexture.js';
35
- const bufferMemory = 2e6;
36
17
  const autoStart = true;
37
18
  export class Stage {
38
19
  options;
@@ -40,18 +21,21 @@ export class Stage {
40
21
  animationManager;
41
22
  txManager;
42
23
  txMemManager;
43
- fontManager;
44
- textRenderers;
24
+ textRenderers = {};
25
+ fontHandlers = {};
45
26
  shManager;
46
27
  renderer;
47
28
  root;
48
29
  interactiveNodes = new Set();
49
30
  boundsMargin;
50
- defShaderCtr;
31
+ defShaderNode = null;
51
32
  strictBound;
52
33
  preloadBound;
53
- strictBounds;
54
34
  defaultTexture = null;
35
+ pixelRatio;
36
+ bufferMemory = 2e6;
37
+ platform;
38
+ calculateTextureCoord;
55
39
  /**
56
40
  * Target frame time in milliseconds (calculated from targetFPS)
57
41
  *
@@ -71,29 +55,47 @@ export class Stage {
71
55
  */
72
56
  eventBus;
73
57
  /// State
58
+ startTime = 0;
74
59
  deltaTime = 0;
75
60
  lastFrameTime = 0;
76
61
  currentFrameTime = 0;
62
+ elapsedTime = 0;
63
+ timedNodes = [];
64
+ clrColor = 0x00000000;
77
65
  fpsNumFrames = 0;
78
66
  fpsElapsedTime = 0;
79
67
  numQuadsRendered = 0;
80
68
  renderRequested = false;
69
+ reprocessFrame = false;
70
+ reprocessCallback = null;
81
71
  frameEventQueue = [];
82
- fontResolveMap = {};
83
- /// Debug data
72
+ // Flattened render list optimization
73
+ renderList = [];
74
+ renderListDirty = true;
75
+ // Font resolve optimisation flags
76
+ hasOnlyOneFontEngine;
77
+ hasOnlyCanvasFontEngine;
78
+ hasCanvasEngine;
79
+ singleFontEngine = null;
80
+ singleFontHandler = null;
81
+ // Debug data
84
82
  contextSpy = null;
85
83
  /**
86
84
  * Stage constructor
87
85
  */
88
86
  constructor(options) {
89
87
  this.options = options;
90
- const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, } = options;
88
+ const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, platform, maxRetryCount, } = options;
89
+ assertTruthy(platform !== null, 'A CorePlatform is not provided in the options');
90
+ this.platform = platform;
91
+ this.startTime = platform.getTimeStamp();
91
92
  this.eventBus = options.eventBus;
92
93
  // Calculate target frame time from targetFPS option
93
94
  this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
94
95
  this.txManager = new CoreTextureManager(this, {
95
96
  numImageWorkers,
96
97
  createImageBitmapSupport,
98
+ maxRetryCount,
97
99
  });
98
100
  // Wait for the Texture Manager to initialize
99
101
  // once it does, request a render
@@ -101,10 +103,8 @@ export class Stage {
101
103
  this.requestRender();
102
104
  });
103
105
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
104
- this.shManager = new CoreShaderManager();
105
106
  this.animationManager = new AnimationManager();
106
107
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
107
- this.strictBounds = options.strictBounds;
108
108
  let bm = [0, 0, 0, 0];
109
109
  if (boundsMargin) {
110
110
  bm = Array.isArray(boundsMargin)
@@ -115,54 +115,96 @@ export class Stage {
115
115
  // precalculate our viewport bounds
116
116
  this.strictBound = createBound(0, 0, appWidth, appHeight);
117
117
  this.preloadBound = createPreloadBounds(this.strictBound, bm);
118
- const rendererOptions = {
118
+ this.clrColor = clearColor;
119
+ this.pixelRatio =
120
+ options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio;
121
+ this.renderer = new renderEngine({
119
122
  stage: this,
120
123
  canvas,
121
- pixelRatio: options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio,
122
- clearColor: clearColor ?? 0xff000000,
123
- bufferMemory,
124
- txManager: this.txManager,
125
- txMemManager: this.txMemManager,
126
- shManager: this.shManager,
127
124
  contextSpy: this.contextSpy,
128
125
  forceWebGL2,
129
- };
130
- this.renderer = new renderEngine(rendererOptions);
126
+ });
127
+ this.shManager = new CoreShaderManager(this);
128
+ this.defShaderNode = this.renderer.getDefaultShaderNode();
129
+ this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
131
130
  const renderMode = this.renderer.mode || 'webgl';
132
131
  this.createDefaultTexture();
133
- this.defShaderCtr = this.renderer.getDefShaderCtr();
134
132
  setPremultiplyMode(renderMode);
135
133
  // Must do this after renderer is created
136
134
  this.txManager.renderer = this.renderer;
137
135
  // Create text renderers
138
- this.textRenderers = {};
139
- fontEngines.forEach((fontEngineConstructor) => {
140
- const fontEngineInstance = new fontEngineConstructor(this);
141
- const className = fontEngineInstance.type;
142
- if (className === 'sdf' && renderMode === 'canvas') {
143
- console.warn('SdfTextRenderer is not compatible with Canvas renderer. Skipping...');
144
- return;
145
- }
146
- if (fontEngineInstance instanceof TextRenderer) {
147
- if (className === 'canvas') {
148
- this.textRenderers['canvas'] =
149
- fontEngineInstance;
136
+ this.hasOnlyOneFontEngine = fontEngines.length === 1;
137
+ this.hasOnlyCanvasFontEngine =
138
+ fontEngines.length === 1 && fontEngines[0].type === 'canvas';
139
+ this.hasCanvasEngine = false;
140
+ this.singleFontEngine = this.hasOnlyOneFontEngine
141
+ ? fontEngines[0]
142
+ : null;
143
+ this.singleFontHandler = this.hasOnlyOneFontEngine
144
+ ? fontEngines[0]?.font
145
+ : null;
146
+ if (this.singleFontEngine === null) {
147
+ // Multiple font engines case
148
+ // Filter out incompatible engines first
149
+ const compatibleEngines = fontEngines.filter((fontEngine) => {
150
+ const type = fontEngine.type;
151
+ if (type === 'sdf' && renderMode === 'canvas') {
152
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
153
+ return false;
150
154
  }
151
- else if (className === 'sdf') {
152
- this.textRenderers['sdf'] = fontEngineInstance;
155
+ if (type === 'canvas') {
156
+ this.hasCanvasEngine = true;
153
157
  }
158
+ return true;
159
+ });
160
+ // Sort engines: SDF first, Canvas last, others in between
161
+ const sortedEngines = compatibleEngines.sort((a, b) => {
162
+ if (a.type === 'sdf')
163
+ return -1;
164
+ if (b.type === 'sdf')
165
+ return 1;
166
+ if (a.type === 'canvas')
167
+ return 1;
168
+ if (b.type === 'canvas')
169
+ return -1;
170
+ return 0;
171
+ });
172
+ // Initialize engines in sorted order
173
+ sortedEngines.forEach((fontEngine) => {
174
+ const type = fontEngine.type;
175
+ // Add to map for type-based access
176
+ this.textRenderers[type] = fontEngine;
177
+ this.textRenderers[type].init(this);
178
+ this.fontHandlers[type] = fontEngine.font;
179
+ });
180
+ }
181
+ else {
182
+ // Single font engine case - initialize it directly
183
+ const fontEngine = this.singleFontEngine;
184
+ const type = fontEngine.type;
185
+ // Check compatibility
186
+ if (type === 'sdf' && renderMode === 'canvas') {
187
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
154
188
  }
155
- });
189
+ else {
190
+ if (type === 'canvas') {
191
+ this.hasCanvasEngine = true;
192
+ }
193
+ // Add to map for type-based access
194
+ this.textRenderers[type] = fontEngine;
195
+ this.fontHandlers[type] = fontEngine.font;
196
+ this.textRenderers[type].init(this);
197
+ }
198
+ }
156
199
  if (Object.keys(this.textRenderers).length === 0) {
157
200
  console.warn('No text renderers available. Your text will not render.');
158
201
  }
159
- this.fontManager = new TrFontManager(this.textRenderers);
160
202
  // create root node
161
203
  const rootNode = new CoreNode(this, {
162
204
  x: 0,
163
205
  y: 0,
164
- width: appWidth,
165
- height: appHeight,
206
+ w: appWidth,
207
+ h: appHeight,
166
208
  alpha: 1,
167
209
  autosize: false,
168
210
  boundsMargin: null,
@@ -177,7 +219,6 @@ export class Stage {
177
219
  colorBl: 0x00000000,
178
220
  colorBr: 0x00000000,
179
221
  zIndex: 0,
180
- zIndexLocked: 0,
181
222
  scaleX: 1,
182
223
  scaleY: 1,
183
224
  mountX: 0,
@@ -190,20 +231,34 @@ export class Stage {
190
231
  parent: null,
191
232
  texture: null,
192
233
  textureOptions: {},
193
- shader: this.defShaderCtr,
234
+ shader: this.defShaderNode,
194
235
  rtt: false,
195
236
  src: null,
196
237
  scale: 1,
197
- preventCleanup: false,
198
- strictBounds: this.strictBounds,
199
238
  });
200
239
  this.root = rootNode;
240
+ // Initialize root node properties
241
+ rootNode.updateLocalTransform();
242
+ rootNode.globalTransform = Matrix3d.copy(rootNode.localTransform);
243
+ rootNode.sceneGlobalTransform = Matrix3d.copy(rootNode.localTransform);
244
+ rootNode.calculateRenderCoords();
245
+ rootNode.updateBoundingRect();
246
+ rootNode.createRenderBounds();
247
+ rootNode.updateRenderState(CoreNodeRenderState.InViewport);
248
+ rootNode.updateIsRenderable();
249
+ // Initialize premultiplied colors (default is transparent 0x00000000)
250
+ rootNode.premultipliedColorTl =
251
+ rootNode.premultipliedColorTr =
252
+ rootNode.premultipliedColorBl =
253
+ rootNode.premultipliedColorBr =
254
+ 0;
201
255
  // execute platform start loop
202
- if (autoStart) {
203
- startLoop(this);
256
+ if (autoStart === true) {
257
+ this.platform.startLoop(this);
204
258
  }
205
259
  }
206
260
  setClearColor(color) {
261
+ this.clearColor = color;
207
262
  this.renderer.updateClearColor(color);
208
263
  this.renderRequested = true;
209
264
  }
@@ -221,9 +276,10 @@ export class Stage {
221
276
  this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
222
277
  }
223
278
  updateFrameTime() {
224
- const newFrameTime = getTimeStamp();
279
+ const newFrameTime = this.platform.getTimeStamp();
225
280
  this.lastFrameTime = this.currentFrameTime;
226
281
  this.currentFrameTime = newFrameTime;
282
+ this.elapsedTime = newFrameTime - this.startTime;
227
283
  this.deltaTime = !this.lastFrameTime
228
284
  ? 100 / 6
229
285
  : newFrameTime - this.lastFrameTime;
@@ -240,7 +296,6 @@ export class Stage {
240
296
  * Create default PixelTexture
241
297
  */
242
298
  createDefaultTexture() {
243
- console.log('Creating default texture');
244
299
  this.defaultTexture = this.txManager.createTexture('ColorTexture', {
245
300
  color: 0xffffffff,
246
301
  });
@@ -249,7 +304,7 @@ export class Stage {
249
304
  // Mark the default texture as ALWAYS renderable
250
305
  // This prevents it from ever being cleaned up.
251
306
  // Fixes https://github.com/lightning-js/renderer/issues/262
252
- this.defaultTexture.setRenderableOwner(this, true);
307
+ this.defaultTexture.setRenderableOwner('stage', true);
253
308
  // When the default texture is loaded, request a render in case the
254
309
  // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
255
310
  this.defaultTexture.once('loaded', () => {
@@ -262,10 +317,11 @@ export class Stage {
262
317
  updateAnimations() {
263
318
  const { animationManager } = this;
264
319
  if (!this.root) {
265
- return;
320
+ return false;
266
321
  }
267
322
  // step animation
268
323
  animationManager.update(this.deltaTime);
324
+ return animationManager.activeAnimations.size > 0;
269
325
  }
270
326
  /**
271
327
  * Check if the scene has updates
@@ -278,45 +334,84 @@ export class Stage {
278
334
  /**
279
335
  * Start a new frame draw
280
336
  */
281
- drawFrame() {
282
- const { renderer, renderRequested } = this;
283
- assertTruthy(renderer);
337
+ drawFrame(hasActiveAnimations = false) {
338
+ const { renderer, renderRequested, root } = this;
284
339
  // Update tree if needed
285
- if (this.root.updateType !== 0) {
286
- this.root.update(this.deltaTime, this.root.clippingRect);
287
- }
340
+ do {
341
+ const forceUpdate = this.reprocessFrame;
342
+ this.reprocessFrame = false;
343
+ if (root.updateType !== 0 || forceUpdate) {
344
+ root.updateType = 0;
345
+ const childUpdateType = root.childUpdateType;
346
+ root.childUpdateType = 0;
347
+ for (let i = 0, length = root.children.length; i < length; i++) {
348
+ const child = root.children[i];
349
+ if (childUpdateType !== 0) {
350
+ child.setUpdateType(childUpdateType);
351
+ }
352
+ if (child.updateType === 0) {
353
+ continue;
354
+ }
355
+ child.update(this.deltaTime, root.clippingRect);
356
+ }
357
+ }
358
+ if (this.reprocessCallback !== null) {
359
+ this.reprocessCallback();
360
+ this.reprocessCallback = null;
361
+ }
362
+ } while (this.reprocessFrame);
288
363
  // Process some textures asynchronously but don't block the frame
289
364
  // Use a background task to prevent frame drops
290
- this.txManager
291
- .processSome(this.options.textureProcessingTimeLimit)
292
- .catch((err) => {
293
- console.error('Error processing textures:', err);
294
- });
365
+ if (this.txManager.hasUpdates() === true) {
366
+ const timeLimit = hasActiveAnimations
367
+ ? this.options.textureProcessingTimeLimit / 2
368
+ : this.options.textureProcessingTimeLimit;
369
+ this.txManager.processSome(timeLimit).catch((err) => {
370
+ console.error('Error processing textures:', err);
371
+ });
372
+ }
295
373
  // Reset render operations and clear the canvas
296
374
  renderer.reset();
297
- // Check if we need to cleanup textures
298
- if (this.txMemManager.criticalCleanupRequested === true) {
299
- this.txMemManager.cleanup(false);
300
- if (this.txMemManager.criticalCleanupRequested === true) {
301
- // If we still need to cleanup, request another but aggressive cleanup
302
- this.txMemManager.cleanup(true);
303
- }
304
- }
305
375
  // If we have RTT nodes draw them first
306
376
  // So we can use them as textures in the main scene
307
- if (renderer.rttNodes.length > 0) {
377
+ if (USE_RTT && renderer.rttNodes.length > 0) {
308
378
  renderer.renderRTTNodes();
309
379
  }
310
- // Fill quads buffer
311
- this.addQuads(this.root);
380
+ // Update render list if dirty
381
+ if (this.renderListDirty === true) {
382
+ this.renderList.length = 0;
383
+ this.buildRenderList(this.root);
384
+ this.renderListDirty = false;
385
+ }
386
+ else {
387
+ // Fill quads buffer
388
+ const renderList = this.renderList;
389
+ for (let i = 0, len = renderList.length; i < len; i++) {
390
+ renderList[i].renderQuads(renderer);
391
+ }
392
+ }
312
393
  // Perform render pass
313
- renderer?.render();
314
- this.calculateFps();
315
- this.calculateQuads();
394
+ renderer.render();
395
+ if (CALCULATE_FPS) {
396
+ this.calculateFps();
397
+ this.calculateQuads();
398
+ }
316
399
  // Reset renderRequested flag if it was set
317
- if (renderRequested) {
400
+ if (renderRequested === true) {
318
401
  this.renderRequested = false;
319
402
  }
403
+ if (this.timedNodes.length > 0) {
404
+ for (let key in this.timedNodes) {
405
+ if (this.timedNodes[key].isRenderable === true) {
406
+ this.requestRender();
407
+ break;
408
+ }
409
+ }
410
+ }
411
+ // Check if we need to cleanup textures
412
+ if (this.txMemManager.criticalCleanupRequested === true) {
413
+ this.txMemManager.cleanup();
414
+ }
320
415
  }
321
416
  /**
322
417
  * Queue an event to be emitted after the current/next frame is rendered
@@ -378,23 +473,32 @@ export class Stage {
378
473
  });
379
474
  }
380
475
  }
381
- addQuads(node) {
382
- assertTruthy(this.renderer);
383
- // If the node is renderable and has a loaded texture, render it
476
+ requestRenderListUpdate() {
477
+ // Notify the renderer that the render list is structurally changing.
478
+ // For the WebGL renderer this resets per-node buffer slot assignments
479
+ // and schedules a full GPU buffer re-upload on the next frame.
480
+ if (this.renderer.invalidateQuadBuffer !== undefined) {
481
+ this.renderer.invalidateQuadBuffer();
482
+ }
483
+ this.renderListDirty = true;
484
+ this.requestRender();
485
+ }
486
+ buildRenderList(node) {
487
+ // If the node is renderable and has a loaded texture, add it
384
488
  if (node.isRenderable === true) {
385
489
  node.renderQuads(this.renderer);
490
+ this.renderList.push(node);
386
491
  }
387
- for (let i = 0; i < node.children.length; i++) {
388
- const child = node.children[i];
389
- if (child === undefined) {
390
- continue;
391
- }
492
+ const children = node.children;
493
+ const len = children.length;
494
+ for (let i = 0; i < len; i++) {
495
+ const child = children[i];
496
+ // Skip invisible subtrees
392
497
  if (child.worldAlpha === 0 ||
393
- (child.strictBounds === true &&
394
- child.renderState === CoreNodeRenderState.OutOfBounds)) {
498
+ child.renderState === CoreNodeRenderState.OutOfBounds) {
395
499
  continue;
396
500
  }
397
- this.addQuads(child);
501
+ this.buildRenderList(child);
398
502
  }
399
503
  }
400
504
  /**
@@ -403,8 +507,106 @@ export class Stage {
403
507
  requestRender() {
404
508
  this.renderRequested = true;
405
509
  }
510
+ reprocessUpdates(callback) {
511
+ this.reprocessFrame = true;
512
+ if (callback) {
513
+ this.reprocessCallback = callback;
514
+ }
515
+ }
406
516
  /**
407
- * Find all nodes at a given point
517
+ * Given a font name, and possible renderer override, return the best compatible text renderer.
518
+ *
519
+ * @remarks
520
+ * Will try to return a canvas renderer if no other suitable renderer can be resolved.
521
+ *
522
+ * @param fontFamily
523
+ * @param textRendererOverride
524
+ * @returns
525
+ */
526
+ resolveTextRenderer(trProps, textRendererOverride = null) {
527
+ // If we have an overide, return it
528
+ if (textRendererOverride !== null) {
529
+ const overrideKey = String(textRendererOverride);
530
+ if (this.textRenderers[overrideKey] === undefined) {
531
+ console.warn(`Text renderer override '${overrideKey}' not found.`);
532
+ return null;
533
+ }
534
+ return this.textRenderers[overrideKey];
535
+ }
536
+ // If we have only one font engine early return it
537
+ if (this.singleFontEngine !== null) {
538
+ // If we have only one font engine and its the canvas engine, we can just return it
539
+ if (this.hasOnlyCanvasFontEngine === true) {
540
+ return this.singleFontEngine;
541
+ }
542
+ // If we have only one font engine and it can render the font, return it
543
+ if (this.singleFontHandler?.canRenderFont(trProps) === true) {
544
+ return this.singleFontEngine;
545
+ }
546
+ // If we have only one font engine and it cannot render the font, return null
547
+ console.warn(`Text renderer cannot render font`, trProps);
548
+ return null;
549
+ }
550
+ // Multi font handling - If we have multiple font engines, we need to resolve the best one
551
+ // First check SDF
552
+ if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
553
+ return this.textRenderers.sdf || null;
554
+ }
555
+ // If we have a canvas engine, we can return it (it can render all fonts)
556
+ if (this.hasCanvasEngine === true) {
557
+ return this.textRenderers.canvas || null;
558
+ }
559
+ // If we have no font engines, return null
560
+ console.warn('No text renderers available. Your text will not render.');
561
+ return null;
562
+ }
563
+ createNode(props) {
564
+ const resolvedProps = this.resolveNodeDefaults(props);
565
+ return new CoreNode(this, resolvedProps);
566
+ }
567
+ createTextNode(props) {
568
+ const fontSize = props.fontSize || 16;
569
+ const resolvedProps = this.resolveNodeDefaults(props);
570
+ resolvedProps.text = props.text ?? '';
571
+ resolvedProps.textRendererOverride = props.textRendererOverride ?? null;
572
+ resolvedProps.fontSize = fontSize;
573
+ resolvedProps.fontFamily = props.fontFamily || 'sans-serif';
574
+ resolvedProps.fontStyle = props.fontStyle || 'normal';
575
+ resolvedProps.textAlign = props.textAlign || 'left';
576
+ resolvedProps.offsetY = props.offsetY || 0;
577
+ resolvedProps.letterSpacing = props.letterSpacing || 0;
578
+ resolvedProps.lineHeight = props.lineHeight || 1.2;
579
+ resolvedProps.maxLines = props.maxLines || 0;
580
+ resolvedProps.verticalAlign = props.verticalAlign || 'top';
581
+ resolvedProps.overflowSuffix = props.overflowSuffix || '...';
582
+ resolvedProps.wordBreak = props.wordBreak || 'break-word';
583
+ resolvedProps.contain = props.contain || 'none';
584
+ resolvedProps.maxWidth = props.maxWidth || 0;
585
+ resolvedProps.maxHeight = props.maxHeight || 0;
586
+ resolvedProps.forceLoad = props.forceLoad || false;
587
+ const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, resolvedProps.textRendererOverride);
588
+ if (!resolvedTextRenderer) {
589
+ throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
590
+ }
591
+ return new CoreTextNode(this, resolvedProps, resolvedTextRenderer);
592
+ }
593
+ setBoundsMargin(value) {
594
+ this.boundsMargin = Array.isArray(value)
595
+ ? value
596
+ : [value, value, value, value];
597
+ this.updateViewportBounds();
598
+ }
599
+ /**
600
+ * Update the viewport bounds
601
+ */
602
+ updateViewportBounds() {
603
+ const { appWidth, appHeight } = this.options;
604
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
605
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
606
+ this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
607
+ this.root.childUpdateType |= UpdateType.RenderBounds;
608
+ }
609
+ /** Find all nodes at a given point
408
610
  * @param data
409
611
  */
410
612
  findNodesAtPoint(data) {
@@ -431,7 +633,8 @@ export class Stage {
431
633
  if (nodes.length === 0) {
432
634
  return null;
433
635
  }
434
- let topNode = nodes[0];
636
+ //get last node in array (as top node)
637
+ let topNode = nodes[nodes.length - 1];
435
638
  for (let i = 0; i < nodes.length; i++) {
436
639
  if (nodes[i].zIndex > topNode.zIndex) {
437
640
  topNode = nodes[i];
@@ -440,118 +643,26 @@ export class Stage {
440
643
  return topNode || null;
441
644
  }
442
645
  /**
443
- * Given a font name, and possible renderer override, return the best compatible text renderer.
444
- *
445
- * @remarks
446
- * Will try to return a canvas renderer if no other suitable renderer can be resolved.
447
- *
448
- * @param fontFamily
449
- * @param textRendererOverride
646
+ * add node to timeNodes arrays
647
+ * @param node
450
648
  * @returns
451
649
  */
452
- resolveTextRenderer(trProps, textRendererOverride = null) {
453
- const fontCacheString = `${trProps.fontFamily}${trProps.fontStyle}${trProps.fontWeight}${trProps.fontStretch}${textRendererOverride ? textRendererOverride : ''}`;
454
- // check our resolve cache first
455
- if (this.fontResolveMap[fontCacheString] !== undefined) {
456
- return this.fontResolveMap[fontCacheString];
457
- }
458
- // Resolve the text renderer
459
- let rendererId = textRendererOverride;
460
- let overrideFallback = false;
461
- // Check if the override is valid (if one is provided)
462
- if (rendererId) {
463
- const possibleRenderer = this.textRenderers[rendererId];
464
- if (!possibleRenderer) {
465
- console.warn(`Text renderer override '${rendererId}' not found.`);
466
- rendererId = null;
467
- overrideFallback = true;
468
- }
469
- else if (!possibleRenderer.canRenderFont(trProps)) {
470
- console.warn(`Cannot use override text renderer '${rendererId}' for font`, trProps);
471
- rendererId = null;
472
- overrideFallback = true;
473
- }
474
- }
475
- if (!rendererId) {
476
- // Iterate through the text renderers and find the first one that can render the font
477
- for (const [trId, tr] of Object.entries(this.textRenderers)) {
478
- if (tr.canRenderFont(trProps)) {
479
- rendererId = trId;
480
- break;
481
- }
482
- }
483
- if (!rendererId && this.textRenderers.canvas !== undefined) {
484
- // If no renderer can be found, use the canvas renderer
485
- rendererId = 'canvas';
486
- }
487
- }
488
- if (overrideFallback) {
489
- console.warn(`Falling back to text renderer ${String(rendererId)}`);
490
- }
491
- if (!rendererId) {
492
- // silently fail if no renderer can be found, the error is already created
493
- // at the constructor level
494
- return null;
650
+ trackTimedNode(node) {
651
+ if (this.timedNodes[node.id] !== undefined) {
652
+ return;
495
653
  }
496
- // By now we are guaranteed to have a valid rendererId (at least Canvas);
497
- const resolvedTextRenderer = this.textRenderers[rendererId];
498
- assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
499
- // cache the resolved renderer for future use with these trProps
500
- this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
501
- // Need to explicitly cast to TextRenderer because TS doesn't like
502
- // the covariant state argument in the setter method map
503
- return resolvedTextRenderer;
654
+ this.timedNodes[node.id] = node;
504
655
  }
505
656
  /**
506
- * Create a shader controller instance
507
- *
508
- * @param type
509
- * @param props
657
+ * remove node from timeNodes arrays
658
+ * @param node
510
659
  * @returns
511
660
  */
512
- createShaderCtr(type, props) {
513
- return this.shManager.loadShader(type, props);
514
- }
515
- createNode(props) {
516
- const resolvedProps = this.resolveNodeDefaults(props);
517
- return new CoreNode(this, resolvedProps);
518
- }
519
- createTextNode(props) {
520
- const fontSize = props.fontSize ?? 16;
521
- const resolvedProps = {
522
- ...this.resolveNodeDefaults(props),
523
- text: props.text ?? '',
524
- textRendererOverride: props.textRendererOverride ?? null,
525
- fontSize,
526
- fontFamily: props.fontFamily ?? 'sans-serif',
527
- fontStyle: props.fontStyle ?? 'normal',
528
- fontWeight: props.fontWeight ?? 'normal',
529
- fontStretch: props.fontStretch ?? 'normal',
530
- textAlign: props.textAlign ?? 'left',
531
- contain: props.contain ?? 'none',
532
- scrollable: props.scrollable ?? false,
533
- scrollY: props.scrollY ?? 0,
534
- offsetY: props.offsetY ?? 0,
535
- letterSpacing: props.letterSpacing ?? 0,
536
- lineHeight: props.lineHeight, // `undefined` is a valid value
537
- maxLines: props.maxLines ?? 0,
538
- textBaseline: props.textBaseline ?? 'alphabetic',
539
- verticalAlign: props.verticalAlign ?? 'middle',
540
- overflowSuffix: props.overflowSuffix ?? '...',
541
- debug: props.debug ?? {},
542
- shaderProps: null,
543
- };
544
- const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, props.textRendererOverride);
545
- if (!resolvedTextRenderer) {
546
- throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
661
+ untrackTimedNode(node) {
662
+ if (this.timedNodes[node.id] === undefined) {
663
+ return;
547
664
  }
548
- return new CoreTextNode(this, resolvedProps, resolvedTextRenderer);
549
- }
550
- setBoundsMargin(value) {
551
- this.boundsMargin = Array.isArray(value)
552
- ? value
553
- : [value, value, value, value];
554
- this.root.setUpdateType(UpdateType.RenderBounds);
665
+ delete this.timedNodes[node.id];
555
666
  }
556
667
  /**
557
668
  * Resolves the default property values for a Node
@@ -566,61 +677,82 @@ export class Stage {
566
677
  */
567
678
  resolveNodeDefaults(props) {
568
679
  const color = props.color ?? 0xffffffff;
569
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
570
- const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
571
- const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
572
- const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
573
- let data = {};
574
- if (this.options.inspector === true) {
575
- data = santizeCustomDataMap(props.data ?? {});
680
+ let colorTop = color;
681
+ let colorBottom = color;
682
+ let colorLeft = color;
683
+ let colorRight = color;
684
+ let colorTl = color;
685
+ let colorTr = color;
686
+ let colorBl = color;
687
+ let colorBr = color;
688
+ // Fast-path: Check if any complex color props are present
689
+ // We check values directly to avoid destructuring
690
+ if (props.colorTop !== undefined ||
691
+ props.colorBottom !== undefined ||
692
+ props.colorLeft !== undefined ||
693
+ props.colorRight !== undefined ||
694
+ props.colorTl !== undefined ||
695
+ props.colorTr !== undefined ||
696
+ props.colorBl !== undefined ||
697
+ props.colorBr !== undefined) {
698
+ const { colorTop: top, colorBottom: bottom, colorLeft: left, colorRight: right, } = props;
699
+ colorTop = top ?? color;
700
+ colorBottom = bottom ?? color;
701
+ colorLeft = left ?? color;
702
+ colorRight = right ?? color;
703
+ colorTl = props.colorTl ?? top ?? left ?? color;
704
+ colorTr = props.colorTr ?? top ?? right ?? color;
705
+ colorBl = props.colorBl ?? bottom ?? left ?? color;
706
+ colorBr = props.colorBr ?? bottom ?? right ?? color;
576
707
  }
708
+ const scale = props.scale ?? null;
709
+ const mount = props.mount ?? 0;
710
+ const pivot = props.pivot ?? 0.5;
711
+ const data = !isProductionEnvironment && this.options.inspector
712
+ ? santizeCustomDataMap(props.data ?? {})
713
+ : {};
577
714
  return {
578
715
  x: props.x ?? 0,
579
716
  y: props.y ?? 0,
580
- width: props.width ?? 0,
581
- height: props.height ?? 0,
717
+ w: props.w ?? 0,
718
+ h: props.h ?? 0,
582
719
  alpha: props.alpha ?? 1,
583
720
  autosize: props.autosize ?? false,
584
721
  boundsMargin: props.boundsMargin ?? null,
585
722
  clipping: props.clipping ?? false,
586
723
  color,
587
- colorTop: props.colorTop ?? color,
588
- colorBottom: props.colorBottom ?? color,
589
- colorLeft: props.colorLeft ?? color,
590
- colorRight: props.colorRight ?? color,
591
- colorBl,
592
- colorBr,
724
+ colorTop,
725
+ colorBottom,
726
+ colorLeft,
727
+ colorRight,
593
728
  colorTl,
594
729
  colorTr,
730
+ colorBl,
731
+ colorBr,
595
732
  zIndex: props.zIndex ?? 0,
596
- zIndexLocked: props.zIndexLocked ?? 0,
597
733
  parent: props.parent ?? null,
598
734
  texture: props.texture ?? null,
599
735
  textureOptions: props.textureOptions ?? {},
600
- shader: props.shader ?? this.defShaderCtr,
601
- // Since setting the `src` will trigger a texture load, we need to set it after
602
- // we set the texture. Otherwise, problems happen.
736
+ shader: props.shader ?? this.defShaderNode,
603
737
  src: props.src ?? null,
604
738
  srcHeight: props.srcHeight,
605
739
  srcWidth: props.srcWidth,
606
740
  srcX: props.srcX,
607
741
  srcY: props.srcY,
608
- scale: props.scale ?? null,
609
- scaleX: props.scaleX ?? props.scale ?? 1,
610
- scaleY: props.scaleY ?? props.scale ?? 1,
611
- mount: props.mount ?? 0,
612
- mountX: props.mountX ?? props.mount ?? 0,
613
- mountY: props.mountY ?? props.mount ?? 0,
614
- pivot: props.pivot ?? 0.5,
615
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
616
- pivotY: props.pivotY ?? props.pivot ?? 0.5,
742
+ scale,
743
+ scaleX: props.scaleX ?? scale ?? 1,
744
+ scaleY: props.scaleY ?? scale ?? 1,
745
+ mount,
746
+ mountX: props.mountX ?? mount,
747
+ mountY: props.mountY ?? mount,
748
+ pivot,
749
+ pivotX: props.pivotX ?? pivot,
750
+ pivotY: props.pivotY ?? pivot,
617
751
  rotation: props.rotation ?? 0,
618
752
  rtt: props.rtt ?? false,
619
- data: data,
620
- preventCleanup: props.preventCleanup ?? false,
753
+ data,
621
754
  imageType: props.imageType,
622
755
  interactive: props.interactive ?? false,
623
- strictBounds: props.strictBounds ?? this.strictBounds,
624
756
  };
625
757
  }
626
758
  /**
@@ -629,8 +761,39 @@ export class Stage {
629
761
  * @remarks
630
762
  * This method is used to cleanup orphaned textures that are no longer in use.
631
763
  */
632
- cleanup(aggressive) {
633
- this.txMemManager.cleanup(aggressive);
764
+ cleanup(full = false) {
765
+ this.txMemManager.cleanup(full);
766
+ }
767
+ set clearColor(value) {
768
+ this.renderer.updateClearColor(value);
769
+ this.renderRequested = true;
770
+ this.clrColor = value;
771
+ }
772
+ get clearColor() {
773
+ return this.clrColor;
774
+ }
775
+ /**
776
+ * Load a font using a specific text renderer type
777
+ *
778
+ * @remarks
779
+ * This method allows consumers to explicitly load fonts for a specific
780
+ * text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
781
+ * the renderer type to ensure fonts are loaded with the correct pipeline.
782
+ *
783
+ * For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
784
+ * For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
785
+ *
786
+ * @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
787
+ * @param options - Font loading options specific to the renderer type
788
+ * @returns Promise that resolves when the font is loaded
789
+ */
790
+ async loadFont(rendererType, options) {
791
+ const rendererTypeKey = String(rendererType);
792
+ const fontHandler = this.fontHandlers[rendererTypeKey];
793
+ if (!fontHandler) {
794
+ throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontHandlers).join(', ')}`);
795
+ }
796
+ return fontHandler.loadFont(this, options);
634
797
  }
635
798
  }
636
799
  //# sourceMappingURL=Stage.js.map