@lightningtv/renderer 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +3 -0
  3. package/README.md +147 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +27 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +20 -0
  8. package/dist/exports/canvas.js +39 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +45 -0
  11. package/dist/exports/index.js +58 -0
  12. package/dist/exports/index.js.map +1 -0
  13. package/dist/exports/inspector.d.ts +4 -0
  14. package/dist/exports/inspector.js +23 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +26 -0
  17. package/dist/exports/utils.js +45 -0
  18. package/dist/exports/utils.js.map +1 -0
  19. package/dist/exports/webgl-shaders.d.ts +11 -0
  20. package/dist/exports/webgl-shaders.js +28 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +19 -0
  23. package/dist/exports/webgl.js +38 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +97 -0
  26. package/dist/src/common/CommonTypes.js +20 -0
  27. package/dist/src/common/CommonTypes.js.map +1 -0
  28. package/dist/src/common/EventEmitter.d.ts +12 -0
  29. package/dist/src/common/EventEmitter.js +66 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +66 -0
  32. package/dist/src/common/IAnimationController.js +2 -0
  33. package/dist/src/common/IAnimationController.js.map +1 -0
  34. package/dist/src/common/IEventEmitter.d.ts +8 -0
  35. package/dist/src/common/IEventEmitter.js +18 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/CoreNode.d.ts +865 -0
  38. package/dist/src/core/CoreNode.js +1532 -0
  39. package/dist/src/core/CoreNode.js.map +1 -0
  40. package/dist/src/core/CoreShaderManager.d.ts +82 -0
  41. package/dist/src/core/CoreShaderManager.js +128 -0
  42. package/dist/src/core/CoreShaderManager.js.map +1 -0
  43. package/dist/src/core/CoreTextNode.d.ts +103 -0
  44. package/dist/src/core/CoreTextNode.js +331 -0
  45. package/dist/src/core/CoreTextNode.js.map +1 -0
  46. package/dist/src/core/CoreTextureManager.d.ts +249 -0
  47. package/dist/src/core/CoreTextureManager.js +362 -0
  48. package/dist/src/core/CoreTextureManager.js.map +1 -0
  49. package/dist/src/core/Stage.d.ts +210 -0
  50. package/dist/src/core/Stage.js +636 -0
  51. package/dist/src/core/Stage.js.map +1 -0
  52. package/dist/src/core/TextureMemoryManager.d.ts +149 -0
  53. package/dist/src/core/TextureMemoryManager.js +271 -0
  54. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  55. package/dist/src/core/animations/AnimationManager.d.ts +7 -0
  56. package/dist/src/core/animations/AnimationManager.js +34 -0
  57. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  58. package/dist/src/core/animations/CoreAnimation.d.ts +38 -0
  59. package/dist/src/core/animations/CoreAnimation.js +261 -0
  60. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  61. package/dist/src/core/animations/CoreAnimationController.d.ts +27 -0
  62. package/dist/src/core/animations/CoreAnimationController.js +133 -0
  63. package/dist/src/core/animations/CoreAnimationController.js.map +1 -0
  64. package/dist/src/core/animations/SimpleAnimation.d.ts +28 -0
  65. package/dist/src/core/animations/SimpleAnimation.js +96 -0
  66. package/dist/src/core/animations/SimpleAnimation.js.map +1 -0
  67. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  68. package/dist/src/core/lib/ContextSpy.js +38 -0
  69. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  70. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  71. package/dist/src/core/lib/ImageWorker.js +201 -0
  72. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  73. package/dist/src/core/lib/Matrix3d.d.ts +73 -0
  74. package/dist/src/core/lib/Matrix3d.js +230 -0
  75. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  76. package/dist/src/core/lib/RenderCoords.d.ts +13 -0
  77. package/dist/src/core/lib/RenderCoords.js +63 -0
  78. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  79. package/dist/src/core/lib/WebGlContextWrapper.d.ts +694 -0
  80. package/dist/src/core/lib/WebGlContextWrapper.js +1049 -0
  81. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +16 -0
  83. package/dist/src/core/lib/textureCompression.js +129 -0
  84. package/dist/src/core/lib/textureCompression.js.map +1 -0
  85. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  86. package/dist/src/core/lib/textureSvg.js +63 -0
  87. package/dist/src/core/lib/textureSvg.js.map +1 -0
  88. package/dist/src/core/lib/utils.d.ts +60 -0
  89. package/dist/src/core/lib/utils.js +267 -0
  90. package/dist/src/core/lib/utils.js.map +1 -0
  91. package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
  92. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  93. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  94. package/dist/src/core/platform.d.ts +10 -0
  95. package/dist/src/core/platform.js +81 -0
  96. package/dist/src/core/platform.js.map +1 -0
  97. package/dist/src/core/platforms/Platform.d.ts +37 -0
  98. package/dist/src/core/platforms/Platform.js +22 -0
  99. package/dist/src/core/platforms/Platform.js.map +1 -0
  100. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  101. package/dist/src/core/platforms/web/WebPlatform.js +58 -0
  102. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  103. package/dist/src/core/renderers/CoreContextTexture.d.ts +12 -0
  104. package/dist/src/core/renderers/CoreContextTexture.js +34 -0
  105. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  106. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  107. package/dist/src/core/renderers/CoreRenderOp.js +21 -0
  108. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  109. package/dist/src/core/renderers/CoreRenderer.d.ts +78 -0
  110. package/dist/src/core/renderers/CoreRenderer.js +37 -0
  111. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  112. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  113. package/dist/src/core/renderers/CoreShader.js +28 -0
  114. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  115. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  116. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  117. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  118. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  119. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  120. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  121. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  122. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  123. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  124. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +16 -0
  125. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +124 -0
  126. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  127. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +37 -0
  128. package/dist/src/core/renderers/canvas/CanvasRenderer.js +215 -0
  129. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  130. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  131. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +57 -0
  132. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  133. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  134. package/dist/src/core/renderers/canvas/CanvasTexture.js +124 -0
  135. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  136. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  137. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  138. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  139. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  140. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  141. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  143. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  144. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  146. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  147. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  149. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  150. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +56 -0
  152. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +239 -0
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  155. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  156. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  157. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  158. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  159. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  160. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  161. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  162. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  164. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  165. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  167. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  168. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  170. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +224 -0
  171. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  173. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +118 -0
  174. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  176. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  177. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  179. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  180. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  182. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +219 -0
  183. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +27 -0
  185. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +48 -0
  186. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  187. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  188. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +106 -0
  189. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  190. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +47 -0
  191. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +51 -0
  192. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  193. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  194. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +31 -0
  195. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  196. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  197. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  198. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  199. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  200. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  201. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  202. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  203. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  204. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  205. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  206. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  207. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  208. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  209. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  210. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  211. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  212. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  213. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  214. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  215. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  216. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  217. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  218. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  219. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  220. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  221. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  222. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  223. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  224. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  256. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  257. package/dist/src/core/shaders/canvas/Border.js +57 -0
  258. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  259. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  260. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  261. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  262. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  263. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  264. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  265. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  266. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  267. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  268. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  269. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  270. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  271. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  272. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  273. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  274. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  275. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  276. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  277. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  278. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  279. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  280. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  281. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  282. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  283. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  284. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  285. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  286. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +38 -0
  287. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  288. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  289. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  290. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  291. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  292. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  293. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  294. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  295. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  296. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  297. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  298. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  299. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  300. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  301. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  302. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  303. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  304. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +9 -0
  305. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  306. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  307. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  308. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  309. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  310. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  311. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  312. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  313. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  314. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  315. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  316. package/dist/src/core/shaders/utils.d.ts +5 -0
  317. package/dist/src/core/shaders/utils.js +41 -0
  318. package/dist/src/core/shaders/utils.js.map +1 -0
  319. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  320. package/dist/src/core/shaders/webgl/Border.js +110 -0
  321. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  322. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  323. package/dist/src/core/shaders/webgl/Default.js +86 -0
  324. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  325. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  326. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  327. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  329. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  330. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  331. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  332. package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
  333. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  334. package/dist/src/core/shaders/webgl/Magnifier.d.ts +46 -0
  335. package/dist/src/core/shaders/webgl/Magnifier.js +107 -0
  336. package/dist/src/core/shaders/webgl/Magnifier.js.map +1 -0
  337. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  338. package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
  339. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  340. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  341. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  342. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  343. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +3 -0
  344. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +218 -0
  345. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +1 -0
  346. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  347. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  348. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  349. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  350. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  351. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  352. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  353. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  354. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  355. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  356. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  357. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  358. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  359. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  360. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  361. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  362. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  363. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  364. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  365. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  366. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  367. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  368. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  369. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  370. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  371. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  372. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  373. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  374. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +21 -0
  375. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  376. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  377. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  378. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  379. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  380. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  381. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  382. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  383. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  384. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  385. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  386. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  387. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  388. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  389. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  390. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  391. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  392. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  393. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  394. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  395. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  396. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  397. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  398. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  399. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  400. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  401. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  402. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  403. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  404. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  405. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  406. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  407. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  408. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  409. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  410. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  411. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  412. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  413. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  414. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  415. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  416. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  417. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  418. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  419. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  420. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  421. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  422. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
  423. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  424. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  425. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  426. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  427. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  428. package/dist/src/core/textures/ColorTexture.js +76 -0
  429. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  430. package/dist/src/core/textures/ImageTexture.d.ts +124 -0
  431. package/dist/src/core/textures/ImageTexture.js +240 -0
  432. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  433. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  434. package/dist/src/core/textures/NoiseTexture.js +68 -0
  435. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  436. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  437. package/dist/src/core/textures/RenderTexture.js +54 -0
  438. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  439. package/dist/src/core/textures/SubTexture.d.ts +63 -0
  440. package/dist/src/core/textures/SubTexture.js +135 -0
  441. package/dist/src/core/textures/SubTexture.js.map +1 -0
  442. package/dist/src/core/textures/Texture.d.ts +211 -0
  443. package/dist/src/core/textures/Texture.js +232 -0
  444. package/dist/src/core/textures/Texture.js.map +1 -0
  445. package/dist/src/core/utils.d.ts +22 -0
  446. package/dist/src/core/utils.js +173 -0
  447. package/dist/src/core/utils.js.map +1 -0
  448. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  449. package/dist/src/main-api/DynamicShaderController.js +58 -0
  450. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  451. package/dist/src/main-api/INode.d.ts +63 -0
  452. package/dist/src/main-api/INode.js +2 -0
  453. package/dist/src/main-api/INode.js.map +1 -0
  454. package/dist/src/main-api/Inspector.d.ts +21 -0
  455. package/dist/src/main-api/Inspector.js +376 -0
  456. package/dist/src/main-api/Inspector.js.map +1 -0
  457. package/dist/src/main-api/Renderer.d.ts +543 -0
  458. package/dist/src/main-api/Renderer.js +431 -0
  459. package/dist/src/main-api/Renderer.js.map +1 -0
  460. package/dist/src/main-api/ShaderController.d.ts +31 -0
  461. package/dist/src/main-api/ShaderController.js +37 -0
  462. package/dist/src/main-api/ShaderController.js.map +1 -0
  463. package/dist/src/main-api/utils.d.ts +2 -0
  464. package/dist/src/main-api/utils.js +34 -0
  465. package/dist/src/main-api/utils.js.map +1 -0
  466. package/dist/src/utils.d.ts +104 -0
  467. package/dist/src/utils.js +211 -0
  468. package/dist/src/utils.js.map +1 -0
  469. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  470. package/dist/tsconfig.tsbuildinfo +1 -0
  471. package/exports/canvas.ts +39 -0
  472. package/exports/index.ts +89 -0
  473. package/exports/inspector.ts +24 -0
  474. package/exports/utils.ts +44 -0
  475. package/exports/webgl.ts +38 -0
  476. package/package.json +91 -0
  477. package/scripts/please-use-pnpm.js +13 -0
  478. package/src/common/CommonTypes.ts +146 -0
  479. package/src/common/EventEmitter.ts +77 -0
  480. package/src/common/IAnimationController.ts +92 -0
  481. package/src/common/IEventEmitter.ts +28 -0
  482. package/src/core/CoreNode.test.ts +202 -0
  483. package/src/core/CoreNode.ts +2487 -0
  484. package/src/core/CoreShaderManager.ts +292 -0
  485. package/src/core/CoreTextNode.ts +455 -0
  486. package/src/core/CoreTextureManager.ts +561 -0
  487. package/src/core/Stage.ts +826 -0
  488. package/src/core/TextureMemoryManager.ts +414 -0
  489. package/src/core/animations/AnimationManager.ts +38 -0
  490. package/src/core/animations/CoreAnimation.ts +347 -0
  491. package/src/core/animations/CoreAnimationController.ts +166 -0
  492. package/src/core/lib/ContextSpy.ts +41 -0
  493. package/src/core/lib/ImageWorker.ts +280 -0
  494. package/src/core/lib/Matrix3d.ts +244 -0
  495. package/src/core/lib/RenderCoords.ts +86 -0
  496. package/src/core/lib/WebGlContextWrapper.ts +1332 -0
  497. package/src/core/lib/textureCompression.ts +152 -0
  498. package/src/core/lib/textureSvg.ts +78 -0
  499. package/src/core/lib/utils.ts +388 -0
  500. package/src/core/lib/validateImageBitmap.ts +76 -0
  501. package/src/core/platform.ts +100 -0
  502. package/src/core/renderers/CoreContextTexture.ts +43 -0
  503. package/src/core/renderers/CoreRenderOp.ts +22 -0
  504. package/src/core/renderers/CoreRenderer.ts +115 -0
  505. package/src/core/renderers/CoreShader.ts +41 -0
  506. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +375 -0
  507. package/src/core/renderers/canvas/CanvasCoreTexture.ts +153 -0
  508. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -0
  509. package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -0
  510. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -0
  511. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +91 -0
  512. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -0
  513. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +313 -0
  514. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -0
  515. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +821 -0
  516. package/src/core/renderers/webgl/WebGlCoreShader.ts +365 -0
  517. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
  518. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -0
  519. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -0
  520. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
  521. package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -0
  522. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -0
  523. package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -0
  524. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -0
  525. package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -0
  526. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -0
  527. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -0
  528. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -0
  529. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -0
  530. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -0
  531. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -0
  532. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -0
  533. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -0
  534. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -0
  535. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -0
  536. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -0
  537. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -0
  538. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -0
  539. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -0
  540. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -0
  541. package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
  542. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -0
  543. package/src/core/text-rendering/TrFontManager.ts +183 -0
  544. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -0
  545. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -0
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -0
  548. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -0
  549. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -0
  550. package/src/core/text-rendering/font-face-types/utils.ts +39 -0
  551. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -0
  552. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +808 -0
  553. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -0
  554. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -0
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +408 -0
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -0
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -0
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -0
  566. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
  567. package/src/core/text-rendering/renderers/TextRenderer.ts +557 -0
  568. package/src/core/textures/ColorTexture.ts +102 -0
  569. package/src/core/textures/ImageTexture.ts +400 -0
  570. package/src/core/textures/NoiseTexture.ts +104 -0
  571. package/src/core/textures/RenderTexture.ts +85 -0
  572. package/src/core/textures/SubTexture.ts +205 -0
  573. package/src/core/textures/Texture.ts +376 -0
  574. package/src/core/utils.ts +227 -0
  575. package/src/env.d.ts +7 -0
  576. package/src/main-api/DynamicShaderController.ts +104 -0
  577. package/src/main-api/INode.ts +101 -0
  578. package/src/main-api/Inspector.ts +522 -0
  579. package/src/main-api/Renderer.ts +807 -0
  580. package/src/main-api/ShaderController.ts +80 -0
  581. package/src/main-api/utils.ts +45 -0
  582. package/src/utils.ts +248 -0
