@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21

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 (587) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +124 -100
  19. package/dist/src/core/CoreNode.js +720 -472
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +355 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +93 -33
  30. package/dist/src/core/Stage.js +315 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/Animation.d.ts +21 -0
  39. package/dist/src/core/animations/Animation.js +194 -0
  40. package/dist/src/core/animations/Animation.js.map +1 -0
  41. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  42. package/dist/src/core/animations/CoreAnimation.js +8 -3
  43. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  44. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  45. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  46. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  47. package/dist/src/core/animations/Playback.d.ts +64 -0
  48. package/dist/src/core/animations/Playback.js +169 -0
  49. package/dist/src/core/animations/Playback.js.map +1 -0
  50. package/dist/src/core/animations/Transition.d.ts +27 -0
  51. package/dist/src/core/animations/Transition.js +52 -0
  52. package/dist/src/core/animations/Transition.js.map +1 -0
  53. package/dist/src/core/animations/utils.d.ts +2 -0
  54. package/dist/src/core/animations/utils.js +136 -0
  55. package/dist/src/core/animations/utils.js.map +1 -0
  56. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  57. package/dist/src/core/lib/ImageWorker.js +31 -12
  58. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  59. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  60. package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
  61. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  62. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  63. package/dist/src/core/lib/collectionUtils.js +100 -0
  64. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  65. package/dist/src/core/lib/colorCache.d.ts +1 -0
  66. package/dist/src/core/lib/colorCache.js +19 -0
  67. package/dist/src/core/lib/colorCache.js.map +1 -0
  68. package/dist/src/core/lib/colorParser.d.ts +21 -0
  69. package/dist/src/core/lib/colorParser.js +72 -0
  70. package/dist/src/core/lib/colorParser.js.map +1 -0
  71. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  72. package/dist/src/core/lib/textureCompression.js +320 -67
  73. package/dist/src/core/lib/textureCompression.js.map +1 -1
  74. package/dist/src/core/lib/utils.d.ts +8 -2
  75. package/dist/src/core/lib/utils.js +43 -21
  76. package/dist/src/core/lib/utils.js.map +1 -1
  77. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  78. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  79. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  80. package/dist/src/core/platform.js +30 -5
  81. package/dist/src/core/platform.js.map +1 -1
  82. package/dist/src/core/platforms/Platform.d.ts +42 -0
  83. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  84. package/dist/src/core/platforms/Platform.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  86. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  87. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  88. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  89. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  90. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
  91. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  92. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  93. package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
  94. package/dist/src/core/renderers/CoreShaderNode.js +26 -0
  95. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  96. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  97. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  98. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  99. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  100. package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
  101. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  102. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  103. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  104. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  105. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  106. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  107. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  108. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  109. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  110. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  111. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  112. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  113. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  115. package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
  116. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  117. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  118. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  119. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  120. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
  121. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  122. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  124. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  125. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  126. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  127. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  129. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  132. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  133. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  135. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -52
  136. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
  139. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  140. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
  141. package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
  142. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  143. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
  144. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  145. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  147. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -43
  148. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  150. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  152. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  154. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  155. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  156. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  157. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  158. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  159. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  160. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  162. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  163. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  164. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  165. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  166. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  171. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  172. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  173. package/dist/src/core/shaders/canvas/Border.js +64 -25
  174. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  175. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  176. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  177. package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
  178. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  179. package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
  180. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  181. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  182. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  184. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +45 -7
  185. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  187. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +50 -11
  188. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
  190. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  191. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  194. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -11
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  203. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  204. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  205. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  206. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  207. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  208. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  209. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  210. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  211. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  212. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  213. package/dist/src/core/shaders/utils.js.map +1 -0
  214. package/dist/src/core/shaders/webgl/Border.js +116 -35
  215. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/Default.js +6 -7
  217. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  219. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  221. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  222. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  223. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  224. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  225. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
  227. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  228. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
  229. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  230. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
  231. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  232. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  233. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  234. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  235. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  236. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  237. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/Shadow.js +12 -6
  239. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  240. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  241. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  242. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  243. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  244. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  245. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  247. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  248. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  249. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  250. package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -0
  251. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  252. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  253. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  254. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  255. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  256. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  257. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  258. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  259. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  260. package/dist/src/core/text-rendering/Utils.js +84 -0
  261. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  262. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  263. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  264. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  266. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  267. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  269. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  270. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  271. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  272. package/dist/src/core/textures/ColorTexture.js +3 -4
  273. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  274. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  275. package/dist/src/core/textures/ImageTexture.js +31 -40
  276. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  277. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  278. package/dist/src/core/textures/NoiseTexture.js +8 -8
  279. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  280. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  281. package/dist/src/core/textures/RenderTexture.js +12 -12
  282. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  283. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  284. package/dist/src/core/textures/SubTexture.js +19 -37
  285. package/dist/src/core/textures/SubTexture.js.map +1 -1
  286. package/dist/src/core/textures/Texture.d.ts +87 -10
  287. package/dist/src/core/textures/Texture.js +160 -17
  288. package/dist/src/core/textures/Texture.js.map +1 -1
  289. package/dist/src/core/utils.d.ts +2 -1
  290. package/dist/src/core/utils.js +1 -1
  291. package/dist/src/core/utils.js.map +1 -1
  292. package/dist/src/main-api/INode.d.ts +2 -2
  293. package/dist/src/main-api/Inspector.d.ts +131 -2
  294. package/dist/src/main-api/Inspector.js +345 -28
  295. package/dist/src/main-api/Inspector.js.map +1 -1
  296. package/dist/src/main-api/Renderer.d.ts +295 -82
  297. package/dist/src/main-api/Renderer.js +223 -76
  298. package/dist/src/main-api/Renderer.js.map +1 -1
  299. package/dist/src/utils.d.ts +1 -6
  300. package/dist/src/utils.js +2 -9
  301. package/dist/src/utils.js.map +1 -1
  302. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  303. package/dist/tsconfig.tsbuildinfo +1 -0
  304. package/exports/canvas.ts +1 -1
  305. package/exports/index.ts +2 -8
  306. package/exports/utils.ts +7 -1
  307. package/exports/webgl.ts +3 -1
  308. package/package.json +15 -17
  309. package/src/common/CommonTypes.ts +18 -2
  310. package/src/core/Autosizer.ts +224 -0
  311. package/src/core/CoreNode.test.ts +179 -17
  312. package/src/core/CoreNode.ts +895 -599
  313. package/src/core/CoreShaderManager.ts +5 -10
  314. package/src/core/CoreTextNode.ts +422 -286
  315. package/src/core/CoreTextureManager.ts +110 -130
  316. package/src/core/Stage.ts +397 -195
  317. package/src/core/TextureError.ts +46 -0
  318. package/src/core/TextureMemoryManager.ts +164 -141
  319. package/src/core/animations/CoreAnimation.ts +15 -9
  320. package/src/core/animations/CoreAnimationController.ts +13 -4
  321. package/src/core/lib/ImageWorker.ts +43 -12
  322. package/src/core/lib/WebGlContextWrapper.ts +127 -79
  323. package/src/core/lib/collectionUtils.ts +118 -0
  324. package/src/core/lib/colorCache.ts +20 -0
  325. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  326. package/src/core/lib/textureCompression.ts +433 -75
  327. package/src/core/lib/utils.ts +54 -25
  328. package/src/core/lib/validateImageBitmap.ts +17 -6
  329. package/src/core/platforms/Platform.ts +83 -0
  330. package/src/core/platforms/web/WebPlatform.ts +132 -0
  331. package/src/core/renderers/CoreContextTexture.ts +2 -1
  332. package/src/core/renderers/CoreRenderer.ts +5 -32
  333. package/src/core/renderers/CoreShaderNode.ts +38 -3
  334. package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
  335. package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
  336. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  337. package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
  338. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  339. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  340. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
  341. package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
  342. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
  343. package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
  344. package/src/core/shaders/canvas/Border.ts +88 -34
  345. package/src/core/shaders/canvas/HolePunch.ts +5 -11
  346. package/src/core/shaders/canvas/LinearGradient.ts +14 -10
  347. package/src/core/shaders/canvas/RadialGradient.ts +24 -41
  348. package/src/core/shaders/canvas/Rounded.ts +7 -7
  349. package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
  350. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
  351. package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
  352. package/src/core/shaders/canvas/Shadow.ts +7 -5
  353. package/src/core/shaders/canvas/utils/render.ts +45 -36
  354. package/src/core/shaders/templates/BorderTemplate.ts +42 -12
  355. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  356. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  357. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  358. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  359. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  360. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  361. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  362. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  363. package/src/core/shaders/webgl/Border.ts +116 -39
  364. package/src/core/shaders/webgl/Default.ts +6 -7
  365. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  366. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  367. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  368. package/src/core/shaders/webgl/Rounded.ts +4 -6
  369. package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
  370. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
  371. package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
  372. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  373. package/src/core/shaders/webgl/Shadow.ts +12 -6
  374. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  375. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  376. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  377. package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
  378. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  379. package/src/core/text-rendering/TextRenderer.ts +444 -0
  380. package/src/core/text-rendering/Utils.ts +99 -0
  381. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  382. package/src/core/textures/ColorTexture.ts +7 -5
  383. package/src/core/textures/ImageTexture.ts +78 -66
  384. package/src/core/textures/NoiseTexture.ts +14 -12
  385. package/src/core/textures/RenderTexture.ts +18 -16
  386. package/src/core/textures/SubTexture.ts +25 -46
  387. package/src/core/textures/Texture.ts +207 -24
  388. package/src/core/utils.ts +9 -7
  389. package/src/main-api/INode.ts +4 -3
  390. package/src/main-api/Inspector.ts +577 -36
  391. package/src/main-api/Renderer.ts +518 -139
  392. package/src/utils.ts +10 -10
  393. package/dist/exports/core-api.d.ts +0 -74
  394. package/dist/exports/core-api.js +0 -96
  395. package/dist/exports/core-api.js.map +0 -1
  396. package/dist/exports/main-api.d.ts +0 -30
  397. package/dist/exports/main-api.js +0 -45
  398. package/dist/exports/main-api.js.map +0 -1
  399. package/dist/src/core/CoreExtension.d.ts +0 -12
  400. package/dist/src/core/CoreExtension.js +0 -29
  401. package/dist/src/core/CoreExtension.js.map +0 -1
  402. package/dist/src/core/CoreStuff.d.ts +0 -1
  403. package/dist/src/core/CoreStuff.js +0 -138
  404. package/dist/src/core/CoreStuff.js.map +0 -1
  405. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  406. package/dist/src/core/CoreTexturizer.js +0 -47
  407. package/dist/src/core/CoreTexturizer.js.map +0 -1
  408. package/dist/src/core/LngNode.d.ts +0 -736
  409. package/dist/src/core/LngNode.js +0 -1174
  410. package/dist/src/core/LngNode.js.map +0 -1
  411. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  412. package/dist/src/core/Matrix2DContext.js +0 -45
  413. package/dist/src/core/Matrix2DContext.js.map +0 -1
  414. package/dist/src/core/ShaderNode.d.ts +0 -10
  415. package/dist/src/core/ShaderNode.js +0 -30
  416. package/dist/src/core/ShaderNode.js.map +0 -1
  417. package/dist/src/core/TextNode.d.ts +0 -103
  418. package/dist/src/core/TextNode.js +0 -331
  419. package/dist/src/core/TextNode.js.map +0 -1
  420. package/dist/src/core/lib/Coords.d.ts +0 -14
  421. package/dist/src/core/lib/Coords.js +0 -55
  422. package/dist/src/core/lib/Coords.js.map +0 -1
  423. package/dist/src/core/lib/glm/common.d.ts +0 -162
  424. package/dist/src/core/lib/glm/common.js +0 -81
  425. package/dist/src/core/lib/glm/common.js.map +0 -1
  426. package/dist/src/core/lib/glm/index.d.ts +0 -11
  427. package/dist/src/core/lib/glm/index.js +0 -30
  428. package/dist/src/core/lib/glm/index.js.map +0 -1
  429. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  430. package/dist/src/core/lib/glm/mat2.js +0 -396
  431. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  432. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  433. package/dist/src/core/lib/glm/mat2d.js +0 -442
  434. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  435. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  436. package/dist/src/core/lib/glm/mat3.js +0 -680
  437. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  438. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  439. package/dist/src/core/lib/glm/mat4.js +0 -1802
  440. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  441. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  442. package/dist/src/core/lib/glm/quat.js +0 -693
  443. package/dist/src/core/lib/glm/quat.js.map +0 -1
  444. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  445. package/dist/src/core/lib/glm/quat2.js +0 -754
  446. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  447. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  448. package/dist/src/core/lib/glm/vec2.js +0 -569
  449. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  450. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  451. package/dist/src/core/lib/glm/vec3.js +0 -720
  452. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  453. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  454. package/dist/src/core/lib/glm/vec4.js +0 -608
  455. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  456. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  457. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  458. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  460. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  461. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  463. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  464. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  465. package/dist/src/core/scene/Scene.d.ts +0 -59
  466. package/dist/src/core/scene/Scene.js +0 -106
  467. package/dist/src/core/scene/Scene.js.map +0 -1
  468. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  469. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  470. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  471. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  472. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  473. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  474. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  475. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  476. package/dist/src/main-api/IShaderController.d.ts +0 -14
  477. package/dist/src/main-api/IShaderController.js +0 -30
  478. package/dist/src/main-api/IShaderController.js.map +0 -1
  479. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  480. package/dist/src/main-api/IShaderNode.js +0 -19
  481. package/dist/src/main-api/IShaderNode.js.map +0 -1
  482. package/dist/src/main-api/RendererMain.d.ts +0 -375
  483. package/dist/src/main-api/RendererMain.js +0 -365
  484. package/dist/src/main-api/RendererMain.js.map +0 -1
  485. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  486. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  487. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  488. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  489. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  490. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  491. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  492. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  493. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  494. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  495. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  496. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  497. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  498. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  499. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  500. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  501. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  502. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  503. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  504. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  505. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  506. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  507. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  508. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  509. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  510. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  511. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  512. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  513. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  514. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  515. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  516. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  517. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  518. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  519. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  520. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  521. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  522. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  523. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  524. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  525. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  526. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  527. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  528. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  529. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  530. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  531. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  532. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  533. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  534. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  535. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  536. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  537. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  538. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  539. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  540. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  541. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  542. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  543. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  544. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  545. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  546. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  547. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  548. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  549. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  550. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  551. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  552. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  553. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  554. package/dist/src/render-drivers/utils.d.ts +0 -12
  555. package/dist/src/render-drivers/utils.js +0 -69
  556. package/dist/src/render-drivers/utils.js.map +0 -1
  557. package/scripts/please-use-pnpm.js +0 -13
  558. package/src/core/platform.ts +0 -64
  559. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  560. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  561. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  562. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  563. package/src/core/text-rendering/TrFontManager.ts +0 -183
  564. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  565. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  566. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  567. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  568. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  569. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  570. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  571. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  572. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  573. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  574. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  575. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  576. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  577. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  578. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  579. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  580. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  581. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  582. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  583. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  584. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  585. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  586. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  587. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -20,19 +20,11 @@ import type { CoreNode } from '../../CoreNode.js';
