@lightningjs/renderer 3.0.0-beta9 → 3.0.1

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