@lightningtv/renderer 2.16.1 → 3.2.3

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