@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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 (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -16,20 +16,19 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { startLoop, getTimeStamp } from './platform.js';
20
19
  import { assertTruthy, setPremultiplyMode } from '../utils.js';
21
20
  import { AnimationManager } from './animations/AnimationManager.js';
22
21
  import { UpdateType, CoreNode, CoreNodeRenderState, } from './CoreNode.js';
23
22
  import { CoreTextureManager } from './CoreTextureManager.js';
24
- import { TrFontManager } from './text-rendering/TrFontManager.js';
25
23
  import { CoreShaderManager } from './CoreShaderManager.js';
26
- import { TextRenderer, } from './text-rendering/renderers/TextRenderer.js';
24
+ import {} from './text-rendering/TextRenderer.js';
27
25
  import { EventEmitter } from '../common/EventEmitter.js';
28
26
  import { ContextSpy } from './lib/ContextSpy.js';
29
27
  import { TextureMemoryManager, } from './TextureMemoryManager.js';
30
28
  import { CoreRenderer } from './renderers/CoreRenderer.js';
31
29
  import { CoreTextNode } from './CoreTextNode.js';
32
30
  import { santizeCustomDataMap } from '../main-api/utils.js';
31
+ import { pointInBound } from './lib/utils.js';
33
32
  import { createBound, createPreloadBounds } from './lib/utils.js';
34
33
  import { ColorTexture } from './textures/ColorTexture.js';
35
34
  const autoStart = true;
@@ -39,19 +38,30 @@ export class Stage {
39
38
  animationManager;
40
39
  txManager;
41
40
  txMemManager;
42
- fontManager;
43
- textRenderers;
41
+ textRenderers = {};
42
+ fontHandlers = {};
44
43
  shManager;
45
44
  renderer;
46
45
  root;
46
+ interactiveNodes = new Set();
47
47
  boundsMargin;
48
48
  defShaderNode = null;
49
49
  strictBound;
50
50
  preloadBound;
51
- strictBounds;
52
51
  defaultTexture = null;
53
52
  pixelRatio;
54
53
  bufferMemory = 2e6;
54
+ platform;
55
+ calculateTextureCoord;
56
+ /**
57
+ * Target frame time in milliseconds (calculated from targetFPS)
58
+ *
59
+ * @remarks
60
+ * This is pre-calculated to avoid recalculating on every frame.
61
+ * - 0 means no throttling (use display refresh rate)
62
+ * - >0 means throttle to this frame time (1000 / targetFPS)
63
+ */
64
+ targetFrameTime = 0;
55
65
  /**
56
66
  * Renderer Event Bus for the Stage to emit events onto
57
67
  *
@@ -62,28 +72,42 @@ export class Stage {
62
72
  */
63
73
  eventBus;
64
74
  /// State
75
+ startTime = 0;
65
76
  deltaTime = 0;
66
77
  lastFrameTime = 0;
67
78
  currentFrameTime = 0;
79
+ elapsedTime = 0;
80
+ timedNodes = [];
68
81
  clrColor = 0x00000000;
69
82
  fpsNumFrames = 0;
70
83
  fpsElapsedTime = 0;
71
84
  numQuadsRendered = 0;
72
85
  renderRequested = false;
73
86
  frameEventQueue = [];
74
- fontResolveMap = {};
75
- /// Debug data
87
+ // Font resolve optimisation flags
88
+ hasOnlyOneFontEngine;
89
+ hasOnlyCanvasFontEngine;
90
+ hasCanvasEngine;
91
+ singleFontEngine = null;
92
+ singleFontHandler = null;
93
+ // Debug data
76
94
  contextSpy = null;
77
95
  /**
78
96
  * Stage constructor
79
97
  */
80
98
  constructor(options) {
81
99
  this.options = options;
82
- const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, } = options;
100
+ const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, platform, maxRetryCount, } = options;
101
+ assertTruthy(platform !== null, 'A CorePlatform is not provided in the options');
102
+ this.platform = platform;
103
+ this.startTime = platform.getTimeStamp();
83
104
  this.eventBus = options.eventBus;
105
+ // Calculate target frame time from targetFPS option
106
+ this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
84
107
  this.txManager = new CoreTextureManager(this, {
85
108
  numImageWorkers,
86
109
  createImageBitmapSupport,
110
+ maxRetryCount,
87
111
  });
88
112
  // Wait for the Texture Manager to initialize
89
113
  // once it does, request a render
@@ -93,7 +117,6 @@ export class Stage {
93
117
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
94
118
  this.animationManager = new AnimationManager();
95
119
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
96
- this.strictBounds = options.strictBounds;
97
120
  let bm = [0, 0, 0, 0];
98
121
  if (boundsMargin) {
99
122
  bm = Array.isArray(boundsMargin)
@@ -115,40 +138,85 @@ export class Stage {
115
138
  });
116
139
  this.shManager = new CoreShaderManager(this);
117
140
  this.defShaderNode = this.renderer.getDefaultShaderNode();
141
+ this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
118
142
  const renderMode = this.renderer.mode || 'webgl';
119
143
  this.createDefaultTexture();
120
144
  setPremultiplyMode(renderMode);
121
145
  // Must do this after renderer is created
122
146
  this.txManager.renderer = this.renderer;
123
147
  // 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;
148
+ this.hasOnlyOneFontEngine = fontEngines.length === 1;
149
+ this.hasOnlyCanvasFontEngine =
150
+ fontEngines.length === 1 && fontEngines[0].type === 'canvas';
151
+ this.hasCanvasEngine = false;
152
+ this.singleFontEngine = this.hasOnlyOneFontEngine
153
+ ? fontEngines[0]
154
+ : null;
155
+ this.singleFontHandler = this.hasOnlyOneFontEngine
156
+ ? fontEngines[0]?.font
157
+ : null;
158
+ if (this.singleFontEngine === null) {
159
+ // Multiple font engines case
160
+ // Filter out incompatible engines first
161
+ const compatibleEngines = fontEngines.filter((fontEngine) => {
162
+ const type = fontEngine.type;
163
+ if (type === 'sdf' && renderMode === 'canvas') {
164
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
165
+ return false;
136
166
  }
137
- else if (className === 'sdf') {
138
- this.textRenderers['sdf'] = fontEngineInstance;
167
+ if (type === 'canvas') {
168
+ this.hasCanvasEngine = true;
139
169
  }
170
+ return true;
171
+ });
172
+ // Sort engines: SDF first, Canvas last, others in between
173
+ const sortedEngines = compatibleEngines.sort((a, b) => {
174
+ if (a.type === 'sdf')
175
+ return -1;
176
+ if (b.type === 'sdf')
177
+ return 1;
178
+ if (a.type === 'canvas')
179
+ return 1;
180
+ if (b.type === 'canvas')
181
+ return -1;
182
+ return 0;
183
+ });
184
+ // Initialize engines in sorted order
185
+ sortedEngines.forEach((fontEngine) => {
186
+ const type = fontEngine.type;
187
+ // Add to map for type-based access
188
+ this.textRenderers[type] = fontEngine;
189
+ this.textRenderers[type].init(this);
190
+ this.fontHandlers[type] = fontEngine.font;
191
+ });
192
+ }
193
+ else {
194
+ // Single font engine case - initialize it directly
195
+ const fontEngine = this.singleFontEngine;
196
+ const type = fontEngine.type;
197
+ // Check compatibility
198
+ if (type === 'sdf' && renderMode === 'canvas') {
199
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
140
200
  }
141
- });
201
+ else {
202
+ if (type === 'canvas') {
203
+ this.hasCanvasEngine = true;
204
+ }
205
+ // Add to map for type-based access
206
+ this.textRenderers[type] = fontEngine;
207
+ this.fontHandlers[type] = fontEngine.font;
208
+ this.textRenderers[type].init(this);
209
+ }
210
+ }
142
211
  if (Object.keys(this.textRenderers).length === 0) {
143
212
  console.warn('No text renderers available. Your text will not render.');
144
213
  }
145
- this.fontManager = new TrFontManager(this.textRenderers);
146
214
  // create root node
147
215
  const rootNode = new CoreNode(this, {
148
216
  x: 0,
149
217
  y: 0,
150
- width: appWidth,
151
- height: appHeight,
218
+ w: appWidth,
219
+ h: appHeight,
152
220
  alpha: 1,
153
221
  autosize: false,
154
222
  boundsMargin: null,
@@ -163,7 +231,6 @@ export class Stage {
163
231
  colorBl: 0x00000000,
164
232
  colorBr: 0x00000000,
165
233
  zIndex: 0,
166
- zIndexLocked: 0,
167
234
  scaleX: 1,
168
235
  scaleY: 1,
169
236
  mountX: 0,
@@ -180,13 +247,11 @@ export class Stage {
180
247
  rtt: false,
181
248
  src: null,
182
249
  scale: 1,
183
- preventCleanup: false,
184
- strictBounds: this.strictBounds,
185
250
  });
186
251
  this.root = rootNode;
187
252
  // execute platform start loop
188
- if (autoStart) {
189
- startLoop(this);
253
+ if (autoStart === true) {
254
+ this.platform.startLoop(this);
190
255
  }
191
256
  }
192
257
  setClearColor(color) {
@@ -194,10 +259,24 @@ export class Stage {
194
259
  this.renderer.updateClearColor(color);
195
260
  this.renderRequested = true;
196
261
  }
262
+ /**
263
+ * Update the target frame time based on the current targetFPS setting
264
+ *
265
+ * @remarks
266
+ * This should be called whenever the targetFPS option is changed
267
+ * to ensure targetFrameTime stays in sync.
268
+ * targetFPS of 0 means no throttling (targetFrameTime = 0)
269
+ * targetFPS > 0 means throttle to 1000/targetFPS milliseconds
270
+ */
271
+ updateTargetFrameTime() {
272
+ this.targetFrameTime =
273
+ this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
274
+ }
197
275
  updateFrameTime() {
198
- const newFrameTime = getTimeStamp();
276
+ const newFrameTime = this.platform.getTimeStamp();
199
277
  this.lastFrameTime = this.currentFrameTime;
200
278
  this.currentFrameTime = newFrameTime;
279
+ this.elapsedTime = newFrameTime - this.startTime;
201
280
  this.deltaTime = !this.lastFrameTime
202
281
  ? 100 / 6
203
282
  : newFrameTime - this.lastFrameTime;
@@ -214,7 +293,6 @@ export class Stage {
214
293
  * Create default PixelTexture
215
294
  */
216
295
  createDefaultTexture() {
217
- console.log('Creating default texture');
218
296
  this.defaultTexture = this.txManager.createTexture('ColorTexture', {
219
297
  color: 0xffffffff,
220
298
  });
@@ -223,7 +301,7 @@ export class Stage {
223
301
  // Mark the default texture as ALWAYS renderable
224
302
  // This prevents it from ever being cleaned up.
225
303
  // Fixes https://github.com/lightning-js/renderer/issues/262
226
- this.defaultTexture.setRenderableOwner(this, true);
304
+ this.defaultTexture.setRenderableOwner('stage', true);
227
305
  // When the default texture is loaded, request a render in case the
228
306
  // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
229
307
  this.defaultTexture.once('loaded', () => {
@@ -253,24 +331,21 @@ export class Stage {
253
331
  * Start a new frame draw
254
332
  */
255
333
  drawFrame() {
256
- const { renderer, renderRequested } = this;
257
- assertTruthy(renderer);
334
+ const { renderer, renderRequested, root } = this;
335
+ const txMemManager = this.txMemManager;
258
336
  // Update tree if needed
259
- if (this.root.updateType !== 0) {
260
- this.root.update(this.deltaTime, this.root.clippingRect);
337
+ if (root.updateType !== 0) {
338
+ root.update(this.deltaTime, root.clippingRect);
261
339
  }
262
- // Process some textures
263
- this.txManager.processSome(this.options.textureProcessingTimeLimit);
340
+ // Process some textures asynchronously but don't block the frame
341
+ // Use a background task to prevent frame drops
342
+ this.txManager
343
+ .processSome(this.options.textureProcessingTimeLimit)
344
+ .catch((err) => {
345
+ console.error('Error processing textures:', err);
346
+ });
264
347
  // Reset render operations and clear the canvas
265
348
  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
349
  // If we have RTT nodes draw them first
275
350
  // So we can use them as textures in the main scene
276
351
  if (renderer.rttNodes.length > 0) {
@@ -279,13 +354,25 @@ export class Stage {
279
354
  // Fill quads buffer
280
355
  this.addQuads(this.root);
281
356
  // Perform render pass
282
- renderer?.render();
357
+ renderer.render();
283
358
  this.calculateFps();
284
359
  this.calculateQuads();
285
360
  // Reset renderRequested flag if it was set
286
- if (renderRequested) {
361
+ if (renderRequested === true) {
287
362
  this.renderRequested = false;
288
363
  }
364
+ if (this.timedNodes.length > 0) {
365
+ for (let key in this.timedNodes) {
366
+ if (this.timedNodes[key].isRenderable === true) {
367
+ this.requestRender();
368
+ break;
369
+ }
370
+ }
371
+ }
372
+ // Check if we need to cleanup textures
373
+ if (this.txMemManager.criticalCleanupRequested === true) {
374
+ this.txMemManager.cleanup();
375
+ }
289
376
  }
290
377
  /**
291
378
  * Queue an event to be emitted after the current/next frame is rendered
@@ -359,8 +446,7 @@ export class Stage {
359
446
  continue;
360
447
  }
361
448
  if (child.worldAlpha === 0 ||
362
- (child.strictBounds === true &&
363
- child.renderState === CoreNodeRenderState.OutOfBounds)) {
449
+ child.renderState === CoreNodeRenderState.OutOfBounds) {
364
450
  continue;
365
451
  }
366
452
  this.addQuads(child);
@@ -383,86 +469,68 @@ export class Stage {
383
469
  * @returns
384
470
  */
385
471
  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;
472
+ // If we have an overide, return it
473
+ if (textRendererOverride !== null) {
474
+ const overrideKey = String(textRendererOverride);
475
+ if (this.textRenderers[overrideKey] === undefined) {
476
+ console.warn(`Text renderer override '${overrideKey}' not found.`);
477
+ return null;
406
478
  }
479
+ return this.textRenderers[overrideKey];
407
480
  }
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
- }
481
+ // If we have only one font engine early return it
482
+ if (this.singleFontEngine !== null) {
483
+ // If we have only one font engine and its the canvas engine, we can just return it
484
+ if (this.hasOnlyCanvasFontEngine === true) {
485
+ return this.singleFontEngine;
415
486
  }
416
- if (!rendererId && this.textRenderers.canvas !== undefined) {
417
- // If no renderer can be found, use the canvas renderer
418
- rendererId = 'canvas';
487
+ // If we have only one font engine and it can render the font, return it
488
+ if (this.singleFontHandler?.canRenderFont(trProps) === true) {
489
+ return this.singleFontEngine;
419
490
  }
491
+ // If we have only one font engine and it cannot render the font, return null
492
+ console.warn(`Text renderer cannot render font`, trProps);
493
+ return null;
420
494
  }
421
- if (overrideFallback) {
422
- console.warn(`Falling back to text renderer ${String(rendererId)}`);
495
+ // Multi font handling - If we have multiple font engines, we need to resolve the best one
496
+ // First check SDF
497
+ if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
498
+ return this.textRenderers.sdf || null;
423
499
  }
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;
500
+ // If we have a canvas engine, we can return it (it can render all fonts)
501
+ if (this.hasCanvasEngine === true) {
502
+ return this.textRenderers.canvas || null;
428
503
  }
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;
504
+ // If we have no font engines, return null
505
+ console.warn('No text renderers available. Your text will not render.');
506
+ return null;
437
507
  }
438
508
  createNode(props) {
439
509
  const resolvedProps = this.resolveNodeDefaults(props);
440
510
  return new CoreNode(this, resolvedProps);
441
511
  }
442
512
  createTextNode(props) {
443
- const fontSize = props.fontSize ?? 16;
513
+ const fontSize = props.fontSize || 16;
444
514
  const resolvedProps = Object.assign(this.resolveNodeDefaults(props), {
445
- text: props.text ?? '',
446
- textRendererOverride: props.textRendererOverride ?? null,
515
+ text: props.text || '',
516
+ textRendererOverride: props.textRendererOverride || null,
447
517
  fontSize,
448
- fontFamily: props.fontFamily ?? 'sans-serif',
449
- fontStyle: props.fontStyle ?? 'normal',
450
- fontWeight: props.fontWeight ?? 'normal',
451
- fontStretch: props.fontStretch ?? 'normal',
452
- textAlign: props.textAlign ?? 'left',
453
- contain: props.contain ?? 'none',
454
- scrollable: props.scrollable ?? false,
455
- scrollY: props.scrollY ?? 0,
456
- offsetY: props.offsetY ?? 0,
457
- letterSpacing: props.letterSpacing ?? 0,
458
- lineHeight: props.lineHeight, // `undefined` is a valid value
459
- maxLines: props.maxLines ?? 0,
460
- textBaseline: props.textBaseline ?? 'alphabetic',
461
- verticalAlign: props.verticalAlign ?? 'middle',
462
- overflowSuffix: props.overflowSuffix ?? '...',
463
- debug: props.debug ?? {},
518
+ fontFamily: props.fontFamily || 'sans-serif',
519
+ fontStyle: props.fontStyle || 'normal',
520
+ textAlign: props.textAlign || 'left',
521
+ offsetY: props.offsetY || 0,
522
+ letterSpacing: props.letterSpacing || 0,
523
+ lineHeight: props.lineHeight || 1.2,
524
+ maxLines: props.maxLines || 0,
525
+ verticalAlign: props.verticalAlign || 'top',
526
+ overflowSuffix: props.overflowSuffix || '...',
527
+ wordBreak: props.wordBreak || 'break-word',
528
+ contain: props.contain || 'none',
529
+ maxWidth: props.maxWidth || 0,
530
+ maxHeight: props.maxHeight || 0,
531
+ forceLoad: props.forceLoad || false,
464
532
  });
465
- const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, props.textRendererOverride);
533
+ const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, resolvedProps.textRendererOverride);
466
534
  if (!resolvedTextRenderer) {
467
535
  throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
468
536
  }
@@ -474,6 +542,74 @@ export class Stage {
474
542
  : [value, value, value, value];
475
543
  this.root.setUpdateType(UpdateType.RenderBounds);
476
544
  }
545
+ /**
546
+ * Update the viewport bounds
547
+ */
548
+ updateViewportBounds() {
549
+ const { appWidth, appHeight } = this.options;
550
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
551
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
552
+ this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
553
+ this.root.childUpdateType |= UpdateType.RenderBounds;
554
+ }
555
+ /** Find all nodes at a given point
556
+ * @param data
557
+ */
558
+ findNodesAtPoint(data) {
559
+ const x = data.x / this.options.deviceLogicalPixelRatio;
560
+ const y = data.y / this.options.deviceLogicalPixelRatio;
561
+ const nodes = [];
562
+ for (const node of this.interactiveNodes) {
563
+ if (node.isRenderable === false) {
564
+ continue;
565
+ }
566
+ if (pointInBound(x, y, node.renderBound) === true) {
567
+ nodes.push(node);
568
+ }
569
+ }
570
+ return nodes;
571
+ }
572
+ /**
573
+ * Find the top node at a given point
574
+ * @param data
575
+ * @returns
576
+ */
577
+ getNodeFromPosition(data) {
578
+ const nodes = this.findNodesAtPoint(data);
579
+ if (nodes.length === 0) {
580
+ return null;
581
+ }
582
+ //get last node in array (as top node)
583
+ let topNode = nodes[nodes.length - 1];
584
+ for (let i = 0; i < nodes.length; i++) {
585
+ if (nodes[i].zIndex > topNode.zIndex) {
586
+ topNode = nodes[i];
587
+ }
588
+ }
589
+ return topNode || null;
590
+ }
591
+ /**
592
+ * add node to timeNodes arrays
593
+ * @param node
594
+ * @returns
595
+ */
596
+ trackTimedNode(node) {
597
+ if (this.timedNodes[node.id] !== undefined) {
598
+ return;
599
+ }
600
+ this.timedNodes[node.id] = node;
601
+ }
602
+ /**
603
+ * remove node from timeNodes arrays
604
+ * @param node
605
+ * @returns
606
+ */
607
+ untrackTimedNode(node) {
608
+ if (this.timedNodes[node.id] === undefined) {
609
+ return;
610
+ }
611
+ delete this.timedNodes[node.id];
612
+ }
477
613
  /**
478
614
  * Resolves the default property values for a Node
479
615
  *
@@ -486,61 +622,64 @@ export class Stage {
486
622
  * @returns
487
623
  */
488
624
  resolveNodeDefaults(props) {
625
+ const { colorTop: top, colorBottom: bottom, colorLeft: left, colorRight: right, } = props;
489
626
  const color = props.color ?? 0xffffffff;
490
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
491
- const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
492
- const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
493
- const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
494
- let data = {};
495
- if (this.options.inspector === true) {
496
- data = santizeCustomDataMap(props.data ?? {});
497
- }
627
+ const colorTop = top ?? color;
628
+ const colorBottom = bottom ?? color;
629
+ const colorLeft = left ?? color;
630
+ const colorRight = right ?? color;
631
+ const colorTl = props.colorTl ?? top ?? left ?? color;
632
+ const colorTr = props.colorTr ?? top ?? right ?? color;
633
+ const colorBl = props.colorBl ?? bottom ?? left ?? color;
634
+ const colorBr = props.colorBr ?? bottom ?? right ?? color;
635
+ const scale = props.scale ?? null;
636
+ const mount = props.mount ?? 0;
637
+ const pivot = props.pivot ?? 0.5;
638
+ const data = this.options.inspector
639
+ ? santizeCustomDataMap(props.data ?? {})
640
+ : {};
498
641
  return {
499
642
  x: props.x ?? 0,
500
643
  y: props.y ?? 0,
501
- width: props.width ?? 0,
502
- height: props.height ?? 0,
644
+ w: props.w ?? 0,
645
+ h: props.h ?? 0,
503
646
  alpha: props.alpha ?? 1,
504
647
  autosize: props.autosize ?? false,
505
648
  boundsMargin: props.boundsMargin ?? null,
506
649
  clipping: props.clipping ?? false,
507
650
  color,
508
- colorTop: props.colorTop ?? color,
509
- colorBottom: props.colorBottom ?? color,
510
- colorLeft: props.colorLeft ?? color,
511
- colorRight: props.colorRight ?? color,
512
- colorBl,
513
- colorBr,
651
+ colorTop,
652
+ colorBottom,
653
+ colorLeft,
654
+ colorRight,
514
655
  colorTl,
515
656
  colorTr,
657
+ colorBl,
658
+ colorBr,
516
659
  zIndex: props.zIndex ?? 0,
517
- zIndexLocked: props.zIndexLocked ?? 0,
518
660
  parent: props.parent ?? null,
519
661
  texture: props.texture ?? null,
520
662
  textureOptions: props.textureOptions ?? {},
521
663
  shader: props.shader ?? this.defShaderNode,
522
- // Since setting the `src` will trigger a texture load, we need to set it after
523
- // we set the texture. Otherwise, problems happen.
524
664
  src: props.src ?? null,
525
665
  srcHeight: props.srcHeight,
526
666
  srcWidth: props.srcWidth,
527
667
  srcX: props.srcX,
528
668
  srcY: props.srcY,
529
- scale: props.scale ?? null,
530
- scaleX: props.scaleX ?? props.scale ?? 1,
531
- scaleY: props.scaleY ?? props.scale ?? 1,
532
- mount: props.mount ?? 0,
533
- mountX: props.mountX ?? props.mount ?? 0,
534
- mountY: props.mountY ?? props.mount ?? 0,
535
- pivot: props.pivot ?? 0.5,
536
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
537
- pivotY: props.pivotY ?? props.pivot ?? 0.5,
669
+ scale,
670
+ scaleX: props.scaleX ?? scale ?? 1,
671
+ scaleY: props.scaleY ?? scale ?? 1,
672
+ mount,
673
+ mountX: props.mountX ?? mount,
674
+ mountY: props.mountY ?? mount,
675
+ pivot,
676
+ pivotX: props.pivotX ?? pivot,
677
+ pivotY: props.pivotY ?? pivot,
538
678
  rotation: props.rotation ?? 0,
539
679
  rtt: props.rtt ?? false,
540
- data: data,
541
- preventCleanup: props.preventCleanup ?? false,
680
+ data,
542
681
  imageType: props.imageType,
543
- strictBounds: props.strictBounds ?? this.strictBounds,
682
+ interactive: props.interactive ?? false,
544
683
  };
545
684
  }
546
685
  /**
@@ -549,8 +688,8 @@ export class Stage {
549
688
  * @remarks
550
689
  * This method is used to cleanup orphaned textures that are no longer in use.
551
690
  */
552
- cleanup(aggressive) {
553
- this.txMemManager.cleanup(aggressive);
691
+ cleanup() {
692
+ this.txMemManager.cleanup();
554
693
  }
555
694
  set clearColor(value) {
556
695
  this.renderer.updateClearColor(value);
@@ -560,5 +699,28 @@ export class Stage {
560
699
  get clearColor() {
561
700
  return this.clrColor;
562
701
  }
702
+ /**
703
+ * Load a font using a specific text renderer type
704
+ *
705
+ * @remarks
706
+ * This method allows consumers to explicitly load fonts for a specific
707
+ * text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
708
+ * the renderer type to ensure fonts are loaded with the correct pipeline.
709
+ *
710
+ * For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
711
+ * For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
712
+ *
713
+ * @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
714
+ * @param options - Font loading options specific to the renderer type
715
+ * @returns Promise that resolves when the font is loaded
716
+ */
717
+ async loadFont(rendererType, options) {
718
+ const rendererTypeKey = String(rendererType);
719
+ const fontHandler = this.fontHandlers[rendererTypeKey];
720
+ if (!fontHandler) {
721
+ throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontHandlers).join(', ')}`);
722
+ }
723
+ return fontHandler.loadFont(this, options);
724
+ }
563
725
  }
564
726
  //# sourceMappingURL=Stage.js.map