@lightningtv/renderer 3.0.0-beta1 → 3.2.4

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 (503) 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 +1 -1
  6. package/dist/exports/canvas.js +1 -19
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +2 -5
  9. package/dist/exports/index.js +1 -23
  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 +2 -1
  19. package/dist/exports/webgl.js +2 -19
  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 +139 -101
  32. package/dist/src/core/CoreNode.js +813 -528
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +3 -3
  35. package/dist/src/core/CoreShaderManager.js +0 -18
  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 +25 -14
  41. package/dist/src/core/CoreTextureManager.js +83 -140
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +102 -36
  44. package/dist/src/core/Stage.js +424 -191
  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 +11 -4
  50. package/dist/src/core/TextureMemoryManager.js +114 -134
  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 -3
  55. package/dist/src/core/animations/CoreAnimation.js +8 -24
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  58. package/dist/src/core/animations/CoreAnimationController.js +11 -22
  59. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  60. package/dist/src/core/lib/ContextSpy.js +0 -18
  61. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  62. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  63. package/dist/src/core/lib/ImageWorker.js +33 -31
  64. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  65. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  66. package/dist/src/core/lib/Matrix3d.js +7 -19
  67. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  68. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  69. package/dist/src/core/lib/RenderCoords.js +27 -55
  70. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  71. package/dist/src/core/lib/WebGlContextWrapper.d.ts +78 -3
  72. package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
  73. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  74. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  75. package/dist/src/core/lib/collectionUtils.js +82 -0
  76. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  77. package/dist/src/core/lib/colorCache.d.ts +1 -0
  78. package/dist/src/core/lib/colorCache.js +19 -0
  79. package/dist/src/core/lib/colorCache.js.map +1 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -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 -85
  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 -1
  88. package/dist/src/core/lib/utils.js +44 -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 +42 -0
  94. package/dist/src/core/platforms/Platform.js +4 -0
  95. package/dist/src/core/platforms/Platform.js.map +1 -0
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  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 +15 -3
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -18
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
  108. package/dist/src/core/renderers/CoreShaderNode.js +25 -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 +4 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
  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 +18 -31
  119. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/BatchRenderOp.d.ts +25 -0
  121. package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
  122. package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  124. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  125. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  126. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  130. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  133. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  136. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  137. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  139. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  140. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  142. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  143. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  145. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  146. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  147. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  148. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
  150. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  152. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  154. package/dist/src/core/shaders/canvas/Border.js +67 -41
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
  166. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  168. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
  169. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  170. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  171. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  172. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  173. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  174. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  175. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  176. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  177. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  178. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  179. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  181. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
  182. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  183. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  184. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  186. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  187. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  188. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
  189. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  191. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  192. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  194. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  195. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  200. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  201. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  203. package/dist/src/core/shaders/utils.js +25 -0
  204. package/dist/src/core/shaders/utils.js.map +1 -0
  205. package/dist/src/core/shaders/webgl/Border.js +118 -51
  206. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  207. package/dist/src/core/shaders/webgl/Default.js +6 -41
  208. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  209. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  210. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  211. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  212. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  213. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  214. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  215. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  216. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  217. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  218. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  219. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  220. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  221. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  222. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  224. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  225. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  227. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  228. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  229. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  230. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  231. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  232. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  233. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  235. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  236. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  237. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  238. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  239. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  241. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  242. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  243. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  244. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  245. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  247. package/dist/src/core/text-rendering/Utils.js +66 -0
  248. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  249. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  250. package/dist/src/core/textures/ColorTexture.js +3 -22
  251. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  252. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  253. package/dist/src/core/textures/ImageTexture.js +57 -66
  254. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  255. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  256. package/dist/src/core/textures/NoiseTexture.js +8 -26
  257. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  258. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  259. package/dist/src/core/textures/RenderTexture.js +12 -30
  260. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  261. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  262. package/dist/src/core/textures/SubTexture.js +19 -55
  263. package/dist/src/core/textures/SubTexture.js.map +1 -1
  264. package/dist/src/core/textures/Texture.d.ts +90 -12
  265. package/dist/src/core/textures/Texture.js +160 -35
  266. package/dist/src/core/textures/Texture.js.map +1 -1
  267. package/dist/src/core/utils.d.ts +2 -1
  268. package/dist/src/core/utils.js +1 -19
  269. package/dist/src/core/utils.js.map +1 -1
  270. package/dist/src/main-api/INode.js.map +1 -1
  271. package/dist/src/main-api/Inspector.d.ts +135 -2
  272. package/dist/src/main-api/Inspector.js +507 -30
  273. package/dist/src/main-api/Inspector.js.map +1 -1
  274. package/dist/src/main-api/Renderer.d.ts +294 -81
  275. package/dist/src/main-api/Renderer.js +225 -96
  276. package/dist/src/main-api/Renderer.js.map +1 -1
  277. package/dist/src/utils.d.ts +19 -6
  278. package/dist/src/utils.js +32 -27
  279. package/dist/src/utils.js.map +1 -1
  280. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  281. package/dist/tsconfig.tsbuildinfo +1 -0
  282. package/exports/canvas-shaders.ts +0 -17
  283. package/exports/canvas.ts +1 -19
  284. package/exports/index.ts +6 -27
  285. package/exports/inspector.ts +0 -19
  286. package/exports/utils.ts +7 -19
  287. package/exports/webgl-shaders.ts +0 -16
  288. package/exports/webgl.ts +3 -20
  289. package/package.json +23 -22
  290. package/src/common/CommonTypes.ts +20 -22
  291. package/src/common/EventEmitter.ts +0 -19
  292. package/src/common/IAnimationController.ts +0 -18
  293. package/src/common/IEventEmitter.ts +0 -17
  294. package/src/core/Autosizer.ts +205 -0
  295. package/src/core/CoreNode.test.ts +376 -45
  296. package/src/core/CoreNode.ts +1017 -656
  297. package/src/core/CoreShaderManager.ts +3 -21
  298. package/src/core/CoreTextNode.ts +457 -314
  299. package/src/core/CoreTextureManager.ts +123 -168
  300. package/src/core/Stage.ts +526 -236
  301. package/src/core/TextureError.ts +46 -0
  302. package/src/core/TextureMemoryManager.ts +150 -167
  303. package/src/core/animations/AnimationManager.ts +0 -19
  304. package/src/core/animations/CoreAnimation.ts +15 -32
  305. package/src/core/animations/CoreAnimationController.ts +13 -23
  306. package/src/core/lib/ContextSpy.ts +0 -19
  307. package/src/core/lib/ImageWorker.ts +45 -32
  308. package/src/core/lib/Matrix3d.ts +7 -20
  309. package/src/core/lib/RenderCoords.ts +36 -67
  310. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  311. package/src/core/lib/collectionUtils.ts +99 -0
  312. package/src/core/lib/colorCache.ts +20 -0
  313. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  314. package/src/core/lib/textureCompression.ts +433 -93
  315. package/src/core/lib/textureSvg.ts +0 -19
  316. package/src/core/lib/utils.ts +58 -19
  317. package/src/core/lib/validateImageBitmap.ts +17 -6
  318. package/src/core/platforms/Platform.ts +64 -0
  319. package/src/core/platforms/web/WebPlatform.ts +132 -0
  320. package/src/core/renderers/CoreContextTexture.ts +2 -20
  321. package/src/core/renderers/CoreRenderOp.ts +0 -19
  322. package/src/core/renderers/CoreRenderer.ts +16 -23
  323. package/src/core/renderers/CoreShaderNode.ts +37 -6
  324. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  325. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  326. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  327. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  328. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  329. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  330. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  331. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  332. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  333. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  334. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  335. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  336. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  337. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  338. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  339. package/src/core/shaders/canvas/Border.ts +91 -50
  340. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  341. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  342. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  343. package/src/core/shaders/canvas/Rounded.ts +2 -19
  344. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  345. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  346. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  347. package/src/core/shaders/canvas/Shadow.ts +0 -17
  348. package/src/core/shaders/canvas/utils/render.ts +45 -53
  349. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  350. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  351. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  352. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  353. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  354. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  355. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  356. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  357. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  358. package/src/core/shaders/utils.ts +30 -0
  359. package/src/core/shaders/webgl/Border.ts +118 -55
  360. package/src/core/shaders/webgl/Default.ts +6 -43
  361. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  362. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  363. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  364. package/src/core/shaders/webgl/Rounded.ts +25 -45
  365. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  366. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  367. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  368. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  369. package/src/core/shaders/webgl/Shadow.ts +39 -35
  370. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  371. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  372. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  373. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  374. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  375. package/src/core/text-rendering/TextRenderer.ts +426 -0
  376. package/src/core/text-rendering/Utils.ts +80 -0
  377. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  378. package/src/core/textures/ColorTexture.ts +7 -24
  379. package/src/core/textures/ImageTexture.ts +110 -92
  380. package/src/core/textures/NoiseTexture.ts +14 -31
  381. package/src/core/textures/RenderTexture.ts +18 -35
  382. package/src/core/textures/SubTexture.ts +25 -65
  383. package/src/core/textures/Texture.ts +214 -46
  384. package/src/core/utils.ts +9 -26
  385. package/src/main-api/INode.ts +0 -18
  386. package/src/main-api/Inspector.ts +794 -38
  387. package/src/main-api/Renderer.ts +519 -159
  388. package/src/utils.ts +64 -29
  389. package/dist/src/core/platform.d.ts +0 -10
  390. package/dist/src/core/platform.js +0 -56
  391. package/dist/src/core/platform.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  393. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  394. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  395. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  396. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  397. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  398. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  399. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  400. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  401. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
  402. package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
  403. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
  404. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  405. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  406. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  407. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  408. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  409. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  410. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  411. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  412. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  417. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  418. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  420. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  421. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  423. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  424. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  425. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  426. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  427. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  428. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  429. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  430. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  432. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  433. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  435. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  436. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  462. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  463. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  464. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  465. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  466. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  467. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  468. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  469. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  470. package/scripts/please-use-pnpm.js +0 -13
  471. package/src/core/platform.ts +0 -64
  472. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  473. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  474. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  475. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  476. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  477. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  478. package/src/core/text-rendering/TrFontManager.ts +0 -183
  479. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  480. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  481. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  482. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  483. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  484. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  485. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  486. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  487. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  496. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  497. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  498. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  499. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  500. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  501. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  502. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  503. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -1,22 +1,3 @@
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
1
  import type { Dimensions } from '../../common/CommonTypes.js';
