@lightningjs/renderer 3.0.0-beta8 → 3.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 (566) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/AutosizeManager.d.ts +29 -0
  18. package/dist/src/core/AutosizeManager.js +169 -0
  19. package/dist/src/core/AutosizeManager.js.map +1 -0
  20. package/dist/src/core/Autosizer.d.ts +35 -0
  21. package/dist/src/core/Autosizer.js +196 -0
  22. package/dist/src/core/Autosizer.js.map +1 -0
  23. package/dist/src/core/CoreNode.d.ts +106 -58
  24. package/dist/src/core/CoreNode.js +530 -282
  25. package/dist/src/core/CoreNode.js.map +1 -1
  26. package/dist/src/core/CoreTextNode.d.ts +73 -88
  27. package/dist/src/core/CoreTextNode.js +375 -236
  28. package/dist/src/core/CoreTextNode.js.map +1 -1
  29. package/dist/src/core/CoreTextureManager.d.ts +23 -26
  30. package/dist/src/core/CoreTextureManager.js +60 -166
  31. package/dist/src/core/CoreTextureManager.js.map +1 -1
  32. package/dist/src/core/Stage.d.ts +63 -9
  33. package/dist/src/core/Stage.js +233 -133
  34. package/dist/src/core/Stage.js.map +1 -1
  35. package/dist/src/core/TextureError.d.ts +11 -0
  36. package/dist/src/core/TextureError.js +37 -0
  37. package/dist/src/core/TextureError.js.map +1 -0
  38. package/dist/src/core/TextureMemoryManager.d.ts +3 -5
  39. package/dist/src/core/TextureMemoryManager.js +84 -94
  40. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  41. package/dist/src/core/animations/Animation.d.ts +21 -0
  42. package/dist/src/core/animations/Animation.js +194 -0
  43. package/dist/src/core/animations/Animation.js.map +1 -0
  44. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  45. package/dist/src/core/animations/CoreAnimation.js +3 -3
  46. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  47. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  48. package/dist/src/core/animations/CoreAnimationController.js +8 -5
  49. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  50. package/dist/src/core/animations/Playback.d.ts +64 -0
  51. package/dist/src/core/animations/Playback.js +169 -0
  52. package/dist/src/core/animations/Playback.js.map +1 -0
  53. package/dist/src/core/animations/Transition.d.ts +27 -0
  54. package/dist/src/core/animations/Transition.js +52 -0
  55. package/dist/src/core/animations/Transition.js.map +1 -0
  56. package/dist/src/core/animations/utils.d.ts +2 -0
  57. package/dist/src/core/animations/utils.js +136 -0
  58. package/dist/src/core/animations/utils.js.map +1 -0
  59. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  60. package/dist/src/core/lib/ImageWorker.js +30 -11
  61. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  62. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  63. package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
  64. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  65. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  66. package/dist/src/core/lib/collectionUtils.js +72 -0
  67. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  68. package/dist/src/core/lib/colorCache.d.ts +1 -0
  69. package/dist/src/core/lib/colorCache.js +19 -0
  70. package/dist/src/core/lib/colorCache.js.map +1 -0
  71. package/dist/src/core/lib/colorParser.d.ts +21 -0
  72. package/dist/src/core/lib/colorParser.js +72 -0
  73. package/dist/src/core/lib/colorParser.js.map +1 -0
  74. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  75. package/dist/src/core/lib/textureCompression.js +320 -67
  76. package/dist/src/core/lib/textureCompression.js.map +1 -1
  77. package/dist/src/core/lib/utils.d.ts +6 -6
  78. package/dist/src/core/lib/utils.js +21 -65
  79. package/dist/src/core/lib/utils.js.map +1 -1
  80. package/dist/src/core/platform.d.ts +10 -0
  81. package/dist/src/core/platform.js +81 -0
  82. package/dist/src/core/platform.js.map +1 -0
  83. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  84. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  85. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  86. package/dist/src/core/platforms/Platform.d.ts +78 -12
  87. package/dist/src/core/platforms/Platform.js +18 -0
  88. package/dist/src/core/platforms/Platform.js.map +1 -1
  89. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  90. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  91. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  92. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  93. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  94. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  95. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  96. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  97. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  98. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  99. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  100. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  101. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  102. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  103. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  104. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  105. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  106. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  107. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  108. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  109. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  110. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  111. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  112. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  113. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  114. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  115. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  116. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  117. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  118. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  119. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  120. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  121. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  122. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  123. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  124. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  125. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  126. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  127. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  128. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  129. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  130. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  131. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  132. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  133. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  134. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  135. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  136. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  137. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  138. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  139. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  140. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  141. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  143. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  144. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  145. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  146. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  147. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  148. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  149. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  150. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  151. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  152. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  153. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  154. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  155. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  156. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  157. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  158. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  159. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  160. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  161. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  162. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  164. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  165. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  174. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  176. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  177. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  179. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  180. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  182. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  183. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  185. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  186. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  187. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  188. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  189. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  190. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  191. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  192. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  193. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  194. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  195. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  196. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  197. package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
  198. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  199. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  200. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  201. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  202. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +11 -9
  203. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -46
  204. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  205. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  206. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  207. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  208. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  209. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  210. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  211. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  212. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  214. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  215. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  217. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  218. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  220. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  221. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  223. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  224. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  258. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  259. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
  260. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  261. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  262. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  263. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  264. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  265. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  266. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  267. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  268. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  269. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  270. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  271. package/dist/src/core/shaders/canvas/Border.js +64 -25
  272. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  273. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  274. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  276. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  278. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  280. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  281. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  282. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  283. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  284. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  285. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  286. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  287. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  288. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  289. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  290. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  291. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  292. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  293. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  294. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  295. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  296. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  297. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  298. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  299. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  300. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  301. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  302. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  303. package/dist/src/core/shaders/webgl/Border.js +138 -84
  304. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  305. package/dist/src/core/shaders/webgl/Default.js +46 -47
  306. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  307. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  308. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  309. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  311. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  312. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  313. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  314. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  315. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  316. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  317. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  318. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  319. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  320. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  321. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  322. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  323. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  324. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  325. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  326. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  327. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  329. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  330. package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
  331. package/dist/src/core/text-rendering/CanvasFont.js +111 -0
  332. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
  333. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  334. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  335. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  336. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  337. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  338. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  339. package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
  340. package/dist/src/core/text-rendering/CoreFont.js +48 -0
  341. package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
  342. package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
  343. package/dist/src/core/text-rendering/FontManager.js +42 -0
  344. package/dist/src/core/text-rendering/FontManager.js.map +1 -0
  345. package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
  346. package/dist/src/core/text-rendering/SdfFont.js +142 -0
  347. package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
  348. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  349. package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
  350. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  351. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  352. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  353. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  354. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  355. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  356. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  357. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  358. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  359. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  360. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  361. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  362. package/dist/src/core/text-rendering/Utils.js +84 -0
  363. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  364. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  365. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  366. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  367. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  368. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  369. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  370. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  371. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  372. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  373. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  377. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  378. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  379. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  380. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  381. package/dist/src/core/textures/ColorTexture.js +3 -4
  382. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  383. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  384. package/dist/src/core/textures/ImageTexture.js +46 -125
  385. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  386. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  387. package/dist/src/core/textures/NoiseTexture.js +8 -8
  388. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  389. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  390. package/dist/src/core/textures/RenderTexture.js +12 -12
  391. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  392. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  393. package/dist/src/core/textures/SubTexture.js +22 -40
  394. package/dist/src/core/textures/SubTexture.js.map +1 -1
  395. package/dist/src/core/textures/Texture.d.ts +74 -11
  396. package/dist/src/core/textures/Texture.js +136 -18
  397. package/dist/src/core/textures/Texture.js.map +1 -1
  398. package/dist/src/core/utils.d.ts +2 -1
  399. package/dist/src/core/utils.js +1 -1
  400. package/dist/src/core/utils.js.map +1 -1
  401. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  402. package/dist/src/main-api/DynamicShaderController.js +58 -0
  403. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  404. package/dist/src/main-api/Inspector.d.ts +129 -1
  405. package/dist/src/main-api/Inspector.js +462 -23
  406. package/dist/src/main-api/Inspector.js.map +1 -1
  407. package/dist/src/main-api/Renderer.d.ts +223 -41
  408. package/dist/src/main-api/Renderer.js +107 -62
  409. package/dist/src/main-api/Renderer.js.map +1 -1
  410. package/dist/src/main-api/ShaderController.d.ts +31 -0
  411. package/dist/src/main-api/ShaderController.js +37 -0
  412. package/dist/src/main-api/ShaderController.js.map +1 -0
  413. package/dist/src/utils.d.ts +0 -2
  414. package/dist/src/utils.js +0 -36
  415. package/dist/src/utils.js.map +1 -1
  416. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  417. package/dist/tsconfig.tsbuildinfo +1 -0
  418. package/exports/canvas-shaders.ts +28 -28
  419. package/exports/canvas.ts +45 -45
  420. package/exports/index.ts +90 -90
  421. package/exports/inspector.ts +24 -24
  422. package/exports/platform.ts +31 -0
  423. package/exports/utils.ts +50 -50
  424. package/exports/webgl-shaders.ts +28 -28
  425. package/exports/webgl.ts +52 -50
  426. package/package.json +16 -15
  427. package/src/common/CommonTypes.ts +163 -146
  428. package/src/common/EventEmitter.ts +77 -77
  429. package/src/common/IAnimationController.ts +92 -92
  430. package/src/common/IEventEmitter.ts +28 -28
  431. package/src/core/Autosizer.ts +224 -0
  432. package/src/core/CoreNode.test.ts +365 -202
  433. package/src/core/CoreNode.ts +2785 -2483
  434. package/src/core/CoreShaderManager.ts +188 -188
  435. package/src/core/CoreTextNode.test.ts +311 -0
  436. package/src/core/CoreTextNode.ts +598 -451
  437. package/src/core/CoreTextureManager.ts +484 -608
  438. package/src/core/Stage.ts +927 -800
  439. package/src/core/TextureError.ts +46 -0
  440. package/src/core/TextureMemoryManager.ts +418 -435
  441. package/src/core/animations/AnimationManager.ts +38 -38
  442. package/src/core/animations/CoreAnimation.ts +290 -291
  443. package/src/core/animations/CoreAnimationController.ts +169 -164
  444. package/src/core/lib/ContextSpy.ts +41 -41
  445. package/src/core/lib/Matrix3d.ts +244 -244
  446. package/src/core/lib/RenderCoords.ts +71 -71
  447. package/src/core/lib/collectionUtils.ts +83 -0
  448. package/src/core/lib/colorCache.ts +20 -0
  449. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  450. package/src/core/lib/utils.ts +337 -390
  451. package/src/core/platforms/GlContextWrapper.ts +291 -0
  452. package/src/core/platforms/Platform.ts +176 -77
  453. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1374
  454. package/src/core/platforms/web/WebPlatform.ts +306 -84
  455. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  456. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  457. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  458. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  459. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  460. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  461. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  462. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  463. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  464. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  465. package/src/core/platforms/web/lib/utils.ts +105 -0
  466. package/src/core/renderers/CoreContextTexture.ts +44 -43
  467. package/src/core/renderers/CoreRenderOp.ts +22 -22
  468. package/src/core/renderers/CoreRenderer.ts +71 -110
  469. package/src/core/renderers/CoreShaderNode.ts +202 -175
  470. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  471. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  472. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  473. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  474. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  475. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  476. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  477. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  478. package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
  479. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  480. package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -318
  481. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  482. package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
  483. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  484. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  485. package/src/core/shaders/canvas/Border.ts +132 -78
  486. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  487. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  488. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  489. package/src/core/shaders/canvas/Rounded.ts +55 -55
  490. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  491. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  492. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  493. package/src/core/shaders/canvas/Shadow.ts +54 -52
  494. package/src/core/shaders/canvas/utils/render.ts +160 -151
  495. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  496. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  497. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  498. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  499. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  500. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  501. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  502. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  503. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  504. package/src/core/shaders/utils.ts +46 -46
  505. package/src/core/shaders/webgl/Border.ts +169 -116
  506. package/src/core/shaders/webgl/Default.ts +88 -89
  507. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  508. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  509. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  510. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  511. package/src/core/shaders/webgl/Rounded.ts +115 -117
  512. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  513. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  514. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  515. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  516. package/src/core/shaders/webgl/Shadow.ts +121 -115
  517. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  518. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  519. package/src/core/text-rendering/SdfFontHandler.ts +584 -0
  520. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  521. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  522. package/src/core/text-rendering/TextRenderer.ts +444 -0
  523. package/src/core/text-rendering/Utils.ts +99 -0
  524. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  525. package/src/core/textures/ColorTexture.ts +104 -102
  526. package/src/core/textures/ImageTexture.ts +292 -418
  527. package/src/core/textures/NoiseTexture.ts +106 -104
  528. package/src/core/textures/RenderTexture.ts +87 -85
  529. package/src/core/textures/SubTexture.ts +184 -205
  530. package/src/core/textures/Texture.ts +524 -372
  531. package/src/core/utils.ts +229 -227
  532. package/src/env.d.ts +7 -7
  533. package/src/main-api/INode.ts +100 -100
  534. package/src/main-api/Inspector.ts +1278 -569
  535. package/src/main-api/Renderer.ts +1030 -818
  536. package/src/main-api/utils.ts +45 -45
  537. package/src/utils.ts +220 -267
  538. package/COPYING +0 -1
  539. package/src/core/lib/ImageWorker.ts +0 -286
  540. package/src/core/lib/textureCompression.ts +0 -152
  541. package/src/core/lib/validateImageBitmap.ts +0 -87
  542. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  543. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  544. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  545. package/src/core/text-rendering/TrFontManager.ts +0 -183
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  548. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  549. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  550. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  551. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  552. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  553. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  554. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  566. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -1,372 +1,524 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
- import type { CoreTextureManager } from '../CoreTextureManager.js';
21
- import type { SubTextureProps } from './SubTexture.js';
22
- import type { Dimensions } from '../../common/CommonTypes.js';
23
- import { EventEmitter } from '../../common/EventEmitter.js';
24
- import type { CoreContextTexture } from '../renderers/CoreContextTexture.js';
25
- import type { Bound } from '../lib/utils.js';
26
-
27
- /**
28
- * Event handler for when a Texture is freed
29
- */
30
- export type TextureFreedEventHandler = (target: any) => void;
31
-
32
- /**
33
- * Event handler for when a Texture is loading
34
- */
35
- export type TextureLoadingEventHandler = (target: any) => void;
36
-
37
- /**
38
- * Event handler for when a Texture is loaded
39
- */
40
- export type TextureLoadedEventHandler = (
41
- target: any,
42
- dimensions: Readonly<Dimensions>,
43
- ) => void;
44
-
45
- /**
46
- * Represents compressed texture data.
47
- */
48
- interface CompressedData {
49
- /**
50
- * GLenum spcifying compression format
51
- */
52
- glInternalFormat: number;
53
-
54
- /**
55
- * All mipmap levels
56
- */
57
- mipmaps?: ArrayBuffer[];
58
-
59
- /**
60
- * Supported container types ('pvr' or 'ktx').
61
- */
62
- type: 'pvr' | 'ktx';
63
-
64
- /**
65
- * The width of the compressed texture in pixels. Defaults to 0.
66
- *
67
- * @default 0
68
- */
69
- width: number;
70
-
71
- /**
72
- * The height of the compressed texture in pixels.
73
- **/
74
- height: number;
75
- }
76
-
77
- /**
78
- * Event handler for when a Texture fails to load
79
- */
80
- export type TextureFailedEventHandler = (target: any, error: Error) => void;
81
-
82
- /**
83
- * TextureData that is used to populate a CoreContextTexture
84
- */
85
- export interface TextureData {
86
- /**
87
- * The texture data
88
- */
89
- data:
90
- | ImageBitmap
91
- | ImageData
92
- | SubTextureProps
93
- | CompressedData
94
- | HTMLImageElement
95
- | Uint8Array
96
- | null;
97
- /**
98
- * Premultiply alpha when uploading texture data to the GPU
99
- *
100
- * @defaultValue `false`
101
- */
102
- premultiplyAlpha?: boolean | null;
103
- }
104
- /**
105
- * TextureCoords generally numbers between 0 - 1
106
- */
107
- export type TextureCoords = Bound;
108
-
109
- export type TextureState =
110
- | 'initial' // Before anything is loaded
111
- | 'fetching' // Fetching or generating texture source
112
- | 'fetched' // Texture source is ready
113
- | 'loading' // Uploading to GPU
114
- | 'loaded' // Fully loaded and usable
115
- | 'failed' // Failed to load
116
- | 'freed'; // Released and must be reloaded
117
-
118
- export enum TextureType {
119
- 'generic' = 0,
120
- 'color' = 1,
121
- 'image' = 2,
122
- 'noise' = 3,
123
- 'renderToTexture' = 4,
124
- 'subTexture' = 5,
125
- }
126
-
127
- /**
128
- * Represents a source of texture data for a CoreContextTexture.
129
- *
130
- * @remarks
131
- * Texture sources are used to populate a CoreContextTexture when that texture
132
- * is loaded. Texture data retrieved by the CoreContextTexture by the
133
- * `getTextureData` method. It's the responsibility of the concerete `Texture`
134
- * subclass to implement this method appropriately.
135
- */
136
- export abstract class Texture extends EventEmitter {
137
- /**
138
- * The dimensions of the texture
139
- *
140
- * @remarks
141
- * Until the texture data is loaded for the first time the value will be
142
- * `null`.
143
- */
144
- private _dimensions: Dimensions | null = null;
145
- private _error: Error | null = null;
146
-
147
- // aggregate state
148
- public state: TextureState = 'initial';
149
-
150
- readonly renderableOwners = new Set<unknown>();
151
-
152
- readonly renderable: boolean = false;
153
-
154
- public type: TextureType = TextureType.generic;
155
-
156
- public preventCleanup = false;
157
-
158
- public ctxTexture: CoreContextTexture | undefined;
159
-
160
- public textureData: TextureData | null = null;
161
-
162
- constructor(protected txManager: CoreTextureManager) {
163
- super();
164
- }
165
-
166
- get dimensions(): Dimensions | null {
167
- return this._dimensions;
168
- }
169
-
170
- get error(): Error | null {
171
- return this._error;
172
- }
173
-
174
- /**
175
- * Add/remove an owner to/from the Texture based on its renderability.
176
- *
177
- * @remarks
178
- * Any object can own a texture, be it a CoreNode or even the state object
179
- * from a Text Renderer.
180
- *
181
- * When the reference to the texture that an owner object holds is replaced
182
- * or cleared it must call this with `renderable=false` to release the owner
183
- * association.
184
- *
185
- * @param owner
186
- * @param renderable
187
- */
188
- setRenderableOwner(owner: unknown, renderable: boolean): void {
189
- const oldSize = this.renderableOwners.size;
190
-
191
- if (renderable === true) {
192
- if (this.renderableOwners.has(owner) === false) {
193
- // Add the owner to the set
194
- this.renderableOwners.add(owner);
195
- }
196
-
197
- const newSize = this.renderableOwners.size;
198
- if (newSize > oldSize && newSize === 1) {
199
- (this.renderable as boolean) = true;
200
- this.onChangeIsRenderable?.(true);
201
- this.load();
202
- }
203
- } else {
204
- this.renderableOwners.delete(owner);
205
- const newSize = this.renderableOwners.size;
206
- if (newSize < oldSize && newSize === 0) {
207
- (this.renderable as boolean) = false;
208
- this.onChangeIsRenderable?.(false);
209
- this.txManager.orphanTexture(this);
210
- }
211
- }
212
- }
213
-
214
- load(): void {
215
- this.txManager.loadTexture(this);
216
- }
217
-
218
- /**
219
- * Event called when the Texture becomes renderable or unrenderable.
220
- *
221
- * @remarks
222
- * Used by subclasses like SubTexture propogate then renderability of the
223
- * Texture to other referenced Textures.
224
- *
225
- * @param isRenderable `true` if this Texture has renderable owners.
226
- */
227
- onChangeIsRenderable?(isRenderable: boolean): void;
228
-
229
- /**
230
- * Load the core context texture for this Texture.
231
- * The ctxTexture is created by the renderer and lives on the GPU.
232
- *
233
- * @returns
234
- */
235
- loadCtxTexture(): CoreContextTexture {
236
- if (this.ctxTexture === undefined) {
237
- this.ctxTexture = this.txManager.renderer.createCtxTexture(this);
238
- }
239
-
240
- return this.ctxTexture;
241
- }
242
-
243
- /**
244
- * Free the core context texture for this Texture.
245
- *
246
- * @remarks
247
- * The ctxTexture is created by the renderer and lives on the GPU.
248
- */
249
- free(): void {
250
- this.ctxTexture?.free();
251
- }
252
-
253
- /**
254
- * Destroy the texture.
255
- *
256
- * @remarks
257
- * This method is called when the texture is no longer needed and should be
258
- * cleaned up.
259
- */
260
- destroy(): void {
261
- this.removeAllListeners();
262
- this.free();
263
- this.freeTextureData();
264
- this.renderableOwners.clear();
265
- }
266
-
267
- /**
268
- * Free the source texture data for this Texture.
269
- *
270
- * @remarks
271
- * The texture data is the source data that is used to populate the CoreContextTexture.
272
- * e.g. ImageData that is downloaded from a URL.
273
- */
274
- freeTextureData(): void {
275
- this.textureData = null;
276
- }
277
-
278
- public setState(
279
- state: TextureState,
280
- errorOrDimensions?: Error | Dimensions,
281
- ): void {
282
- if (this.state === state) {
283
- return;
284
- }
285
-
286
- let payload: Error | Dimensions | null = null;
287
- if (state === 'loaded') {
288
- if (
289
- errorOrDimensions !== undefined &&
290
- 'width' in errorOrDimensions === true &&
291
- 'height' in errorOrDimensions === true &&
292
- errorOrDimensions.width !== undefined &&
293
- errorOrDimensions.height !== undefined
294
- ) {
295
- this._dimensions = errorOrDimensions;
296
- }
297
-
298
- payload = this._dimensions;
299
- } else if (state === 'failed') {
300
- this._error = errorOrDimensions as Error;
301
- payload = this._error;
302
- }
303
-
304
- // emit the new state
305
- this.state = state;
306
- this.emit(state, payload);
307
- }
308
-
309
- /**
310
- * Get the texture data for this texture.
311
- *
312
- * @remarks
313
- * This method is called by the CoreContextTexture when the texture is loaded.
314
- * The texture data is then used to populate the CoreContextTexture.
315
- *
316
- * @returns
317
- * The texture data for this texture.
318
- */
319
- async getTextureData(): Promise<TextureData> {
320
- if (this.textureData === null) {
321
- this.textureData = await this.getTextureSource();
322
- }
323
-
324
- return this.textureData;
325
- }
326
-
327
- /**
328
- * Get the texture source for this texture.
329
- *
330
- * @remarks
331
- * This method is called by the CoreContextTexture when the texture is loaded.
332
- * The texture source is then used to populate the CoreContextTexture.
333
- */
334
- abstract getTextureSource(): Promise<TextureData>;
335
-
336
- /**
337
- * Make a cache key for this texture.
338
- *
339
- * @remarks
340
- * Each concrete `Texture` subclass must implement this method to provide an
341
- * appropriate cache key for the texture type including the texture's
342
- * properties that uniquely identify a copy of the texture. If the texture
343
- * type does not support caching, then this method should return `false`.
344
- *
345
- * @param props
346
- * @returns
347
- * A cache key for this texture or `false` if the texture type does not
348
- * support caching.
349
- */
350
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
351
- static makeCacheKey(props: unknown): string | false {
352
- return false;
353
- }
354
-
355
- /**
356
- * Resolve the default values for the texture's properties.
357
- *
358
- * @remarks
359
- * Each concrete `Texture` subclass must implement this method to provide
360
- * default values for the texture's optional properties.
361
- *
362
- * @param props
363
- * @returns
364
- * The default values for the texture's properties.
365
- */
366
- static resolveDefaults(
367
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
368
- props: unknown,
369
- ): Record<string, any> {
370
- return {};
371
- }
372
- }
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+
20
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
21
+ import type { SubTextureProps } from './SubTexture.js';
22
+ import type { Dimensions } from '../../common/CommonTypes.js';
23
+ import { EventEmitter } from '../../common/EventEmitter.js';
24
+ import type { CoreContextTexture } from '../renderers/CoreContextTexture.js';
25
+ import type { Bound } from '../lib/utils.js';
26
+ import type { TextureError } from '../TextureError.js';
27
+
28
+ /**
29
+ * Event handler for when a Texture is freed
30
+ */
31
+ export type TextureFreedEventHandler = (target: any) => void;
32
+
33
+ /**
34
+ * Event handler for when a Texture is loading
35
+ */
36
+ export type TextureLoadingEventHandler = (target: any) => void;
37
+
38
+ /**
39
+ * Event handler for when a Texture is loaded
40
+ */
41
+ export type TextureLoadedEventHandler = (
42
+ target: any,
43
+ dimensions: Readonly<Dimensions>,
44
+ ) => void;
45
+
46
+ /**
47
+ * Represents compressed texture data.
48
+ */
49
+ export interface CompressedData {
50
+ /**
51
+ * GLenum spcifying compression format
52
+ */
53
+ glInternalFormat: number;
54
+
55
+ /**
56
+ * All mipmap levels
57
+ */
58
+ mipmaps: ArrayBuffer[];
59
+
60
+ /**
61
+ * Supported container types ('pvr' or 'ktx').
62
+ */
63
+ type: 'PVR' | 'KTX' | 'ASTC';
64
+
65
+ /**
66
+ * The width of the compressed texture in pixels. Defaults to 0.
67
+ *
68
+ * @default 0
69
+ */
70
+ w: number;
71
+
72
+ /**
73
+ * The height of the compressed texture in pixels.
74
+ **/
75
+ h: number;
76
+
77
+ /**
78
+ * block info compressed texture format
79
+ */
80
+ blockInfo: {
81
+ width: number;
82
+ height: number;
83
+ bytes: number;
84
+ };
85
+ }
86
+
87
+ /**
88
+ * Event handler for when a Texture fails to load
89
+ */
90
+ export type TextureFailedEventHandler = (
91
+ target: any,
92
+ error: TextureError,
93
+ ) => void;
94
+
95
+ /**
96
+ * TextureData that is used to populate a CoreContextTexture
97
+ */
98
+ export interface TextureData {
99
+ /**
100
+ * The texture data
101
+ */
102
+ data:
103
+ | ImageBitmap
104
+ | ImageData
105
+ | SubTextureProps
106
+ | CompressedData
107
+ | HTMLImageElement
108
+ | Uint8Array
109
+ | null;
110
+ /**
111
+ * Premultiply alpha when uploading texture data to the GPU
112
+ *
113
+ * @defaultValue `false`
114
+ */
115
+ premultiplyAlpha?: boolean | null;
116
+ }
117
+ /**
118
+ * TextureCoords generally numbers between 0 - 1
119
+ */
120
+ export type TextureCoords = Bound;
121
+
122
+ export type TextureState =
123
+ | 'initial' // Before anything is loaded
124
+ | 'fetching' // Fetching or generating texture source
125
+ | 'fetched' // Texture source is ready
126
+ | 'loading' // Uploading to GPU
127
+ | 'loaded' // Fully loaded and usable
128
+ | 'failed' // Failed to load
129
+ | 'freed'; // Released and must be reloaded
130
+
131
+ export enum TextureType {
132
+ 'generic' = 0,
133
+ 'color' = 1,
134
+ 'image' = 2,
135
+ 'noise' = 3,
136
+ 'renderToTexture' = 4,
137
+ 'subTexture' = 5,
138
+ }
139
+
140
+ /**
141
+ * Represents a source of texture data for a CoreContextTexture.
142
+ *
143
+ * @remarks
144
+ * Texture sources are used to populate a CoreContextTexture when that texture
145
+ * is loaded. Texture data retrieved by the CoreContextTexture by the
146
+ * `getTextureData` method. It's the responsibility of the concerete `Texture`
147
+ * subclass to implement this method appropriately.
148
+ */
149
+ export abstract class Texture extends EventEmitter {
150
+ /**
151
+ * The dimensions of the texture
152
+ *
153
+ * @remarks
154
+ * Until the texture data is loaded for the first time the value will be
155
+ * `null`.
156
+ */
157
+ private _dimensions: Dimensions | null = null;
158
+ private _error: TextureError | null = null;
159
+
160
+ // aggregate state
161
+ public state: TextureState = 'initial';
162
+
163
+ readonly renderableOwners: any[] = [];
164
+
165
+ readonly renderable: boolean = false;
166
+
167
+ public type: TextureType = TextureType.generic;
168
+
169
+ public preventCleanup = false;
170
+
171
+ public ctxTexture: CoreContextTexture | undefined;
172
+
173
+ public textureData: TextureData | null = null;
174
+
175
+ public memUsed = 0;
176
+
177
+ /**
178
+ * Memory used by this texture in bytes
179
+ *
180
+ * @remarks
181
+ * This is tracked by the TextureMemoryManager and updated when the texture
182
+ * is loaded/freed. Set to 0 when texture is not loaded.
183
+ */
184
+ public retryCount = 0;
185
+ public maxRetryCount: number;
186
+
187
+ /**
188
+ * Timestamp when texture was created (for startup grace period)
189
+ */
190
+ private createdAt: number = Date.now();
191
+
192
+ /**
193
+ * Flag to track if grace period has expired to avoid repeated Date.now() calls
194
+ */
195
+ private gracePeriodExpired: boolean = false;
196
+
197
+ /**
198
+ * Grace period in milliseconds to prevent premature cleanup during app startup
199
+ * This helps prevent race conditions when bounds calculation is delayed
200
+ */
201
+ private static readonly STARTUP_GRACE_PERIOD = 2000; // 2 seconds
202
+
203
+ constructor(protected txManager: CoreTextureManager) {
204
+ super();
205
+ this.maxRetryCount = txManager.maxRetryCount;
206
+ }
207
+
208
+ get dimensions(): Dimensions | null {
209
+ return this._dimensions;
210
+ }
211
+
212
+ get error(): TextureError | null {
213
+ return this._error;
214
+ }
215
+
216
+ /**
217
+ * Checks if the texture is within the startup grace period.
218
+ * During this period, textures are protected from cleanup to prevent
219
+ * race conditions during app initialization.
220
+ */
221
+ isWithinStartupGracePeriod(): boolean {
222
+ // If grace period already expired, return false immediately
223
+ if (this.gracePeriodExpired === true) {
224
+ return false;
225
+ }
226
+
227
+ // Check if grace period has expired now
228
+ const hasExpired =
229
+ Date.now() - this.createdAt >= Texture.STARTUP_GRACE_PERIOD;
230
+
231
+ if (hasExpired) {
232
+ // Cache the result to avoid future Date.now() calls
233
+ this.gracePeriodExpired = true;
234
+ return false;
235
+ }
236
+
237
+ return true;
238
+ }
239
+
240
+ /**
241
+ * Checks if the texture can be safely cleaned up.
242
+ * Considers the renderable state, startup grace period, and renderable owners.
243
+ */
244
+ canBeCleanedUp(): boolean {
245
+ // Never cleanup if explicitly prevented
246
+ if (this.preventCleanup) {
247
+ return false;
248
+ }
249
+
250
+ // Don't cleanup if still within startup grace period
251
+ if (this.isWithinStartupGracePeriod()) {
252
+ return false;
253
+ }
254
+
255
+ // Don't cleanup if not renderable
256
+ if (this.renderable === true) {
257
+ return false;
258
+ }
259
+
260
+ // Don't cleanup if there are still renderable owners
261
+ if (this.renderableOwners.length > 0) {
262
+ return false;
263
+ }
264
+
265
+ // Safe to cleanup
266
+ return true;
267
+ }
268
+
269
+ /**
270
+ * Add/remove an owner to/from the Texture based on its renderability.
271
+ *
272
+ * @remarks
273
+ * Any object can own a texture, be it a CoreNode or even the state object
274
+ * from a Text Renderer.
275
+ *
276
+ * When the reference to the texture that an owner object holds is replaced
277
+ * or cleared it must call this with `renderable=false` to release the owner
278
+ * association.
279
+ *
280
+ * @param owner
281
+ * @param renderable
282
+ */
283
+ setRenderableOwner(owner: string | number, renderable: boolean): void {
284
+ const oldSize = this.renderableOwners.length;
285
+ const hasOwnerIndex = this.renderableOwners.indexOf(owner);
286
+
287
+ if (renderable === true) {
288
+ if (hasOwnerIndex === -1) {
289
+ // Add the owner to the set
290
+ this.renderableOwners.push(owner);
291
+ }
292
+
293
+ const newSize = this.renderableOwners.length;
294
+ if (oldSize !== newSize && newSize === 1) {
295
+ (this.renderable as boolean) = true;
296
+ this.onChangeIsRenderable?.(true);
297
+ this.load();
298
+ }
299
+ } else {
300
+ if (hasOwnerIndex !== -1) {
301
+ this.renderableOwners.splice(hasOwnerIndex, 1);
302
+ }
303
+
304
+ const newSize = this.renderableOwners.length;
305
+ if (oldSize !== newSize && newSize === 0) {
306
+ (this.renderable as boolean) = false;
307
+ this.onChangeIsRenderable?.(false);
308
+
309
+ // note, not doing a cleanup here, cleanup is managed by the Stage/TextureMemoryManager
310
+ // when it deems appropriate based on memory pressure
311
+ }
312
+ }
313
+ }
314
+
315
+ load(): void {
316
+ if (this.retryCount > this.maxRetryCount) {
317
+ // We've exceeded the max retry count, do not attempt to load again
318
+ return;
319
+ }
320
+ this.txManager.loadTexture(this);
321
+ }
322
+
323
+ /**
324
+ * Event called when the Texture becomes renderable or unrenderable.
325
+ *
326
+ * @remarks
327
+ * Used by subclasses like SubTexture propogate then renderability of the
328
+ * Texture to other referenced Textures.
329
+ *
330
+ * @param isRenderable `true` if this Texture has renderable owners.
331
+ */
332
+ onChangeIsRenderable?(isRenderable: boolean): void;
333
+
334
+ /**
335
+ * Load the core context texture for this Texture.
336
+ * The ctxTexture is created by the renderer and lives on the GPU.
337
+ *
338
+ * @returns
339
+ */
340
+ loadCtxTexture(): CoreContextTexture {
341
+ if (this.ctxTexture === undefined) {
342
+ this.ctxTexture = this.txManager.renderer.createCtxTexture(this);
343
+ }
344
+
345
+ return this.ctxTexture;
346
+ }
347
+
348
+ /**
349
+ * Free the core context texture for this Texture.
350
+ *
351
+ * @remarks
352
+ * The ctxTexture is created by the renderer and lives on the GPU.
353
+ */
354
+ free(): void {
355
+ this.ctxTexture?.free();
356
+ }
357
+
358
+ /**
359
+ * Release the texture data and core context texture for this Texture without changing state.
360
+ *
361
+ * @remarks
362
+ * The ctxTexture is created by the renderer and lives on the GPU.
363
+ */
364
+ release(): void {
365
+ this.ctxTexture?.release();
366
+ this.ctxTexture = undefined;
367
+ this.freeTextureData();
368
+ }
369
+
370
+ /**
371
+ * Destroy the texture.
372
+ *
373
+ * @remarks
374
+ * This method is called when the texture is no longer needed and should be
375
+ * cleaned up.
376
+ */
377
+ destroy(): void {
378
+ // Only free GPU resources if we're in a state where they exist
379
+ if (this.state === 'loaded') {
380
+ this.free();
381
+ }
382
+
383
+ // Always free texture data regardless of state
384
+ this.freeTextureData();
385
+ }
386
+
387
+ /**
388
+ * Free the source texture data for this Texture.
389
+ *
390
+ * @remarks
391
+ * The texture data is the source data that is used to populate the CoreContextTexture.
392
+ * e.g. ImageData that is downloaded from a URL.
393
+ */
394
+ freeTextureData(): void {
395
+ queueMicrotask(this.freeTextureDataTask);
396
+ }
397
+
398
+ public setState(
399
+ state: TextureState,
400
+ errorOrDimensions?: TextureError | Dimensions,
401
+ ): void {
402
+ if (this.state === state) {
403
+ return;
404
+ }
405
+
406
+ let payload: TextureError | Dimensions | null = null;
407
+ if (state === 'loaded') {
408
+ if (
409
+ errorOrDimensions !== undefined &&
410
+ 'w' in errorOrDimensions === true &&
411
+ 'h' in errorOrDimensions === true &&
412
+ errorOrDimensions.w !== undefined &&
413
+ errorOrDimensions.h !== undefined
414
+ ) {
415
+ this._dimensions = errorOrDimensions;
416
+ }
417
+
418
+ payload = this._dimensions;
419
+ } else if (state === 'failed') {
420
+ this._error = errorOrDimensions as TextureError;
421
+ payload = this._error;
422
+
423
+ // increment the retry count for the texture
424
+ // this is used to compare against maxRetryCount, if set
425
+ // to determine if we should try loading again
426
+ this.retryCount += 1;
427
+
428
+ queueMicrotask(this.releaseTask);
429
+ } else if (state === 'loading') {
430
+ this._error = null;
431
+ this._dimensions = null;
432
+ } else {
433
+ this._error = null;
434
+ }
435
+
436
+ // emit the new state
437
+ this.state = state;
438
+ this.emit(state, payload);
439
+ }
440
+
441
+ /**
442
+ * Get the texture data for this texture.
443
+ *
444
+ * @remarks
445
+ * This method is called by the CoreContextTexture when the texture is loaded.
446
+ * The texture data is then used to populate the CoreContextTexture.
447
+ *
448
+ * @returns
449
+ * The texture data for this texture.
450
+ */
451
+ async getTextureData(): Promise<TextureData> {
452
+ if (this.textureData === null) {
453
+ this.textureData = await this.getTextureSource();
454
+ }
455
+
456
+ return this.textureData;
457
+ }
458
+
459
+ /**
460
+ * Task for queueMicrotask to free texture data.
461
+ *
462
+ * @remarks
463
+ * This method is called in a microtask to free the texture data.
464
+ */
465
+ private freeTextureDataTask = (): void => {
466
+ this.textureData = null;
467
+ };
468
+
469
+ /**
470
+ * Task for queueMicrotask to release the texture.
471
+ *
472
+ * @remarks
473
+ * This method is called in a microtask to release the texture.
474
+ */
475
+ private releaseTask = (): void => {
476
+ this.release();
477
+ };
478
+
479
+ /**
480
+ * Get the texture source for this texture.
481
+ *
482
+ * @remarks
483
+ * This method is called by the CoreContextTexture when the texture is loaded.
484
+ * The texture source is then used to populate the CoreContextTexture.
485
+ */
486
+ abstract getTextureSource(): Promise<TextureData>;
487
+
488
+ /**
489
+ * Make a cache key for this texture.
490
+ *
491
+ * @remarks
492
+ * Each concrete `Texture` subclass must implement this method to provide an
493
+ * appropriate cache key for the texture type including the texture's
494
+ * properties that uniquely identify a copy of the texture. If the texture
495
+ * type does not support caching, then this method should return `false`.
496
+ *
497
+ * @param props
498
+ * @returns
499
+ * A cache key for this texture or `false` if the texture type does not
500
+ * support caching.
501
+ */
502
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
503
+ static makeCacheKey(props: unknown): string | false {
504
+ return false;
505
+ }
506
+
507
+ /**
508
+ * Resolve the default values for the texture's properties.
509
+ *
510
+ * @remarks
511
+ * Each concrete `Texture` subclass must implement this method to provide
512
+ * default values for the texture's optional properties.
513
+ *
514
+ * @param props
515
+ * @returns
516
+ * The default values for the texture's properties.
517
+ */
518
+ static resolveDefaults(
519
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
520
+ props: unknown,
521
+ ): Record<string, any> {
522
+ return {};
523
+ }
524
+ }