@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,552 @@
1
+ import { ImageWorkerManager } from './lib/ImageWorker.js';
2
+ import type { CoreRenderer } from './renderers/CoreRenderer.js';
3
+ import { ColorTexture } from './textures/ColorTexture.js';
4
+ import { ImageTexture } from './textures/ImageTexture.js';
5
+ import { NoiseTexture } from './textures/NoiseTexture.js';
6
+ import { SubTexture } from './textures/SubTexture.js';
7
+ import { RenderTexture } from './textures/RenderTexture.js';
8
+ import { Texture, TextureType } from './textures/Texture.js';
9
+ import { EventEmitter } from '../common/EventEmitter.js';
10
+ import type { Stage } from './Stage.js';
11
+ import {
12
+ validateCreateImageBitmap,
13
+ type CreateImageBitmapSupport,
14
+ } from './lib/validateImageBitmap.js';
15
+ import type { Platform } from './platforms/Platform.js';
16
+ import { TextureError, TextureErrorCode } from './TextureError.js';
17
+
18
+ /**
19
+ * Augmentable map of texture class types
20
+ *
21
+ * @remarks
22
+ * This interface can be augmented by other modules/apps to add additional
23
+ * texture types. The ones included directly here are the ones that are
24
+ * included in the core library.
25
+ */
26
+ export interface TextureMap {
27
+ ColorTexture: typeof ColorTexture;
28
+ ImageTexture: typeof ImageTexture;
29
+ NoiseTexture: typeof NoiseTexture;
30
+ SubTexture: typeof SubTexture;
31
+ RenderTexture: typeof RenderTexture;
32
+ }
33
+
34
+ export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
35
+ ? Props
36
+ : never;
37
+
38
+ /**
39
+ * Contains information about the texture manager's internal state
40
+ * for debugging purposes.
41
+ */
42
+ export interface TextureManagerDebugInfo {
43
+ keyCacheSize: number;
44
+ }
45
+
46
+ export interface TextureManagerSettings {
47
+ numImageWorkers: number;
48
+ createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
49
+ maxRetryCount: number;
50
+ }
51
+
52
+ export type ResizeModeOptions =
53
+ | {
54
+ /**
55
+ * Specifies that the image should be resized to cover the specified dimensions.
56
+ */
57
+ type: 'cover';
58
+ /**
59
+ * The horizontal clipping position
60
+ * To clip the left, set clipX to 0. To clip the right, set clipX to 1.
61
+ * clipX 0.5 will clip a equal amount from left and right
62
+ *
63
+ * @defaultValue 0.5
64
+ */
65
+ clipX?: number;
66
+ /**
67
+ * The vertical clipping position
68
+ * To clip the top, set clipY to 0. To clip the bottom, set clipY to 1.
69
+ * clipY 0.5 will clip a equal amount from top and bottom
70
+ *
71
+ * @defaultValue 0.5
72
+ */
73
+ clipY?: number;
74
+ }
75
+ | {
76
+ /**
77
+ * Specifies that the image should be resized to fit within the specified dimensions.
78
+ */
79
+ type: 'contain';
80
+ };
81
+
82
+ /**
83
+ * Universal options for all texture types
84
+ *
85
+ * @remarks
86
+ * Texture Options provide a way to specify options that are relevant to the
87
+ * texture loading process (including caching) and specifically for how a
88
+ * texture is rendered within a specific Node (or set of Nodes).
89
+ *
90
+ * They are not used in determining the cache key for a texture (except if
91
+ * the `cacheKey` option is provided explicitly to oveerride the default
92
+ * cache key for the texture instance) nor are they stored/referenced within
93
+ * the texture instance itself. Instead, the options are stored/referenced
94
+ * within individual Nodes. So a single texture instance can be used in
95
+ * multiple Nodes each using a different set of options.
96
+ */
97
+ export interface TextureOptions {
98
+ /**
99
+ * Preload the texture immediately even if it's not being rendered to the
100
+ * screen.
101
+ *
102
+ * @remarks
103
+ * This allows the texture to be used immediately without any delay when it
104
+ * is first needed for rendering. Otherwise the loading process will start
105
+ * when the texture is first rendered, which may cause a delay in that texture
106
+ * being shown properly.
107
+ *
108
+ * @defaultValue `false`
109
+ */
110
+ preload?: boolean;
111
+
112
+ /**
113
+ * Prevent clean up of the texture when it is no longer being used.
114
+ *
115
+ * @remarks
116
+ * This is useful when you want to keep the texture in memory for later use.
117
+ * Regardless of whether the texture is being used or not, it will not be
118
+ * cleaned up.
119
+ *
120
+ * @defaultValue `false`
121
+ */
122
+ preventCleanup?: boolean;
123
+
124
+ /**
125
+ * Number of times to retry loading a failed texture
126
+ *
127
+ * @remarks
128
+ * When a texture fails to load, Lightning will retry up to this many times
129
+ * before permanently giving up. Each retry will clear the texture ownership
130
+ * and then re-establish it to trigger a new load attempt.
131
+ *
132
+ * Set to null to disable retries. Set to 0 to always try once and never retry.
133
+ * This is typically only used on ImageTexture instances.
134
+ *
135
+ */
136
+ maxRetryCount?: number | null;
137
+
138
+ /**
139
+ * Flip the texture horizontally when rendering
140
+ *
141
+ * @defaultValue `false`
142
+ */
143
+ flipX?: boolean;
144
+
145
+ /**
146
+ * Flip the texture vertically when rendering
147
+ *
148
+ * @defaultValue `false`
149
+ */
150
+ flipY?: boolean;
151
+
152
+ /**
153
+ * You can use resizeMode to determine the clipping automatically from the width
154
+ * and height of the source texture. This can be convenient if you are unsure about
155
+ * the exact image sizes but want the image to cover a specific area.
156
+ *
157
+ * The resize modes cover and contain are supported
158
+ */
159
+ resizeMode?: ResizeModeOptions;
160
+ }
161
+
162
+ export class CoreTextureManager extends EventEmitter {
163
+ /**
164
+ * Map of textures by cache key
165
+ */
166
+ keyCache: Map<string, Texture> = new Map();
167
+
168
+ /**
169
+ * Map of cache keys by texture
170
+ */
171
+ inverseKeyCache: WeakMap<Texture, string> = new WeakMap();
172
+
173
+ /**
174
+ * Map of texture constructors by their type name
175
+ */
176
+ txConstructors: Partial<TextureMap> = {};
177
+
178
+ public maxRetryCount: number;
179
+ private uploadTextureQueue: Set<Texture> = new Set();
180
+ private initialized = false;
181
+ private stage: Stage;
182
+ private numImageWorkers: number;
183
+
184
+ public platform: Platform;
185
+
186
+ imageWorkerManager: ImageWorkerManager | null = null;
187
+ hasCreateImageBitmap = false;
188
+ imageBitmapSupported = {
189
+ basic: false,
190
+ options: false,
191
+ full: false,
192
+ };
193
+
194
+ hasWorker = !!self.Worker;
195
+ /**
196
+ * Renderer that this texture manager is associated with
197
+ *
198
+ * @remarks
199
+ * This MUST be set before the texture manager is used. Otherwise errors
200
+ * will occur when using the texture manager.
201
+ */
202
+ renderer!: CoreRenderer;
203
+
204
+ /**
205
+ * The current frame time in milliseconds
206
+ *
207
+ * @remarks
208
+ * This is used to populate the `lastRenderableChangeTime` property of
209
+ * {@link Texture} instances when their renderable state changes.
210
+ *
211
+ * Set by stage via `updateFrameTime` method.
212
+ */
213
+ frameTime = 0;
214
+
215
+ constructor(stage: Stage, settings: TextureManagerSettings) {
216
+ super();
217
+
218
+ const { numImageWorkers, createImageBitmapSupport, maxRetryCount } =
219
+ settings;
220
+
221
+ this.stage = stage;
222
+ this.platform = stage.platform;
223
+ this.numImageWorkers = numImageWorkers;
224
+ this.maxRetryCount = maxRetryCount;
225
+
226
+ if (createImageBitmapSupport === 'auto') {
227
+ validateCreateImageBitmap(this.platform)
228
+ .then((result) => {
229
+ this.initialize(result);
230
+ })
231
+ .catch(() => {
232
+ console.warn(
233
+ '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
234
+ );
235
+
236
+ // initialized without image worker manager and createImageBitmap
237
+ this.initialized = true;
238
+ this.emit('initialized');
239
+ });
240
+ } else {
241
+ this.initialize({
242
+ basic: createImageBitmapSupport === 'basic',
243
+ options: createImageBitmapSupport === 'options',
244
+ full: createImageBitmapSupport === 'full',
245
+ });
246
+ }
247
+
248
+ this.registerTextureType('ImageTexture', ImageTexture);
249
+ this.registerTextureType('ColorTexture', ColorTexture);
250
+ this.registerTextureType('NoiseTexture', NoiseTexture);
251
+ this.registerTextureType('SubTexture', SubTexture);
252
+ this.registerTextureType('RenderTexture', RenderTexture);
253
+ }
254
+
255
+ registerTextureType<Type extends keyof TextureMap>(
256
+ textureType: Type,
257
+ textureClass: TextureMap[Type],
258
+ ): void {
259
+ this.txConstructors[textureType] = textureClass;
260
+ }
261
+
262
+ private initialize(support: CreateImageBitmapSupport) {
263
+ this.hasCreateImageBitmap =
264
+ support.basic || support.options || support.full;
265
+ this.imageBitmapSupported = support;
266
+
267
+ if (this.hasCreateImageBitmap === false) {
268
+ console.warn(
269
+ '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
270
+ );
271
+ }
272
+
273
+ if (
274
+ this.hasCreateImageBitmap === true &&
275
+ this.hasWorker === true &&
276
+ this.numImageWorkers > 0
277
+ ) {
278
+ this.imageWorkerManager = new ImageWorkerManager(
279
+ this.numImageWorkers,
280
+ support,
281
+ );
282
+ } else {
283
+ console.warn(
284
+ '[Lightning] Imageworker is 0 or not supported on this browser. Image loading will be slower.',
285
+ );
286
+ }
287
+
288
+ this.initialized = true;
289
+ this.emit('initialized');
290
+ }
291
+
292
+ /**
293
+ * Enqueue a texture for uploading to the GPU.
294
+ *
295
+ * @param texture - The texture to upload
296
+ */
297
+ enqueueUploadTexture(texture: Texture): void {
298
+ this.uploadTextureQueue.add(texture);
299
+ }
300
+
301
+ /**
302
+ * Create a texture
303
+ *
304
+ * @param textureType - The type of texture to create
305
+ * @param props - The properties to use for the texture
306
+ */
307
+ createTexture<Type extends keyof TextureMap>(
308
+ textureType: Type,
309
+ props: ExtractProps<TextureMap[Type]>,
310
+ ): InstanceType<TextureMap[Type]> {
311
+ let texture: Texture | undefined;
312
+ const TextureClass = this.txConstructors[textureType];
313
+ if (!TextureClass) {
314
+ throw new TextureError(
315
+ TextureErrorCode.TEXTURE_TYPE_NOT_REGISTERED,
316
+ `Texture type "${textureType}" is not registered`,
317
+ );
318
+ }
319
+ const resolvedProps = TextureClass.resolveDefaults(props as any);
320
+ const cacheKey = TextureClass.makeCacheKey(resolvedProps as any);
321
+ if (cacheKey && this.keyCache.has(cacheKey)) {
322
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
323
+ texture = this.keyCache.get(cacheKey)!;
324
+ } else {
325
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
326
+ texture = new TextureClass(this, resolvedProps as any);
327
+
328
+ if (cacheKey) {
329
+ this.initTextureToCache(texture, cacheKey);
330
+ }
331
+ }
332
+
333
+ return texture as InstanceType<TextureMap[Type]>;
334
+ }
335
+
336
+ /**
337
+ * Override loadTexture to use the batched approach.
338
+ *
339
+ * @param texture - The texture to load
340
+ * @param immediate - Whether to prioritize the texture for immediate loading
341
+ */
342
+ async loadTexture(texture: Texture, priority?: boolean): Promise<void> {
343
+ this.stage.txMemManager.removeFromOrphanedTextures(texture);
344
+
345
+ if (texture.type === TextureType.subTexture) {
346
+ // ignore subtextures - they get loaded through their parent
347
+ return;
348
+ }
349
+
350
+ if (texture.state === 'loaded') {
351
+ // if the texture is already loaded, just return
352
+ return;
353
+ }
354
+
355
+ // if we're not initialized, just queue the texture into the upload queue
356
+ if (this.initialized === false) {
357
+ this.uploadTextureQueue.add(texture);
358
+ return;
359
+ }
360
+
361
+ texture.setState('loading');
362
+
363
+ // Get texture data - early return on failure
364
+ const textureDataResult = await texture.getTextureData().catch((err) => {
365
+ console.error(err);
366
+ texture.setState(
367
+ 'failed',
368
+ new TextureError(TextureErrorCode.TEXTURE_DATA_NULL),
369
+ );
370
+ return null;
371
+ });
372
+
373
+ // Early return if texture data fetch failed
374
+ if (textureDataResult === null || texture.state === 'failed') {
375
+ return;
376
+ }
377
+
378
+ // Handle non-image textures: upload immediately
379
+ const shouldUploadImmediately =
380
+ texture.type !== TextureType.image || priority === true;
381
+ if (shouldUploadImmediately === true) {
382
+ await this.uploadTexture(texture).catch((err) => {
383
+ console.error(`Failed to upload texture:`, err);
384
+ texture.setState(
385
+ 'failed',
386
+ new TextureError(TextureErrorCode.TEXTURE_DATA_NULL),
387
+ );
388
+ });
389
+ return;
390
+ }
391
+
392
+ // Queue image textures for throttled upload
393
+ this.enqueueUploadTexture(texture);
394
+ }
395
+
396
+ /**
397
+ * Upload a texture to the GPU
398
+ *
399
+ * @param texture Texture to upload
400
+ * @returns Promise that resolves when the texture is fully loaded
401
+ */
402
+ async uploadTexture(texture: Texture): Promise<void> {
403
+ if (
404
+ this.stage.txMemManager.doNotExceedCriticalThreshold === true &&
405
+ this.stage.txMemManager.criticalCleanupRequested === true
406
+ ) {
407
+ // we're at a critical memory threshold, don't upload textures
408
+ texture.setState(
409
+ 'failed',
410
+ new TextureError(TextureErrorCode.MEMORY_THRESHOLD_EXCEEDED),
411
+ );
412
+ return;
413
+ }
414
+
415
+ if (texture.state === 'failed' || texture.state === 'freed') {
416
+ // don't upload failed or freed textures
417
+ return;
418
+ }
419
+
420
+ if (texture.state === 'loaded') {
421
+ // already loaded
422
+ return;
423
+ }
424
+
425
+ if (texture.textureData === null) {
426
+ texture.setState(
427
+ 'failed',
428
+ new TextureError(
429
+ TextureErrorCode.TEXTURE_DATA_NULL,
430
+ 'Texture data is null, cannot upload texture',
431
+ ),
432
+ );
433
+ return;
434
+ }
435
+
436
+ const coreContext = texture.loadCtxTexture();
437
+ if (coreContext !== null && coreContext.state === 'loaded') {
438
+ texture.setState('loaded');
439
+ return;
440
+ }
441
+
442
+ await coreContext.load();
443
+ }
444
+
445
+ /**
446
+ * Check if a texture is being processed
447
+ */
448
+ isProcessingTexture(texture: Texture): boolean {
449
+ return this.uploadTextureQueue.has(texture);
450
+ }
451
+
452
+ /**
453
+ * Process a limited number of uploads.
454
+ *
455
+ * @param maxProcessingTime - The maximum processing time in milliseconds
456
+ */
457
+ async processSome(maxProcessingTime: number): Promise<void> {
458
+ if (this.initialized === false) {
459
+ return;
460
+ }
461
+
462
+ const platform = this.platform;
463
+ const startTime = platform.getTimeStamp();
464
+
465
+ // Process uploads - await each upload to prevent GPU overload
466
+ while (
467
+ this.uploadTextureQueue.size > 0 &&
468
+ platform.getTimeStamp() - startTime < maxProcessingTime
469
+ ) {
470
+ const [texture] = this.uploadTextureQueue;
471
+ if (!texture) break;
472
+ this.uploadTextureQueue.delete(texture);
473
+ try {
474
+ if (texture.textureData === null) {
475
+ await texture.getTextureData();
476
+ }
477
+ await this.uploadTexture(texture);
478
+ } catch (error) {
479
+ console.error('Failed to upload texture:', error);
480
+ // Continue with next texture instead of stopping entire queue
481
+ }
482
+ }
483
+ }
484
+
485
+ public hasUpdates(): boolean {
486
+ return this.uploadTextureQueue.size > 0;
487
+ }
488
+
489
+ /**
490
+ * Initialize a texture to the cache
491
+ *
492
+ * @param texture Texture to cache
493
+ * @param cacheKey Cache key for the texture
494
+ */
495
+ initTextureToCache(texture: Texture, cacheKey: string) {
496
+ const { keyCache, inverseKeyCache } = this;
497
+ keyCache.set(cacheKey, texture);
498
+ inverseKeyCache.set(texture, cacheKey);
499
+ }
500
+
501
+ /**
502
+ * Get a texture from the cache
503
+ *
504
+ * @param cacheKey
505
+ */
506
+ getTextureFromCache(cacheKey: string): Texture | undefined {
507
+ return this.keyCache.get(cacheKey);
508
+ }
509
+
510
+ /**
511
+ * Remove a texture from the cache
512
+ *
513
+ * @remarks
514
+ * Called by Texture Cleanup when a texture is freed.
515
+ *
516
+ * @param texture
517
+ */
518
+ removeTextureFromCache(texture: Texture) {
519
+ const { inverseKeyCache, keyCache } = this;
520
+ const cacheKey = inverseKeyCache.get(texture);
521
+ if (cacheKey) {
522
+ keyCache.delete(cacheKey);
523
+ }
524
+ }
525
+
526
+ /**
527
+ * Remove texture from the upload queue
528
+ *
529
+ * @param texture - The texture to remove
530
+ */
531
+ removeTextureFromQueue(texture: Texture): void {
532
+ this.uploadTextureQueue.delete(texture);
533
+ }
534
+
535
+ /**
536
+ * Resolve a parent texture from the cache or fallback to the provided texture.
537
+ *
538
+ * @param texture - The provided texture to resolve.
539
+ * @returns The cached or provided texture.
540
+ */
541
+ resolveParentTexture(texture: ImageTexture): Texture {
542
+ if (!texture?.props) {
543
+ return texture;
544
+ }
545
+
546
+ const cacheKey = ImageTexture.makeCacheKey(texture.props);
547
+ const cachedTexture = cacheKey
548
+ ? this.getTextureFromCache(cacheKey)
549
+ : undefined;
550
+ return cachedTexture ?? texture;
551
+ }
552
+ }