21
2
  import { assertTruthy } from '../../utils.js';
22
3
  import type { CoreTextureManager } from '../CoreTextureManager.js';
@@ -30,6 +11,8 @@ import {
30
11
  type TextureState,
31
12
  } from './Texture.js';
32
13
 
14
+ let subTextureId = 0;
15
+
33
16
  /**
34
17
  * Properties of the {@link SubTexture}
35
18
  */
@@ -60,12 +43,12 @@ export interface SubTextureProps {
60
43
  *
61
44
  * @default 0
62
45
  */
63
- width?: number;
46
+ w?: number;
64
47
 
65
48
  /**
66
49
  * The height of the sub-texture in pixels
67
50
  **/
68
- height?: number;
51
+ h?: number;
69
52
  }
70
53
 
71
54
  /**
@@ -75,18 +58,19 @@ export interface SubTextureProps {
75
58
  * The parent texture can be a Sprite Sheet/Texture Atlas and set using the
76
59
  * {@link SubTextureProps.texture} prop. The sub-region relative to the parent
77
60
  * texture is defined with the {@link SubTextureProps.x},
78
- * {@link SubTextureProps.y}, {@link SubTextureProps.width}, and
79
- * {@link SubTextureProps.height} pixel values.
61
+ * {@link SubTextureProps.y}, {@link SubTextureProps.w}, and
62
+ * {@link SubTextureProps.h} pixel values.
80
63
  */
