@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -19,51 +19,173 @@
19
19
 
20
20
  import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
21
21
  import { EventEmitter } from '../common/EventEmitter.js';
22
- import { assertTruthy, isProductionEnvironment } from '../utils.js';
23
- import { Stage } from '../core/Stage.js';
22
+ import { isProductionEnvironment } from '../utils.js';
23
+ import { Stage, type StageOptions } from '../core/Stage.js';
24
24
  import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
25
25
  import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
26
26
  import type { INode, INodeProps, ITextNode, ITextNodeProps } from './INode.js';
27
27
  import type { TextureMemoryManagerSettings } from '../core/TextureMemoryManager.js';
28
- import type { CanvasTextRenderer } from '../core/text-rendering/renderers/CanvasTextRenderer.js';
29
- import type { SdfTextRenderer } from '../core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
30
- import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
28
+ import type { TextRenderer } from '../core/text-rendering/TextRenderer.js';
31
29
  import type { CanvasRenderer } from '../core/renderers/canvas/CanvasRenderer.js';
32
- import type { Inspector } from './Inspector.js';
30
+ import type { WebGlRenderer } from '../core/renderers/webgl/WebGlRenderer.js';
31
+ import type { Inspector, InspectorOptions } from './Inspector.js';
33
32
  import type { CoreShaderNode } from '../core/renderers/CoreShaderNode.js';
34
33
  import type {
35
34
  ExtractShaderProps,
36
35
  OptionalShaderProps,
37
36
  ShaderMap,
38
37
  } from '../core/CoreShaderManager.js';
38
+ import { WebPlatform } from '../core/platforms/web/WebPlatform.js';
39
+ import { Platform } from '../core/platforms/Platform.js';
39
40
 
40
41
  /**
41
- * Configuration settings for {@link RendererMain}
42
+ * FPS Update Event Data
43
+ *
44
+ * @category Events
45
+ * @example
46
+ * ```typescript
47
+ * renderer.on('fpsUpdate', (data) => {
48
+ * console.log(`Current FPS: ${data.fps}`);
49
+ * if (data.contextSpyData) {
50
+ * console.log('WebGL calls:', data.contextSpyData);
51
+ * }
52
+ * });
53
+ * ```
54
+ */
55
+ export interface RendererMainFpsUpdateEvent {
56
+ /** Current frames per second */
57
+ fps: number;
58
+ /** Context spy data (if enabled) - contains WebGL call statistics */
59
+ contextSpyData?: unknown;
60
+ }
61
+
62
+ /**
63
+ * Frame Tick Event Data
64
+ *
65
+ * @category Events
66
+ * @example
67
+ * ```typescript
68
+ * renderer.on('frameTick', (data) => {
69
+ * console.log(`Frame time: ${data.time}ms, delta: ${data.delta}ms`);
70
+ * });
71
+ * ```
72
+ */
73
+ export interface RendererMainFrameTickEvent {
74
+ /** Current timestamp */
75
+ time: number;
76
+ /** Time delta since last frame */
77
+ delta: number;
78
+ }
79
+
80
+ /**
81
+ * Quads Update Event Data
82
+ *
83
+ * @category Events
84
+ * @example
85
+ * ```typescript
86
+ * renderer.on('quadsUpdate', (data) => {
87
+ * console.log(`Rendered quads: ${data.quads}`);
88
+ * });
89
+ * ```
90
+ */
91
+ export interface RendererMainQuadsUpdateEvent {
92
+ /** Number of rendered quads */
93
+ quads: number;
94
+ }
95
+
96
+ /**
97
+ * Idle Event Data
98
+ *
99
+ * @category Events
100
+ * @remarks
101
+ * This event is emitted when the renderer has no scene updates to process.
102
+ * The event has no payload - use this for performance optimizations during idle periods.
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * renderer.on('idle', () => {
107
+ * // Renderer is idle - perfect time for cleanup, analytics, etc.
108
+ * console.log('Renderer is idle - no scene changes');
109
+ *
110
+ * // Example: Perform background tasks
111
+ * performBackgroundCleanup();
112
+ * sendAnalytics();
113
+ * });
114
+ * ```
42
115
  */
