@lightningtv/renderer 3.0.0-beta1 → 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 (497) 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 +1 -1
  6. package/dist/exports/canvas.js +1 -19
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +2 -5
  9. package/dist/exports/index.js +1 -23
  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 +2 -1
  19. package/dist/exports/webgl.js +2 -19
  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 +140 -102
  32. package/dist/src/core/CoreNode.js +812 -528
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +3 -3
  35. package/dist/src/core/CoreShaderManager.js +0 -18
  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 +25 -14
  41. package/dist/src/core/CoreTextureManager.js +82 -139
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +102 -36
  44. package/dist/src/core/Stage.js +424 -191
  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 +11 -4
  50. package/dist/src/core/TextureMemoryManager.js +114 -134
  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 -3
  55. package/dist/src/core/animations/CoreAnimation.js +8 -24
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  58. package/dist/src/core/animations/CoreAnimationController.js +11 -22
  59. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  60. package/dist/src/core/lib/ContextSpy.js +0 -18
  61. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  62. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  63. package/dist/src/core/lib/ImageWorker.js +33 -31
  64. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  65. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  66. package/dist/src/core/lib/Matrix3d.js +7 -19
  67. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  68. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  69. package/dist/src/core/lib/RenderCoords.js +27 -55
  70. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  71. package/dist/src/core/lib/WebGlContextWrapper.d.ts +83 -8
  72. package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
  73. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  74. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  75. package/dist/src/core/lib/collectionUtils.js +82 -0
  76. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  77. package/dist/src/core/lib/colorCache.d.ts +1 -0
  78. package/dist/src/core/lib/colorCache.js +19 -0
  79. package/dist/src/core/lib/colorCache.js.map +1 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -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 -85
  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 -1
  88. package/dist/src/core/lib/utils.js +44 -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 +42 -0
  94. package/dist/src/core/platforms/Platform.js +4 -0
  95. package/dist/src/core/platforms/Platform.js.map +1 -0
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  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 +15 -3
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -18
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
  108. package/dist/src/core/renderers/CoreShaderNode.js +25 -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 +4 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
  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 +18 -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 -70
  131. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  133. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  134. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  136. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  137. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  139. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  140. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  142. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  143. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  145. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -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 +7 -21
  156. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  157. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  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 +44 -22
  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 +47 -25
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  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 +12 -2
  175. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  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 +3 -19
  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 +1 -17
  186. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  187. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  188. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  189. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  191. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  192. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  194. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  195. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  200. package/dist/src/core/shaders/utils.js +25 -0
  201. package/dist/src/core/shaders/utils.js.map +1 -0
  202. package/dist/src/core/shaders/webgl/Border.js +118 -51
  203. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/Default.js +6 -41
  205. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  207. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  208. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  209. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  210. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  211. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  212. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  213. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  214. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  215. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  217. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  219. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  221. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  222. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  224. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  225. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  226. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  227. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  228. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  229. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  230. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  231. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  232. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  233. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  235. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  236. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  237. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  238. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  239. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  241. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  242. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  243. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  244. package/dist/src/core/text-rendering/Utils.js +66 -0
  245. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  246. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  247. package/dist/src/core/textures/ColorTexture.js +3 -22
  248. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  249. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  250. package/dist/src/core/textures/ImageTexture.js +57 -66
  251. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  252. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  253. package/dist/src/core/textures/NoiseTexture.js +8 -26
  254. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  255. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  256. package/dist/src/core/textures/RenderTexture.js +12 -30
  257. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  258. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  259. package/dist/src/core/textures/SubTexture.js +19 -55
  260. package/dist/src/core/textures/SubTexture.js.map +1 -1
  261. package/dist/src/core/textures/Texture.d.ts +90 -12
  262. package/dist/src/core/textures/Texture.js +160 -35
  263. package/dist/src/core/textures/Texture.js.map +1 -1
  264. package/dist/src/core/utils.d.ts +2 -1
  265. package/dist/src/core/utils.js +1 -19
  266. package/dist/src/core/utils.js.map +1 -1
  267. package/dist/src/main-api/INode.js.map +1 -1
  268. package/dist/src/main-api/Inspector.d.ts +135 -2
  269. package/dist/src/main-api/Inspector.js +507 -30
  270. package/dist/src/main-api/Inspector.js.map +1 -1
  271. package/dist/src/main-api/Renderer.d.ts +294 -81
  272. package/dist/src/main-api/Renderer.js +225 -96
  273. package/dist/src/main-api/Renderer.js.map +1 -1
  274. package/dist/src/utils.d.ts +19 -6
  275. package/dist/src/utils.js +32 -27
  276. package/dist/src/utils.js.map +1 -1
  277. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  278. package/dist/tsconfig.tsbuildinfo +1 -0
  279. package/exports/canvas-shaders.ts +0 -17
  280. package/exports/canvas.ts +1 -19
  281. package/exports/index.ts +6 -27
  282. package/exports/inspector.ts +0 -19
  283. package/exports/utils.ts +7 -19
  284. package/exports/webgl-shaders.ts +0 -16
  285. package/exports/webgl.ts +3 -20
  286. package/package.json +23 -22
  287. package/src/common/CommonTypes.ts +20 -22
  288. package/src/common/EventEmitter.ts +0 -19
  289. package/src/common/IAnimationController.ts +0 -18
  290. package/src/common/IEventEmitter.ts +0 -17
  291. package/src/core/Autosizer.ts +205 -0
  292. package/src/core/CoreNode.test.ts +376 -45
  293. package/src/core/CoreNode.ts +1015 -656
  294. package/src/core/CoreShaderManager.ts +3 -21
  295. package/src/core/CoreTextNode.ts +457 -314
  296. package/src/core/CoreTextureManager.ts +110 -167
  297. package/src/core/Stage.ts +526 -236
  298. package/src/core/TextureError.ts +46 -0
  299. package/src/core/TextureMemoryManager.ts +150 -167
  300. package/src/core/animations/AnimationManager.ts +0 -19
  301. package/src/core/animations/CoreAnimation.ts +15 -32
  302. package/src/core/animations/CoreAnimationController.ts +13 -23
  303. package/src/core/lib/ContextSpy.ts +0 -19
  304. package/src/core/lib/ImageWorker.ts +45 -32
  305. package/src/core/lib/Matrix3d.ts +7 -20
  306. package/src/core/lib/RenderCoords.ts +36 -67
  307. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  308. package/src/core/lib/collectionUtils.ts +99 -0
  309. package/src/core/lib/colorCache.ts +20 -0
  310. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  311. package/src/core/lib/textureCompression.ts +433 -93
  312. package/src/core/lib/textureSvg.ts +0 -19
  313. package/src/core/lib/utils.ts +58 -19
  314. package/src/core/lib/validateImageBitmap.ts +17 -6
  315. package/src/core/platforms/Platform.ts +64 -0
  316. package/src/core/platforms/web/WebPlatform.ts +132 -0
  317. package/src/core/renderers/CoreContextTexture.ts +2 -20
  318. package/src/core/renderers/CoreRenderOp.ts +0 -19
  319. package/src/core/renderers/CoreRenderer.ts +16 -23
  320. package/src/core/renderers/CoreShaderNode.ts +37 -6
  321. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  322. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  323. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  324. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  325. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  326. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  327. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  328. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  329. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  330. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  331. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  332. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  333. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  334. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  335. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  336. package/src/core/shaders/canvas/Border.ts +91 -50
  337. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  338. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  339. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  340. package/src/core/shaders/canvas/Rounded.ts +2 -19
  341. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  342. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  343. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  344. package/src/core/shaders/canvas/Shadow.ts +0 -17
  345. package/src/core/shaders/canvas/utils/render.ts +45 -53
  346. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  347. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  348. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  349. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  350. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  351. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  352. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  353. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  354. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  355. package/src/core/shaders/utils.ts +30 -0
  356. package/src/core/shaders/webgl/Border.ts +118 -55
  357. package/src/core/shaders/webgl/Default.ts +6 -43
  358. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  359. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  360. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  361. package/src/core/shaders/webgl/Rounded.ts +25 -45
  362. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  363. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  364. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  365. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  366. package/src/core/shaders/webgl/Shadow.ts +39 -35
  367. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  368. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  369. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  370. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  371. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  372. package/src/core/text-rendering/TextRenderer.ts +426 -0
  373. package/src/core/text-rendering/Utils.ts +80 -0
  374. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  375. package/src/core/textures/ColorTexture.ts +7 -24
  376. package/src/core/textures/ImageTexture.ts +110 -92
  377. package/src/core/textures/NoiseTexture.ts +14 -31
  378. package/src/core/textures/RenderTexture.ts +18 -35
  379. package/src/core/textures/SubTexture.ts +25 -65
  380. package/src/core/textures/Texture.ts +214 -46
  381. package/src/core/utils.ts +9 -26
  382. package/src/main-api/INode.ts +0 -18
  383. package/src/main-api/Inspector.ts +794 -38
  384. package/src/main-api/Renderer.ts +519 -159
  385. package/src/utils.ts +64 -29
  386. package/dist/src/core/platform.d.ts +0 -10
  387. package/dist/src/core/platform.js +0 -56
  388. package/dist/src/core/platform.js.map +0 -1
  389. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  390. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  391. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  393. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  394. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  395. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  396. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  397. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  398. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  399. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  400. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  401. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  402. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  403. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  404. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  405. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  406. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  407. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  408. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  409. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  410. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  411. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  412. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  417. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  418. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  420. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  421. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  423. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  424. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  425. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  426. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  427. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  428. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  429. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  430. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  432. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  433. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  462. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  463. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  464. package/scripts/please-use-pnpm.js +0 -13
  465. package/src/core/platform.ts +0 -64
  466. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  467. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  468. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  469. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  470. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  471. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  472. package/src/core/text-rendering/TrFontManager.ts +0 -183
  473. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  474. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  475. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  476. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  477. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  478. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  479. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  480. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  481. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  496. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  497. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -1,35 +1,17 @@
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';
13
+ import { pointInBound } from './lib/utils.js';
14
+ import { Matrix3d } from './lib/Matrix3d.js';
33
15
  import { createBound, createPreloadBounds } from './lib/utils.js';