@@ -0,0 +1,826 @@
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
+ import { startLoop, getTimeStamp } from './platform.js';
20
+ import { assertTruthy, setPremultiplyMode } from '../utils.js';
21
+ import { AnimationManager } from './animations/AnimationManager.js';
22
+ import {
23
+ UpdateType,
24
+ CoreNode,
25
+ CoreNodeRenderState,
26
+ type CoreNodeProps,
27
+ } from './CoreNode.js';
28
+ import { CoreTextureManager } from './CoreTextureManager.js';
29
+ import { TrFontManager } from './text-rendering/TrFontManager.js';
30
+ import { CoreShaderManager, type ShaderMap } from './CoreShaderManager.js';
31
+ import {
32
+ TextRenderer,
33
+ type TextRendererMap,
34
+ type TrProps,
35
+ } from './text-rendering/renderers/TextRenderer.js';
36
+
37
+ import { EventEmitter } from '../common/EventEmitter.js';
38
+ import { ContextSpy } from './lib/ContextSpy.js';
39
+ import type {
40
+ FpsUpdatePayload,
41
+ FrameTickPayload,
42
+ QuadsUpdatePayload,
43
+ } from '../common/CommonTypes.js';
44
+ import {
45
+ TextureMemoryManager,
46
+ type TextureMemoryManagerSettings,
47
+ } from './TextureMemoryManager.js';
48
+ import type { CoreRendererOptions } from './renderers/CoreRenderer.js';
49
+ import { CoreRenderer } from './renderers/CoreRenderer.js';
50
+ import type { WebGlCoreRenderer } from './renderers/webgl/WebGlCoreRenderer.js';
51
+ import type { CanvasCoreRenderer } from './renderers/canvas/CanvasCoreRenderer.js';
52
+ import type { BaseShaderController } from '../main-api/ShaderController.js';
53
+ import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
54
+ import { santizeCustomDataMap } from '../main-api/utils.js';
55
+ import type { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
56
+ import type { CanvasTextRenderer } from './text-rendering/renderers/CanvasTextRenderer.js';
57
+ import {
58
+ createBound,
59
+ createPreloadBounds,
60
+ pointInBound,
61
+ type Bound,
62
+ } from './lib/utils.js';
63
+ import type { Texture } from './textures/Texture.js';
64
+ import { ColorTexture } from './textures/ColorTexture.js';
65
+
66
+ export interface StageOptions {
67
+ appWidth: number;
68
+ appHeight: number;
69
+ textureMemory: TextureMemoryManagerSettings;
70
+ boundsMargin: number | [number, number, number, number];
71
+ deviceLogicalPixelRatio: number;
72
+ devicePhysicalPixelRatio: number;
73
+ canvas: HTMLCanvasElement | OffscreenCanvas;
74
+ clearColor: number;
75
+ fpsUpdateInterval: number;
76
+ targetFPS: number;
77
+ enableContextSpy: boolean;
78
+ forceWebGL2: boolean;
79
+ numImageWorkers: number;
80
+ renderEngine: typeof WebGlCoreRenderer | typeof CanvasCoreRenderer;
81
+ eventBus: EventEmitter;
82
+ quadBufferSize: number;
83
+ fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
84
+ inspector: boolean;
85
+ strictBounds: boolean;
86
+ textureProcessingTimeLimit: number;
87
+ createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
88
+ }
89
+
90
+ export type StageFpsUpdateHandler = (
91
+ stage: Stage,
92
+ fpsData: FpsUpdatePayload,
93
+ ) => void;
94
+
95
+ export type StageFrameTickHandler = (
96
+ stage: Stage,
97
+ frameTickData: FrameTickPayload,
98
+ ) => void;
99
+ export interface Point {
100
+ x: number;
101
+ y: number;
102
+ }
103
+
104
+ const bufferMemory = 2e6;
105
+ const autoStart = true;
106
+
107
+ export class Stage {
108
+ /// Module Instances
109
+ public readonly animationManager: AnimationManager;
110
+ public readonly txManager: CoreTextureManager;
111
+ public readonly txMemManager: TextureMemoryManager;
112
+ public readonly fontManager: TrFontManager;
113
+ public readonly textRenderers: Partial<TextRendererMap>;
114
+ public readonly shManager: CoreShaderManager;
115
+ public readonly renderer: CoreRenderer;
116
+ public readonly root: CoreNode;
117
+ public readonly interactiveNodes: Set<CoreNode> = new Set();
118
+ public boundsMargin: [number, number, number, number];
119
+ public readonly defShaderCtr: BaseShaderController;
120
+ public readonly strictBound: Bound;
121
+ public readonly preloadBound: Bound;
122
+ public readonly strictBounds: boolean;
123
+ public readonly defaultTexture: Texture | null = null;
124
+
125
+ /**
126
+ * Target frame time in milliseconds (calculated from targetFPS)
127
+ *
128
+ * @remarks
129
+ * This is pre-calculated to avoid recalculating on every frame.
130
+ * - 0 means no throttling (use display refresh rate)
131
+ * - >0 means throttle to this frame time (1000 / targetFPS)
132
+ */
133
+ public targetFrameTime: number = 0;
134
+
135
+ /**
136
+ * Renderer Event Bus for the Stage to emit events onto
137
+ *
138
+ * @remarks
139
+ * In reality this is just the RendererMain instance, which is an EventEmitter.
140
+ * this allows us to directly emit events from the Stage to RendererMain
141
+ * without having to set up forwarding handlers.
142
+ */
143
+ public readonly eventBus: EventEmitter;
144
+
145
+ /// State
146
+ deltaTime = 0;
147
+ lastFrameTime = 0;
148
+ currentFrameTime = 0;
149
+ private fpsNumFrames = 0;
150
+ private fpsElapsedTime = 0;
151
+ private numQuadsRendered = 0;
152
+ private renderRequested = false;
153
+ private frameEventQueue: [name: string, payload: unknown][] = [];
154
+ private fontResolveMap: Record<string, CanvasTextRenderer | SdfTextRenderer> =
155
+ {};
156
+
157
+ /// Debug data
158
+ contextSpy: ContextSpy | null = null;
159
+
160
+ /**
161
+ * Stage constructor
162
+ */
163
+ constructor(readonly options: StageOptions) {
164
+ const {
165
+ canvas,
166
+ clearColor,
167
+ appWidth,
168
+ appHeight,
169
+ boundsMargin,
170
+ enableContextSpy,
171
+ forceWebGL2,
172
+ numImageWorkers,
173
+ textureMemory,
174
+ renderEngine,
175
+ fontEngines,
176
+ createImageBitmapSupport,
177
+ } = options;
178
+
179
+ this.eventBus = options.eventBus;
180
+
181
+ // Calculate target frame time from targetFPS option
182
+ this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
183
+
184
+ this.txManager = new CoreTextureManager(this, {
185
+ numImageWorkers,
186
+ createImageBitmapSupport,
187
+ });
188
+
189
+ // Wait for the Texture Manager to initialize
190
+ // once it does, request a render
191
+ this.txManager.on('initialized', () => {
192
+ this.requestRender();
193
+ });
194
+
195
+ this.txMemManager = new TextureMemoryManager(this, textureMemory);
196
+ this.shManager = new CoreShaderManager();
197
+ this.animationManager = new AnimationManager();
198
+ this.contextSpy = enableContextSpy ? new ContextSpy() : null;
199
+ this.strictBounds = options.strictBounds;
200
+
201
+ let bm = [0, 0, 0, 0] as [number, number, number, number];
202
+ if (boundsMargin) {
203
+ bm = Array.isArray(boundsMargin)
204
+ ? boundsMargin
205
+ : [boundsMargin, boundsMargin, boundsMargin, boundsMargin];
206
+ }
207
+ this.boundsMargin = bm;
208
+
209
+ // precalculate our viewport bounds
210
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
211
+ this.preloadBound = createPreloadBounds(this.strictBound, bm);
212
+
213
+ const rendererOptions: CoreRendererOptions = {
214
+ stage: this,
215
+ canvas,
216
+ pixelRatio:
217
+ options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio,
218
+ clearColor: clearColor ?? 0xff000000,
219
+ bufferMemory,
220
+ txManager: this.txManager,
221
+ txMemManager: this.txMemManager,
222
+ shManager: this.shManager,
223
+ contextSpy: this.contextSpy,
224
+ forceWebGL2,
225
+ };
226
+
227
+ this.renderer = new renderEngine(rendererOptions);
228
+ const renderMode = this.renderer.mode || 'webgl';
229
+
230
+ this.createDefaultTexture();
231
+ this.defShaderCtr = this.renderer.getDefShaderCtr();
232
+ setPremultiplyMode(renderMode);
233
+
234
+ // Must do this after renderer is created
235
+ this.txManager.renderer = this.renderer;
236
+
237
+ // Create text renderers
238
+ this.textRenderers = {};
239
+ fontEngines.forEach((fontEngineConstructor) => {
240
+ const fontEngineInstance = new fontEngineConstructor(this);
241
+ const className = fontEngineInstance.type;
242
+
243
+ if (className === 'sdf' && renderMode === 'canvas') {
244
+ console.warn(
245
+ 'SdfTextRenderer is not compatible with Canvas renderer. Skipping...',
246
+ );
247
+ return;
248
+ }
249
+
250
+ if (fontEngineInstance instanceof TextRenderer) {
251
+ if (className === 'canvas') {
252
+ this.textRenderers['canvas'] =
253
+ fontEngineInstance as CanvasTextRenderer;
254
+ } else if (className === 'sdf') {
255
+ this.textRenderers['sdf'] = fontEngineInstance as SdfTextRenderer;
256
+ }
257
+ }
258
+ });
259
+
260
+ if (Object.keys(this.textRenderers).length === 0) {
261
+ console.warn('No text renderers available. Your text will not render.');
262
+ }
263
+
264
+ this.fontManager = new TrFontManager(this.textRenderers);
265
+
266
+ // create root node
267
+ const rootNode = new CoreNode(this, {
268
+ x: 0,
269
+ y: 0,
270
+ width: appWidth,
271
+ height: appHeight,
272
+ alpha: 1,
273
+ autosize: false,
274
+ boundsMargin: null,
275
+ clipping: false,
276
+ color: 0x00000000,
277
+ colorTop: 0x00000000,
278
+ colorBottom: 0x00000000,
279
+ colorLeft: 0x00000000,
280
+ colorRight: 0x00000000,
281
+ colorTl: 0x00000000,
282
+ colorTr: 0x00000000,
283
+ colorBl: 0x00000000,
284
+ colorBr: 0x00000000,
285
+ zIndex: 0,
286
+ zIndexLocked: 0,
287
+ scaleX: 1,
288
+ scaleY: 1,
289
+ mountX: 0,
290
+ mountY: 0,
291
+ mount: 0,
292
+ pivot: 0.5,
293
+ pivotX: 0.5,
294
+ pivotY: 0.5,
295
+ rotation: 0,
296
+ parent: null,
297
+ texture: null,
298
+ textureOptions: {},
299
+ shader: this.defShaderCtr,
300
+ rtt: false,
301
+ src: null,
302
+ scale: 1,
303
+ preventCleanup: false,
304
+ strictBounds: this.strictBounds,
305
+ });
306
+
307
+ this.root = rootNode;
308
+
309
+ // execute platform start loop
310
+ if (autoStart) {
311
+ startLoop(this);
312
+ }
313
+ }
314
+
315
+ setClearColor(color: number) {
316
+ this.renderer.updateClearColor(color);
317
+ this.renderRequested = true;
318
+ }
319
+
320
+ /**
321
+ * Update the target frame time based on the current targetFPS setting
322
+ *
323
+ * @remarks
324
+ * This should be called whenever the targetFPS option is changed
325
+ * to ensure targetFrameTime stays in sync.
326
+ * targetFPS of 0 means no throttling (targetFrameTime = 0)
327
+ * targetFPS > 0 means throttle to 1000/targetFPS milliseconds
328
+ */
329
+ updateTargetFrameTime() {
330
+ this.targetFrameTime =
331
+ this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
332
+ }
333
+
334
+ updateFrameTime() {
335
+ const newFrameTime = getTimeStamp();
336
+ this.lastFrameTime = this.currentFrameTime;
337
+ this.currentFrameTime = newFrameTime;
338
+ this.deltaTime = !this.lastFrameTime
339
+ ? 100 / 6
340
+ : newFrameTime - this.lastFrameTime;
341
+ this.txManager.frameTime = newFrameTime;
342
+ this.txMemManager.frameTime = newFrameTime;
343
+
344
+ // This event is emitted at the beginning of the frame (before any updates
345
+ // or rendering), so no need to to use `stage.queueFrameEvent` here.
346
+ this.eventBus.emit('frameTick', {
347
+ time: this.currentFrameTime,
348
+ delta: this.deltaTime,
349
+ });
350
+ }
351
+
352
+ /**
353
+ * Create default PixelTexture
354
+ */
355
+ createDefaultTexture() {
356
+ console.log('Creating default texture');
357
+ (this.defaultTexture as ColorTexture) = this.txManager.createTexture(
358
+ 'ColorTexture',
359
+ {
360
+ color: 0xffffffff,
361
+ },
362
+ );
363
+
364
+ assertTruthy(this.defaultTexture instanceof ColorTexture);
365
+ this.txManager.loadTexture(this.defaultTexture, true);
366
+
367
+ // Mark the default texture as ALWAYS renderable
368
+ // This prevents it from ever being cleaned up.
369
+ // Fixes https://github.com/lightning-js/renderer/issues/262
370
+ this.defaultTexture.setRenderableOwner(this, true);
371
+
372
+ // When the default texture is loaded, request a render in case the
373
+ // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
374
+ this.defaultTexture.once('loaded', () => {
375
+ this.requestRender();
376
+ });
377
+ }
378
+
379
+ /**
380
+ * Update animations
381
+ */
382
+ updateAnimations() {
383
+ const { animationManager } = this;
384
+ if (!this.root) {
385
+ return;
386
+ }
387
+ // step animation
388
+ animationManager.update(this.deltaTime);
389
+ }
390
+
391
+ /**
392
+ * Check if the scene has updates
393
+ */
394
+ hasSceneUpdates() {
395
+ return (
396
+ !!this.root.updateType ||
397
+ this.renderRequested ||
398
+ this.txManager.hasUpdates()
399
+ );
400
+ }
401
+
402
+ /**
403
+ * Start a new frame draw
404
+ */
405
+ drawFrame() {
406
+ const { renderer, renderRequested } = this;
407
+ assertTruthy(renderer);
408
+
409
+ // Update tree if needed
410
+ if (this.root.updateType !== 0) {
411
+ this.root.update(this.deltaTime, this.root.clippingRect);
412
+ }
413
+
414
+ // Process some textures asynchronously but don't block the frame
415
+ // Use a background task to prevent frame drops
416
+ this.txManager
417
+ .processSome(this.options.textureProcessingTimeLimit)
418
+ .catch((err) => {
419
+ console.error('Error processing textures:', err);
420
+ });
421
+
422
+ // Reset render operations and clear the canvas
423
+ renderer.reset();
424
+
425
+ // Check if we need to cleanup textures
426
+ if (this.txMemManager.criticalCleanupRequested === true) {
427
+ this.txMemManager.cleanup(false);
428
+
429
+ if (this.txMemManager.criticalCleanupRequested === true) {
430
+ // If we still need to cleanup, request another but aggressive cleanup
431
+ this.txMemManager.cleanup(true);
432
+ }
433
+ }
434
+
435
+ // If we have RTT nodes draw them first
436
+ // So we can use them as textures in the main scene
437
+ if (renderer.rttNodes.length > 0) {
438
+ renderer.renderRTTNodes();
439
+ }
440
+
441
+ // Fill quads buffer
442
+ this.addQuads(this.root);
443
+
444
+ // Perform render pass
445
+ renderer?.render();
446
+
447
+ this.calculateFps();
448
+ this.calculateQuads();
449
+
450
+ // Reset renderRequested flag if it was set
451
+ if (renderRequested) {
452
+ this.renderRequested = false;
453
+ }
454
+ }
455
+
456
+ /**
457
+ * Queue an event to be emitted after the current/next frame is rendered
458
+ *
459
+ * @remarks
460
+ * When we are operating in the context of the render loop, we may want to
461
+ * emit events that are related to the current frame. However, we generally do
462
+ * NOT want to emit events directly in the middle of the render loop, since
463
+ * this could enable event handlers to modify the scene graph and cause
464
+ * unexpected behavior. Instead, we queue up events to be emitted and then
465
+ * flush the queue after the frame has been rendered.
466
+ *
467
+ * @param name
468
+ * @param data
469
+ */
470
+ queueFrameEvent(name: string, data: unknown) {
471
+ this.frameEventQueue.push([name, data]);
472
+ }
473
+
474
+ /**
475
+ * Emit all queued frame events
476
+ *
477
+ * @remarks
478
+ * This method should be called after the frame has been rendered to emit
479
+ * all events that were queued during the frame.
480
+ *
481
+ * See {@link queueFrameEvent} for more information.
482
+ */
483
+ flushFrameEvents() {
484
+ for (const [name, data] of this.frameEventQueue) {
485
+ this.eventBus.emit(name, data);
486
+ }
487
+ this.frameEventQueue = [];
488
+ }
489
+
490
+ calculateFps() {
491
+ // If there's an FPS update interval, emit the FPS update event
492
+ // when the specified interval has elapsed.
493
+ const { fpsUpdateInterval } = this.options;
494
+ if (fpsUpdateInterval) {
495
+ this.fpsNumFrames++;
496
+ this.fpsElapsedTime += this.deltaTime;
497
+ if (this.fpsElapsedTime >= fpsUpdateInterval) {
498
+ const fps = Math.round(
499
+ (this.fpsNumFrames * 1000) / this.fpsElapsedTime,
500
+ );
501
+ this.fpsNumFrames = 0;
502
+ this.fpsElapsedTime = 0;
503
+ this.queueFrameEvent('fpsUpdate', {
504
+ fps,
505
+ contextSpyData: this.contextSpy?.getData() ?? null,
506
+ } satisfies FpsUpdatePayload);
507
+ this.contextSpy?.reset();
508
+ }
509
+ }
510
+ }
511
+
512
+ calculateQuads() {
513
+ const quads = this.renderer.getQuadCount();
514
+ if (quads && quads !== this.numQuadsRendered) {
515
+ this.numQuadsRendered = quads;
516
+ this.queueFrameEvent('quadsUpdate', {
517
+ quads,
518
+ } satisfies QuadsUpdatePayload);
519
+ }
520
+ }
521
+
522
+ addQuads(node: CoreNode) {
523
+ assertTruthy(this.renderer);
524
+
525
+ // If the node is renderable and has a loaded texture, render it
526
+ if (node.isRenderable === true) {
527
+ node.renderQuads(this.renderer);
528
+ }
529
+
530
+ for (let i = 0; i < node.children.length; i++) {
531
+ const child = node.children[i];
532
+
533
+ if (child === undefined) {
534
+ continue;
535
+ }
536
+
537
+ if (
538
+ child.worldAlpha === 0 ||
539
+ (child.strictBounds === true &&
540
+ child.renderState === CoreNodeRenderState.OutOfBounds)
541
+ ) {
542
+ continue;
543
+ }
544
+
545
+ this.addQuads(child);
546
+ }
547
+ }
548
+
549
+ /**
550
+ * Request a render pass without forcing an update
551
+ */
552
+ requestRender() {
553
+ this.renderRequested = true;
554
+ }
555
+
556
+ /**
557
+ * Find all nodes at a given point
558
+ * @param data
559
+ */
560
+ findNodesAtPoint(data: Point): CoreNode[] {
561
+ const x = data.x / this.options.deviceLogicalPixelRatio;
562
+ const y = data.y / this.options.deviceLogicalPixelRatio;
563
+ const nodes: CoreNode[] = [];
564
+ for (const node of this.interactiveNodes) {
565
+ if (node.isRenderable === false) {
566
+ continue;
567
+ }
568
+ if (pointInBound(x, y, node.renderBound!) === true) {
569
+ nodes.push(node);
570
+ }
571
+ }
572
+ return nodes;
573
+ }
574
+
575
+ /**
576
+ * Find the top node at a given point
577
+ * @param data
578
+ * @returns
579
+ */
580
+ getNodeFromPosition(data: Point): CoreNode | null {
581
+ const nodes: CoreNode[] = this.findNodesAtPoint(data);
582
+ if (nodes.length === 0) {
583
+ return null;
584
+ }
585
+ let topNode = nodes[0] as CoreNode;
586
+ for (let i = 0; i < nodes.length; i++) {
587
+ if (nodes[i]!.zIndex > topNode.zIndex) {
588
+ topNode = nodes[i]!;
589
+ }
590
+ }
591
+ return topNode || null;
592
+ }
593
+
594
+ /**
595
+ * Given a font name, and possible renderer override, return the best compatible text renderer.
596
+ *
597
+ * @remarks
598
+ * Will try to return a canvas renderer if no other suitable renderer can be resolved.
599
+ *
600
+ * @param fontFamily
601
+ * @param textRendererOverride
602
+ * @returns
603
+ */
604
+ resolveTextRenderer(
605
+ trProps: TrProps,
606
+ textRendererOverride: keyof TextRendererMap | null = null,
607
+ ): TextRenderer | null {
608
+ const fontCacheString = `${trProps.fontFamily}${trProps.fontStyle}${
609
+ trProps.fontWeight
610
+ }${trProps.fontStretch}${textRendererOverride ? textRendererOverride : ''}`;
611
+
612
+ // check our resolve cache first
613
+ if (this.fontResolveMap[fontCacheString] !== undefined) {
614
+ return this.fontResolveMap[fontCacheString] as unknown as TextRenderer;
615
+ }
616
+
617
+ // Resolve the text renderer
618
+ let rendererId = textRendererOverride;
619
+ let overrideFallback = false;
620
+
621
+ // Check if the override is valid (if one is provided)
622
+ if (rendererId) {
623
+ const possibleRenderer = this.textRenderers[rendererId];
624
+ if (!possibleRenderer) {
625
+ console.warn(`Text renderer override '${rendererId}' not found.`);
626
+ rendererId = null;
627
+ overrideFallback = true;
628
+ } else if (!possibleRenderer.canRenderFont(trProps)) {
629
+ console.warn(
630
+ `Cannot use override text renderer '${rendererId}' for font`,
631
+ trProps,
632
+ );
633
+ rendererId = null;
634
+ overrideFallback = true;
635
+ }
636
+ }
637
+
638
+ if (!rendererId) {
639
+ // Iterate through the text renderers and find the first one that can render the font
640
+ for (const [trId, tr] of Object.entries(this.textRenderers)) {
641
+ if (tr.canRenderFont(trProps)) {
642
+ rendererId = trId as keyof TextRendererMap;
643
+ break;
644
+ }
645
+ }
646
+ if (!rendererId && this.textRenderers.canvas !== undefined) {
647
+ // If no renderer can be found, use the canvas renderer
648
+ rendererId = 'canvas';
649
+ }
650
+ }
651
+
652
+ if (overrideFallback) {
653
+ console.warn(`Falling back to text renderer ${String(rendererId)}`);
654
+ }
655
+
656
+ if (!rendererId) {
657
+ // silently fail if no renderer can be found, the error is already created
658
+ // at the constructor level
659
+ return null;
660
+ }
661
+
662
+ // By now we are guaranteed to have a valid rendererId (at least Canvas);
663
+ const resolvedTextRenderer = this.textRenderers[rendererId];
664
+ assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
665
+
666
+ // cache the resolved renderer for future use with these trProps
667
+ this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
668
+
669
+ // Need to explicitly cast to TextRenderer because TS doesn't like
670
+ // the covariant state argument in the setter method map
671
+ return resolvedTextRenderer as unknown as TextRenderer;
672
+ }
673
+
674
+ /**
675
+ * Create a shader controller instance
676
+ *
677
+ * @param type
678
+ * @param props
679
+ * @returns
680
+ */
681
+ createShaderCtr(
682
+ type: keyof ShaderMap,
683
+ props: Record<string, unknown>,
684
+ ): BaseShaderController {
685
+ return this.shManager.loadShader(type, props);
686
+ }
687
+
688
+ createNode(props: Partial<CoreNodeProps>) {
689
+ const resolvedProps = this.resolveNodeDefaults(props);
690
+ return new CoreNode(this, resolvedProps);
691
+ }
692
+
693
+ createTextNode(props: Partial<CoreTextNodeProps>) {
694
+ const fontSize = props.fontSize ?? 16;
695
+ const resolvedProps = {
696
+ ...this.resolveNodeDefaults(props),
697
+ text: props.text ?? '',
698
+ textRendererOverride: props.textRendererOverride ?? null,
699
+ fontSize,
700
+ fontFamily: props.fontFamily ?? 'sans-serif',
701
+ fontStyle: props.fontStyle ?? 'normal',
702
+ fontWeight: props.fontWeight ?? 'normal',
703
+ fontStretch: props.fontStretch ?? 'normal',
704
+ textAlign: props.textAlign ?? 'left',
705
+ contain: props.contain ?? 'none',
706
+ scrollable: props.scrollable ?? false,
707
+ scrollY: props.scrollY ?? 0,
708
+ offsetY: props.offsetY ?? 0,
709
+ letterSpacing: props.letterSpacing ?? 0,
710
+ lineHeight: props.lineHeight, // `undefined` is a valid value
711
+ maxLines: props.maxLines ?? 0,
712
+ textBaseline: props.textBaseline ?? 'alphabetic',
713
+ verticalAlign: props.verticalAlign ?? 'middle',
714
+ overflowSuffix: props.overflowSuffix ?? '...',
715
+ debug: props.debug ?? {},
716
+ shaderProps: null,
717
+ };
718
+
719
+ const resolvedTextRenderer = this.resolveTextRenderer(
720
+ resolvedProps,
721
+ props.textRendererOverride,
722
+ );
723
+
724
+ if (!resolvedTextRenderer) {
725
+ throw new Error(
726
+ `No compatible text renderer found for ${resolvedProps.fontFamily}`,
727
+ );
728
+ }
729
+
730
+ return new CoreTextNode(this, resolvedProps, resolvedTextRenderer);
731
+ }
732
+
733
+ setBoundsMargin(value: number | [number, number, number, number]) {
734
+ this.boundsMargin = Array.isArray(value)
735
+ ? value
736
+ : [value, value, value, value];
737
+
738
+ this.root.setUpdateType(UpdateType.RenderBounds);
739
+ }
740
+
741
+ /**
742
+ * Resolves the default property values for a Node
743
+ *
744
+ * @remarks
745
+ * This method is used internally by the RendererMain to resolve the default
746
+ * property values for a Node. It is exposed publicly so that it can be used
747
+ * by Core Driver implementations.
748
+ *
749
+ * @param props
750
+ * @returns
751
+ */
752
+ protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
753
+ const color = props.color ?? 0xffffffff;
754
+ const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
755
+ const colorTr =
756
+ props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
757
+ const colorBl =
758
+ props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
759
+ const colorBr =
760
+ props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
761
+
762
+ let data = {};
763
+ if (this.options.inspector === true) {
764
+ data = santizeCustomDataMap(props.data ?? {});
765
+ }
766
+
767
+ return {
768
+ x: props.x ?? 0,
769
+ y: props.y ?? 0,
770
+ width: props.width ?? 0,
771
+ height: props.height ?? 0,
772
+ alpha: props.alpha ?? 1,
773
+ autosize: props.autosize ?? false,
774
+ boundsMargin: props.boundsMargin ?? null,
775
+ clipping: props.clipping ?? false,
776
+ color,
777
+ colorTop: props.colorTop ?? color,
778
+ colorBottom: props.colorBottom ?? color,
779
+ colorLeft: props.colorLeft ?? color,
780
+ colorRight: props.colorRight ?? color,
781
+ colorBl,
782
+ colorBr,
783
+ colorTl,
784
+ colorTr,
785
+ zIndex: props.zIndex ?? 0,
786
+ zIndexLocked: props.zIndexLocked ?? 0,
787
+ parent: props.parent ?? null,
788
+ texture: props.texture ?? null,
789
+ textureOptions: props.textureOptions ?? {},
790
+ shader: props.shader ?? this.defShaderCtr,
791
+ // Since setting the `src` will trigger a texture load, we need to set it after
792
+ // we set the texture. Otherwise, problems happen.
793
+ src: props.src ?? null,
794
+ srcHeight: props.srcHeight,
795
+ srcWidth: props.srcWidth,
796
+ srcX: props.srcX,
797
+ srcY: props.srcY,
798
+ scale: props.scale ?? null,
799
+ scaleX: props.scaleX ?? props.scale ?? 1,
800
+ scaleY: props.scaleY ?? props.scale ?? 1,
801
+ mount: props.mount ?? 0,
802
+ mountX: props.mountX ?? props.mount ?? 0,
803
+ mountY: props.mountY ?? props.mount ?? 0,
804
+ pivot: props.pivot ?? 0.5,
805
+ pivotX: props.pivotX ?? props.pivot ?? 0.5,
806
+ pivotY: props.pivotY ?? props.pivot ?? 0.5,
807
+ rotation: props.rotation ?? 0,
808
+ rtt: props.rtt ?? false,
809
+ data: data,
810
+ preventCleanup: props.preventCleanup ?? false,
811
+ imageType: props.imageType,
812
+ interactive: props.interactive ?? false,
813
+ strictBounds: props.strictBounds ?? this.strictBounds,
814
+ };
815
+ }
816
+
817
+ /**
818
+ * Cleanup Orphaned Textures
819
+ *
820
+ * @remarks
821
+ * This method is used to cleanup orphaned textures that are no longer in use.
822
+ */
823
+ cleanup(aggressive: boolean) {
824
+ this.txMemManager.cleanup(aggressive);
825
+ }
826
+ }