43
- export interface RendererMainSettings {
116
+ export interface RendererMainIdleEvent {
117
+ /** This event has no payload - listen without parameters */
118
+ readonly __eventHasNoPayload?: never;
119
+ }
120
+
121
+ /**
122
+ * Critical Cleanup Event Data
123
+ *
124
+ * @category Events
125
+ * @example
126
+ * ```typescript
127
+ * renderer.on('criticalCleanup', (data) => {
128
+ * console.log(`Memory cleanup triggered!`);
129
+ * console.log(`Memory used: ${data.memUsed} bytes`);
130
+ * console.log(`Critical threshold: ${data.criticalThreshold} bytes`);
131
+ * });
132
+ * ```
133
+ */
134
+ export interface RendererMainCriticalCleanupEvent {
135
+ /** Memory used before cleanup (bytes) */
136
+ memUsed: number;
137
+ /** Critical threshold (bytes) */
138
+ criticalThreshold: number;
139
+ }
140
+
141
+ /**
142
+ * Critical Cleanup Failed Event Data
143
+ *
144
+ * @category Events
145
+ * @example
146
+ * ```typescript
147
+ * renderer.on('criticalCleanupFailed', (data) => {
148
+ * console.warn(`Memory cleanup failed!`);
149
+ * console.log(`Memory still used: ${data.memUsed} bytes`);
150
+ * console.log(`Critical threshold: ${data.criticalThreshold} bytes`);
151
+ * // Consider reducing texture usage or forcing cleanup
152
+ * });
153
+ * ```
154
+ */
155
+ export interface RendererMainCriticalCleanupFailedEvent {
156
+ /** Memory used after cleanup (bytes) */
157
+ memUsed: number;
158
+ /** Critical threshold (bytes) */
159
+ criticalThreshold: number;
160
+ }
161
+
162
+ /**
163
+ * Settings for the Renderer that can be updated during runtime.
164
+ */
165
+ export interface RendererRuntimeSettings {
44
166
  /**
45
167
  * Authored logical pixel width of the application
46
168
  *
47
169
  * @defaultValue `1920`
48
170
  */
49
- appWidth?: number;
171
+ appWidth: number;
50
172
 
51
173
  /**
52
174
  * Authored logical pixel height of the application
53
175
  *
54
176
  * @defaultValue `1080`
55
177
  */
56
- appHeight?: number;
178
+ appHeight: number;
57
179
 
58
180
  /**
59
181
  * Texture Memory Manager Settings
60
182
  */
61
- textureMemory?: Partial<TextureMemoryManagerSettings>;
183
+ textureMemory: Partial<TextureMemoryManagerSettings>;
62
184
 
63
185
  /**
64
186
  * Bounds margin to extend the boundary in which a Node is added as Quad.
65
187
  */
66
- boundsMargin?: number | [number, number, number, number];
188
+ boundsMargin: number | [number, number, number, number];
67
189
 
68
190
  /**
69
191
  * Factor to convert app-authored logical coorindates to device logical coordinates
@@ -80,7 +202,7 @@ export interface RendererMainSettings {
80
202
  *
81
203
  * @defaultValue `1`
82
204
  */
83
- deviceLogicalPixelRatio?: number;
205
+ deviceLogicalPixelRatio: number;
84
206
 
85
207
  /**
86
208
  * Factor to convert device logical coordinates to device physical coordinates
@@ -97,14 +219,14 @@ export interface RendererMainSettings {
97
219
  *
98
220
  * @defaultValue `window.devicePixelRatio`
99
221
  */
100
- devicePhysicalPixelRatio?: number;
222
+ devicePhysicalPixelRatio: number;
101
223
 
102
224
  /**
103
225
  * RGBA encoded number of the background to use
104
226
  *
105
227
  * @defaultValue `0x00000000`
106
228
  */
107
- clearColor?: number;
229
+ clearColor: number;
108
230
 
109
231
  /**
110
232
  * Interval in milliseconds to receive FPS updates
@@ -114,8 +236,60 @@ export interface RendererMainSettings {
114
236
  *
115
237
  * @defaultValue `0` (disabled)
116
238
  */
117
- fpsUpdateInterval?: number;
239
+ fpsUpdateInterval: number;
240
+
241
+ /**
242
+ * DOM Inspector
243
+ *
244
+ * @remarks
245
+ * The inspector will replicate the state of the Nodes created
246
+ * in the renderer and allow inspection of the state of the nodes.
247
+ *
248
+ */
249
+ inspector: typeof Inspector | false;
250
+
251
+ /**
252
+ * Inspector Options
253
+ *
254
+ * @remarks
255
+ * Configuration options for the Inspector's performance monitoring features.
256
+ * Only used when inspector is enabled.
257
+ */
258
+ inspectorOptions?: Partial<InspectorOptions>;
259
+
260
+ /**
261
+ * Texture Processing Limit (in milliseconds)
262
+ *
263
+ * @remarks
264
+ * The maximum amount of time the renderer is allowed to process textures in a
265
+ * single frame. If the processing time exceeds this limit, the renderer will
266
+ * skip processing the remaining textures and continue rendering the frame.
267
+ *
268
+ * @defaultValue `10`
269
+ */
270
+ textureProcessingTimeLimit: number;
118
271
 
272
+ /**
273
+ * Target FPS for the global render loop
274
+ *
275
+ * @remarks
276
+ * Controls the maximum frame rate of the entire rendering system.
277
+ * When set to 0, no throttling is applied (use display refresh rate).
278
+ * When set to a positive number, the global requestAnimationFrame loop
279
+ * will be throttled to this target FPS, affecting all animations and rendering.
280
+ *
281
+ * This provides global performance control for the entire application,
282
+ * useful for managing performance on lower-end devices.
283
+ *
284
+ * @defaultValue `0` (no throttling, use display refresh rate)
285
+ */
286
+ targetFPS: number;
287
+ }
288
+
289
+ /**
290
+ * Configuration settings for {@link RendererMain}
291
+ */
292
+ export type RendererMainSettings = RendererRuntimeSettings & {
119
293
  /**
120
294
  * Include context call (i.e. WebGL) information in FPS updates
121
295
  *
@@ -129,7 +303,7 @@ export interface RendererMainSettings {
129
303
  *
130
304
  * @defaultValue `false` (disabled)
131
305
  */
132
- enableContextSpy?: boolean;
306
+ enableContextSpy: boolean;
133
307
 
134
308
  /**
135
309
  * Number or Image Workers to use
@@ -141,17 +315,7 @@ export interface RendererMainSettings {
141
315
  *
142
316
  * @defaultValue `2`
143
317
  */
144
- numImageWorkers?: number;
145
-
146
- /**
147
- * DOM Inspector
148
- *
149
- * @remarks
150
- * The inspector will replicate the state of the Nodes created
151
- * in the renderer and allow inspection of the state of the nodes.
152
- *
153
- */
154
- inspector?: typeof Inspector | false;
318
+ numImageWorkers: number;
155
319
 
156
320
  /**
157
321
  * Renderer Engine
@@ -173,7 +337,7 @@ export interface RendererMainSettings {
173
337
  *
174
338
  * @defaultValue 4 * 1024 * 1024
175
339
  */
176
- quadBufferSize?: number;
340
+ quadBufferSize: number;
177
341
 
178
342
  /**
179
343
  * Font Engines
@@ -203,7 +367,7 @@ export interface RendererMainSettings {
203
367
  *
204
368
  *
205
369
  */
206
- fontEngines: (typeof SdfTextRenderer | typeof CanvasTextRenderer)[];
370
+ fontEngines: TextRenderer[];
207
371
 
208
372
  /**
209
373
  * Force WebGL2
@@ -214,30 +378,7 @@ export interface RendererMainSettings {
214
378
  *
215
379
  * @defaultValue `false`
216
380
  */
217
- forceWebGL2?: boolean;
218
-
219
- /**
220
- * Enable strictBounds
221
- *
222
- * @remarks
223
- * Enable strict bounds for the renderer. This will ensure that the renderer
224
- * will not render outside the bounds of the canvas.
225
- *
226
- * @defaultValue `true`
227
- */
228
- strictBounds?: boolean;
229
-
230
- /**
231
- * Texture Processing Limit (in milliseconds)
232
- *
233
- * @remarks
234
- * The maximum amount of time the renderer is allowed to process textures in a
235
- * single frame. If the processing time exceeds this limit, the renderer will
236
- * skip processing the remaining textures and continue rendering the frame.
237
- *
238
- * @defaultValue `10`
239
- */
240
- textureProcessingTimeLimit?: number;
381
+ forceWebGL2: boolean;
241
382
 
242
383
  /**
243
384
  * Canvas object to use for rendering
@@ -246,7 +387,7 @@ export interface RendererMainSettings {
246
387
  * This is used to render the scene graph. If not provided, a new canvas
247
388
  * element will be created and appended to the target element.
248
389
  */
249
- canvas?: HTMLCanvasElement;
390
+ canvas: HTMLCanvasElement;
250
391
 
251
392
  /**
252
393
  * createImageBitmap support for the runtime
@@ -271,8 +412,34 @@ export interface RendererMainSettings {
271
412
  *
272
413
  * @defaultValue `full`
273
414
  */
274
- createImageBitmapSupport?: 'auto' | 'basic' | 'options' | 'full';
275
- }
415
+ createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
416
+
417
+ /**
418
+ * Provide an alternative platform abstraction layer
419
+ *
420
+ * @remarks
421
+ * By default the Lightning 3 renderer will load a webplatform, assuming it runs
422
+ * inside a web browsr. However for special cases there might be a need to provide
423
+ * an abstracted platform layer to run on non-web or non-standard JS engines
424
+ *
425
+ * @defaultValue `null`
426
+ */
427
+ platform: typeof Platform | null;
428
+
429
+ /**
430
+ * Number of times to retry loading a failed texture
431
+ *
432
+ * @remarks
433
+ * When a texture fails to load, Lightning will retry up to this many times
434
+ * before permanently giving up. Each retry will clear the texture ownership
435
+ * and then re-establish it to trigger a new load attempt.
436
+ *
437
+ * Set to null to disable retries. Set to 0 to always try once and never retry.
438
+ * This is typically only used on ImageTexture instances.
439
+ *
440
+ */
441
+ maxRetryCount?: number;
442
+ };
276
443
 