34
16
  import { ColorTexture } from './textures/ColorTexture.js';
35
17
  const autoStart = true;
@@ -39,19 +21,30 @@ export class Stage {
39
21
  animationManager;
40
22
  txManager;
41
23
  txMemManager;
42
- fontManager;
43
- textRenderers;
24
+ textRenderers = {};
25
+ fontHandlers = {};
44
26
  shManager;
45
27
  renderer;
46
28
  root;
29
+ interactiveNodes = new Set();
47
30
  boundsMargin;
48
31
  defShaderNode = null;
49
32
  strictBound;
50
33
  preloadBound;
51
- strictBounds;
52
34
  defaultTexture = null;
53
35
  pixelRatio;
54
36
  bufferMemory = 2e6;
37
+ platform;
38
+ calculateTextureCoord;
39
+ /**
40
+ * Target frame time in milliseconds (calculated from targetFPS)
41
+ *
42
+ * @remarks
43
+ * This is pre-calculated to avoid recalculating on every frame.
44
+ * - 0 means no throttling (use display refresh rate)
45
+ * - >0 means throttle to this frame time (1000 / targetFPS)
46
+ */
47
+ targetFrameTime = 0;
55
48
  /**
56
49
  * Renderer Event Bus for the Stage to emit events onto
57
50
  *
@@ -62,28 +55,47 @@ export class Stage {
62
55
  */
63
56
  eventBus;
64
57
  /// State
58
+ startTime = 0;
65
59
  deltaTime = 0;
66
60
  lastFrameTime = 0;
67
61
  currentFrameTime = 0;
62
+ elapsedTime = 0;
63
+ timedNodes = [];
68
64
  clrColor = 0x00000000;
69
65
  fpsNumFrames = 0;
70
66
  fpsElapsedTime = 0;
71
67
  numQuadsRendered = 0;
72
68
  renderRequested = false;
69
+ reprocessFrame = false;
70
+ reprocessCallback = null;
73
71
  frameEventQueue = [];
74
- fontResolveMap = {};
75
- /// 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
76
82
  contextSpy = null;
77
83
  /**
78
84
  * Stage constructor
79
85
  */
80
86
  constructor(options) {
81
87
  this.options = options;
82
- 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();
83
92
  this.eventBus = options.eventBus;
93
+ // Calculate target frame time from targetFPS option
94
+ this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
84
95
  this.txManager = new CoreTextureManager(this, {
85
96
  numImageWorkers,
86
97
  createImageBitmapSupport,
98
+ maxRetryCount,
87
99
  });
88
100
  // Wait for the Texture Manager to initialize
89
101
  // once it does, request a render
@@ -93,7 +105,6 @@ export class Stage {
93
105
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
94
106
  this.animationManager = new AnimationManager();
95
107
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
96
- this.strictBounds = options.strictBounds;
97
108
  let bm = [0, 0, 0, 0];
98
109
  if (boundsMargin) {
99
110
  bm = Array.isArray(boundsMargin)
@@ -115,40 +126,85 @@ export class Stage {
115
126
  });
116
127
  this.shManager = new CoreShaderManager(this);
117
128
  this.defShaderNode = this.renderer.getDefaultShaderNode();
129
+ this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
118
130
  const renderMode = this.renderer.mode || 'webgl';
119
131
  this.createDefaultTexture();
120
132
  setPremultiplyMode(renderMode);
121
133
  // Must do this after renderer is created
122
134
  this.txManager.renderer = this.renderer;
123
135
  // Create text renderers
124
- this.textRenderers = {};
125
- fontEngines.forEach((fontEngineConstructor) => {
126
- const fontEngineInstance = new fontEngineConstructor(this);
127
- const className = fontEngineInstance.type;
128
- if (className === 'sdf' && renderMode === 'canvas') {
129
- console.warn('SdfTextRenderer is not compatible with Canvas renderer. Skipping...');
130
- return;
131
- }
132
- if (fontEngineInstance instanceof TextRenderer) {
133
- if (className === 'canvas') {
134
- this.textRenderers['canvas'] =
135
- 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;
154
+ }
155
+ if (type === 'canvas') {
156
+ this.hasCanvasEngine = true;
136
157
  }
137
- else if (className === 'sdf') {
138
- this.textRenderers['sdf'] = fontEngineInstance;
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...');
188
+ }
189
+ else {
190
+ if (type === 'canvas') {
191
+ this.hasCanvasEngine = true;
139
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);
140
197
  }
141
- });
198
+ }
142
199
  if (Object.keys(this.textRenderers).length === 0) {
143
200
  console.warn('No text renderers available. Your text will not render.');
144
201
  }
145
- this.fontManager = new TrFontManager(this.textRenderers);
146
202
  // create root node
147
203
  const rootNode = new CoreNode(this, {
148
204
  x: 0,
149
205
  y: 0,
150
- width: appWidth,
151
- height: appHeight,
206
+ w: appWidth,
207
+ h: appHeight,
152
208
  alpha: 1,
153
209
  autosize: false,
154
210
  boundsMargin: null,
@@ -163,7 +219,6 @@ export class Stage {
163
219
  colorBl: 0x00000000,
164
220
  colorBr: 0x00000000,
165
221
  zIndex: 0,
166
- zIndexLocked: 0,
167
222
  scaleX: 1,
168
223
  scaleY: 1,
169
224
  mountX: 0,
@@ -180,13 +235,26 @@ export class Stage {
180
235
  rtt: false,
181
236
  src: null,
182
237
  scale: 1,
183
- preventCleanup: false,
184
- strictBounds: this.strictBounds,
185
238
  });
186
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;
187
255
  // execute platform start loop
188
- if (autoStart) {
189
- startLoop(this);
256
+ if (autoStart === true) {
257
+ this.platform.startLoop(this);
190
258
  }
191
259
  }
192
260
  setClearColor(color) {
@@ -194,10 +262,24 @@ export class Stage {
194
262
  this.renderer.updateClearColor(color);
195
263
  this.renderRequested = true;
196
264
  }
265
+ /**
266
+ * Update the target frame time based on the current targetFPS setting
267
+ *
268
+ * @remarks
269
+ * This should be called whenever the targetFPS option is changed
270
+ * to ensure targetFrameTime stays in sync.
271
+ * targetFPS of 0 means no throttling (targetFrameTime = 0)
272
+ * targetFPS > 0 means throttle to 1000/targetFPS milliseconds
273
+ */
274
+ updateTargetFrameTime() {
275
+ this.targetFrameTime =
276
+ this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
277
+ }
197
278
  updateFrameTime() {
198
- const newFrameTime = getTimeStamp();
279
+ const newFrameTime = this.platform.getTimeStamp();
199
280
  this.lastFrameTime = this.currentFrameTime;
200
281
  this.currentFrameTime = newFrameTime;
282
+ this.elapsedTime = newFrameTime - this.startTime;
201
283
  this.deltaTime = !this.lastFrameTime
202
284
  ? 100 / 6
203
285
  : newFrameTime - this.lastFrameTime;
@@ -214,7 +296,6 @@ export class Stage {
214
296
  * Create default PixelTexture
215
297
  */
216
298
  createDefaultTexture() {
217
- console.log('Creating default texture');
218
299
  this.defaultTexture = this.txManager.createTexture('ColorTexture', {
219
300
  color: 0xffffffff,
220
301
  });
@@ -223,7 +304,7 @@ export class Stage {
223
304
  // Mark the default texture as ALWAYS renderable
224
305
  // This prevents it from ever being cleaned up.
225
306
  // Fixes https://github.com/lightning-js/renderer/issues/262
226
- this.defaultTexture.setRenderableOwner(this, true);
307
+ this.defaultTexture.setRenderableOwner('stage', true);
227
308
  // When the default texture is loaded, request a render in case the
228
309
  // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
229
310
  this.defaultTexture.once('loaded', () => {
@@ -236,10 +317,11 @@ export class Stage {
236
317
  updateAnimations() {
237
318
  const { animationManager } = this;
238
319
  if (!this.root) {
239
- return;
320
+ return false;
240
321
  }
241
322
  // step animation
242
323
  animationManager.update(this.deltaTime);
324
+ return animationManager.activeAnimations.size > 0;
243
325
  }
244
326
  /**
245
327
  * Check if the scene has updates
@@ -252,40 +334,84 @@ export class Stage {
252
334
  /**
253
335
  * Start a new frame draw
254
336
  */
255
- drawFrame() {
256
- const { renderer, renderRequested } = this;
257
- assertTruthy(renderer);
337
+ drawFrame(hasActiveAnimations = false) {
338
+ const { renderer, renderRequested, root } = this;
258
339
  // Update tree if needed
259
- if (this.root.updateType !== 0) {
260
- this.root.update(this.deltaTime, this.root.clippingRect);
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);
363
+ // Process some textures asynchronously but don't block the frame
364
+ // Use a background task to prevent frame drops
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
+ });
261
372
  }
262
- // Process some textures
263
- this.txManager.processSome(this.options.textureProcessingTimeLimit);
264
373
  // Reset render operations and clear the canvas
265
374
  renderer.reset();
266
- // Check if we need to cleanup textures
267
- if (this.txMemManager.criticalCleanupRequested === true) {
268
- this.txMemManager.cleanup(false);
269
- if (this.txMemManager.criticalCleanupRequested === true) {
270
- // If we still need to cleanup, request another but aggressive cleanup
271
- this.txMemManager.cleanup(true);
272
- }
273
- }
274
375
  // If we have RTT nodes draw them first
275
376
  // So we can use them as textures in the main scene
276
- if (renderer.rttNodes.length > 0) {
377
+ if (USE_RTT && renderer.rttNodes.length > 0) {
277
378
  renderer.renderRTTNodes();
278
379
  }
279
- // Fill quads buffer
280
- 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
+ }
281
393
  // Perform render pass
282
- renderer?.render();
283
- this.calculateFps();
284
- this.calculateQuads();
394
+ renderer.render();
395
+ if (CALCULATE_FPS) {
396
+ this.calculateFps();
397
+ this.calculateQuads();
398
+ }
285
399
  // Reset renderRequested flag if it was set
286
- if (renderRequested) {
400
+ if (renderRequested === true) {
287
401
  this.renderRequested = false;
288
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
+ }
289
415
  }
290
416
  /**
291
417
  * Queue an event to be emitted after the current/next frame is rendered
@@ -347,23 +473,32 @@ export class Stage {
347
473
  });
348
474
  }
349
475
  }
350
- addQuads(node) {
351
- assertTruthy(this.renderer);
352
- // 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
353
488
  if (node.isRenderable === true) {
354
489
  node.renderQuads(this.renderer);
490
+ this.renderList.push(node);
355
491
  }
356
- for (let i = 0; i < node.children.length; i++) {
357
- const child = node.children[i];
358
- if (child === undefined) {
359
- continue;
360
- }
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
361
497
  if (child.worldAlpha === 0 ||
362
- (child.strictBounds === true &&
363
- child.renderState === CoreNodeRenderState.OutOfBounds)) {
498
+ child.renderState === CoreNodeRenderState.OutOfBounds) {
364
499
  continue;
365
500
  }
366
- this.addQuads(child);
501
+ this.buildRenderList(child);
367
502
  }
368
503
  }
369
504
  /**
@@ -372,6 +507,12 @@ export class Stage {
372
507
  requestRender() {
373
508
  this.renderRequested = true;
374
509
  }
510
+ reprocessUpdates(callback) {
511
+ this.reprocessFrame = true;
512
+ if (callback) {
513
+ this.reprocessCallback = callback;
514
+ }
515
+ }
375
516
  /**
376
517
  * Given a font name, and possible renderer override, return the best compatible text renderer.
377
518
  *
@@ -383,88 +524,67 @@ export class Stage {
383
524
  * @returns
384
525
  */
385
526
  resolveTextRenderer(trProps, textRendererOverride = null) {
386
- const fontCacheString = `${trProps.fontFamily}${trProps.fontStyle}${trProps.fontWeight}${trProps.fontStretch}${textRendererOverride ? textRendererOverride : ''}`;
387
- // check our resolve cache first
388
- if (this.fontResolveMap[fontCacheString] !== undefined) {
389
- return this.fontResolveMap[fontCacheString];
390
- }
391
- // Resolve the text renderer
392
- let rendererId = textRendererOverride;
393
- let overrideFallback = false;
394
- // Check if the override is valid (if one is provided)
395
- if (rendererId) {
396
- const possibleRenderer = this.textRenderers[rendererId];
397
- if (!possibleRenderer) {
398
- console.warn(`Text renderer override '${rendererId}' not found.`);
399
- rendererId = null;
400
- overrideFallback = true;
401
- }
402
- else if (!possibleRenderer.canRenderFont(trProps)) {
403
- console.warn(`Cannot use override text renderer '${rendererId}' for font`, trProps);
404
- rendererId = null;
405
- overrideFallback = true;
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;
406
533
  }
534
+ return this.textRenderers[overrideKey];
407
535
  }
408
- if (!rendererId) {
409
- // Iterate through the text renderers and find the first one that can render the font
410
- for (const [trId, tr] of Object.entries(this.textRenderers)) {
411
- if (tr.canRenderFont(trProps)) {
412
- rendererId = trId;
413
- break;
414
- }
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;
415
541
  }
416
- if (!rendererId && this.textRenderers.canvas !== undefined) {
417
- // If no renderer can be found, use the canvas renderer
418
- rendererId = 'canvas';
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;
419
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;
420
549
  }
421
- if (overrideFallback) {
422
- console.warn(`Falling back to text renderer ${String(rendererId)}`);
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;
423
554
  }
424
- if (!rendererId) {
425
- // silently fail if no renderer can be found, the error is already created
426
- // at the constructor level
427
- return null;
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;
428
558
  }
429
- // By now we are guaranteed to have a valid rendererId (at least Canvas);
430
- const resolvedTextRenderer = this.textRenderers[rendererId];
431
- assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
432
- // cache the resolved renderer for future use with these trProps
433
- this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
434
- // Need to explicitly cast to TextRenderer because TS doesn't like
435
- // the covariant state argument in the setter method map
436
- return resolvedTextRenderer;
559
+ // If we have no font engines, return null
560
+ console.warn('No text renderers available. Your text will not render.');
561
+ return null;
437
562
  }
438
563
  createNode(props) {
439
564
  const resolvedProps = this.resolveNodeDefaults(props);
440
565
  return new CoreNode(this, resolvedProps);
441
566
  }
442
567
  createTextNode(props) {
443
- const fontSize = props.fontSize ?? 16;
444
- const resolvedProps = {
445
- ...this.resolveNodeDefaults(props),
446
- text: props.text ?? '',
447
- textRendererOverride: props.textRendererOverride ?? null,
448
- fontSize,
449
- fontFamily: props.fontFamily ?? 'sans-serif',
450
- fontStyle: props.fontStyle ?? 'normal',
451
- fontWeight: props.fontWeight ?? 'normal',
452
- fontStretch: props.fontStretch ?? 'normal',
453
- textAlign: props.textAlign ?? 'left',
454
- contain: props.contain ?? 'none',
455
- scrollable: props.scrollable ?? false,
456
- scrollY: props.scrollY ?? 0,
457
- offsetY: props.offsetY ?? 0,
458
- letterSpacing: props.letterSpacing ?? 0,
459
- lineHeight: props.lineHeight, // `undefined` is a valid value
460
- maxLines: props.maxLines ?? 0,
461
- textBaseline: props.textBaseline ?? 'alphabetic',
462
- verticalAlign: props.verticalAlign ?? 'middle',
463
- overflowSuffix: props.overflowSuffix ?? '...',
464
- debug: props.debug ?? {},
465
- shaderProps: null,
466
- };
467
- const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, props.textRendererOverride);
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);
468
588
  if (!resolvedTextRenderer) {
469
589
  throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
470
590
  }
@@ -474,7 +594,75 @@ export class Stage {
474
594
  this.boundsMargin = Array.isArray(value)
475
595
  ? value
476
596
  : [value, value, value, value];
477
- this.root.setUpdateType(UpdateType.RenderBounds);
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
610
+ * @param data
611
+ */
612
+ findNodesAtPoint(data) {
613
+ const x = data.x / this.options.deviceLogicalPixelRatio;
614
+ const y = data.y / this.options.deviceLogicalPixelRatio;
615
+ const nodes = [];
616
+ for (const node of this.interactiveNodes) {
617
+ if (node.isRenderable === false) {
618
+ continue;
619
+ }
620
+ if (pointInBound(x, y, node.renderBound) === true) {
621
+ nodes.push(node);
622
+ }
623
+ }
624
+ return nodes;
625
+ }
626
+ /**
627
+ * Find the top node at a given point
628
+ * @param data
629
+ * @returns
630
+ */
631
+ getNodeFromPosition(data) {
632
+ const nodes = this.findNodesAtPoint(data);
633
+ if (nodes.length === 0) {
634
+ return null;
635
+ }
636
+ //get last node in array (as top node)
637
+ let topNode = nodes[nodes.length - 1];
638
+ for (let i = 0; i < nodes.length; i++) {
639
+ if (nodes[i].zIndex > topNode.zIndex) {
640
+ topNode = nodes[i];
641
+ }
642
+ }
643
+ return topNode || null;
644
+ }
645
+ /**
646
+ * add node to timeNodes arrays
647
+ * @param node
648
+ * @returns
649
+ */
650
+ trackTimedNode(node) {
651
+ if (this.timedNodes[node.id] !== undefined) {
652
+ return;
653
+ }
654
+ this.timedNodes[node.id] = node;
655
+ }
656
+ /**
657
+ * remove node from timeNodes arrays
658
+ * @param node
659
+ * @returns
660
+ */
661
+ untrackTimedNode(node) {
662
+ if (this.timedNodes[node.id] === undefined) {
663
+ return;
664
+ }
665
+ delete this.timedNodes[node.id];
478
666
  }
479
667
  /**
480
668
  * Resolves the default property values for a Node
@@ -489,60 +677,82 @@ export class Stage {
489
677
  */
490
678
  resolveNodeDefaults(props) {
491
679
  const color = props.color ?? 0xffffffff;
492
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
493
- const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
494
- const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
495
- const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
496
- let data = {};
497
- if (this.options.inspector === true) {
498
- 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;
499
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
+ : {};
500
714
  return {
501
715
  x: props.x ?? 0,
502
716
  y: props.y ?? 0,
503
- width: props.width ?? 0,
504
- height: props.height ?? 0,
717
+ w: props.w ?? 0,
718
+ h: props.h ?? 0,
505
719
  alpha: props.alpha ?? 1,
506
720
  autosize: props.autosize ?? false,
507
721
  boundsMargin: props.boundsMargin ?? null,
508
722
  clipping: props.clipping ?? false,
509
723
  color,
510
- colorTop: props.colorTop ?? color,
511
- colorBottom: props.colorBottom ?? color,
512
- colorLeft: props.colorLeft ?? color,
513
- colorRight: props.colorRight ?? color,
514
- colorBl,
515
- colorBr,
724
+ colorTop,
725
+ colorBottom,
726
+ colorLeft,
727
+ colorRight,
516
728
  colorTl,
517
729
  colorTr,
730
+ colorBl,
731
+ colorBr,
518
732
  zIndex: props.zIndex ?? 0,
519
- zIndexLocked: props.zIndexLocked ?? 0,
520
733
  parent: props.parent ?? null,
521
734
  texture: props.texture ?? null,
522
735
  textureOptions: props.textureOptions ?? {},
523
736
  shader: props.shader ?? this.defShaderNode,
524
- // Since setting the `src` will trigger a texture load, we need to set it after
525
- // we set the texture. Otherwise, problems happen.
526
737
  src: props.src ?? null,
527
738
  srcHeight: props.srcHeight,
528
739
  srcWidth: props.srcWidth,
529
740
  srcX: props.srcX,
530
741
  srcY: props.srcY,
531
- scale: props.scale ?? null,
532
- scaleX: props.scaleX ?? props.scale ?? 1,
533
- scaleY: props.scaleY ?? props.scale ?? 1,
534
- mount: props.mount ?? 0,
535
- mountX: props.mountX ?? props.mount ?? 0,
536
- mountY: props.mountY ?? props.mount ?? 0,
537
- pivot: props.pivot ?? 0.5,
538
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
539
- 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,
540
751
  rotation: props.rotation ?? 0,
541
752
  rtt: props.rtt ?? false,
542
- data: data,
543
- preventCleanup: props.preventCleanup ?? false,
753
+ data,
544
754
  imageType: props.imageType,
545
- strictBounds: props.strictBounds ?? this.strictBounds,
755
+ interactive: props.interactive ?? false,
546
756
  };
547
757
  }
548
758
  /**
@@ -551,8 +761,8 @@ export class Stage {
551
761
  * @remarks
552
762
  * This method is used to cleanup orphaned textures that are no longer in use.
553
763
  */
554
- cleanup(aggressive) {
555
- this.txMemManager.cleanup(aggressive);
764
+ cleanup(full = false) {
765
+ this.txMemManager.cleanup(full);
556
766
  }
557
767
  set clearColor(value) {
558
768
  this.renderer.updateClearColor(value);
@@ -562,5 +772,28 @@ export class Stage {
562
772
  get clearColor() {
563
773
  return this.clrColor;
564
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);
797
+ }
565
798
  }
566
799
  //# sourceMappingURL=Stage.js.map