81
64
  export class SubTexture extends Texture {
82
65
  props: Required<SubTextureProps>;
83
66
  parentTexture: Texture;
84
67
 
85
68
  public override type: TextureType = TextureType.subTexture;
69
+ public subtextureId = `subtexture-${subTextureId++}`;
86
70
 
87
- constructor(txManager: CoreTextureManager, props: SubTextureProps) {
71
+ constructor(txManager: CoreTextureManager, props: Required<SubTextureProps>) {
88
72
  super(txManager);
89
- this.props = SubTexture.resolveDefaults(props || {});
73
+ this.props = props;
90
74
 
91
75
  assertTruthy(this.props.texture, 'SubTexture requires a parent texture');
92
76
  assertTruthy(
@@ -97,8 +81,8 @@ export class SubTexture extends Texture {
97
81
  // Resolve parent texture from cache or fallback to provided texture
98
82
  this.parentTexture = txManager.resolveParentTexture(this.props.texture);
99
83
 
100
- if (this.renderableOwners.size > 0) {
101
- this.parentTexture.setRenderableOwner(this, true);
84
+ if (this.renderableOwners.length > 0) {
85
+ this.parentTexture.setRenderableOwner(this.subtextureId, true);
102
86
  }
103
87
 
104
88
  // If parent texture is already loaded / failed, trigger loaded event manually
@@ -107,23 +91,17 @@ export class SubTexture extends Texture {
107
91
  // synchronous task after calling loadTexture()
108
92
  queueMicrotask(() => {
109
93
  const parentTx = this.parentTexture;
110
- if (parentTx.state === 'loaded') {
111
- this.onParentTxLoaded(parentTx, parentTx.dimensions!);
112
- } else if (parentTx.state === 'fetching') {
113
- this.onParentTxFetching();
114
- } else if (parentTx.state === 'fetched') {
115
- this.onParentTxFetched();
94
+ if (parentTx.state === 'loaded' && parentTx.dimensions !== null) {
95
+ this.onParentTxLoaded(parentTx, parentTx.dimensions);
116
96
  } else if (parentTx.state === 'loading') {
117
97
  this.onParentTxLoading();
118
- } else if (parentTx.state === 'failed') {
119
- this.onParentTxFailed(parentTx, parentTx.error!);
98
+ } else if (parentTx.state === 'failed' && parentTx.error !== null) {
99
+ this.onParentTxFailed(parentTx, parentTx.error);
120
100
  } else if (parentTx.state === 'freed') {
121
101
  this.onParentTxFreed();
122
102
  }
123
103
 
124
- parentTx.on('fetched', this.onParentTxFetched);
125
104
  parentTx.on('loading', this.onParentTxLoading);
126
- parentTx.on('fetching', this.onParentTxFetching);
127
105
  parentTx.on('loaded', this.onParentTxLoaded);
128
106
  parentTx.on('failed', this.onParentTxFailed);
129
107
  parentTx.on('freed', this.onParentTxFreed);
@@ -133,51 +111,33 @@ export class SubTexture extends Texture {
133
111
  private onParentTxLoaded: TextureLoadedEventHandler = () => {
134
112
  // We ignore the parent's passed dimensions, and simply use the SubTexture's
135
113
  // configured dimensions (because that's all that matters here)
136
- this.forwardParentTxState('loaded', {
137
- width: this.props.width,
138
- height: this.props.height,
114
+ this.setState('loaded', {
115
+ w: this.props.w,
116
+ h: this.props.h,
139
117
  });
140
118
  };
141
119
 
142
120
  private onParentTxFailed: TextureFailedEventHandler = (target, error) => {
143
- this.forwardParentTxState('failed', error);
144
- };
145
-
146
- private onParentTxFetched = () => {
147
- this.forwardParentTxState('fetched', {
148
- width: this.props.width,
149
- height: this.props.height,
150
- });
151
- };
152
-
153
- private onParentTxFetching = () => {
154
- this.forwardParentTxState('fetching');
121
+ this.retryCount = this.parentTexture.retryCount - 1;
122
+ this.setState('failed', error);
155
123
  };
156
124
 
157
125
  private onParentTxLoading = () => {
158
- this.forwardParentTxState('loading');
126
+ this.setState('loading');
159
127
  };
160
128
 
161
129
  private onParentTxFreed = () => {
162
- this.forwardParentTxState('freed');
130
+ this.setState('freed');
163
131
  };
164
132
 
165
- private forwardParentTxState(
166
- state: TextureState,
167
- errorOrDimensions?: Error | Dimensions,
168
- ) {
169
- this.setState(state, errorOrDimensions);
170
- }
171
-
172
133
  override onChangeIsRenderable(isRenderable: boolean): void {
173
134
  // Propagate the renderable owner change to the parent texture
174
- this.parentTexture.setRenderableOwner(this, isRenderable);
135
+ this.parentTexture.setRenderableOwner(this.subtextureId, isRenderable);
175
136
  }
176
137
 
177
138
  override async getTextureSource(): Promise<TextureData> {
178
139
  // Check if parent texture is loaded
179
140
  return new Promise((resolve, reject) => {
180
- this.setState('fetched');
181
141
  resolve({
182
142
  data: this.props,
183
143
  });
@@ -196,8 +156,8 @@ export class SubTexture extends Texture {
196
156
  texture: props.texture,
197
157
  x: props.x || 0,
198
158
  y: props.y || 0,
199
- width: props.width || 0,
200
- height: props.height || 0,
159
+ w: props.w || 0,
160
+ h: props.h || 0,
201
161
  };
202
162
  }
203
163
 
@@ -1,27 +1,10 @@
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
1
  import type { CoreTextureManager } from '../CoreTextureManager.js';
21
2
  import type { SubTextureProps } from './SubTexture.js';
22
3
  import type { Dimensions } from '../../common/CommonTypes.js';
23
4
  import { EventEmitter } from '../../common/EventEmitter.js';
24
5
  import type { CoreContextTexture } from '../renderers/CoreContextTexture.js';
6
+ import type { Bound } from '../lib/utils.js';
7
+ import type { TextureError } from '../TextureError.js';
25
8
 
26
9
  /**
27
10
  * Event handler for when a Texture is freed
@@ -44,7 +27,7 @@ export type TextureLoadedEventHandler = (
44
27
  /**
45
28
  * Represents compressed texture data.
46
29
  */
47
- interface CompressedData {
30
+ export interface CompressedData {
48
31
  /**
49
32
  * GLenum spcifying compression format
50
33
  */
@@ -53,30 +36,42 @@ interface CompressedData {
53
36
  /**
54
37
  * All mipmap levels
55
38
  */
56
- mipmaps?: ArrayBuffer[];
39
+ mipmaps: ArrayBuffer[];
57
40
 
58
41
  /**
59
42
  * Supported container types ('pvr' or 'ktx').
60
43
  */
61
- type: 'pvr' | 'ktx';
44
+ type: 'pvr' | 'ktx' | 'astc';
62
45
 
63
46
  /**
64
47
  * The width of the compressed texture in pixels. Defaults to 0.
65
48
  *
66
49
  * @default 0
67
50
  */
68
- width: number;
51
+ w: number;
69
52
 
70
53
  /**
71
54
  * The height of the compressed texture in pixels.
72
55
  **/
73
- height: number;
56
+ h: number;
57
+
58
+ /**
59
+ * block info compressed texture format
60
+ */
61
+ blockInfo: {
62
+ width: number;
63
+ height: number;
64
+ bytes: number;
65
+ };
74
66
  }
75
67
 
76
68
  /**
77
69
  * Event handler for when a Texture fails to load
78
70
  */
79
- export type TextureFailedEventHandler = (target: any, error: Error) => void;
71
+ export type TextureFailedEventHandler = (
72
+ target: any,
73
+ error: TextureError,
74
+ ) => void;
80
75
 
81
76
  /**
82
77
  * TextureData that is used to populate a CoreContextTexture
@@ -100,6 +95,10 @@ export interface TextureData {
100
95
  */
101
96
  premultiplyAlpha?: boolean | null;
102
97
  }
98
+ /**
99
+ * TextureCoords generally numbers between 0 - 1
100
+ */
101
+ export type TextureCoords = Bound;
103
102
 
104
103
  export type TextureState =
105
104
  | 'initial' // Before anything is loaded
@@ -136,14 +135,13 @@ export abstract class Texture extends EventEmitter {
136
135
  * Until the texture data is loaded for the first time the value will be
137
136
  * `null`.
138
137
  */
139
- readonly dimensions: Readonly<Dimensions> | null = null;
140
-
141
- readonly error: Error | null = null;
138
+ private _dimensions: Dimensions | null = null;
139
+ private _error: TextureError | null = null;
142
140
 
143
141
  // aggregate state
144
142
  public state: TextureState = 'initial';
145
143
 
146
- readonly renderableOwners = new Set<unknown>();
144
+ readonly renderableOwners: any[] = [];
147
145
 
148
146
  readonly renderable: boolean = false;
149
147
 
@@ -155,8 +153,98 @@ export abstract class Texture extends EventEmitter {
155
153
 
156
154
  public textureData: TextureData | null = null;
157
155
 
156
+ public memUsed = 0;
157
+
158
+ /**
159
+ * Memory used by this texture in bytes
160
+ *
161
+ * @remarks
162
+ * This is tracked by the TextureMemoryManager and updated when the texture
163
+ * is loaded/freed. Set to 0 when texture is not loaded.
164
+ */
165
+ public retryCount = 0;
166
+ public maxRetryCount: number;
167
+
168
+ /**
169
+ * Timestamp when texture was created (for startup grace period)
170
+ */
171
+ private createdAt: number = Date.now();
172
+
173
+ /**
174
+ * Flag to track if grace period has expired to avoid repeated Date.now() calls
175
+ */
176
+ private gracePeriodExpired: boolean = false;
177
+
178
+ /**
179
+ * Grace period in milliseconds to prevent premature cleanup during app startup
180
+ * This helps prevent race conditions when bounds calculation is delayed
181
+ */
182
+ private static readonly STARTUP_GRACE_PERIOD = 2000; // 2 seconds
183
+
158
184
  constructor(protected txManager: CoreTextureManager) {
159
185
  super();
186
+ this.maxRetryCount = this.txManager.maxRetryCount;
187
+ }
188
+
189
+ get dimensions(): Dimensions | null {
190
+ return this._dimensions;
191
+ }
192
+
193
+ get error(): TextureError | null {
194
+ return this._error;
195
+ }
196
+
197
+ /**
198
+ * Checks if the texture is within the startup grace period.
199
+ * During this period, textures are protected from cleanup to prevent
200
+ * race conditions during app initialization.
201
+ */
202
+ isWithinStartupGracePeriod(): boolean {
203
+ // If grace period already expired, return false immediately
204
+ if (this.gracePeriodExpired === true) {
205
+ return false;
206
+ }
207
+
208
+ // Check if grace period has expired now
209
+ const hasExpired =
210
+ Date.now() - this.createdAt >= Texture.STARTUP_GRACE_PERIOD;
211
+
212
+ if (hasExpired) {
213
+ // Cache the result to avoid future Date.now() calls
214
+ this.gracePeriodExpired = true;
215
+ return false;
216
+ }
217
+
218
+ return true;
219
+ }
220
+
221
+ /**
222
+ * Checks if the texture can be safely cleaned up.
223
+ * Considers the renderable state, startup grace period, and renderable owners.
224
+ */
225
+ canBeCleanedUp(): boolean {
226
+ // Never cleanup if explicitly prevented
227
+ if (this.preventCleanup) {
228
+ return false;
229
+ }
230
+
231
+ // Don't cleanup if still within startup grace period
232
+ if (this.isWithinStartupGracePeriod()) {
233
+ return false;
234
+ }
235
+
236
+ // Don't cleanup if not renderable
237
+ if (this.renderable === true) {
238
+ return false;
239
+ }
240
+
241
+ // Don't cleanup if there are still renderable owners
242
+ if (this.renderableOwners.length > 0) {
243
+ return false;
244
+ }
245
+
246
+ // Safe to cleanup
247
+ return true;
160
248
  }
161
249
 
162
250
  /**
@@ -173,33 +261,43 @@ export abstract class Texture extends EventEmitter {
173
261
  * @param owner
174
262
  * @param renderable
175
263
  */
176
- setRenderableOwner(owner: unknown, renderable: boolean): void {
177
- const oldSize = this.renderableOwners.size;
264
+ setRenderableOwner(owner: string | number, renderable: boolean): void {
265
+ const oldSize = this.renderableOwners.length;
266
+ const hasOwnerIndex = this.renderableOwners.indexOf(owner);
178
267
 
179
268
  if (renderable === true) {
180
- if (this.renderableOwners.has(owner) === false) {
269
+ if (hasOwnerIndex === -1) {
181
270
  // Add the owner to the set
182
- this.renderableOwners.add(owner);
271
+ this.renderableOwners.push(owner);
183
272
  }
184
273
 
185
- const newSize = this.renderableOwners.size;
186
- if (newSize > oldSize && newSize === 1) {
274
+ const newSize = this.renderableOwners.length;
275
+ if (oldSize !== newSize && newSize === 1) {
187
276
  (this.renderable as boolean) = true;
188
277
  this.onChangeIsRenderable?.(true);
189
278
  this.load();
190
279
  }
191
280
  } else {
192
- this.renderableOwners.delete(owner);
193
- const newSize = this.renderableOwners.size;
194
- if (newSize < oldSize && newSize === 0) {
281
+ if (hasOwnerIndex !== -1) {
282
+ this.renderableOwners.splice(hasOwnerIndex, 1);
283
+ }
284
+
285
+ const newSize = this.renderableOwners.length;
286
+ if (oldSize !== newSize && newSize === 0) {
195
287
  (this.renderable as boolean) = false;
196
288
  this.onChangeIsRenderable?.(false);
197
- this.txManager.orphanTexture(this);
289
+
290
+ // note, not doing a cleanup here, cleanup is managed by the Stage/TextureMemoryManager
291
+ // when it deems appropriate based on memory pressure
198
292
  }
199
293
  }
200
294
  }
201
295
 
202
296
  load(): void {
297
+ if (this.retryCount > this.maxRetryCount) {
298
+ // We've exceeded the max retry count, do not attempt to load again
299
+ return;
300
+ }
203
301
  this.txManager.loadTexture(this);
204
302
  }
205
303
 
@@ -238,6 +336,35 @@ export abstract class Texture extends EventEmitter {
238
336
  this.ctxTexture?.free();
239
337
  }
240
338
 
339
+ /**
340
+ * Release the texture data and core context texture for this Texture without changing state.
341
+ *
342
+ * @remarks
343
+ * The ctxTexture is created by the renderer and lives on the GPU.
344
+ */
345
+ release(): void {
346
+ this.ctxTexture?.release();
347
+ this.ctxTexture = undefined;
348
+ this.freeTextureData();
349
+ }
350
+
351
+ /**
352
+ * Destroy the texture.
353
+ *
354
+ * @remarks
355
+ * This method is called when the texture is no longer needed and should be
356
+ * cleaned up.
357
+ */
358
+ destroy(): void {
359
+ // Only free GPU resources if we're in a state where they exist
360
+ if (this.state === 'loaded') {
361
+ this.free();
362
+ }
363
+
364
+ // Always free texture data regardless of state
365
+ this.freeTextureData();
366
+ }
367
+
241
368
  /**
242
369
  * Free the source texture data for this Texture.
243
370
  *
@@ -246,24 +373,45 @@ export abstract class Texture extends EventEmitter {
246
373
  * e.g. ImageData that is downloaded from a URL.
247
374
  */
248
375
  freeTextureData(): void {
249
- this.textureData = null;
376
+ queueMicrotask(this.freeTextureDataTask);
250
377
  }
251
378
 
252
379
  public setState(
253
380
  state: TextureState,
254
- errorOrDimensions?: Error | Dimensions,
381
+ errorOrDimensions?: TextureError | Dimensions,
255
382
  ): void {
256
383
  if (this.state === state) {
257
384
  return;
258
385
  }
259
386
 
260
- let payload: Error | Dimensions | null = null;
387
+ let payload: TextureError | Dimensions | null = null;
261
388
  if (state === 'loaded') {
262
- (this.dimensions as Dimensions) = errorOrDimensions as Dimensions;
263
- payload = this.dimensions;
389
+ if (
390
+ errorOrDimensions !== undefined &&
391
+ 'w' in errorOrDimensions === true &&
392
+ 'h' in errorOrDimensions === true &&
393
+ errorOrDimensions.w !== undefined &&
394
+ errorOrDimensions.h !== undefined
395
+ ) {
396
+ this._dimensions = errorOrDimensions;
397
+ }
398
+
399
+ payload = this._dimensions;
264
400
  } else if (state === 'failed') {
265
- (this.error as Error) = errorOrDimensions as Error;
266
- payload = this.error;
401
+ this._error = errorOrDimensions as TextureError;
402
+ payload = this._error;
403
+
404
+ // increment the retry count for the texture
405
+ // this is used to compare against maxRetryCount, if set
406
+ // to determine if we should try loading again
407
+ this.retryCount += 1;
408
+
409
+ queueMicrotask(this.releaseTask);
410
+ } else if (state === 'loading') {
411
+ this._error = null;
412
+ this._dimensions = null;
413
+ } else {
414
+ this._error = null;
267
415
  }
268
416
 
269
417
  // emit the new state
@@ -289,6 +437,26 @@ export abstract class Texture extends EventEmitter {
289
437
  return this.textureData;
290
438
  }
291
439
 
440
+ /**
441
+ * Task for queueMicrotask to free texture data.
442
+ *
443
+ * @remarks
444
+ * This method is called in a microtask to free the texture data.
445
+ */
446
+ private freeTextureDataTask = (): void => {
447
+ this.textureData = null;
448
+ };
449
+
450
+ /**
451
+ * Task for queueMicrotask to release the texture.
452
+ *
453
+ * @remarks
454
+ * This method is called in a microtask to release the texture.
455
+ */
456
+ private releaseTask = (): void => {
457
+ this.release();
458
+ };
459
+
292
460
  /**
293
461
  * Get the texture source for this texture.
294
462
  *
package/src/core/utils.ts CHANGED
@@ -1,22 +1,3 @@
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
1
  /**
21
2
  * Core Utility Functions
22
3
  *
@@ -30,6 +11,8 @@ export const RANDOM = Math.random;
30
11
  export const ANGLE_ORDER = 'zyx';
31
12
  const degree = Math.PI / 180;
32
13
 
14
+ export type TimingFunction = (t: number) => number;
15
+
33
16
  export const setMatrixArrayType = (
34
17
  type: Float32ArrayConstructor | ArrayConstructor,
35
18
  ) => {
@@ -57,7 +40,7 @@ const getTimingBezier = (
57
40
  b: number,
58
41
  c: number,
59
42
  d: number,
60
- ): ((time: number) => number | undefined) => {
43
+ ): TimingFunction => {
61
44
  const xc = 3.0 * a;
62
45
  const xb = 3.0 * (c - a) - xc;
63
46
  const xa = 1.0 - xc - xb;
@@ -65,7 +48,7 @@ const getTimingBezier = (
65
48
  const yb = 3.0 * (d - b) - yc;
66
49
  const ya = 1.0 - yc - yb;
67
50
 
68
- return function (time: number): number | undefined {
51
+ return function (time) {
69
52
  if (time >= 1.0) {
70
53
  return 1;
71
54
  }
@@ -116,11 +99,13 @@ const getTimingBezier = (
116
99
  minT = t;
117
100
  }
118
101
  }
102
+
103
+ return time;
119
104
  };
120
105
  };
121
106
 
122
107
  interface TimingFunctionMap {
123
- [key: string]: (time: number) => number | undefined;
108
+ [key: string]: TimingFunction;
124
109
  }
125
110
 
126
111
  type TimingLookupArray = number[];
@@ -174,9 +159,7 @@ const parseCubicBezier = (str: string) => {
174
159
  return defaultTiming;
175
160
  };
176
161
 
177
- export const getTimingFunction = (
178
- str: string,
179
- ): ((time: number) => number | undefined) => {
162
+ export const getTimingFunction = (str: string): TimingFunction => {
180
163
  if (str === 'linear') {
181
164
  return defaultTiming;
182
165
  }
@@ -202,7 +185,7 @@ export const getTimingFunction = (
202
185
  const [a, b, c, d] = lookup;
203
186
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
204
187
  // @ts-ignore - TS doesn't understand that we've checked for undefined
205
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
188
+
206
189
  const timing = getTimingBezier(a, b, c, d);
207
190
  timingMapping[str] = timing;
208
191
  return timing;
@@ -1,21 +1,3 @@
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 2024 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
1
  import type { IAnimationController } from '../common/IAnimationController.js';
20
2
  import {
21
3
  CoreNode,