277
444
  /**
278
445
  * The Renderer Main API
@@ -298,36 +465,36 @@ export interface RendererMainSettings {
298
465
  * );
299
466
  * ```
300
467
  *
301
- * ## Events
302
- * - `fpsUpdate`
303
- * - Emitted every `fpsUpdateInterval` milliseconds with the current FPS
304
- * - `frameTick`
305
- * - Emitted every frame tick
306
- * - `quadsUpdate`
307
- * - Emitted when number of quads rendered is updated
308
- * - `idle`
309
- * - Emitted when the renderer is idle (no changes to the scene
310
- * graph/animations running)
311
- * - `criticalCleanup`
312
- * - Emitted when the Texture Memory Manager Cleanup process is triggered
313
- * - Payload: { memUsed: number, criticalThreshold: number }
314
- * - `memUsed` - The amount of memory (in bytes) used by textures before the
315
- * cleanup process
316
- * - `criticalThreshold` - The critical threshold (in bytes)
317
- * - `criticalCleanupFailed`
318
- * - Emitted when the Texture Memory Manager Cleanup process is unable to free
319
- * up enough texture memory to reach below the critical threshold.
320
- * This can happen when there is not enough non-renderable textures to
321
- * free up.
322
- * - Payload (object with keys):
323
- * - `memUsed` - The amount of memory (in bytes) used by textures after
324
- * the cleanup process
325
- * - `criticalThreshold` - The critical threshold (in bytes)
468
+ * ## Event Handling
469
+ *
470
+ * Listen to events using the standard EventEmitter API:
471
+ * ```typescript
472
+ * renderer.on('fpsUpdate', (data: RendererMainFpsUpdateEvent) => {
473
+ * console.log(`FPS: ${data.fps}`);
474
+ * });
475
+ *
476
+ * renderer.on('idle', (data: RendererMainIdleEvent) => {
477
+ * // Renderer is idle - no scene changes
478
+ * });
479
+ * ```
480
+ *
481
+ * @see {@link RendererMainFpsUpdateEvent}
482
+ * @see {@link RendererMainFrameTickEvent}
483
+ * @see {@link RendererMainQuadsUpdateEvent}
484
+ * @see {@link RendererMainIdleEvent}
485
+ * @see {@link RendererMainCriticalCleanupEvent}
486
+ * @see {@link RendererMainCriticalCleanupFailedEvent}
487
+ *
488
+ * @fires RendererMain#fpsUpdate
489
+ * @fires RendererMain#frameTick
490
+ * @fires RendererMain#quadsUpdate
491
+ * @fires RendererMain#idle
492
+ * @fires RendererMain#criticalCleanup
493
+ * @fires RendererMain#criticalCleanupFailed
326
494
  */