20
20
  import { SubTexture } from '../../textures/SubTexture.js';
21
21
  import { TextureType, type Texture } from '../../textures/Texture.js';
22
22
  import type { CoreContextTexture } from '../CoreContextTexture.js';
23
- import {
24
- CoreRenderer,
25
- type CoreRendererOptions,
26
- type QuadOptions,
27
- } from '../CoreRenderer.js';
23
+ import { CoreRenderer, type CoreRendererOptions } from '../CoreRenderer.js';
28
24
  import { CanvasTexture } from './CanvasTexture.js';
29
- import {
30
- parseColor,
31
- parseToAbgrString,
32
- parseToRgbaString,
33
- } from './internal/ColorUtils.js';
34
- import { assertTruthy } from '../../../utils.js';
25
+ import { parseColor } from '../../lib/colorParser.js';
35
26
  import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
27
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
36
28
 
37
29
  export class CanvasRenderer extends CoreRenderer {
38
30
  private context: CanvasRenderingContext2D;
@@ -42,18 +34,15 @@ export class CanvasRenderer extends CoreRenderer {
42
34
  public renderToTextureActive = false;
43
35
  activeRttNode: CoreNode | null = null;
44
36
 
45
- private parsedColorCache: Map<number, string> = new Map();
46
-
47
37
  constructor(options: CoreRendererOptions) {
48
38
  super(options);
49
39
 
50
40
  this.mode = 'canvas';
51
-
52
41
  const { canvas } = options;
53
42
  this.canvas = canvas as HTMLCanvasElement;
54
43
  this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
55
44
  this.pixelRatio = this.stage.pixelRatio;
56
- this.clearColor = this.getParsedColor(this.stage.clearColor);
45
+ this.clearColor = normalizeCanvasColor(this.stage.clearColor);
57
46
  }
58
47
 
59
48
  reset(): void {
@@ -73,44 +62,32 @@ export class CanvasRenderer extends CoreRenderer {
73
62
  // noop
74
63
  }
75
64
 
76
- addQuad(quad: QuadOptions): void {
65
+ addQuad(node: CoreNode): void {
77
66
  const ctx = this.context;
78
- const { tx, ty, ta, tb, tc, td, clippingRect } = quad;
79
- let texture = quad.texture;
80
- const textureType = texture?.type;
81
- assertTruthy(textureType, 'Texture type is not defined');
82
-
83
- // The Canvas2D renderer only supports image and color textures
84
- if (
85
- textureType !== TextureType.image &&
86
- textureType !== TextureType.color &&
87
- textureType !== TextureType.subTexture &&
88
- textureType !== TextureType.noise
89
- ) {
90
- return;
91
- }
92
-
93
- if (texture) {
94
- if (texture instanceof SubTexture) {
95
- texture = texture.parentTexture;
96
- }
97
-
98
- if (texture.state === 'freed') {
99
- return;
100
- }
101
- if (texture.state !== 'loaded') {
67
+ const { tx, ty, ta, tb, tc, td } = node.globalTransform!;
68
+ const clippingRect = node.clippingRect;
69
+ let texture = (node.props.texture || this.stage.defaultTexture) as Texture;
70
+ // The Canvas2D renderer only supports image textures, no textures are used for color blocks
71
+ if (texture !== null) {
72
+ const textureType = texture.type;
73
+ if (
74
+ textureType !== TextureType.image &&
75
+ textureType !== TextureType.subTexture &&
76
+ textureType !== TextureType.color &&
77
+ textureType !== TextureType.noise
78
+ ) {
102
79
  return;
103
80
  }
104
81
  }
105
82
 
106
83
  const hasTransform = ta !== 1;
107
- const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
108
- const hasShader = quad.shader !== null;
84
+ const hasClipping = clippingRect.w !== 0 && clippingRect.h !== 0;
85
+ const shader = node.props.shader;
86
+ const hasShader = shader !== null;
109
87
 
110
88
  let saveAndRestore = hasTransform === true || hasClipping === true;
111
89
  if (hasShader === true) {
112
- saveAndRestore =
113
- saveAndRestore || (quad.shader as CanvasShaderNode).applySNR;
90
+ saveAndRestore = saveAndRestore || (shader as CanvasShaderNode).applySNR;
114
91
  }
115
92
 
116
93
  if (saveAndRestore) {
@@ -119,8 +96,8 @@ export class CanvasRenderer extends CoreRenderer {
119
96
 
120
97
  if (hasClipping === true) {
121
98
  const path = new Path2D();
122
- const { x, y, width, height } = clippingRect;
123
- path.rect(x, y, width, height);
99
+ const { x, y, w, h } = clippingRect;
100
+ path.rect(x, y, w, h);
124
101
  ctx.clip(path);
125
102
  }
126
103
 
@@ -141,12 +118,13 @@ export class CanvasRenderer extends CoreRenderer {
141
118
 
142
119
  if (hasShader === true) {
143
120
  let renderContext: (() => void) | null = () => {
144
- this.renderContext(quad);
121
+ this.renderContext(node, texture);
145
122
  };
146
- (quad.shader as CanvasShaderNode).render(ctx, quad, renderContext);
123
+
124
+ (shader as CanvasShaderNode).render(ctx, node, renderContext);
147
125
  renderContext = null;
148
126
  } else {
149
- this.renderContext(quad);
127
+ this.renderContext(node, texture);
150
128
  }
151
129
 
152
130
  if (saveAndRestore) {
@@ -154,79 +132,69 @@ export class CanvasRenderer extends CoreRenderer {
154
132
  }
155
133
  }
156
134
 
157
- renderContext(quad: QuadOptions) {
158
- const color = quad.colorTl;
159
- const textureType = quad.texture?.type;
160
- if (
161
- (textureType === TextureType.image ||
162
- textureType === TextureType.subTexture ||
163
- textureType === TextureType.noise) &&
164
- quad.texture?.ctxTexture
165
- ) {
135
+ renderContext(node: CoreNode, texture: Texture) {
136
+ const color = node.premultipliedColorTl;
137
+ const textureType = texture.type;
138
+ const tx = node.globalTransform!.tx;
139
+ const ty = node.globalTransform!.ty;
140
+ const width = node.props.w;
141
+ const height = node.props.h;
142
+
143
+ if (textureType !== TextureType.color) {
166
144
  const tintColor = parseColor(color);
167
- const image = (quad.texture.ctxTexture as CanvasTexture).getImage(
168
- tintColor,
169
- );
170
- this.context.globalAlpha = tintColor.a ?? quad.alpha;
171
- if (textureType === TextureType.subTexture) {
172
- this.context.drawImage(
173
- image,
174
- (quad.texture as SubTexture).props.x,
175
- (quad.texture as SubTexture).props.y,
176
- (quad.texture as SubTexture).props.width,
177
- (quad.texture as SubTexture).props.height,
178
- quad.tx,
179
- quad.ty,
180
- quad.width,
181
- quad.height,
182
- );
183
- } else {
184
- try {
185
- this.context.drawImage(
186
- image,
187
- quad.tx,
188
- quad.ty,
189
- quad.width,
190
- quad.height,
191
- );
192
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
193
- } catch (error) {
194
- // noop
195
- }
145
+ if (textureType !== TextureType.subTexture) {
146
+ const image = (texture.ctxTexture as CanvasTexture).getImage(tintColor);
147
+ this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
148
+ this.context.drawImage(image, tx, ty, width, height);
149
+ this.context.globalAlpha = 1;
150
+ return;
196
151
  }
152
+ const image = (
153
+ (texture as SubTexture).parentTexture.ctxTexture as CanvasTexture
154
+ ).getImage(tintColor);
155
+ const props = (texture as SubTexture).props;
156
+
157
+ this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
158
+ this.context.drawImage(
159
+ image,
160
+ props.x,
161
+ props.y,
162
+ props.w,
163
+ props.h,
164
+ tx,
165
+ ty,
166
+ width,
167
+ height,
168
+ );
197
169
  this.context.globalAlpha = 1;
198
170
  return;
199
171
  }
200
172
  const hasGradient =
201
- quad.colorTl !== quad.colorTr || quad.colorTl !== quad.colorBr;
202
- if (textureType === TextureType.color && hasGradient) {
203
- let endX: number = quad.tx;
204
- let endY: number = quad.ty;
173
+ node.premultipliedColorTl !== node.premultipliedColorTr ||
174
+ node.premultipliedColorTl !== node.premultipliedColorBr;
175
+ if (hasGradient === true) {
176
+ let endX: number = tx;
177
+ let endY: number = ty;
205
178
  let endColor: number;
206
- if (quad.colorTl === quad.colorTr) {
179
+ if (node.premultipliedColorTl === node.premultipliedColorTr) {
207
180
  // vertical
208
- endX = quad.tx;
209
- endY = quad.ty + quad.height;
210
- endColor = quad.colorBr;
181
+ endX = tx;
182
+ endY = ty + height;
183
+ endColor = node.premultipliedColorBr;
211
184
  } else {
212
185
  // horizontal
213
- endX = quad.tx + quad.width;
214
- endY = quad.ty;
215
- endColor = quad.colorTr;
186
+ endX = tx + width;
187
+ endY = ty;
188
+ endColor = node.premultipliedColorTr;
216
189
  }
217
- const gradient = this.context.createLinearGradient(
218
- quad.tx,
219
- quad.ty,
220
- endX,
221
- endY,
222
- );
223
- gradient.addColorStop(0, this.getParsedColor(color));
224
- gradient.addColorStop(1, this.getParsedColor(endColor));
190
+ const gradient = this.context.createLinearGradient(tx, ty, endX, endY);
191
+ gradient.addColorStop(0, normalizeCanvasColor(color));
192
+ gradient.addColorStop(1, normalizeCanvasColor(endColor));
225
193
  this.context.fillStyle = gradient;
226
- this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
227
- } else if (textureType === TextureType.color) {
228
- this.context.fillStyle = this.getParsedColor(color);
229
- this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
194
+ this.context.fillRect(tx, ty, width, height);
195
+ } else {
196
+ this.context.fillStyle = normalizeCanvasColor(color);
197
+ this.context.fillRect(tx, ty, width, height);
230
198
  }
231
199
  }
232
200
 
@@ -269,30 +237,20 @@ export class CanvasRenderer extends CoreRenderer {
269
237
  return null;
270
238
  }
271
239
 
272
- getParsedColor(color: number, isRGBA: boolean = false) {
273
- let out = this.parsedColorCache.get(color);
274
- if (out !== undefined) {
275
- return out;
276
- }
277
- if (isRGBA) {
278
- out = parseToRgbaString(color);
279
- } else {
280
- out = parseToAbgrString(color);
281
- }
282
- this.parsedColorCache.set(color, out);
283
- return out;
284
- }
285
-
286
240
  /**
287
241
  * Updates the clear color of the canvas renderer.
288
242
  *
289
243
  * @param color - The color to set as the clear color.
290
244
  */
291
245
  updateClearColor(color: number) {
292
- this.clearColor = this.getParsedColor(color);
246
+ this.clearColor = normalizeCanvasColor(color);
247
+ }
248
+
249
+ override updateViewport(): void {
250
+ // noop
293
251
  }
294
252
 
295
- override getDefaultShaderNode() {
253
+ getDefaultShaderNode() {
296
254
  return null;
297
255
  }
298
256
  }
@@ -16,10 +16,9 @@
16
16
  */
17
17
 
18
18
  import type { CoreNode } from '../../CoreNode.js';
19
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
19
20
  import type { Stage } from '../../Stage.js';
20
- import type { QuadOptions } from '../CoreRenderer.js';
21
21
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
22
- import type { CanvasRenderer } from './CanvasRenderer.js';
23
22
 
24
23
  export type CanvasShaderType<
25
24
  T extends object = Record<string, unknown>,
@@ -28,7 +27,7 @@ export type CanvasShaderType<
28
27
  render: (
29
28
  this: CanvasShaderNode<T, C>,
30
29
  ctx: CanvasRenderingContext2D,
31
- quad: QuadOptions,
30
+ node: CoreNode,
32
31
  renderContext: () => void,
33
32
  ) => void;
34
33
  update?: (this: CanvasShaderNode<T, C>, node: CoreNode) => void;
@@ -67,10 +66,7 @@ export class CanvasShaderNode<
67
66
 
68
67
  this.update = () => {
69
68
  const prevKey = this.valueKey;
70
- this.valueKey = '';
71
- for (const key in this.resolvedProps) {
72
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
- }
69
+ this.valueKey = this.createValueKey();
74
70
 
75
71
  if (prevKey === this.valueKey) {
76
72
  return;
@@ -94,6 +90,6 @@ export class CanvasShaderNode<
94
90
  }
95
91
 
96
92
  toColorString(rgba: number) {
97
- return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
93
+ return normalizeCanvasColor(rgba, true);
98
94
  }
99
95
  }
@@ -19,8 +19,8 @@
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
21
  import { assertTruthy } from '../../../utils.js';
22
+ import { formatRgba, type IParsedColor } from '../../lib/colorParser.js';
22
23
  import { CoreContextTexture } from '../CoreContextTexture.js';
23
- import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
24
 
25
25
  export class CanvasTexture extends CoreContextTexture {
26
26
  protected image:
@@ -35,24 +35,28 @@ export class CanvasTexture extends CoreContextTexture {
35
35
  }
36
36
  | undefined;
37
37
 
38
- load(): void {
38
+ async load(): Promise<void> {
39
39
  this.textureSource.setState('loading');
40
40
 
41
- this.onLoadRequest()
42
- .then((size) => {
43
- this.textureSource.setState('loaded', size);
44
- this.textureSource.freeTextureData();
45
- this.updateMemSize();
46
- })
47
- .catch((err) => {
48
- this.textureSource.setState('failed', err as Error);
49
- this.textureSource.freeTextureData();
50
- });
41
+ try {
42
+ const size = await this.onLoadRequest();
43
+ this.textureSource.setState('loaded', size);
44
+ this.textureSource.freeTextureData();
45
+ this.updateMemSize();
46
+ } catch (err) {
47
+ this.textureSource.setState('failed', err as Error);
48
+ this.textureSource.freeTextureData();
49
+ throw err;
50
+ }
51
51
  }
52
52
 
53
- free(): void {
53
+ release(): void {
54
54
  this.image = undefined;
55
55
  this.tintCache = undefined;
56
+ }
57
+
58
+ free(): void {
59
+ this.release();
56
60
  this.textureSource.setState('freed');
57
61
  this.setTextureMemUse(0);
58
62
  this.textureSource.freeTextureData();
@@ -65,8 +69,8 @@ export class CanvasTexture extends CoreContextTexture {
65
69
  const mult = this.tintCache ? 8 : 4;
66
70
  if (this.textureSource.dimensions) {
67
71
  this.setTextureMemUse(
68
- this.textureSource.dimensions.width *
69
- this.textureSource.dimensions.height *
72
+ this.textureSource.dimensions.w *
73
+ this.textureSource.dimensions.h *
70
74
  mult,
71
75
  );
72
76
  }
@@ -142,15 +146,15 @@ export class CanvasTexture extends CoreContextTexture {
142
146
  const ctx = canvas.getContext('2d');
143
147
  if (ctx) ctx.putImageData(data, 0, 0);
144
148
  this.image = canvas;
145
- return { width: data.width, height: data.height };
149
+ return { w: data.width, h: data.height };
146
150
  } else if (
147
151
  (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
148
152
  data instanceof HTMLImageElement
149
153
  ) {
150
154
  this.image = data;
151
- return { width: data.width, height: data.height };
155
+ return { w: data.width, h: data.height };
152
156
  }
153
157
 
154
- return { width: 0, height: 0 };
158
+ return { w: 0, h: 0 };
155
159
  }
156
160
  }
@@ -0,0 +1,105 @@
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 { CoreRenderOp } from '../CoreRenderOp.js';
21
+ import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
22
+ import type { WebGlRenderer } from './WebGlRenderer.js';
23
+ import type { BufferCollection } from './internal/BufferCollection.js';
24
+ import type { WebGlShaderNode } from './WebGlShaderNode.js';
25
+ import type { RectWithValid } from '../../lib/utils.js';
26
+ import type { Dimensions } from '../../../common/CommonTypes.js';
27
+ import type { Stage } from '../../Stage.js';
28
+
29
+ /**
30
+ * Can render multiple quads with multiple textures (up to vertex shader texture limit)
31
+ *
32
+ */
33
+ export class SdfRenderOp extends CoreRenderOp {
34
+ public numQuads = 0;
35
+ public readonly isCoreNode = false as const;
36
+ public renderOpTextures: WebGlCtxTexture[] = [];
37
+ public time: number = 0;
38
+ readonly stage: Stage;
39
+
40
+ constructor(
41
+ readonly renderer: WebGlRenderer,
42
+ readonly shader: WebGlShaderNode,
43
+ readonly sdfShaderProps: Record<string, unknown>,
44
+ readonly quadBufferCollection: BufferCollection,
45
+ readonly worldAlpha: number,
46
+ readonly clippingRect: RectWithValid,
47
+ readonly w: number,
48
+ readonly h: number,
49
+ readonly rtt: boolean,
50
+ readonly parentHasRenderTexture: boolean,
51
+ readonly framebufferDimensions: Dimensions | null,
52
+ ) {
53
+ super();
54
+ this.stage = renderer.stage;
55
+ }
56
+
57
+ addTexture(texture: WebGlCtxTexture): number {
58
+ const { renderOpTextures } = this;
59
+ const length = renderOpTextures.length;
60
+
61
+ // We only support 1 texture (atlas) for SDF for now, but following the pattern
62
+ for (let i = 0; i < length; i++) {
63
+ if (renderOpTextures[i] === texture) {
64
+ return i;
65
+ }
66
+ }
67
+
68
+ renderOpTextures.push(texture);
69
+ return length;
70
+ }
71
+
72
+ draw() {
73
+ const { glw, options, stage } = this.renderer;
74
+
75
+ stage.shManager.useShader(this.shader.program);
76
+ this.shader.program.bindRenderOp(this);
77
+
78
+ // Clipping
79
+ if (this.clippingRect.valid === true) {
80
+ const pixelRatio = this.parentHasRenderTexture ? 1 : stage.pixelRatio;
81
+ const clipX = Math.round(this.clippingRect.x * pixelRatio);
82
+ const clipWidth = Math.round(this.clippingRect.w * pixelRatio);
83
+ const clipHeight = Math.round(this.clippingRect.h * pixelRatio);
84
+ let clipY = Math.round(
85
+ options.canvas.height - clipHeight - this.clippingRect.y * pixelRatio,
86
+ );
87
+ // if parent has render texture, we need to adjust the scissor rect
88
+ // to be relative to the parent's framebuffer
89
+ if (this.parentHasRenderTexture) {
90
+ clipY = this.framebufferDimensions
91
+ ? this.framebufferDimensions.h - this.h
92
+ : 0;
93
+ }
94
+
95
+ glw.setScissorTest(true);
96
+ glw.scissor(clipX, clipY, clipWidth, clipHeight);
97
+ } else {
98
+ glw.setScissorTest(false);
99
+ }
100
+
101
+ // SDF rendering uses drawArrays with explicit triangle vertices (6 vertices per quad)
102
+ // Note: buffers should be bound by bindRenderOp -> bindBufferCollection
103
+ glw.drawArrays(glw.TRIANGLES, 0, 6 * this.numQuads);
104
+ }
105
+ }
@@ -18,9 +18,9 @@
18
18
  */
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
- import { assertTruthy } from '../../../utils.js';
22
21
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
22
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
23
+ import type { Bound } from '../../lib/utils.js';
24
24
  import type { RenderTexture } from '../../textures/RenderTexture.js';
25
25
  import { WebGlCtxTexture } from './WebGlCtxTexture.js';
26
26
 
@@ -29,6 +29,13 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
29
29
 
30
30
  public framebuffer: WebGLFramebuffer | null = null;
31
31
 
32
+ override txCoords: Bound = {
33
+ x1: 0,
34
+ y1: 1,
35
+ x2: 1,
36
+ y2: 0,
37
+ };
38
+
32
39
  constructor(
33
40
  glw: WebGlContextWrapper,
34
41
  memManager: TextureMemoryManager,
@@ -41,25 +48,21 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
41
48
  const { glw } = this;
42
49
  const nativeTexture = (this._nativeCtxTexture =
43
50
  this.createNativeCtxTexture());
44
- const { width, height } = this.textureSource;
51
+
52
+ if (!nativeTexture) {
53
+ throw new Error('Failed to create native texture for RenderTexture');
54
+ }
55
+
56
+ const { w, h } = this.textureSource;
45
57
 
46
58
  // Create Framebuffer object
47
59
  this.framebuffer = glw.createFramebuffer();
48
60
 
49
61
  // Set the dimensions of the render texture
50
- glw.texImage2D(
51
- 0,
52
- glw.RGBA,
53
- width,
54
- height,
55
- 0,
56
- glw.RGBA,
57
- glw.UNSIGNED_BYTE,
58
- null,
59
- );
62
+ glw.texImage2D(0, glw.RGBA, w, h, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
60
63
 
61
64
  // Update the texture memory manager
62
- this.setTextureMemUse(width * height * 4);
65
+ this.setTextureMemUse(w * h * 4);
63
66
 
64
67
  // Bind the framebuffer
65
68
  glw.bindFramebuffer(this.framebuffer);
@@ -71,8 +74,8 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
71
74
  glw.bindFramebuffer(null);
72
75
 
73
76
  return {
74
- width,
75
- height,
77
+ w,
78
+ h,
76
79
  };
77
80
  }
78
81
 
@@ -22,6 +22,8 @@ import { assertTruthy } from '../../../utils.js';
22
22
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
23
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
24
  import type { SubTexture } from '../../textures/SubTexture.js';
25
+ import type { SubTextureProps } from '../../textures/SubTexture.js';
26
+ import type { CompressedData } from '../../textures/Texture.js';
25
27
  import { WebGlCtxTexture } from './WebGlCtxTexture.js';
26
28
 
27
29
  export class WebGlCtxSubTexture extends WebGlCtxTexture {
@@ -39,12 +41,55 @@ export class WebGlCtxSubTexture extends WebGlCtxTexture {
39
41
 
40
42
  if (props.data instanceof Uint8Array) {
41
43
  // its a 1x1 Color Texture
42
- return { width: 1, height: 1 };
44
+ return { w: 1, h: 1 };
43
45
  }
44
46
 
45
- return {
46
- width: props.data?.width || 0,
47
- height: props.data?.height || 0,
48
- };
47
+ return this.extractDimensions(props.data);
48
+ }
49
+
50
+ /**
51
+ * Efficiently extracts width/height from polymorphic texture data
52
+ * Optimized for performance by using type guards and avoiding unnecessary property access
53
+ */
54
+ private extractDimensions(
55
+ data:
56
+ | ImageBitmap
57
+ | ImageData
58
+ | SubTextureProps
59
+ | CompressedData
60
+ | HTMLImageElement
61
+ | null,
62
+ ): Dimensions {
63
+ if (data === null) {
64
+ return { w: 0, h: 0 };
65
+ }
66
+
67
+ // Check for standard web API objects first (most common case)
68
+ // These use width/height properties: ImageBitmap, ImageData, HTMLImageElement
69
+ if (this.hasWidthHeight(data) === true) {
70
+ return { w: data.width, h: data.height };
71
+ }
72
+
73
+ // Check for internal objects that use w/h properties: SubTextureProps, CompressedData
74
+ if (this.hasWH(data) === true) {
75
+ return { w: data.w, h: data.h };
76
+ }
77
+
78
+ // Fallback
79
+ return { w: 0, h: 0 };
80
+ }
81
+
82
+ /**
83
+ * Type guard for objects with width/height properties
84
+ */
85
+ private hasWidthHeight(data: any): data is { width: number; height: number } {
86
+ return typeof data.width === 'number' && typeof data.height === 'number';
87
+ }
88
+
89
+ /**
90
+ * Type guard for objects with w/h properties
91
+ */
92
+ private hasWH(data: any): data is { w: number; h: number } {
93
+ return typeof data.w === 'number' && typeof data.h === 'number';
49
94
  }
50
95
  }