@solidtv/renderer 1.0.0

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 (424) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +137 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +11 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +26 -0
  8. package/dist/exports/canvas.js +27 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +50 -0
  11. package/dist/exports/index.js +40 -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 +5 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +27 -0
  17. package/dist/exports/utils.js +28 -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 +12 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +28 -0
  23. package/dist/exports/webgl.js +29 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +110 -0
  26. package/dist/src/common/CommonTypes.js +2 -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 +48 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +58 -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 +2 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/Autosizer.d.ts +35 -0
  38. package/dist/src/core/Autosizer.js +178 -0
  39. package/dist/src/core/Autosizer.js.map +1 -0
  40. package/dist/src/core/CoreNode.d.ts +908 -0
  41. package/dist/src/core/CoreNode.js +1837 -0
  42. package/dist/src/core/CoreNode.js.map +1 -0
  43. package/dist/src/core/CoreShaderManager.d.ts +38 -0
  44. package/dist/src/core/CoreShaderManager.js +123 -0
  45. package/dist/src/core/CoreShaderManager.js.map +1 -0
  46. package/dist/src/core/CoreTextNode.d.ts +91 -0
  47. package/dist/src/core/CoreTextNode.js +440 -0
  48. package/dist/src/core/CoreTextNode.js.map +1 -0
  49. package/dist/src/core/CoreTextureManager.d.ts +264 -0
  50. package/dist/src/core/CoreTextureManager.js +318 -0
  51. package/dist/src/core/CoreTextureManager.js.map +1 -0
  52. package/dist/src/core/Stage.d.ts +238 -0
  53. package/dist/src/core/Stage.js +804 -0
  54. package/dist/src/core/Stage.js.map +1 -0
  55. package/dist/src/core/TextureError.d.ts +11 -0
  56. package/dist/src/core/TextureError.js +37 -0
  57. package/dist/src/core/TextureError.js.map +1 -0
  58. package/dist/src/core/TextureMemoryManager.d.ts +150 -0
  59. package/dist/src/core/TextureMemoryManager.js +239 -0
  60. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  61. package/dist/src/core/animations/AnimationManager.d.ts +33 -0
  62. package/dist/src/core/animations/AnimationManager.js +137 -0
  63. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  64. package/dist/src/core/animations/CoreAnimation.d.ts +12 -0
  65. package/dist/src/core/animations/CoreAnimation.js +107 -0
  66. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  67. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  68. package/dist/src/core/lib/ContextSpy.js +20 -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 +202 -0
  72. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  73. package/dist/src/core/lib/Matrix3d.d.ts +74 -0
  74. package/dist/src/core/lib/Matrix3d.js +218 -0
  75. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  76. package/dist/src/core/lib/RenderCoords.d.ts +12 -0
  77. package/dist/src/core/lib/RenderCoords.js +35 -0
  78. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  79. package/dist/src/core/lib/WebGlContextWrapper.d.ts +782 -0
  80. package/dist/src/core/lib/WebGlContextWrapper.js +1143 -0
  81. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  82. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  83. package/dist/src/core/lib/collectionUtils.js +82 -0
  84. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  85. package/dist/src/core/lib/colorCache.d.ts +1 -0
  86. package/dist/src/core/lib/colorCache.js +19 -0
  87. package/dist/src/core/lib/colorCache.js.map +1 -0
  88. package/dist/src/core/lib/colorParser.d.ts +21 -0
  89. package/dist/src/core/lib/colorParser.js +54 -0
  90. package/dist/src/core/lib/colorParser.js.map +1 -0
  91. package/dist/src/core/lib/textureCompression.d.ts +28 -0
  92. package/dist/src/core/lib/textureCompression.js +363 -0
  93. package/dist/src/core/lib/textureCompression.js.map +1 -0
  94. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  95. package/dist/src/core/lib/textureSvg.js +45 -0
  96. package/dist/src/core/lib/textureSvg.js.map +1 -0
  97. package/dist/src/core/lib/utils.d.ts +66 -0
  98. package/dist/src/core/lib/utils.js +268 -0
  99. package/dist/src/core/lib/utils.js.map +1 -0
  100. package/dist/src/core/lib/validateImageBitmap.d.ts +7 -0
  101. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  102. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  103. package/dist/src/core/platforms/Platform.d.ts +42 -0
  104. package/dist/src/core/platforms/Platform.js +4 -0
  105. package/dist/src/core/platforms/Platform.js.map +1 -0
  106. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  107. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  108. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  109. package/dist/src/core/renderers/CoreContextTexture.d.ts +13 -0
  110. package/dist/src/core/renderers/CoreContextTexture.js +16 -0
  111. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  112. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  113. package/dist/src/core/renderers/CoreRenderOp.js +3 -0
  114. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  115. package/dist/src/core/renderers/CoreRenderer.d.ts +81 -0
  116. package/dist/src/core/renderers/CoreRenderer.js +14 -0
  117. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  118. package/dist/src/core/renderers/CoreShaderNode.d.ts +69 -0
  119. package/dist/src/core/renderers/CoreShaderNode.js +130 -0
  120. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  121. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  122. package/dist/src/core/renderers/CoreShaderProgram.js +2 -0
  123. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  124. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  125. package/dist/src/core/renderers/canvas/CanvasRenderer.js +221 -0
  126. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  127. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  128. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +42 -0
  129. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  130. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +17 -0
  131. package/dist/src/core/renderers/canvas/CanvasTexture.js +110 -0
  132. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  133. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +41 -0
  134. package/dist/src/core/renderers/webgl/SdfRenderOp.js +88 -0
  135. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  136. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +14 -0
  137. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +45 -0
  138. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  139. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  140. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +49 -0
  141. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  142. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +67 -0
  143. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +259 -0
  144. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +221 -0
  146. package/dist/src/core/renderers/webgl/WebGlRenderer.js +1015 -0
  147. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +213 -0
  149. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  150. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  152. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +240 -0
  153. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +28 -0
  155. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +39 -0
  156. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  157. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  158. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +88 -0
  159. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  160. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
  161. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +83 -0
  162. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  164. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +13 -0
  165. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  166. package/dist/src/core/shaders/canvas/Border.d.ts +15 -0
  167. package/dist/src/core/shaders/canvas/Border.js +83 -0
  168. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  169. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  170. package/dist/src/core/shaders/canvas/HolePunch.js +22 -0
  171. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  172. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  173. package/dist/src/core/shaders/canvas/LinearGradient.js +32 -0
  174. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  175. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  176. package/dist/src/core/shaders/canvas/RadialGradient.js +54 -0
  177. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  178. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  179. package/dist/src/core/shaders/canvas/Rounded.js +17 -0
  180. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  181. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +10 -0
  182. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +57 -0
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  184. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +7 -0
  185. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +61 -0
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  187. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  188. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +26 -0
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  190. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  191. package/dist/src/core/shaders/canvas/Shadow.js +15 -0
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  194. package/dist/src/core/shaders/canvas/utils/render.js +81 -0
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +47 -0
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +77 -0
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +19 -0
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  202. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  203. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +31 -0
  204. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  205. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +33 -0
  206. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +33 -0
  207. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  208. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  209. package/dist/src/core/shaders/templates/RoundedTemplate.js +51 -0
  210. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  211. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  212. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +8 -0
  213. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  214. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +8 -0
  215. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +9 -0
  216. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  217. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  218. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +7 -0
  219. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  220. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  221. package/dist/src/core/shaders/templates/ShadowTemplate.js +50 -0
  222. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  223. package/dist/src/core/shaders/utils.d.ts +5 -0
  224. package/dist/src/core/shaders/utils.js +25 -0
  225. package/dist/src/core/shaders/utils.js.map +1 -0
  226. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  227. package/dist/src/core/shaders/webgl/Border.js +153 -0
  228. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  229. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  230. package/dist/src/core/shaders/webgl/Default.js +51 -0
  231. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  232. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  233. package/dist/src/core/shaders/webgl/HolePunch.js +49 -0
  234. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  235. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  236. package/dist/src/core/shaders/webgl/LinearGradient.js +114 -0
  237. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  239. package/dist/src/core/shaders/webgl/RadialGradient.js +81 -0
  240. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  241. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  242. package/dist/src/core/shaders/webgl/Rounded.js +88 -0
  243. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  244. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  245. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +202 -0
  246. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  247. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  248. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +223 -0
  249. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  250. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  251. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +123 -0
  252. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  253. package/dist/src/core/shaders/webgl/SdfShader.d.ts +13 -0
  254. package/dist/src/core/shaders/webgl/SdfShader.js +72 -0
  255. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  256. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  257. package/dist/src/core/shaders/webgl/Shadow.js +115 -0
  258. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  259. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  260. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  261. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  262. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  263. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  264. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  265. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  266. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  267. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  268. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  269. package/dist/src/core/text-rendering/SdfTextRenderer.js +249 -0
  270. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  271. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  272. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  273. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  274. package/dist/src/core/text-rendering/TextRenderer.d.ts +406 -0
  275. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  276. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  277. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  278. package/dist/src/core/text-rendering/Utils.js +66 -0
  279. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  280. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  281. package/dist/src/core/textures/ColorTexture.js +57 -0
  282. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  283. package/dist/src/core/textures/ImageTexture.d.ts +131 -0
  284. package/dist/src/core/textures/ImageTexture.js +211 -0
  285. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  286. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  287. package/dist/src/core/textures/NoiseTexture.js +50 -0
  288. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  289. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  290. package/dist/src/core/textures/RenderTexture.js +36 -0
  291. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  292. package/dist/src/core/textures/SubTexture.d.ts +61 -0
  293. package/dist/src/core/textures/SubTexture.js +99 -0
  294. package/dist/src/core/textures/SubTexture.js.map +1 -0
  295. package/dist/src/core/textures/Texture.d.ts +275 -0
  296. package/dist/src/core/textures/Texture.js +326 -0
  297. package/dist/src/core/textures/Texture.js.map +1 -0
  298. package/dist/src/core/utils.d.ts +23 -0
  299. package/dist/src/core/utils.js +155 -0
  300. package/dist/src/core/utils.js.map +1 -0
  301. package/dist/src/main-api/INode.d.ts +65 -0
  302. package/dist/src/main-api/INode.js +2 -0
  303. package/dist/src/main-api/INode.js.map +1 -0
  304. package/dist/src/main-api/Inspector.d.ts +154 -0
  305. package/dist/src/main-api/Inspector.js +844 -0
  306. package/dist/src/main-api/Inspector.js.map +1 -0
  307. package/dist/src/main-api/Renderer.d.ts +629 -0
  308. package/dist/src/main-api/Renderer.js +471 -0
  309. package/dist/src/main-api/Renderer.js.map +1 -0
  310. package/dist/src/main-api/utils.d.ts +2 -0
  311. package/dist/src/main-api/utils.js +34 -0
  312. package/dist/src/main-api/utils.js.map +1 -0
  313. package/dist/src/utils.d.ts +123 -0
  314. package/dist/src/utils.js +234 -0
  315. package/dist/src/utils.js.map +1 -0
  316. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  317. package/exports/canvas-shaders.ts +11 -0
  318. package/exports/canvas.ts +27 -0
  319. package/exports/index.ts +69 -0
  320. package/exports/inspector.ts +5 -0
  321. package/exports/utils.ts +32 -0
  322. package/exports/webgl-shaders.ts +12 -0
  323. package/exports/webgl.ts +33 -0
  324. package/package.json +99 -0
  325. package/src/common/CommonTypes.ts +145 -0
  326. package/src/common/EventEmitter.ts +58 -0
  327. package/src/common/IAnimationController.ts +65 -0
  328. package/src/common/IEventEmitter.ts +11 -0
  329. package/src/core/Autosizer.ts +205 -0
  330. package/src/core/CoreNode.test.ts +535 -0
  331. package/src/core/CoreNode.ts +2883 -0
  332. package/src/core/CoreShaderManager.ts +170 -0
  333. package/src/core/CoreTextNode.ts +573 -0
  334. package/src/core/CoreTextureManager.ts +552 -0
  335. package/src/core/Stage.ts +1037 -0
  336. package/src/core/TextureError.ts +46 -0
  337. package/src/core/TextureMemoryManager.ts +378 -0
  338. package/src/core/animations/AnimationManager.ts +178 -0
  339. package/src/core/animations/CoreAnimation.ts +138 -0
  340. package/src/core/lib/ContextSpy.ts +22 -0
  341. package/src/core/lib/ImageWorker.ts +292 -0
  342. package/src/core/lib/Matrix3d.ts +231 -0
  343. package/src/core/lib/RenderCoords.ts +55 -0
  344. package/src/core/lib/WebGlContextWrapper.ts +1448 -0
  345. package/src/core/lib/collectionUtils.ts +99 -0
  346. package/src/core/lib/colorCache.ts +20 -0
  347. package/src/core/lib/colorParser.ts +66 -0
  348. package/src/core/lib/textureCompression.ts +492 -0
  349. package/src/core/lib/textureSvg.ts +59 -0
  350. package/src/core/lib/utils.ts +400 -0
  351. package/src/core/lib/validateImageBitmap.ts +87 -0
  352. package/src/core/platforms/Platform.ts +64 -0
  353. package/src/core/platforms/web/WebPlatform.ts +132 -0
  354. package/src/core/renderers/CoreContextTexture.ts +25 -0
  355. package/src/core/renderers/CoreRenderOp.ts +3 -0
  356. package/src/core/renderers/CoreRenderer.ts +101 -0
  357. package/src/core/renderers/CoreShaderNode.ts +202 -0
  358. package/src/core/renderers/CoreShaderProgram.ts +4 -0
  359. package/src/core/renderers/canvas/CanvasRenderer.ts +274 -0
  360. package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
  361. package/src/core/renderers/canvas/CanvasTexture.ts +141 -0
  362. package/src/core/renderers/webgl/SdfRenderOp.ts +103 -0
  363. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +70 -0
  364. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
  365. package/src/core/renderers/webgl/WebGlCtxTexture.ts +332 -0
  366. package/src/core/renderers/webgl/WebGlRenderer.ts +1323 -0
  367. package/src/core/renderers/webgl/WebGlShaderNode.ts +423 -0
  368. package/src/core/renderers/webgl/WebGlShaderProgram.ts +346 -0
  369. package/src/core/renderers/webgl/internal/BufferCollection.ts +46 -0
  370. package/src/core/renderers/webgl/internal/RendererUtils.ts +136 -0
  371. package/src/core/renderers/webgl/internal/ShaderUtils.ts +262 -0
  372. package/src/core/renderers/webgl/internal/WebGlUtils.ts +16 -0
  373. package/src/core/shaders/canvas/Border.ts +119 -0
  374. package/src/core/shaders/canvas/HolePunch.ts +38 -0
  375. package/src/core/shaders/canvas/LinearGradient.ts +54 -0
  376. package/src/core/shaders/canvas/RadialGradient.ts +82 -0
  377. package/src/core/shaders/canvas/Rounded.ts +38 -0
  378. package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
  379. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
  380. package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
  381. package/src/core/shaders/canvas/Shadow.ts +35 -0
  382. package/src/core/shaders/canvas/utils/render.ts +143 -0
  383. package/src/core/shaders/templates/BorderTemplate.ts +128 -0
  384. package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
  385. package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
  386. package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
  387. package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
  388. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
  389. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
  390. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
  391. package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
  392. package/src/core/shaders/utils.ts +30 -0
  393. package/src/core/shaders/webgl/Border.ts +158 -0
  394. package/src/core/shaders/webgl/Default.ts +52 -0
  395. package/src/core/shaders/webgl/HolePunch.ts +58 -0
  396. package/src/core/shaders/webgl/LinearGradient.ts +119 -0
  397. package/src/core/shaders/webgl/RadialGradient.ts +91 -0
  398. package/src/core/shaders/webgl/Rounded.ts +97 -0
  399. package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
  400. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +235 -0
  401. package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
  402. package/src/core/shaders/webgl/SdfShader.ts +73 -0
  403. package/src/core/shaders/webgl/Shadow.ts +119 -0
  404. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  405. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  406. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  407. package/src/core/text-rendering/SdfTextRenderer.ts +352 -0
  408. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  409. package/src/core/text-rendering/TextRenderer.ts +449 -0
  410. package/src/core/text-rendering/Utils.ts +80 -0
  411. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  412. package/src/core/textures/ColorTexture.ts +85 -0
  413. package/src/core/textures/ImageTexture.ts +394 -0
  414. package/src/core/textures/NoiseTexture.ts +87 -0
  415. package/src/core/textures/RenderTexture.ts +68 -0
  416. package/src/core/textures/SubTexture.ts +165 -0
  417. package/src/core/textures/Texture.ts +505 -0
  418. package/src/core/utils.ts +210 -0
  419. package/src/env.d.ts +7 -0
  420. package/src/main-api/INode.ts +92 -0
  421. package/src/main-api/Inspector.ts +1267 -0
  422. package/src/main-api/Renderer.ts +1011 -0
  423. package/src/main-api/utils.ts +45 -0
  424. package/src/utils.ts +302 -0