327
495
  export class RendererMain extends EventEmitter {
328
496
  readonly root: INode;
329
497
  readonly canvas: HTMLCanvasElement;
330
- readonly settings: Readonly<Required<RendererMainSettings>>;
331
498
  readonly stage: Stage;
332
499
  private inspector: Inspector | null = null;
333
500
 
@@ -338,44 +505,42 @@ export class RendererMain extends EventEmitter {
338
505
  * @param target Element ID or HTMLElement to insert the canvas into
339
506
  * @param driver Core Driver to use
340
507
  */
341
- constructor(settings: RendererMainSettings, target: string | HTMLElement) {
508
+ constructor(
509
+ settings: Partial<RendererMainSettings>,
510
+ target?: string | HTMLElement,
511
+ ) {
342
512
  super();
343
513
 
344
- const resolvedTxSettings: TextureMemoryManagerSettings = {
345
- criticalThreshold: settings.textureMemory?.criticalThreshold || 124e6,
346
- targetThresholdLevel: settings.textureMemory?.targetThresholdLevel || 0.5,
347
- cleanupInterval: settings.textureMemory?.cleanupInterval || 5000,
348
- debugLogging: settings.textureMemory?.debugLogging || false,
349
- baselineMemoryAllocation:
350
- settings.textureMemory?.baselineMemoryAllocation || 26e6,
351
- doNotExceedCriticalThreshold:
352
- settings.textureMemory?.doNotExceedCriticalThreshold || false,
353
- };
514
+ const resolvedTxSettings = this.resolveTxSettings(
515
+ settings.textureMemory || {},
516
+ );
354
517
 
355
- const resolvedSettings: Required<RendererMainSettings> = {
518
+ settings = {
356
519
  appWidth: settings.appWidth || 1920,
357
520
  appHeight: settings.appHeight || 1080,
358
521
  textureMemory: resolvedTxSettings,
359
522
  boundsMargin: settings.boundsMargin || 0,
360
523
  deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
361
524
  devicePhysicalPixelRatio:
362
- settings.devicePhysicalPixelRatio || window.devicePixelRatio,
525
+ settings.devicePhysicalPixelRatio || window.devicePixelRatio || 1,
363
526
  clearColor: settings.clearColor ?? 0x00000000,
364
527
  fpsUpdateInterval: settings.fpsUpdateInterval || 0,
528
+ targetFPS: settings.targetFPS || 0,
365
529
  numImageWorkers:
366
530
  settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
367
531
  enableContextSpy: settings.enableContextSpy ?? false,
368
532
  forceWebGL2: settings.forceWebGL2 ?? false,
369
533
  inspector: settings.inspector ?? false,
534
+ inspectorOptions: settings.inspectorOptions ?? {},
370
535
  renderEngine: settings.renderEngine,
371
536
  quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024,
372
- fontEngines: settings.fontEngines,
373
- strictBounds: settings.strictBounds ?? true,
374
- textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 10,
375
- canvas: settings.canvas || document.createElement('canvas'),
537
+ fontEngines: settings.fontEngines ?? [],
538
+ textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 42,
539
+ canvas: settings.canvas,
376
540
  createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
541
+ platform: settings.platform || null,
542
+ maxRetryCount: settings.maxRetryCount ?? 5,
377
543
  };
378
- this.settings = resolvedSettings;
379
544
 
380
545
  const {
381
546
  appWidth,
@@ -383,8 +548,21 @@ export class RendererMain extends EventEmitter {
383
548
  deviceLogicalPixelRatio,
384
549
  devicePhysicalPixelRatio,
385
550
  inspector,
386
- canvas,
387
- } = resolvedSettings;
551
+ } = settings as RendererMainSettings;
552
+
553
+ let platform;
554
+ if (
555
+ settings.platform !== undefined &&
556
+ settings.platform !== null &&
557
+ settings.platform.prototype instanceof Platform === true
558
+ ) {
559
+ // @ts-ignore - if Platform is a valid class, it will be used
560
+ platform = new settings.platform();
561
+ } else {
562
+ platform = new WebPlatform();
563
+ }
564
+
565
+ const canvas = settings.canvas || platform.createCanvas();
388
566
 
389
567
  const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
390
568
  const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
@@ -398,51 +576,97 @@ export class RendererMain extends EventEmitter {
398
576
 
399
577
  // Initialize the stage
400
578
  this.stage = new Stage({
401
- appWidth: this.settings.appWidth,
402
- appHeight: this.settings.appHeight,
403
- boundsMargin: this.settings.boundsMargin,
404
- clearColor: this.settings.clearColor,
579
+ appWidth,
580
+ appHeight,
581
+ boundsMargin: settings.boundsMargin!,
582
+ clearColor: settings.clearColor!,
405
583
  canvas: this.canvas,
406
- deviceLogicalPixelRatio: this.settings.deviceLogicalPixelRatio,
407
- devicePhysicalPixelRatio: this.settings.devicePhysicalPixelRatio,
408
- enableContextSpy: this.settings.enableContextSpy,
409
- forceWebGL2: this.settings.forceWebGL2,
410
- fpsUpdateInterval: this.settings.fpsUpdateInterval,
411
- numImageWorkers: this.settings.numImageWorkers,
412
- renderEngine: this.settings.renderEngine,
584
+ deviceLogicalPixelRatio,
585
+ devicePhysicalPixelRatio,
586
+ enableContextSpy: settings.enableContextSpy!,
587
+ forceWebGL2: settings.forceWebGL2!,
588
+ fpsUpdateInterval: settings.fpsUpdateInterval!,
589
+ numImageWorkers: settings.numImageWorkers!,
590
+ renderEngine: settings.renderEngine!,
413
591
  textureMemory: resolvedTxSettings,
414
592
  eventBus: this,
415
- quadBufferSize: this.settings.quadBufferSize,
416
- fontEngines: this.settings.fontEngines,
417
- inspector: this.settings.inspector !== null,
418
- strictBounds: this.settings.strictBounds,
419
- textureProcessingTimeLimit: this.settings.textureProcessingTimeLimit,
420
- createImageBitmapSupport: this.settings.createImageBitmapSupport,
593
+ quadBufferSize: settings.quadBufferSize!,
594
+ fontEngines: settings.fontEngines!,
595
+ inspector: settings.inspector !== null,
596
+ targetFPS: settings.targetFPS!,
597
+ textureProcessingTimeLimit: settings.textureProcessingTimeLimit!,
598
+ createImageBitmapSupport: settings.createImageBitmapSupport!,
599
+ platform,
600
+ maxRetryCount: settings.maxRetryCount ?? 5,
421
601
  });
422
602
 
423
603
  // Extract the root node
424
604
  this.root = this.stage.root as unknown as INode;
425
605
 
426
606
  // Get the target element and attach the canvas to it
427
- let targetEl: HTMLElement | null;
428
- if (typeof target === 'string') {
429
- targetEl = document.getElementById(target);
430
- } else {
431
- targetEl = target;
432
- }
607
+ if (target) {
608
+ let targetEl: HTMLElement | null;
609
+ if (typeof target === 'string') {
610
+ targetEl = document.getElementById(target);
611
+ } else {
612
+ targetEl = target;
613
+ }
433
614
 
434
- if (!targetEl) {
435
- throw new Error('Could not find target element');
436
- }
615
+ if (!targetEl) {
616
+ throw new Error('Could not find target element');
617
+ }
437
618
 
438
- targetEl.appendChild(canvas);
619
+ targetEl.appendChild(canvas);
620
+ } else if (settings.canvas !== canvas) {
621
+ throw new Error(
622
+ 'New canvas element could not be appended to undefined target',
623
+ );
624
+ }
439
625
 
440
626
  // Initialize inspector (if enabled)
441
- if (inspector && !isProductionEnvironment()) {
442
- this.inspector = new inspector(canvas, resolvedSettings);
627
+ if (inspector && isProductionEnvironment === false) {
628
+ this.inspector = new inspector(canvas, settings as RendererMainSettings);
443
629
  }
444
630
  }
445
631
 
632
+ /**
633
+ * Resolves the Texture Memory Manager values
634
+ *
635
+ * @param props
636
+ * @returns
637
+ */
638
+ private resolveTxSettings(
639
+ textureMemory: Partial<TextureMemoryManagerSettings>,
640
+ ): TextureMemoryManagerSettings {
641
+ const currentTxSettings =
642
+ (this.stage && this.stage.options.textureMemory) || {};
643
+
644
+ return {
645
+ criticalThreshold:
646
+ textureMemory?.criticalThreshold ??
647
+ currentTxSettings?.criticalThreshold ??
648
+ 124e6,
649
+ targetThresholdLevel:
650
+ textureMemory?.targetThresholdLevel ??
651
+ currentTxSettings?.targetThresholdLevel ??
652
+ 0.5,
653
+ cleanupInterval:
654
+ textureMemory?.cleanupInterval ??
655
+ currentTxSettings?.cleanupInterval ??
656
+ 5000,
657
+ debugLogging:
658
+ textureMemory?.debugLogging ?? currentTxSettings?.debugLogging ?? false,
659
+ baselineMemoryAllocation:
660
+ textureMemory?.baselineMemoryAllocation ??
661
+ currentTxSettings?.baselineMemoryAllocation ??
662
+ 26e6,
663
+ doNotExceedCriticalThreshold:
664
+ textureMemory?.doNotExceedCriticalThreshold ??
665
+ currentTxSettings?.doNotExceedCriticalThreshold ??
666
+ false,
667
+ };
668
+ }
669
+
446
670
  /**
447
671
  * Create a new scene graph node
448
672
  *
@@ -461,16 +685,12 @@ export class RendererMain extends EventEmitter {
461
685
  createNode<ShNode extends CoreShaderNode<any>>(
462
686
  props: Partial<INodeProps<ShNode>>,
463
687
  ): INode<ShNode> {
464
- assertTruthy(this.stage, 'Stage is not initialized');
465
-
466
688
  const node = this.stage.createNode(props as Partial<CoreNodeProps>);
467
689
 
468
690
  if (this.inspector) {
469
691
  return this.inspector.createNode(node) as unknown as INode<ShNode>;
470
692
  }
471
693
 
472
- // FIXME onDestroy event? node.once('beforeDestroy'
473
- // FIXME onCreate event?
474
694
  return node as unknown as INode<ShNode>;
475
695
  }
476
696
 
@@ -557,7 +777,7 @@ export class RendererMain extends EventEmitter {
557
777
  props?: OptionalShaderProps<ShType>,
558
778
  ) {
559
779
  return this.stage.shManager.createShader(shType, props) as CoreShaderNode<
560
- ExtractShaderProps<ShType>
780
+ NonNullable<ExtractShaderProps<ShType>>
561
781
  >;
562
782
  }
563
783
 
@@ -634,8 +854,8 @@ export class RendererMain extends EventEmitter {
634
854
  * **NOTE3**: This will not cleanup textures that are marked as `preventCleanup`.
635
855
  * **NOTE4**: This has nothing to do with the garbage collection of JavaScript.
636
856
  */
637
- cleanup(aggressive: boolean = false) {
638
- this.stage.cleanup(aggressive);
857
+ cleanup() {
858
+ this.stage.cleanup();
639
859
  }
640
860
 
641
861
  /**
@@ -646,4 +866,150 @@ export class RendererMain extends EventEmitter {
646
866
  setClearColor(color: number) {
647
867
  this.stage.setClearColor(color);
648
868
  }
869
+
870
+ /**
871
+ * Set options for the renderer
872
+ *
873
+ * @param options
874
+ */
875
+ setOptions(options: Partial<RendererRuntimeSettings>) {
876
+ const stage = this.stage;
877
+ if (options.textureMemory !== undefined) {
878
+ const textureMemory = (options.textureMemory = this.resolveTxSettings(
879
+ options.textureMemory,
880
+ ));
881
+ stage.txMemManager.updateSettings(textureMemory);
882
+ stage.txMemManager.cleanup();
883
+ }
884
+
885
+ if (options.boundsMargin !== undefined) {
886
+ let bm = options.boundsMargin!;
887
+ options.boundsMargin = Array.isArray(bm) ? bm : [bm, bm, bm, bm];
888
+ }
889
+
890
+ const stageOptions = stage.options;
891
+ for (let key in options) {
892
+ stageOptions[key] = options[key]!;
893
+ }
894
+
895
+ if (options.inspector !== undefined && !isProductionEnvironment) {
896
+ if (options.inspector === false) {
897
+ this.inspector?.destroy();
898
+ this.inspector = null;
899
+ } else if (
900
+ this.inspector === null ||
901
+ this.inspector.constructor !== options.inspector
902
+ ) {
903
+ this.inspector = new options.inspector(
904
+ this.canvas,
905
+ stage.options as unknown as RendererMainSettings,
906
+ );
907
+ this.inspector?.createNodes(this.root as unknown as CoreNode);
908
+ }
909
+ }
910
+
911
+ let needDimensionsUpdate = false;
912
+
913
+ if (
914
+ options.deviceLogicalPixelRatio ||
915
+ options.devicePhysicalPixelRatio !== undefined
916
+ ) {
917
+ this.stage.pixelRatio =
918
+ stageOptions.devicePhysicalPixelRatio *
919
+ stageOptions.deviceLogicalPixelRatio;
920
+ this.inspector?.updateViewport(
921
+ stageOptions.appWidth,
922
+ stageOptions.appHeight,
923
+ stageOptions.deviceLogicalPixelRatio,
924
+ );
925
+ needDimensionsUpdate = true;
926
+ }
927
+
928
+ if (options.appWidth !== undefined || options.appHeight !== undefined) {
929
+ this.inspector?.updateViewport(
930
+ stageOptions.appWidth,
931
+ stageOptions.appHeight,
932
+ stageOptions.deviceLogicalPixelRatio,
933
+ );
934
+ needDimensionsUpdate = true;
935
+ }
936
+
937
+ if (options.boundsMargin !== undefined) {
938
+ this.stage.setBoundsMargin(options.boundsMargin);
939
+ }
940
+
941
+ if (options.clearColor !== undefined) {
942
+ this.stage.setClearColor(options.clearColor);
943
+ }
944
+
945
+ if (needDimensionsUpdate) {
946
+ this.updateAppDimensions();
947
+ }
948
+ }
949
+
950
+ private updateAppDimensions() {
951
+ const {
952
+ appWidth,
953
+ appHeight,
954
+ deviceLogicalPixelRatio,
955
+ devicePhysicalPixelRatio,
956
+ } = this.stage.options;
957
+
958
+ const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
959
+ const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
960
+
961
+ this.canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
962
+ this.canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
963
+
964
+ this.canvas.style.width = `${deviceLogicalWidth}px`;
965
+ this.canvas.style.height = `${deviceLogicalHeight}px`;
966
+
967
+ this.stage.renderer.updateViewport();
968
+
969
+ this.root.w = appWidth;
970
+ this.root.h = appHeight;
971
+ this.stage.updateViewportBounds();
972
+ }
973
+
974
+ get settings(): Readonly<StageOptions> {
975
+ return this.stage.options;
976
+ }
977
+
978
+ /**
979
+ * Gets the target FPS for the global render loop
980
+ *
981
+ * @returns The current target FPS (0 means no throttling)
982
+ *
983
+ * @remarks
984
+ * This controls the maximum frame rate of the entire rendering system.
985
+ * When 0, the system runs at display refresh rate.
986
+ */
987
+ get targetFPS(): number {
988
+ return this.stage.options.targetFPS || 0;
989
+ }
990
+
991
+ /**
992
+ * Sets the target FPS for the global render loop
993
+ *
994
+ * @param fps - The target FPS to set for the global render loop.
995
+ * Set to 0 or a negative value to disable throttling.
996
+ *
997
+ * @remarks
998
+ * This setting affects the entire rendering system immediately.
999
+ * All animations, rendering, and frame updates will be throttled
1000
+ * to this target FPS. Provides global performance control.
1001
+ *
1002
+ * @example
1003
+ * ```typescript
1004
+ * // Set global target to 30fps for better performance
1005
+ * renderer.targetFPS = 30;
1006
+ *
1007
+ * // Disable global throttling (use display refresh rate)
1008
+ * renderer.targetFPS = 0;
1009
+ * ```
1010
+ */
1011
+ set targetFPS(fps: number) {
1012
+ this.stage.options.targetFPS = fps > 0 ? fps : 0;
1013
+ this.stage.updateTargetFrameTime();
1014
+ }
649
1015
  }