@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
@@ -17,14 +17,13 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import { assertTruthy, createWebGLContext } from '../../../utils.js';
20
+ import { createWebGLContext } from '../../../utils.js';
21
21
  import {
22
22
  CoreRenderer,
23
23
  type BufferInfo,
24
24
  type CoreRendererOptions,
25
- type QuadOptions,
26
25
  } from '../CoreRenderer.js';
27
- import { WebGlRenderOp } from './WebGlRenderOp.js';
26
+ import type { SdfRenderOp } from './SdfRenderOp.js';
28
27
  import type { CoreContextTexture } from '../CoreContextTexture.js';
29
28
  import {
30
29
  createIndexBuffer,
@@ -35,7 +34,11 @@ import {
35
34
  type WebGlColor,
36
35
  } from './internal/RendererUtils.js';
37
36
  import { WebGlCtxTexture } from './WebGlCtxTexture.js';
38
- import { Texture, TextureType } from '../../textures/Texture.js';
37
+ import {
38
+ Texture,
39
+ TextureType,
40
+ type TextureCoords,
41
+ } from '../../textures/Texture.js';
39
42
  import { SubTexture } from '../../textures/SubTexture.js';
40
43
  import { WebGlCtxSubTexture } from './WebGlCtxSubTexture.js';
41
44
  import { BufferCollection } from './internal/BufferCollection.js';
@@ -43,15 +46,12 @@ import { compareRect, getNormalizedRgbaComponents } from '../../lib/utils.js';
43
46
  import { WebGlShaderProgram } from './WebGlShaderProgram.js';
44
47
  import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
45
48
  import { RenderTexture } from '../../textures/RenderTexture.js';
46
- import { CoreNodeRenderState, type CoreNode } from '../../CoreNode.js';
49
+ import { CoreNodeRenderState, CoreNode } from '../../CoreNode.js';
47
50
  import { WebGlCtxRenderTexture } from './WebGlCtxRenderTexture.js';
48
51
  import { Default } from '../../shaders/webgl/Default.js';
49
52
  import type { WebGlShaderType } from './WebGlShaderNode.js';
50
53
  import { WebGlShaderNode } from './WebGlShaderNode.js';
51
- import type { CoreShaderType } from '../CoreShaderNode.js';
52
-
53
- const WORDS_PER_QUAD = 32;
54
- // const BYTES_PER_QUAD = WORDS_PER_QUAD * 4;
54
+ import type { Dimensions } from '../../../common/CommonTypes.js';
55
55
 
56
56
  export type WebGlRendererOptions = CoreRendererOptions;
57
57
 
@@ -60,6 +60,8 @@ interface CoreWebGlSystem {
60
60
  extensions: CoreWebGlExtensions;
61
61
  }
62
62
 
63
+ export type WebGlRenderOp = CoreNode | SdfRenderOp;
64
+
63
65
  export class WebGlRenderer extends CoreRenderer {
64
66
  //// WebGL Native Context and Data
65
67
  glw: WebGlContextWrapper;
@@ -77,6 +79,13 @@ export class WebGlRenderer extends CoreRenderer {
77
79
  override rttNodes: CoreNode[] = [];
78
80
  activeRttNode: CoreNode | null = null;
79
81
 
82
+ override defaultTextureCoords: TextureCoords = {
83
+ x1: 0,
84
+ y1: 0,
85
+ x2: 1,
86
+ y2: 1,
87
+ };
88
+
80
89
  //// Default Shader
81
90
  defaultShaderNode: WebGlShaderNode | null = null;
82
91
  quadBufferCollection: BufferCollection;
@@ -126,11 +135,10 @@ export class WebGlRenderer extends CoreRenderer {
126
135
  extensions: getWebGlExtensions(this.glw),
127
136
  };
128
137
  const quadBuffer = glw.createBuffer();
129
- assertTruthy(quadBuffer);
130
138
  const stride = 8 * Float32Array.BYTES_PER_ELEMENT;
131
139
  this.quadBufferCollection = new BufferCollection([
132
140
  {
133
- buffer: quadBuffer,
141
+ buffer: quadBuffer!,
134
142
  attributes: {
135
143
  a_position: {
136
144
  name: 'a_position',
@@ -183,7 +191,9 @@ export class WebGlRenderer extends CoreRenderer {
183
191
  this.curRenderOp = null;
184
192
  this.renderOps.length = 0;
185
193
  glw.setScissorTest(false);
186
- glw.clear();
194
+ if (this.stage.options.enableClear !== false) {
195
+ glw.clear();
196
+ }
187
197
  }
188
198
 
189
199
  createShaderProgram(
@@ -246,134 +256,79 @@ export class WebGlRenderer extends CoreRenderer {
246
256
  * Finally, it calculates the vertices for the quad, taking into account any transformations, and adds them to the quad buffer.
247
257
  * The function updates the length and number of quads in the current render operation, and updates the current buffer index.
248
258
  */
249
- addQuad(params: QuadOptions) {
250
- const { fQuadBuffer, uiQuadBuffer } = this;
251
- let texture = params.texture;
252
-
253
- assertTruthy(texture !== null, 'Texture is required');
254
-
255
- let { curBufferIdx: bufferIdx } = this;
256
-
257
- if (this.reuseRenderOp(params) === false) {
258
- this.newRenderOp(params, bufferIdx);
259
+ addQuad(node: CoreNode) {
260
+ const f = this.fQuadBuffer;
261
+ const u = this.uiQuadBuffer;
262
+ let i = this.curBufferIdx;
263
+
264
+ const reuse = this.reuseRenderOp(node);
265
+ if (reuse === false) {
266
+ this.newRenderOp(node, i);
259
267
  }
260
268
 
261
- let texCoordX1 = 0;
262
- let texCoordY1 = 0;
263
- let texCoordX2 = 1;
264
- let texCoordY2 = 1;
265
-
266
- if (texture.type === TextureType.subTexture) {
267
- const {
268
- x: tx,
269
- y: ty,
270
- width: tw,
271
- height: th,
272
- } = (texture as SubTexture).props;
273
- const { width: parentW = 0, height: parentH = 0 } = (
274
- texture as SubTexture
275
- ).parentTexture.dimensions || { width: 0, height: 0 };
276
- texCoordX1 = tx / parentW;
277
- texCoordX2 = texCoordX1 + tw / parentW;
278
- texCoordY1 = ty / parentH;
279
- texCoordY2 = texCoordY1 + th / parentH;
280
- texture = (texture as SubTexture).parentTexture;
269
+ let tx = (node.props.texture || this.stage.defaultTexture) as Texture;
270
+ if (tx.type === TextureType.subTexture) {
271
+ tx = (tx as SubTexture).parentTexture;
281
272
  }
282
273
 
283
- if (
284
- texture.type === TextureType.image &&
285
- params.textureOptions !== null &&
286
- params.textureOptions.resizeMode !== undefined &&
287
- texture.dimensions !== null
288
- ) {
289
- const resizeMode = params.textureOptions.resizeMode;
290
- const { width: tw, height: th } = texture.dimensions;
291
- if (resizeMode.type === 'cover') {
292
- const scaleX = params.width / tw;
293
- const scaleY = params.height / th;
294
- const scale = Math.max(scaleX, scaleY);
295
- const precision = 1 / scale;
296
- // Determine based on width
297
- if (scale && scaleX && scaleX < scale) {
298
- const desiredSize = precision * params.width;
299
- texCoordX1 = (1 - desiredSize / tw) * (resizeMode.clipX ?? 0.5);
300
- texCoordX2 = texCoordX1 + desiredSize / tw;
301
- }
302
- // Determine based on height
303
- if (scale && scaleY && scaleY < scale) {
304
- const desiredSize = precision * params.height;
305
- texCoordY1 = (1 - desiredSize / th) * (resizeMode.clipY ?? 0.5);
306
- texCoordY2 = texCoordY1 + desiredSize / th;
307
- }
308
- }
309
- }
274
+ const texture = tx.ctxTexture as WebGlCtxTexture;
275
+ let tidx = this.curRenderOp!.addTexture(texture);
310
276
 
311
- // Flip texture coordinates if dictated by texture options
312
- let flipY = 0;
313
- if (params.textureOptions !== null) {
314
- if (params.textureOptions.flipX === true) {
315
- [texCoordX1, texCoordX2] = [texCoordX2, texCoordX1];
316
- }
317
-
318
- // convert to integer for bitwise operation below
319
- flipY = +(params.textureOptions.flipY || false);
320
- }
321
-
322
- // Eitherone should be true
323
- if (flipY ^ +(texture.type === TextureType.renderToTexture)) {
324
- [texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
277
+ if (tidx === 0xffffffff) {
278
+ this.newRenderOp(node, i);
279
+ tidx = this.curRenderOp!.addTexture(texture);
325
280
  }
326
281
 
327
- const ctxTexture = texture.ctxTexture as WebGlCtxTexture;
328
- assertTruthy(ctxTexture instanceof WebGlCtxTexture);
329
- const textureIdx = this.addTexture(ctxTexture, bufferIdx);
282
+ const rc = node.renderCoords!;
283
+ const tc = node.textureCoords || this.defaultTextureCoords;
330
284
 
331
- assertTruthy(this.curRenderOp !== null);
332
- assertTruthy(params.renderCoords);
285
+ const cTl = node.premultipliedColorTl;
286
+ const cTr = node.premultipliedColorTr;
287
+ const cBl = node.premultipliedColorBl;
288
+ const cBr = node.premultipliedColorBr;
333
289
 
334
290
  // Upper-Left
335
- fQuadBuffer[bufferIdx++] = params.renderCoords.x1; // vertexX
336
- fQuadBuffer[bufferIdx++] = params.renderCoords.y1; // vertexY
337
- fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
338
- fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
339
- uiQuadBuffer[bufferIdx++] = params.colorTl; // color
340
- fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
341
- fQuadBuffer[bufferIdx++] = 0; //node X coord
342
- fQuadBuffer[bufferIdx++] = 0; //node y coord
291
+ f[i] = rc.x1;
292
+ f[i + 1] = rc.y1;
293
+ f[i + 2] = tc.x1;
294
+ f[i + 3] = tc.y1;
295
+ u[i + 4] = cTl;
296
+ f[i + 5] = tidx;
297
+ f[i + 6] = 0;
298
+ f[i + 7] = 0;
343
299
 
344
300
  // Upper-Right
345
- fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
346
- fQuadBuffer[bufferIdx++] = params.renderCoords.y2;
347
- fQuadBuffer[bufferIdx++] = texCoordX2;
348
- fQuadBuffer[bufferIdx++] = texCoordY1;
349
- uiQuadBuffer[bufferIdx++] = params.colorTr;
350
- fQuadBuffer[bufferIdx++] = textureIdx;
351
- fQuadBuffer[bufferIdx++] = 1; //node X coord
352
- fQuadBuffer[bufferIdx++] = 0; //node y coord
301
+ f[i + 8] = rc.x2;
302
+ f[i + 9] = rc.y2;
303
+ f[i + 10] = tc.x2;
304
+ f[i + 11] = tc.y1;
305
+ u[i + 12] = cTr;
306
+ f[i + 13] = tidx;
307
+ f[i + 14] = 1;
308
+ f[i + 15] = 0;
353
309
 
354
310
  // Lower-Left
355
- fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
356
- fQuadBuffer[bufferIdx++] = params.renderCoords.y4;
357
- fQuadBuffer[bufferIdx++] = texCoordX1;
358
- fQuadBuffer[bufferIdx++] = texCoordY2;
359
- uiQuadBuffer[bufferIdx++] = params.colorBl;
360
- fQuadBuffer[bufferIdx++] = textureIdx;
361
- fQuadBuffer[bufferIdx++] = 0; //node X coord
362
- fQuadBuffer[bufferIdx++] = 1; //node y coord
311
+ f[i + 16] = rc.x4;
312
+ f[i + 17] = rc.y4;
313
+ f[i + 18] = tc.x1;
314
+ f[i + 19] = tc.y2;
315
+ u[i + 20] = cBl;
316
+ f[i + 21] = tidx;
317
+ f[i + 22] = 0;
318
+ f[i + 23] = 1;
363
319
 
364
320
  // Lower-Right
365
- fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
366
- fQuadBuffer[bufferIdx++] = params.renderCoords.y3;
367
- fQuadBuffer[bufferIdx++] = texCoordX2;
368
- fQuadBuffer[bufferIdx++] = texCoordY2;
369
- uiQuadBuffer[bufferIdx++] = params.colorBr;
370
- fQuadBuffer[bufferIdx++] = textureIdx;
371
- fQuadBuffer[bufferIdx++] = 1; //node X coord
372
- fQuadBuffer[bufferIdx++] = 1; //node y coord
373
-
374
- // Update the length of the current render op
375
- this.curRenderOp.numQuads++;
376
- this.curBufferIdx = bufferIdx;
321
+ f[i + 24] = rc.x3;
322
+ f[i + 25] = rc.y3;
323
+ f[i + 26] = tc.x2;
324
+ f[i + 27] = tc.y2;
325
+ u[i + 28] = cBr;
326
+ f[i + 29] = tidx;
327
+ f[i + 30] = 1;
328
+ f[i + 31] = 1;
329
+
330
+ this.curRenderOp!.numQuads++;
331
+ this.curBufferIdx = i + 32;
377
332
  }
378
333
 
379
334
  /**
@@ -383,91 +338,73 @@ export class WebGlRenderer extends CoreRenderer {
383
338
  * @param shader
384
339
  * @param bufferIdx
385
340
  */
386
- private newRenderOp(quad: QuadOptions | WebGlRenderOp, bufferIdx: number) {
387
- const curRenderOp = new WebGlRenderOp(this, quad, bufferIdx);
341
+ private newRenderOp(node: CoreNode, bufferIdx: number) {
342
+ const curRenderOp = node;
343
+ curRenderOp.renderOpBufferIdx = bufferIdx;
344
+ curRenderOp.numQuads = 0;
345
+ curRenderOp.renderOpTextures.length = 0;
346
+
388
347
  this.curRenderOp = curRenderOp;
389
348
  this.renderOps.push(curRenderOp);
390
349
  }
391
350
 
392
- /**
393
- * Add a texture to the current RenderOp. If the texture cannot be added to the
394
- * current RenderOp, a new RenderOp will be created and the texture will be added
395
- * to that one.
396
- *
397
- * If the texture cannot be added to the new RenderOp, an error will be thrown.
398
- *
399
- * @param texture
400
- * @param bufferIdx
401
- * @param recursive
402
- * @returns Assigned Texture Index of the texture in the render op
403
- */
404
- private addTexture(
405
- texture: WebGlCtxTexture,
406
- bufferIdx: number,
407
- recursive?: boolean,
408
- ): number {
409
- assertTruthy(this.curRenderOp);
410
- const textureIdx = this.curRenderOp.addTexture(texture);
411
- // TODO: Refactor to be more DRY
412
- if (textureIdx === 0xffffffff) {
413
- if (recursive) {
414
- throw new Error('Unable to add texture to render op');
415
- }
416
- this.newRenderOp(this.curRenderOp, bufferIdx);
417
- return this.addTexture(texture, bufferIdx, true);
418
- }
419
- return textureIdx;
420
- }
421
-
422
351
  /**
423
352
  * Test if the current Render operation can be reused for the specified parameters.
424
353
  * @param params
425
354
  * @returns
426
355
  */
427
- reuseRenderOp(params: QuadOptions): boolean {
428
- // Switching shader program will require a new render operation
429
- if (
430
- this.curRenderOp?.shader.shaderKey !==
431
- (params.shader as WebGlShaderNode).shaderKey
432
- ) {
356
+ reuseRenderOp(node: CoreNode): boolean {
357
+ const curRenderOp = this.curRenderOp;
358
+ if (curRenderOp === null) {
359
+ return false;
360
+ }
361
+
362
+ const shader = node.props.shader as WebGlShaderNode;
363
+ const curShader = curRenderOp.shader as WebGlShaderNode;
364
+
365
+ if (curShader?.shaderKey !== shader?.shaderKey) {
433
366
  return false;
434
367
  }
435
368
 
436
369
  // Switching clipping rect will require a new render operation
437
- if (
438
- compareRect(this.curRenderOp.clippingRect, params.clippingRect) === false
439
- ) {
370
+ if (compareRect(curRenderOp.clippingRect, node.clippingRect) === false) {
440
371
  return false;
441
372
  }
442
373
 
443
- // Force new render operation if rendering to texture
444
- // @todo: This needs to be improved, render operations could also be reused
445
- // for rendering to texture
374
+ // Force new render operation if rendering to texture is different
375
+ const curRtt = curRenderOp.rtt;
446
376
  if (
447
- params.parentHasRenderTexture !== undefined ||
448
- params.rtt !== undefined
377
+ curRenderOp.parentHasRenderTexture !== node.parentHasRenderTexture ||
378
+ curRtt !== (node.props.rtt === true)
449
379
  ) {
450
380
  return false;
451
381
  }
452
382
 
453
383
  if (
454
- this.curRenderOp.shader.shaderKey === 'default' &&
455
- params.shader?.shaderKey === 'default'
384
+ node.parentHasRenderTexture === true &&
385
+ node.parentFramebufferDimensions !== null
456
386
  ) {
387
+ const curFbDims = curRenderOp.isCoreNode
388
+ ? curRenderOp.parentFramebufferDimensions
389
+ : curRenderOp.framebufferDimensions;
390
+ if (
391
+ curFbDims === null ||
392
+ curFbDims.w !== node.parentFramebufferDimensions.w ||
393
+ curFbDims.h !== node.parentFramebufferDimensions.h
394
+ ) {
395
+ return false;
396
+ }
397
+ }
398
+
399
+ if (curShader?.shaderKey === 'default' && shader?.shaderKey === 'default') {
457
400
  return true;
458
401
  }
459
402
 
460
403
  // Check if the shader can batch the shader properties
461
- if (
462
- this.curRenderOp.shader.program.reuseRenderOp(
463
- params,
464
- this.curRenderOp,
465
- ) === false
466
- ) {
404
+ if (curShader?.program.reuseRenderOp(node, curRenderOp) === false) {
467
405
  return false;
468
406
  }
469
407
 
470
- // Render operation can be reused
471
408
  return true;
472
409
  }
473
410
 
@@ -495,9 +432,9 @@ export class WebGlRenderer extends CoreRenderer {
495
432
  glw.arrayBufferData(buffer, arr, glw.STATIC_DRAW);
496
433
 
497
434
  for (let i = 0, length = this.renderOps.length; i < length; i++) {
498
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
499
- this.renderOps[i]!.draw();
435
+ this.renderOps[i]!.draw(this);
500
436
  }
437
+
501
438
  this.quadBufferUsage = this.curBufferIdx * arr.BYTES_PER_ELEMENT;
502
439
 
503
440
  // Calculate the size of each quad in bytes (4 vertices per quad) times the size of each vertex in bytes
@@ -608,8 +545,7 @@ export class WebGlRenderer extends CoreRenderer {
608
545
  // Skip nodes that are not visible
609
546
  if (
610
547
  node.worldAlpha === 0 ||
611
- (node.strictBounds === true &&
612
- node.renderState === CoreNodeRenderState.OutOfBounds)
548
+ node.renderState === CoreNodeRenderState.OutOfBounds
613
549
  ) {
614
550
  continue;
615
551
  }
@@ -622,10 +558,7 @@ export class WebGlRenderer extends CoreRenderer {
622
558
  // Set the active RTT node to the current node
623
559
  // So we can prevent rendering children of nested RTT nodes
624
560
  this.activeRttNode = node;
625
-
626
- assertTruthy(node.texture !== null, 'RTT node missing texture');
627
- const ctxTexture = node.texture.ctxTexture;
628
- assertTruthy(ctxTexture instanceof WebGlCtxRenderTexture);
561
+ const ctxTexture = node.texture.ctxTexture as WebGlCtxRenderTexture;
629
562
  this.renderToTextureActive = true;
630
563
 
631
564
  // Bind the the texture's framebuffer
@@ -667,6 +600,10 @@ export class WebGlRenderer extends CoreRenderer {
667
600
  this.renderToTextureActive = false;
668
601
  }
669
602
 
603
+ updateViewport(): void {
604
+ this.glw.viewport(0, 0, this.glw.canvas.width, this.glw.canvas.height);
605
+ }
606
+
670
607
  removeRTTNode(node: CoreNode) {
671
608
  const index = this.rttNodes.indexOf(node);
672
609
  if (index === -1) {
@@ -694,9 +631,86 @@ export class WebGlRenderer extends CoreRenderer {
694
631
  return this.defaultShaderNode;
695
632
  }
696
633
 
634
+ override getTextureCoords(node: CoreNode): TextureCoords | undefined {
635
+ const texture = node.texture;
636
+ if (texture === null) {
637
+ return undefined;
638
+ }
639
+
640
+ //this stuff needs to be properly moved to CtxSubTexture at some point in the future.
641
+ const ctxTexture =
642
+ (texture as SubTexture).parentTexture !== undefined
643
+ ? (texture as SubTexture).parentTexture.ctxTexture
644
+ : texture.ctxTexture;
645
+ if (ctxTexture === undefined) {
646
+ return undefined;
647
+ }
648
+
649
+ const textureOptions = node.props.textureOptions;
650
+
651
+ //early exit for textures with no options unless its a subtexture
652
+ if (
653
+ texture.type !== TextureType.subTexture &&
654
+ textureOptions === undefined
655
+ ) {
656
+ return (ctxTexture as WebGlCtxTexture).txCoords;
657
+ }
658
+
659
+ let { x1, x2, y1, y2 } = (ctxTexture as WebGlCtxTexture).txCoords;
660
+ if (texture.type === TextureType.subTexture) {
661
+ const { w: parentW, h: parentH } = (texture as SubTexture).parentTexture
662
+ .dimensions!;
663
+ const { x, y, w, h } = (texture as SubTexture).props;
664
+ x1 = x / parentW;
665
+ y1 = y / parentH;
666
+ x2 = x1 + w / parentW;
667
+ y2 = y1 + h / parentH;
668
+ }
669
+
670
+ const resizeMode = textureOptions.resizeMode;
671
+ if (
672
+ resizeMode !== undefined &&
673
+ resizeMode.type === 'cover' &&
674
+ texture.dimensions !== null
675
+ ) {
676
+ const dimensions = texture.dimensions as Dimensions;
677
+ const w = node.props.w;
678
+ const h = node.props.h;
679
+ const scaleX = w / dimensions.w;
680
+ const scaleY = h / dimensions.h;
681
+ const scale = Math.max(scaleX, scaleY);
682
+ const precision = 1 / scale;
683
+
684
+ // Determine based on width
685
+ if (scaleX < scale) {
686
+ const desiredSize = precision * node.props.w;
687
+ x1 = (1 - desiredSize / dimensions.w) * (resizeMode.clipX ?? 0.5);
688
+ x2 = x1 + desiredSize / dimensions.w;
689
+ }
690
+ // Determine based on height
691
+ if (scaleY < scale) {
692
+ const desiredSize = precision * node.props.h;
693
+ y1 = (1 - desiredSize / dimensions.h) * (resizeMode.clipY ?? 0.5);
694
+ y2 = y1 + desiredSize / dimensions.h;
695
+ }
696
+ }
697
+
698
+ if (textureOptions.flipX === true) {
699
+ [x1, x2] = [x2, x1];
700
+ }
701
+ if (textureOptions.flipY === true) {
702
+ [y1, y2] = [y2, y1];
703
+ }
704
+ return {
705
+ x1,
706
+ y1,
707
+ x2,
708
+ y2,
709
+ };
710
+ }
711
+
697
712
  /**
698
- * Updates the WebGL context's clear color and clears the color buffer.
699
- *
713
+ * Sets the glClearColor to the specified color. *
700
714
  * @param color - The color to set as the clear color, represented as a 32-bit integer.
701
715
  */
702
716
  updateClearColor(color: number) {
@@ -715,6 +729,5 @@ export class WebGlRenderer extends CoreRenderer {
715
729
  raw: color,
716
730
  normalized: normalizedColor,
717
731
  };
718
- glw.clear();
719
732
  }
720
733
  }
@@ -2,7 +2,6 @@ import type { CoreNode } from '../../CoreNode.js';
2
2
  import { getNormalizedRgbaComponents } from '../../lib/utils.js';
3
3
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
4
4
  import type { Stage } from '../../Stage.js';
5
- import type { QuadOptions } from '../CoreRenderer.js';
6
5
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
7
6
  import type {
8
7
  UniformCollection,
@@ -10,8 +9,7 @@ import type {
10
9
  Vec3,
11
10
  Vec4,
12
11
  } from './internal/ShaderUtils.js';
13
- import type { WebGlRenderer } from './WebGlRenderer.js';
14
- import type { WebGlRenderOp } from './WebGlRenderOp.js';
12
+ import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
15
13
  import type { WebGlShaderProgram } from './WebGlShaderProgram.js';
16
14
 
17
15
  export type ShaderSource<T> =
@@ -47,10 +45,7 @@ export type WebGlShaderType<T extends object = Record<string, unknown>> =
47
45
  * This function is used to check if the shader can be reused based on quad info
48
46
  * @param props
49
47
  */
50
- canBatch?: (
51
- incomingQuad: QuadOptions,
52
- currentRenderOp: WebGlRenderOp,
53
- ) => boolean;
48
+ canBatch?: (node: CoreNode, currentRenderOp: WebGlRenderOp) => boolean;
54
49
  /**
55
50
  * extensions required for specific shader?
56
51
  */
@@ -90,11 +85,9 @@ export class WebGlShaderNode<
90
85
  this.updater!(this.node as CoreNode, this.props);
91
86
  return;
92
87
  }
88
+
93
89
  const prevKey = this.valueKey;
94
- this.valueKey = '';
95
- for (const key in this.resolvedProps) {
96
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
97
- }
90
+ this.valueKey = this.createValueKey();
98
91
 
99
92
  if (prevKey === this.valueKey) {
100
93
  return;