@@ -0,0 +1,99 @@
1
+ import { assertTruthy } from '../../utils.js';
2
+ import { ImageTexture } from './ImageTexture.js';
3
+ import { Texture, TextureType, } from './Texture.js';
4
+ let subTextureId = 0;
5
+ /**
6
+ * A Texture that is a sub-region of another Texture.
7
+ *
8
+ * @remarks
9
+ * The parent texture can be a Sprite Sheet/Texture Atlas and set using the
10
+ * {@link SubTextureProps.texture} prop. The sub-region relative to the parent
11
+ * texture is defined with the {@link SubTextureProps.x},
12
+ * {@link SubTextureProps.y}, {@link SubTextureProps.w}, and
13
+ * {@link SubTextureProps.h} pixel values.
14
+ */
15
+ export class SubTexture extends Texture {
16
+ props;
17
+ parentTexture;
18
+ type = TextureType.subTexture;
19
+ subtextureId = `subtexture-${subTextureId++}`;
20
+ constructor(txManager, props) {
21
+ super(txManager);
22
+ this.props = props;
23
+ assertTruthy(this.props.texture, 'SubTexture requires a parent texture');
24
+ assertTruthy(this.props.texture instanceof ImageTexture, 'SubTexture requires an ImageTexture parent');
25
+ // Resolve parent texture from cache or fallback to provided texture
26
+ this.parentTexture = txManager.resolveParentTexture(this.props.texture);
27
+ if (this.renderableOwners.length > 0) {
28
+ this.parentTexture.setRenderableOwner(this.subtextureId, true);
29
+ }
30
+ // If parent texture is already loaded / failed, trigger loaded event manually
31
+ // so that users get a consistent event experience.
32
+ // We do this in a microtask to allow listeners to be attached in the same
33
+ // synchronous task after calling loadTexture()
34
+ queueMicrotask(() => {
35
+ const parentTx = this.parentTexture;
36
+ if (parentTx.state === 'loaded' && parentTx.dimensions !== null) {
37
+ this.onParentTxLoaded(parentTx, parentTx.dimensions);
38
+ }
39
+ else if (parentTx.state === 'loading') {
40
+ this.onParentTxLoading();
41
+ }
42
+ else if (parentTx.state === 'failed' && parentTx.error !== null) {
43
+ this.onParentTxFailed(parentTx, parentTx.error);
44
+ }
45
+ else if (parentTx.state === 'freed') {
46
+ this.onParentTxFreed();
47
+ }
48
+ parentTx.on('loading', this.onParentTxLoading);
49
+ parentTx.on('loaded', this.onParentTxLoaded);
50
+ parentTx.on('failed', this.onParentTxFailed);
51
+ parentTx.on('freed', this.onParentTxFreed);
52
+ });
53
+ }
54
+ onParentTxLoaded = () => {
55
+ // We ignore the parent's passed dimensions, and simply use the SubTexture's
56
+ // configured dimensions (because that's all that matters here)
57
+ this.setState('loaded', {
58
+ w: this.props.w,
59
+ h: this.props.h,
60
+ });
61
+ };
62
+ onParentTxFailed = (target, error) => {
63
+ this.retryCount = this.parentTexture.retryCount - 1;
64
+ this.setState('failed', error);
65
+ };
66
+ onParentTxLoading = () => {
67
+ this.setState('loading');
68
+ };
69
+ onParentTxFreed = () => {
70
+ this.setState('freed');
71
+ };
72
+ onChangeIsRenderable(isRenderable) {
73
+ // Propagate the renderable owner change to the parent texture
74
+ this.parentTexture.setRenderableOwner(this.subtextureId, isRenderable);
75
+ }
76
+ async getTextureSource() {
77
+ // Check if parent texture is loaded
78
+ return new Promise((resolve, reject) => {
79
+ resolve({
80
+ data: this.props,
81
+ });
82
+ });
83
+ }
84
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
85
+ static makeCacheKey(props) {
86
+ return false;
87
+ }
88
+ static resolveDefaults(props) {
89
+ return {
90
+ texture: props.texture,
91
+ x: props.x || 0,
92
+ y: props.y || 0,
93
+ w: props.w || 0,
94
+ h: props.h || 0,
95
+ };
96
+ }
97
+ static z$__type__Props;
98
+ }
99
+ //# sourceMappingURL=SubTexture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubTexture.js","sourceRoot":"","sources":["../../../../src/core/textures/SubTexture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,275 @@
1
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
2
+ import type { SubTextureProps } from './SubTexture.js';
3
+ import type { Dimensions } from '../../common/CommonTypes.js';
4
+ import { EventEmitter } from '../../common/EventEmitter.js';
5
+ import type { CoreContextTexture } from '../renderers/CoreContextTexture.js';
6
+ import type { Bound } from '../lib/utils.js';
7
+ import type { TextureError } from '../TextureError.js';
8
+ /**
9
+ * Event handler for when a Texture is freed
10
+ */
11
+ export type TextureFreedEventHandler = (target: any) => void;
12
+ /**
13
+ * Event handler for when a Texture is loading
14
+ */
15
+ export type TextureLoadingEventHandler = (target: any) => void;
16
+ /**
17
+ * Event handler for when a Texture is loaded
18
+ */
19
+ export type TextureLoadedEventHandler = (target: any, dimensions: Readonly<Dimensions>) => void;
20
+ /**
21
+ * Represents compressed texture data.
22
+ */
23
+ export interface CompressedData {
24
+ /**
25
+ * GLenum spcifying compression format
26
+ */
27
+ glInternalFormat: number;
28
+ /**
29
+ * All mipmap levels
30
+ */
31
+ mipmaps: ArrayBuffer[];
32
+ /**
33
+ * Supported container types ('pvr' or 'ktx').
34
+ */
35
+ type: 'pvr' | 'ktx' | 'astc';
36
+ /**
37
+ * The width of the compressed texture in pixels. Defaults to 0.
38
+ *
39
+ * @default 0
40
+ */
41
+ w: number;
42
+ /**
43
+ * The height of the compressed texture in pixels.
44
+ **/
45
+ h: number;
46
+ /**
47
+ * block info compressed texture format
48
+ */
49
+ blockInfo: {
50
+ width: number;
51
+ height: number;
52
+ bytes: number;
53
+ };
54
+ }
55
+ /**
56
+ * Event handler for when a Texture fails to load
57
+ */
58
+ export type TextureFailedEventHandler = (target: any, error: TextureError) => void;
59
+ /**
60
+ * TextureData that is used to populate a CoreContextTexture
61
+ */
62
+ export interface TextureData {
63
+ /**
64
+ * The texture data
65
+ */
66
+ data: ImageBitmap | ImageData | SubTextureProps | CompressedData | HTMLImageElement | Uint8Array | null;
67
+ /**
68
+ * Premultiply alpha when uploading texture data to the GPU
69
+ *
70
+ * @defaultValue `false`
71
+ */
72
+ premultiplyAlpha?: boolean | null;
73
+ }
74
+ /**
75
+ * TextureCoords generally numbers between 0 - 1
76
+ */
77
+ export type TextureCoords = Bound;
78
+ export type TextureState = 'initial' | 'fetching' | 'fetched' | 'loading' | 'loaded' | 'failed' | 'freed';
79
+ export declare enum TextureType {
80
+ 'generic' = 0,
81
+ 'color' = 1,
82
+ 'image' = 2,
83
+ 'noise' = 3,
84
+ 'renderToTexture' = 4,
85
+ 'subTexture' = 5
86
+ }
87
+ /**
88
+ * Represents a source of texture data for a CoreContextTexture.
89
+ *
90
+ * @remarks
91
+ * Texture sources are used to populate a CoreContextTexture when that texture
92
+ * is loaded. Texture data retrieved by the CoreContextTexture by the
93
+ * `getTextureData` method. It's the responsibility of the concerete `Texture`
94
+ * subclass to implement this method appropriately.
95
+ */
96
+ export declare abstract class Texture extends EventEmitter {
97
+ protected txManager: CoreTextureManager;
98
+ /**
99
+ * The dimensions of the texture
100
+ *
101
+ * @remarks
102
+ * Until the texture data is loaded for the first time the value will be
103
+ * `null`.
104
+ */
105
+ private _dimensions;
106
+ private _error;
107
+ state: TextureState;
108
+ readonly renderableOwners: any[];
109
+ readonly renderable: boolean;
110
+ type: TextureType;
111
+ preventCleanup: boolean;
112
+ ctxTexture: CoreContextTexture | undefined;
113
+ textureData: TextureData | null;
114
+ memUsed: number;
115
+ /**
116
+ * Memory used by this texture in bytes
117
+ *
118
+ * @remarks
119
+ * This is tracked by the TextureMemoryManager and updated when the texture
120
+ * is loaded/freed. Set to 0 when texture is not loaded.
121
+ */
122
+ retryCount: number;
123
+ maxRetryCount: number;
124
+ /**
125
+ * Timestamp when texture was created (for startup grace period)
126
+ */
127
+ private createdAt;
128
+ /**
129
+ * Flag to track if grace period has expired to avoid repeated Date.now() calls
130
+ */
131
+ private gracePeriodExpired;
132
+ /**
133
+ * Grace period in milliseconds to prevent premature cleanup during app startup
134
+ * This helps prevent race conditions when bounds calculation is delayed
135
+ */
136
+ private static readonly STARTUP_GRACE_PERIOD;
137
+ constructor(txManager: CoreTextureManager);
138
+ get dimensions(): Dimensions | null;
139
+ get error(): TextureError | null;
140
+ /**
141
+ * Checks if the texture is within the startup grace period.
142
+ * During this period, textures are protected from cleanup to prevent
143
+ * race conditions during app initialization.
144
+ */
145
+ isWithinStartupGracePeriod(): boolean;
146
+ /**
147
+ * Checks if the texture can be safely cleaned up.
148
+ * Considers the renderable state, startup grace period, and renderable owners.
149
+ */
150
+ canBeCleanedUp(): boolean;
151
+ /**
152
+ * Add/remove an owner to/from the Texture based on its renderability.
153
+ *
154
+ * @remarks
155
+ * Any object can own a texture, be it a CoreNode or even the state object
156
+ * from a Text Renderer.
157
+ *
158
+ * When the reference to the texture that an owner object holds is replaced
159
+ * or cleared it must call this with `renderable=false` to release the owner
160
+ * association.
161
+ *
162
+ * @param owner
163
+ * @param renderable
164
+ */
165
+ setRenderableOwner(owner: string | number, renderable: boolean): void;
166
+ load(): void;
167
+ /**
168
+ * Event called when the Texture becomes renderable or unrenderable.
169
+ *
170
+ * @remarks
171
+ * Used by subclasses like SubTexture propogate then renderability of the
172
+ * Texture to other referenced Textures.
173
+ *
174
+ * @param isRenderable `true` if this Texture has renderable owners.
175
+ */
176
+ onChangeIsRenderable?(isRenderable: boolean): void;
177
+ /**
178
+ * Load the core context texture for this Texture.
179
+ * The ctxTexture is created by the renderer and lives on the GPU.
180
+ *
181
+ * @returns
182
+ */
183
+ loadCtxTexture(): CoreContextTexture;
184
+ /**
185
+ * Free the core context texture for this Texture.
186
+ *
187
+ * @remarks
188
+ * The ctxTexture is created by the renderer and lives on the GPU.
189
+ */
190
+ free(): void;
191
+ /**
192
+ * Release the texture data and core context texture for this Texture without changing state.
193
+ *
194
+ * @remarks
195
+ * The ctxTexture is created by the renderer and lives on the GPU.
196
+ */
197
+ release(): void;
198
+ /**
199
+ * Destroy the texture.
200
+ *
201
+ * @remarks
202
+ * This method is called when the texture is no longer needed and should be
203
+ * cleaned up.
204
+ */
205
+ destroy(): void;
206
+ /**
207
+ * Free the source texture data for this Texture.
208
+ *
209
+ * @remarks
210
+ * The texture data is the source data that is used to populate the CoreContextTexture.
211
+ * e.g. ImageData that is downloaded from a URL.
212
+ */
213
+ freeTextureData(): void;
214
+ setState(state: TextureState, errorOrDimensions?: TextureError | Dimensions): void;
215
+ /**
216
+ * Get the texture data for this texture.
217
+ *
218
+ * @remarks
219
+ * This method is called by the CoreContextTexture when the texture is loaded.
220
+ * The texture data is then used to populate the CoreContextTexture.
221
+ *
222
+ * @returns
223
+ * The texture data for this texture.
224
+ */
225
+ getTextureData(): Promise<TextureData>;
226
+ /**
227
+ * Task for queueMicrotask to free texture data.
228
+ *
229
+ * @remarks
230
+ * This method is called in a microtask to free the texture data.
231
+ */
232
+ private freeTextureDataTask;
233
+ /**
234
+ * Task for queueMicrotask to release the texture.
235
+ *
236
+ * @remarks
237
+ * This method is called in a microtask to release the texture.
238
+ */
239
+ private releaseTask;
240
+ /**
241
+ * Get the texture source for this texture.
242
+ *
243
+ * @remarks
244
+ * This method is called by the CoreContextTexture when the texture is loaded.
245
+ * The texture source is then used to populate the CoreContextTexture.
246
+ */
247
+ abstract getTextureSource(): Promise<TextureData>;
248
+ /**
249
+ * Make a cache key for this texture.
250
+ *
251
+ * @remarks
252
+ * Each concrete `Texture` subclass must implement this method to provide an
253
+ * appropriate cache key for the texture type including the texture's
254
+ * properties that uniquely identify a copy of the texture. If the texture
255
+ * type does not support caching, then this method should return `false`.
256
+ *
257
+ * @param props
258
+ * @returns
259
+ * A cache key for this texture or `false` if the texture type does not
260
+ * support caching.
261
+ */
262
+ static makeCacheKey(props: unknown): string | false;
263
+ /**
264
+ * Resolve the default values for the texture's properties.
265
+ *
266
+ * @remarks
267
+ * Each concrete `Texture` subclass must implement this method to provide
268
+ * default values for the texture's optional properties.
269
+ *
270
+ * @param props
271
+ * @returns
272
+ * The default values for the texture's properties.
273
+ */
274
+ static resolveDefaults(props: unknown): Record<string, any>;
275
+ }
@@ -0,0 +1,326 @@
1
+ import { EventEmitter } from '../../common/EventEmitter.js';
2
+ export var TextureType;
3
+ (function (TextureType) {
4
+ TextureType[TextureType["generic"] = 0] = "generic";
5
+ TextureType[TextureType["color"] = 1] = "color";
6
+ TextureType[TextureType["image"] = 2] = "image";
7
+ TextureType[TextureType["noise"] = 3] = "noise";
8
+ TextureType[TextureType["renderToTexture"] = 4] = "renderToTexture";
9
+ TextureType[TextureType["subTexture"] = 5] = "subTexture";
10
+ })(TextureType || (TextureType = {}));
11
+ /**
12
+ * Represents a source of texture data for a CoreContextTexture.
13
+ *
14
+ * @remarks
15
+ * Texture sources are used to populate a CoreContextTexture when that texture
16
+ * is loaded. Texture data retrieved by the CoreContextTexture by the
17
+ * `getTextureData` method. It's the responsibility of the concerete `Texture`
18
+ * subclass to implement this method appropriately.
19
+ */
20
+ export class Texture extends EventEmitter {
21
+ txManager;
22
+ /**
23
+ * The dimensions of the texture
24
+ *
25
+ * @remarks
26
+ * Until the texture data is loaded for the first time the value will be
27
+ * `null`.
28
+ */
29
+ _dimensions = null;
30
+ _error = null;
31
+ // aggregate state
32
+ state = 'initial';
33
+ renderableOwners = [];
34
+ renderable = false;
35
+ type = TextureType.generic;
36
+ preventCleanup = false;
37
+ ctxTexture;
38
+ textureData = null;
39
+ memUsed = 0;
40
+ /**
41
+ * Memory used by this texture in bytes
42
+ *
43
+ * @remarks
44
+ * This is tracked by the TextureMemoryManager and updated when the texture
45
+ * is loaded/freed. Set to 0 when texture is not loaded.
46
+ */
47
+ retryCount = 0;
48
+ maxRetryCount;
49
+ /**
50
+ * Timestamp when texture was created (for startup grace period)
51
+ */
52
+ createdAt = Date.now();
53
+ /**
54
+ * Flag to track if grace period has expired to avoid repeated Date.now() calls
55
+ */
56
+ gracePeriodExpired = false;
57
+ /**
58
+ * Grace period in milliseconds to prevent premature cleanup during app startup
59
+ * This helps prevent race conditions when bounds calculation is delayed
60
+ */
61
+ static STARTUP_GRACE_PERIOD = 2000; // 2 seconds
62
+ constructor(txManager) {
63
+ super();
64
+ this.txManager = txManager;
65
+ this.maxRetryCount = this.txManager.maxRetryCount;
66
+ }
67
+ get dimensions() {
68
+ return this._dimensions;
69
+ }
70
+ get error() {
71
+ return this._error;
72
+ }
73
+ /**
74
+ * Checks if the texture is within the startup grace period.
75
+ * During this period, textures are protected from cleanup to prevent
76
+ * race conditions during app initialization.
77
+ */
78
+ isWithinStartupGracePeriod() {
79
+ // If grace period already expired, return false immediately
80
+ if (this.gracePeriodExpired === true) {
81
+ return false;
82
+ }
83
+ // Check if grace period has expired now
84
+ const hasExpired = Date.now() - this.createdAt >= Texture.STARTUP_GRACE_PERIOD;
85
+ if (hasExpired) {
86
+ // Cache the result to avoid future Date.now() calls
87
+ this.gracePeriodExpired = true;
88
+ return false;
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Checks if the texture can be safely cleaned up.
94
+ * Considers the renderable state, startup grace period, and renderable owners.
95
+ */
96
+ canBeCleanedUp() {
97
+ // Never cleanup if explicitly prevented
98
+ if (this.preventCleanup) {
99
+ return false;
100
+ }
101
+ // Don't cleanup if still within startup grace period
102
+ if (this.isWithinStartupGracePeriod()) {
103
+ return false;
104
+ }
105
+ // Don't cleanup if not renderable
106
+ if (this.renderable === true) {
107
+ return false;
108
+ }
109
+ // Don't cleanup if there are still renderable owners
110
+ if (this.renderableOwners.length > 0) {
111
+ return false;
112
+ }
113
+ // Safe to cleanup
114
+ return true;
115
+ }
116
+ /**
117
+ * Add/remove an owner to/from the Texture based on its renderability.
118
+ *
119
+ * @remarks
120
+ * Any object can own a texture, be it a CoreNode or even the state object
121
+ * from a Text Renderer.
122
+ *
123
+ * When the reference to the texture that an owner object holds is replaced
124
+ * or cleared it must call this with `renderable=false` to release the owner
125
+ * association.
126
+ *
127
+ * @param owner
128
+ * @param renderable
129
+ */
130
+ setRenderableOwner(owner, renderable) {
131
+ const oldSize = this.renderableOwners.length;
132
+ const hasOwnerIndex = this.renderableOwners.indexOf(owner);
133
+ if (renderable === true) {
134
+ if (hasOwnerIndex === -1) {
135
+ // Add the owner to the set
136
+ this.renderableOwners.push(owner);
137
+ }
138
+ const newSize = this.renderableOwners.length;
139
+ if (oldSize !== newSize && newSize === 1) {
140
+ this.renderable = true;
141
+ this.onChangeIsRenderable?.(true);
142
+ this.load();
143
+ }
144
+ }
145
+ else {
146
+ if (hasOwnerIndex !== -1) {
147
+ this.renderableOwners.splice(hasOwnerIndex, 1);
148
+ }
149
+ const newSize = this.renderableOwners.length;
150
+ if (oldSize !== newSize && newSize === 0) {
151
+ this.renderable = false;
152
+ this.onChangeIsRenderable?.(false);
153
+ // note, not doing a cleanup here, cleanup is managed by the Stage/TextureMemoryManager
154
+ // when it deems appropriate based on memory pressure
155
+ }
156
+ }
157
+ }
158
+ load() {
159
+ if (this.retryCount > this.maxRetryCount) {
160
+ // We've exceeded the max retry count, do not attempt to load again
161
+ return;
162
+ }
163
+ this.txManager.loadTexture(this);
164
+ }
165
+ /**
166
+ * Load the core context texture for this Texture.
167
+ * The ctxTexture is created by the renderer and lives on the GPU.
168
+ *
169
+ * @returns
170
+ */
171
+ loadCtxTexture() {
172
+ if (this.ctxTexture === undefined) {
173
+ this.ctxTexture = this.txManager.renderer.createCtxTexture(this);
174
+ }
175
+ return this.ctxTexture;
176
+ }
177
+ /**
178
+ * Free the core context texture for this Texture.
179
+ *
180
+ * @remarks
181
+ * The ctxTexture is created by the renderer and lives on the GPU.
182
+ */
183
+ free() {
184
+ this.ctxTexture?.free();
185
+ }
186
+ /**
187
+ * Release the texture data and core context texture for this Texture without changing state.
188
+ *
189
+ * @remarks
190
+ * The ctxTexture is created by the renderer and lives on the GPU.
191
+ */
192
+ release() {
193
+ this.ctxTexture?.release();
194
+ this.ctxTexture = undefined;
195
+ this.freeTextureData();
196
+ }
197
+ /**
198
+ * Destroy the texture.
199
+ *
200
+ * @remarks
201
+ * This method is called when the texture is no longer needed and should be
202
+ * cleaned up.
203
+ */
204
+ destroy() {
205
+ // Only free GPU resources if we're in a state where they exist
206
+ if (this.state === 'loaded') {
207
+ this.free();
208
+ }
209
+ // Always free texture data regardless of state
210
+ this.freeTextureData();
211
+ }
212
+ /**
213
+ * Free the source texture data for this Texture.
214
+ *
215
+ * @remarks
216
+ * The texture data is the source data that is used to populate the CoreContextTexture.
217
+ * e.g. ImageData that is downloaded from a URL.
218
+ */
219
+ freeTextureData() {
220
+ queueMicrotask(this.freeTextureDataTask);
221
+ }
222
+ setState(state, errorOrDimensions) {
223
+ if (this.state === state) {
224
+ return;
225
+ }
226
+ let payload = null;
227
+ if (state === 'loaded') {
228
+ if (errorOrDimensions !== undefined &&
229
+ 'w' in errorOrDimensions === true &&
230
+ 'h' in errorOrDimensions === true &&
231
+ errorOrDimensions.w !== undefined &&
232
+ errorOrDimensions.h !== undefined) {
233
+ this._dimensions = errorOrDimensions;
234
+ }
235
+ payload = this._dimensions;
236
+ }
237
+ else if (state === 'failed') {
238
+ this._error = errorOrDimensions;
239
+ payload = this._error;
240
+ // increment the retry count for the texture
241
+ // this is used to compare against maxRetryCount, if set
242
+ // to determine if we should try loading again
243
+ this.retryCount += 1;
244
+ queueMicrotask(this.releaseTask);
245
+ }
246
+ else if (state === 'loading') {
247
+ this._error = null;
248
+ this._dimensions = null;
249
+ }
250
+ else {
251
+ this._error = null;
252
+ }
253
+ // emit the new state
254
+ this.state = state;
255
+ this.emit(state, payload);
256
+ }
257
+ /**
258
+ * Get the texture data for this texture.
259
+ *
260
+ * @remarks
261
+ * This method is called by the CoreContextTexture when the texture is loaded.
262
+ * The texture data is then used to populate the CoreContextTexture.
263
+ *
264
+ * @returns
265
+ * The texture data for this texture.
266
+ */
267
+ async getTextureData() {
268
+ if (this.textureData === null) {
269
+ this.textureData = await this.getTextureSource();
270
+ }
271
+ return this.textureData;
272
+ }
273
+ /**
274
+ * Task for queueMicrotask to free texture data.
275
+ *
276
+ * @remarks
277
+ * This method is called in a microtask to free the texture data.
278
+ */
279
+ freeTextureDataTask = () => {
280
+ this.textureData = null;
281
+ };
282
+ /**
283
+ * Task for queueMicrotask to release the texture.
284
+ *
285
+ * @remarks
286
+ * This method is called in a microtask to release the texture.
287
+ */
288
+ releaseTask = () => {
289
+ this.release();
290
+ };
291
+ /**
292
+ * Make a cache key for this texture.
293
+ *
294
+ * @remarks
295
+ * Each concrete `Texture` subclass must implement this method to provide an
296
+ * appropriate cache key for the texture type including the texture's
297
+ * properties that uniquely identify a copy of the texture. If the texture
298
+ * type does not support caching, then this method should return `false`.
299
+ *
300
+ * @param props
301
+ * @returns
302
+ * A cache key for this texture or `false` if the texture type does not
303
+ * support caching.
304
+ */
305
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
306
+ static makeCacheKey(props) {
307
+ return false;
308
+ }
309
+ /**
310
+ * Resolve the default values for the texture's properties.
311
+ *
312
+ * @remarks
313
+ * Each concrete `Texture` subclass must implement this method to provide
314
+ * default values for the texture's optional properties.
315
+ *
316
+ * @param props
317
+ * @returns
318
+ * The default values for the texture's properties.
319
+ */
320
+ static resolveDefaults(
321
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
322
+ props) {
323
+ return {};
324
+ }
325
+ }
326
+ //# sourceMappingURL=Texture.js.map