@lightningjs/renderer 2.16.0 → 3.0.0-beta10

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