@lightningjs/renderer 3.0.0-beta1 → 3.0.0-beta11

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 (490) hide show
  1. package/README.md +13 -27
  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 +1 -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/core/CoreNode.d.ts +45 -69
  15. package/dist/src/core/CoreNode.js +323 -305
  16. package/dist/src/core/CoreNode.js.map +1 -1
  17. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  18. package/dist/src/core/CoreShaderManager.js.map +1 -1
  19. package/dist/src/core/CoreTextNode.d.ts +61 -87
  20. package/dist/src/core/CoreTextNode.js +276 -235
  21. package/dist/src/core/CoreTextNode.js.map +1 -1
  22. package/dist/src/core/CoreTextureManager.d.ts +9 -11
  23. package/dist/src/core/CoreTextureManager.js +80 -91
  24. package/dist/src/core/CoreTextureManager.js.map +1 -1
  25. package/dist/src/core/Stage.d.ts +75 -31
  26. package/dist/src/core/Stage.js +270 -136
  27. package/dist/src/core/Stage.js.map +1 -1
  28. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  29. package/dist/src/core/TextureMemoryManager.js +112 -78
  30. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  31. package/dist/src/core/animations/CoreAnimation.js +5 -0
  32. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  34. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  35. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.js +3 -2
  37. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  38. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  39. package/dist/src/core/lib/RenderCoords.js +43 -55
  40. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  41. package/dist/src/core/lib/WebGlContextWrapper.d.ts +51 -2
  42. package/dist/src/core/lib/WebGlContextWrapper.js +92 -22
  43. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  44. package/dist/src/core/lib/colorCache.d.ts +1 -0
  45. package/dist/src/core/lib/colorCache.js +19 -0
  46. package/dist/src/core/lib/colorCache.js.map +1 -0
  47. package/dist/src/core/lib/colorParser.d.ts +21 -0
  48. package/dist/src/core/lib/colorParser.js +72 -0
  49. package/dist/src/core/lib/colorParser.js.map +1 -0
  50. package/dist/src/core/lib/utils.d.ts +3 -0
  51. package/dist/src/core/lib/utils.js +42 -0
  52. package/dist/src/core/lib/utils.js.map +1 -1
  53. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  54. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  55. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  56. package/dist/src/core/platform.js +29 -4
  57. package/dist/src/core/platform.js.map +1 -1
  58. package/dist/src/core/platforms/Platform.d.ts +37 -0
  59. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  60. package/dist/src/core/platforms/Platform.js.map +1 -0
  61. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  62. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  63. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  64. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -1
  65. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -2
  66. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  67. package/dist/src/core/renderers/CoreShaderNode.d.ts +3 -3
  68. package/dist/src/core/renderers/CoreShaderNode.js +8 -2
  69. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  70. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -1
  71. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +7 -6
  72. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  74. package/dist/src/core/renderers/canvas/CanvasRenderer.js +10 -21
  75. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  76. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  77. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  78. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +2 -2
  79. package/dist/src/core/renderers/canvas/CanvasTexture.js +11 -9
  80. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  81. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  82. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  83. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  84. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  85. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  86. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  88. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  89. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +5 -6
  90. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +30 -18
  91. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  92. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +5 -2
  93. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  94. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +3 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +3 -0
  97. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  98. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +5 -6
  99. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +30 -21
  100. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  101. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +10 -2
  102. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +37 -19
  103. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  105. package/dist/src/core/renderers/webgl/WebGlRenderer.js +144 -117
  106. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -1
  108. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  109. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -3
  111. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +55 -31
  112. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  113. package/dist/src/core/shaders/canvas/Border.js +1 -1
  114. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  115. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  116. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  117. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  118. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  120. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  125. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  126. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  127. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  128. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  129. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  130. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  131. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  132. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  133. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  134. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  135. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  136. package/dist/src/core/shaders/utils.d.ts +5 -0
  137. package/dist/src/core/shaders/utils.js +41 -0
  138. package/dist/src/core/shaders/utils.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Border.js +57 -34
  140. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  141. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  142. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  143. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  144. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  145. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  146. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  147. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +79 -36
  148. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  149. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +92 -42
  150. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  151. package/dist/src/core/shaders/webgl/SdfShader.js +1 -1
  152. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  153. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  154. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  155. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +41 -0
  156. package/dist/src/core/text-rendering/CanvasFontHandler.js +159 -0
  157. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  158. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +22 -0
  159. package/dist/src/core/text-rendering/CanvasTextRenderer.js +366 -0
  160. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  161. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +152 -0
  162. package/dist/src/core/text-rendering/SdfFontHandler.js +368 -0
  163. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  164. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  165. package/dist/src/core/text-rendering/SdfTextRenderer.js +355 -0
  166. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  167. package/dist/src/core/text-rendering/TextRenderer.d.ts +351 -0
  168. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  169. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  170. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  171. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  172. package/dist/src/core/text-rendering/Utils.js +212 -0
  173. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  175. package/dist/src/{main-api/texture-usage-trackers/TextureUsageTracker.js → core/text-rendering/canvas/Settings.js} +3 -11
  176. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  177. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  178. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  179. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  180. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  181. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  182. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  183. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  184. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  185. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  188. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  189. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +30 -34
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  193. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  194. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  195. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  196. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  197. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  198. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  199. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  200. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  201. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  202. package/dist/src/core/text-rendering/sdf/Utils.js +304 -0
  203. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  204. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  205. package/dist/src/core/{CoreExtension.js → text-rendering/sdf/index.js} +3 -12
  206. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  207. package/dist/src/core/textures/ImageTexture.d.ts +4 -3
  208. package/dist/src/core/textures/ImageTexture.js +36 -9
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +21 -2
  211. package/dist/src/core/textures/Texture.js +37 -6
  212. package/dist/src/core/textures/Texture.js.map +1 -1
  213. package/dist/src/core/utils.d.ts +1 -1
  214. package/dist/src/main-api/INode.d.ts +2 -2
  215. package/dist/src/main-api/Inspector.d.ts +6 -1
  216. package/dist/src/main-api/Inspector.js +43 -7
  217. package/dist/src/main-api/Inspector.js.map +1 -1
  218. package/dist/src/main-api/Renderer.d.ts +122 -46
  219. package/dist/src/main-api/Renderer.js +174 -37
  220. package/dist/src/main-api/Renderer.js.map +1 -1
  221. package/dist/src/utils.d.ts +1 -6
  222. package/dist/src/utils.js +2 -9
  223. package/dist/src/utils.js.map +1 -1
  224. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  225. package/exports/canvas.ts +1 -1
  226. package/exports/index.ts +1 -8
  227. package/exports/utils.ts +7 -1
  228. package/exports/webgl.ts +3 -1
  229. package/package.json +2 -3
  230. package/src/core/CoreNode.test.ts +0 -1
  231. package/src/core/CoreNode.ts +403 -388
  232. package/src/core/CoreShaderManager.ts +5 -10
  233. package/src/core/CoreTextNode.ts +337 -302
  234. package/src/core/CoreTextureManager.ts +78 -110
  235. package/src/core/Stage.ts +344 -178
  236. package/src/core/TextureMemoryManager.ts +150 -100
  237. package/src/core/animations/CoreAnimation.ts +7 -0
  238. package/src/core/animations/CoreAnimationController.ts +13 -4
  239. package/src/core/lib/ImageWorker.ts +9 -2
  240. package/src/core/lib/RenderCoords.ts +52 -67
  241. package/src/core/lib/WebGlContextWrapper.ts +125 -68
  242. package/src/core/lib/colorCache.ts +20 -0
  243. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  244. package/src/core/lib/utils.ts +51 -0
  245. package/src/core/lib/validateImageBitmap.ts +17 -6
  246. package/src/core/platforms/Platform.ts +77 -0
  247. package/src/core/platforms/web/WebPlatform.ts +121 -0
  248. package/src/core/renderers/CoreContextTexture.ts +1 -1
  249. package/src/core/renderers/CoreRenderer.ts +5 -2
  250. package/src/core/renderers/CoreShaderNode.ts +10 -6
  251. package/src/core/renderers/canvas/CanvasRenderer.ts +12 -28
  252. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  253. package/src/core/renderers/canvas/CanvasTexture.ts +17 -14
  254. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +5 -0
  255. package/src/core/renderers/webgl/WebGlCtxTexture.ts +52 -43
  256. package/src/core/renderers/webgl/WebGlRenderOp.ts +46 -24
  257. package/src/core/renderers/webgl/WebGlRenderer.ts +177 -145
  258. package/src/core/renderers/webgl/WebGlShaderNode.ts +7 -5
  259. package/src/core/renderers/webgl/WebGlShaderProgram.ts +68 -37
  260. package/src/core/shaders/canvas/Border.ts +1 -4
  261. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  262. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  263. package/src/core/shaders/canvas/RoundedWithBorder.ts +17 -11
  264. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  265. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  266. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  267. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  268. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  269. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  270. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  271. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  272. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  273. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  274. package/src/core/shaders/webgl/Border.ts +57 -37
  275. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  276. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  277. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  278. package/src/core/shaders/webgl/RoundedWithBorder.ts +80 -39
  279. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +92 -50
  280. package/src/core/shaders/webgl/SdfShader.ts +1 -4
  281. package/src/core/text-rendering/CanvasFontHandler.ts +210 -0
  282. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -0
  283. package/src/core/text-rendering/SdfFontHandler.ts +554 -0
  284. package/src/core/text-rendering/SdfTextRenderer.ts +466 -0
  285. package/src/core/text-rendering/TextRenderer.ts +406 -0
  286. package/src/core/text-rendering/{TextTextureRendererUtils.ts → Utils.ts} +5 -11
  287. package/src/core/text-rendering/canvas/Settings.ts +99 -0
  288. package/src/core/text-rendering/canvas/Utils.test.ts +206 -0
  289. package/src/core/text-rendering/canvas/Utils.ts +178 -0
  290. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -0
  291. package/src/core/text-rendering/canvas/draw.ts +165 -0
  292. package/src/core/text-rendering/sdf/Utils.test.ts +402 -0
  293. package/src/core/text-rendering/sdf/Utils.ts +436 -0
  294. package/src/core/text-rendering/sdf/index.ts +20 -0
  295. package/src/core/textures/ImageTexture.ts +69 -27
  296. package/src/core/textures/Texture.ts +50 -6
  297. package/src/main-api/INode.ts +4 -3
  298. package/src/main-api/Inspector.ts +53 -8
  299. package/src/main-api/Renderer.ts +311 -87
  300. package/src/utils.ts +10 -10
  301. package/dist/exports/core-api.d.ts +0 -74
  302. package/dist/exports/core-api.js +0 -96
  303. package/dist/exports/core-api.js.map +0 -1
  304. package/dist/exports/main-api.d.ts +0 -30
  305. package/dist/exports/main-api.js +0 -45
  306. package/dist/exports/main-api.js.map +0 -1
  307. package/dist/src/core/CoreExtension.d.ts +0 -12
  308. package/dist/src/core/CoreExtension.js.map +0 -1
  309. package/dist/src/core/CoreStuff.js +0 -138
  310. package/dist/src/core/CoreStuff.js.map +0 -1
  311. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  312. package/dist/src/core/CoreTexturizer.js +0 -47
  313. package/dist/src/core/CoreTexturizer.js.map +0 -1
  314. package/dist/src/core/LngNode.d.ts +0 -736
  315. package/dist/src/core/LngNode.js +0 -1174
  316. package/dist/src/core/LngNode.js.map +0 -1
  317. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  318. package/dist/src/core/Matrix2DContext.js +0 -45
  319. package/dist/src/core/Matrix2DContext.js.map +0 -1
  320. package/dist/src/core/ShaderNode.d.ts +0 -10
  321. package/dist/src/core/ShaderNode.js +0 -30
  322. package/dist/src/core/ShaderNode.js.map +0 -1
  323. package/dist/src/core/TextNode.d.ts +0 -103
  324. package/dist/src/core/TextNode.js +0 -331
  325. package/dist/src/core/TextNode.js.map +0 -1
  326. package/dist/src/core/lib/Coords.d.ts +0 -14
  327. package/dist/src/core/lib/Coords.js +0 -55
  328. package/dist/src/core/lib/Coords.js.map +0 -1
  329. package/dist/src/core/lib/glm/common.d.ts +0 -162
  330. package/dist/src/core/lib/glm/common.js +0 -81
  331. package/dist/src/core/lib/glm/common.js.map +0 -1
  332. package/dist/src/core/lib/glm/index.d.ts +0 -11
  333. package/dist/src/core/lib/glm/index.js +0 -30
  334. package/dist/src/core/lib/glm/index.js.map +0 -1
  335. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  336. package/dist/src/core/lib/glm/mat2.js +0 -396
  337. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  338. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  339. package/dist/src/core/lib/glm/mat2d.js +0 -442
  340. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  341. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  342. package/dist/src/core/lib/glm/mat3.js +0 -680
  343. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  344. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  345. package/dist/src/core/lib/glm/mat4.js +0 -1802
  346. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  347. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  348. package/dist/src/core/lib/glm/quat.js +0 -693
  349. package/dist/src/core/lib/glm/quat.js.map +0 -1
  350. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  351. package/dist/src/core/lib/glm/quat2.js +0 -754
  352. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  353. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  354. package/dist/src/core/lib/glm/vec2.js +0 -569
  355. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  356. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  357. package/dist/src/core/lib/glm/vec3.js +0 -720
  358. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  359. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  360. package/dist/src/core/lib/glm/vec4.js +0 -608
  361. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  362. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  363. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  364. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  365. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  366. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  367. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  368. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  369. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  370. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  371. package/dist/src/core/scene/Scene.d.ts +0 -59
  372. package/dist/src/core/scene/Scene.js +0 -106
  373. package/dist/src/core/scene/Scene.js.map +0 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  377. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  378. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  379. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  380. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  381. package/dist/src/main-api/IShaderController.d.ts +0 -14
  382. package/dist/src/main-api/IShaderController.js +0 -30
  383. package/dist/src/main-api/IShaderController.js.map +0 -1
  384. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  385. package/dist/src/main-api/IShaderNode.js +0 -19
  386. package/dist/src/main-api/IShaderNode.js.map +0 -1
  387. package/dist/src/main-api/RendererMain.d.ts +0 -375
  388. package/dist/src/main-api/RendererMain.js +0 -365
  389. package/dist/src/main-api/RendererMain.js.map +0 -1
  390. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  391. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  392. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  393. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  394. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  395. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  396. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  397. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  398. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  399. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  400. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  401. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  402. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  403. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  404. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  405. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  406. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  407. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  408. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  409. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  410. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  411. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  412. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  413. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  414. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  415. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  416. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  417. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  418. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  419. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  420. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  421. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  422. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  423. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  424. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  425. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  426. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  427. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  428. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  429. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  430. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  431. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  432. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  433. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  434. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  435. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  436. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  437. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  438. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  439. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  440. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  441. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  442. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  443. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  444. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  445. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  446. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  447. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  448. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  449. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  450. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  451. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  452. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  453. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  454. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  455. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  456. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  457. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  458. package/dist/src/render-drivers/utils.d.ts +0 -12
  459. package/dist/src/render-drivers/utils.js +0 -69
  460. package/dist/src/render-drivers/utils.js.map +0 -1
  461. package/scripts/please-use-pnpm.js +0 -13
  462. package/src/core/platform.ts +0 -64
  463. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  464. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  465. package/src/core/text-rendering/TrFontManager.ts +0 -183
  466. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  467. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  468. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  469. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  470. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  471. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  472. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  473. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  474. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  475. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  476. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  477. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  478. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  479. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  480. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  481. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  489. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  490. /package/dist/src/core/{CoreStuff.d.ts → shaders/webgl/Spinner.d.ts} +0 -0
@@ -0,0 +1,121 @@
1
+ import { Platform } from '../Platform.js';
2
+ import type { Stage } from '../../Stage.js';
3
+
4
+ export class WebPlatform extends Platform {
5
+ ////////////////////////
6
+ // Platform-specific methods
7
+ ////////////////////////
8
+
9
+ override createCanvas(): HTMLCanvasElement {
10
+ const canvas = document.createElement('canvas');
11
+ return canvas;
12
+ }
13
+
14
+ override getElementById(id: string): HTMLElement | null {
15
+ return document.getElementById(id);
16
+ }
17
+
18
+ ////////////////////////
19
+ // Update loop
20
+ ////////////////////////
21
+
22
+ override startLoop(stage: Stage): void {
23
+ let isIdle = false;
24
+ let lastFrameTime = 0;
25
+
26
+ const runLoop = (currentTime: number = 0) => {
27
+ const targetFrameTime = stage.targetFrameTime;
28
+
29
+ // Check if we should throttle this frame
30
+ if (
31
+ targetFrameTime > 0 &&
32
+ currentTime - lastFrameTime < targetFrameTime
33
+ ) {
34
+ // Too early for next frame, schedule with setTimeout for precise timing
35
+ const delay = targetFrameTime - (currentTime - lastFrameTime);
36
+ setTimeout(() => requestAnimationFrame(runLoop), delay);
37
+ return;
38
+ }
39
+
40
+ stage.updateFrameTime();
41
+ stage.updateAnimations();
42
+
43
+ if (!stage.hasSceneUpdates()) {
44
+ // We still need to calculate the fps else it looks like the app is frozen
45
+ stage.calculateFps();
46
+
47
+ if (targetFrameTime > 0) {
48
+ // Use setTimeout for throttled idle frames
49
+ setTimeout(
50
+ () => requestAnimationFrame(runLoop),
51
+ Math.max(targetFrameTime, 16.666666666666668),
52
+ );
53
+ } else {
54
+ // Use standard idle timeout when not throttling
55
+ setTimeout(() => requestAnimationFrame(runLoop), 16.666666666666668);
56
+ }
57
+
58
+ if (!isIdle) {
59
+ stage.shManager.cleanup();
60
+ stage.eventBus.emit('idle');
61
+ isIdle = true;
62
+ }
63
+
64
+ if (stage.txMemManager.checkCleanup() === true) {
65
+ stage.txMemManager.cleanup(false);
66
+ }
67
+
68
+ stage.flushFrameEvents();
69
+ return;
70
+ }
71
+
72
+ isIdle = false;
73
+ stage.drawFrame();
74
+ stage.flushFrameEvents();
75
+
76
+ // Schedule next frame
77
+ if (targetFrameTime > 0) {
78
+ // Use setTimeout + rAF combination for precise FPS control
79
+ const nextFrameDelay = Math.max(
80
+ 0,
81
+ targetFrameTime - (performance.now() - currentTime),
82
+ );
83
+ setTimeout(() => requestAnimationFrame(runLoop), nextFrameDelay);
84
+ } else {
85
+ // Use standard rAF when not throttling
86
+ requestAnimationFrame(runLoop);
87
+ }
88
+ };
89
+ requestAnimationFrame(runLoop);
90
+ }
91
+
92
+ ////////////////////////
93
+ // ImageBitmap
94
+ ////////////////////////
95
+
96
+ override createImageBitmap(
97
+ blob: ImageBitmapSource,
98
+ sxOrOptions?: number | ImageBitmapOptions,
99
+ sy?: number,
100
+ sw?: number,
101
+ sh?: number,
102
+ options?: ImageBitmapOptions,
103
+ ): Promise<ImageBitmap> {
104
+ if (typeof sxOrOptions === 'number') {
105
+ return createImageBitmap(
106
+ blob,
107
+ sxOrOptions,
108
+ sy ?? 0,
109
+ sw ?? 0,
110
+ sh ?? 0,
111
+ options,
112
+ );
113
+ } else {
114
+ return createImageBitmap(blob, sxOrOptions);
115
+ }
116
+ }
117
+
118
+ getTimeStamp(): number {
119
+ return performance ? performance.now() : Date.now();
120
+ }
121
+ }
@@ -34,7 +34,7 @@ export abstract class CoreContextTexture {
34
34
  this.memManager.setTextureMemUse(this.textureSource, byteSize);
35
35
  }
36
36
 
37
- abstract load(): void;
37
+ abstract load(): Promise<void>;
38
38
  abstract free(): void;
39
39
 
40
40
  get renderable(): boolean {
@@ -25,7 +25,7 @@ import type { ContextSpy } from '../lib/ContextSpy.js';
25
25
  import type { RenderCoords } from '../lib/RenderCoords.js';
26
26
  import type { RectWithValid } from '../lib/utils.js';
27
27
  import type { CoreShaderProgram } from './CoreShaderProgram.js';
28
- import type { Texture } from '../textures/Texture.js';
28
+ import type { Texture, TextureCoords } from '../textures/Texture.js';
29
29
  import { CoreContextTexture } from './CoreContextTexture.js';
30
30
  import type { CoreShaderType, CoreShaderNode } from './CoreShaderNode.js';
31
31
 
@@ -38,6 +38,7 @@ export interface QuadOptions {
38
38
  colorBr: number;
39
39
  texture: Texture | null;
40
40
  textureOptions: TextureOptions | null;
41
+ textureCoords: TextureCoords | undefined;
41
42
  zIndex: number;
42
43
  shader: CoreShaderNode | null;
43
44
  alpha: number;
@@ -51,7 +52,7 @@ export interface QuadOptions {
51
52
  renderCoords?: RenderCoords;
52
53
  rtt: boolean;
53
54
  parentHasRenderTexture: boolean;
54
- framebufferDimensions: Dimensions;
55
+ framebufferDimensions: Dimensions | null;
55
56
  }
56
57
 
57
58
  export interface CoreRendererOptions {
@@ -103,5 +104,7 @@ export abstract class CoreRenderer {
103
104
  abstract renderToTexture(node: CoreNode): void;
104
105
  abstract getBufferInfo(): BufferInfo | null;
105
106
  abstract getQuadCount(): number | null;
107
+ abstract updateViewport(): void;
106
108
  abstract updateClearColor(color: number): void;
109
+ getTextureCoords?(node: CoreNode): TextureCoords;
107
110
  }
@@ -66,9 +66,7 @@ export function resolveShaderProps(
66
66
  * You could view a ShaderType as a configuration object that contains methods,
67
67
  * and values that you can use to alter the way a node is drawn by the Renderer.
68
68
  */
69
- export interface CoreShaderType<
70
- Props extends object = Record<string, unknown>,
71
- > {
69
+ export interface CoreShaderType<Props extends object = any> {
72
70
  /**
73
71
  * Values you use to draw the Shader
74
72
  */
@@ -88,7 +86,7 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
88
86
  readonly stage: Stage;
89
87
  readonly shaderType: CoreShaderType<Props>;
90
88
  protected propsConfig: ShaderProps<Props> | undefined;
91
- protected resolvedProps: Props | undefined = undefined;
89
+ readonly resolvedProps: Props | undefined = undefined;
92
90
  protected definedProps: Props | undefined = undefined;
93
91
  protected node: CoreNode | null = null;
94
92
  update: (() => void) | undefined = undefined;
@@ -152,8 +150,14 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
152
150
  this.node = node;
153
151
  }
154
152
 
155
- getResolvedProps() {
156
- return this.resolvedProps;
153
+ createValueKey() {
154
+ let valueKey = '';
155
+ for (const key in this.resolvedProps) {
156
+ valueKey += `${key}:${this.resolvedProps[key]!};`;
157
+ }
158
+ valueKey += `node-width:${this.node!.width}`;
159
+ valueKey += `node-height:${this.node!.height}`;
160
+ return valueKey;
157
161
  }
158
162
 
159
163
  get props(): Props | undefined {
@@ -26,14 +26,10 @@ import {
26
26
  type QuadOptions,
27
27
  } from '../CoreRenderer.js';
28
28
  import { CanvasTexture } from './CanvasTexture.js';
29
- import {
30
- parseColor,
31
- parseToAbgrString,
32
- parseToRgbaString,
33
- } from './internal/ColorUtils.js';
29
+ import { parseColor } from '../../lib/colorParser.js';
34
30
  import { assertTruthy } from '../../../utils.js';
35
31
  import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
36
- import type { CoreShaderType } from '../CoreShaderNode.js';
32
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
37
33
 
38
34
  export class CanvasRenderer extends CoreRenderer {
39
35
  private context: CanvasRenderingContext2D;
@@ -43,8 +39,6 @@ export class CanvasRenderer extends CoreRenderer {
43
39
  public renderToTextureActive = false;
44
40
  activeRttNode: CoreNode | null = null;
45
41
 
46
- private parsedColorCache: Map<number, string> = new Map();
47
-
48
42
  constructor(options: CoreRendererOptions) {
49
43
  super(options);
50
44
 
@@ -54,7 +48,7 @@ export class CanvasRenderer extends CoreRenderer {
54
48
  this.canvas = canvas as HTMLCanvasElement;
55
49
  this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
56
50
  this.pixelRatio = this.stage.pixelRatio;
57
- this.clearColor = this.getParsedColor(this.stage.clearColor);
51
+ this.clearColor = normalizeCanvasColor(this.stage.clearColor);
58
52
  }
59
53
 
60
54
  reset(): void {
@@ -221,12 +215,12 @@ export class CanvasRenderer extends CoreRenderer {
221
215
  endX,
222
216
  endY,
223
217
  );
224
- gradient.addColorStop(0, this.getParsedColor(color));
225
- gradient.addColorStop(1, this.getParsedColor(endColor));
218
+ gradient.addColorStop(0, normalizeCanvasColor(color));
219
+ gradient.addColorStop(1, normalizeCanvasColor(endColor));
226
220
  this.context.fillStyle = gradient;
227
221
  this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
228
222
  } else if (textureType === TextureType.color) {
229
- this.context.fillStyle = this.getParsedColor(color);
223
+ this.context.fillStyle = normalizeCanvasColor(color);
230
224
  this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
231
225
  }
232
226
  }
@@ -270,30 +264,20 @@ export class CanvasRenderer extends CoreRenderer {
270
264
  return null;
271
265
  }
272
266
 
273
- getParsedColor(color: number, isRGBA: boolean = false) {
274
- let out = this.parsedColorCache.get(color);
275
- if (out !== undefined) {
276
- return out;
277
- }
278
- if (isRGBA) {
279
- out = parseToRgbaString(color);
280
- } else {
281
- out = parseToAbgrString(color);
282
- }
283
- this.parsedColorCache.set(color, out);
284
- return out;
285
- }
286
-
287
267
  /**
288
268
  * Updates the clear color of the canvas renderer.
289
269
  *
290
270
  * @param color - The color to set as the clear color.
291
271
  */
292
272
  updateClearColor(color: number) {
293
- this.clearColor = this.getParsedColor(color);
273
+ this.clearColor = normalizeCanvasColor(color);
274
+ }
275
+
276
+ override updateViewport(): void {
277
+ // noop
294
278
  }
295
279
 
296
- override getDefaultShaderNode() {
280
+ getDefaultShaderNode() {
297
281
  return null;
298
282
  }
299
283
  }
@@ -16,10 +16,10 @@
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
21
  import type { QuadOptions } from '../CoreRenderer.js';
21
22
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
22
- import type { CanvasRenderer } from './CanvasRenderer.js';
23
23
 
24
24
  export type CanvasShaderType<
25
25
  T extends object = Record<string, unknown>,
@@ -67,10 +67,7 @@ export class CanvasShaderNode<
67
67
 
68
68
  this.update = () => {
69
69
  const prevKey = this.valueKey;
70
- this.valueKey = '';
71
- for (const key in this.resolvedProps) {
72
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
- }
70
+ this.valueKey = this.createValueKey();
74
71
 
75
72
  if (prevKey === this.valueKey) {
76
73
  return;
@@ -94,6 +91,6 @@ export class CanvasShaderNode<
94
91
  }
95
92
 
96
93
  toColorString(rgba: number) {
97
- return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
94
+ return normalizeCanvasColor(rgba, true);
98
95
  }
99
96
  }
@@ -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,19 +35,19 @@ 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
53
  free(): void {
@@ -64,8 +64,11 @@ export class CanvasTexture extends CoreContextTexture {
64
64
  // - tinted image
65
65
  const mult = this.tintCache ? 8 : 4;
66
66
  if (this.textureSource.dimensions) {
67
- const { width, height } = this.textureSource.dimensions;
68
- this.setTextureMemUse(width * height * mult);
67
+ this.setTextureMemUse(
68
+ this.textureSource.dimensions.width *
69
+ this.textureSource.dimensions.height *
70
+ mult,
71
+ );
69
72
  }
70
73
  }
71
74
 
@@ -41,6 +41,11 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
41
41
  const { glw } = this;
42
42
  const nativeTexture = (this._nativeCtxTexture =
43
43
  this.createNativeCtxTexture());
44
+
45
+ if (!nativeTexture) {
46
+ throw new Error('Failed to create native texture for RenderTexture');
47
+ }
48
+
44
49
  const { width, height } = this.textureSource;
45
50
 
46
51
  // Create Framebuffer object
@@ -18,11 +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';
24
23
  import type { Texture } from '../../textures/Texture.js';
25
- import { isPowerOfTwo } from '../../utils.js';
26
24
  import { CoreContextTexture } from '../CoreContextTexture.js';
27
25
  import { isHTMLImageElement } from './internal/RendererUtils.js';
28
26
 
@@ -57,7 +55,6 @@ export class WebGlCtxTexture extends CoreContextTexture {
57
55
  this.load();
58
56
  return null;
59
57
  }
60
- assertTruthy(this._nativeCtxTexture);
61
58
  return this._nativeCtxTexture;
62
59
  }
63
60
 
@@ -78,54 +75,65 @@ export class WebGlCtxTexture extends CoreContextTexture {
78
75
  * to force the texture to be pre-loaded prior to accessing the ctxTexture
79
76
  * property.
80
77
  */
81
- load() {
82
- // If the texture is already loading or loaded, don't load it again.
78
+ async load(): Promise<void> {
79
+ // If the texture is already loading or loaded, return resolved promise
83
80
  if (this.state === 'loading' || this.state === 'loaded') {
84
- return;
81
+ return Promise.resolve();
85
82
  }
86
83
 
87
84
  this.state = 'loading';
88
85
  this.textureSource.setState('loading');
86
+
87
+ // Await the native texture creation to ensure GPU buffer is fully allocated
89
88
  this._nativeCtxTexture = this.createNativeCtxTexture();
90
89
 
91
90
  if (this._nativeCtxTexture === null) {
92
91
  this.state = 'failed';
93
- this.textureSource.setState(
94
- 'failed',
95
- new Error('Could not create WebGL Texture'),
96
- );
92
+ const error = new Error('Could not create WebGL Texture');
93
+ this.textureSource.setState('failed', error);
97
94
  console.error('Could not create WebGL Texture');
98
- return;
95
+ throw error;
99
96
  }
100
97
 
101
- this.onLoadRequest()
102
- .then(({ width, height }) => {
103
- // If the texture has been freed while loading, return early.
104
- if (this.state === 'freed') {
105
- return;
106
- }
107
-
108
- this.state = 'loaded';
109
- this._w = width;
110
- this._h = height;
111
- // Update the texture source's width and height so that it can be used
112
- // for rendering.
113
- this.textureSource.setState('loaded', { width, height });
114
-
115
- // cleanup source texture data
116
- this.textureSource.freeTextureData();
117
- })
118
- .catch((err) => {
119
- // If the texture has been freed while loading, return early.
120
- if (this.state === 'freed') {
121
- return;
122
- }
123
-
124
- this.state = 'failed';
125
- this.textureSource.setState('failed', err);
98
+ try {
99
+ const { width, height } = await this.onLoadRequest();
100
+
101
+ // If the texture has been freed while loading, return early.
102
+ // Type assertion needed because state could change during async operations
103
+ if ((this.state as string) === 'freed') {
104
+ return;
105
+ }
106
+
107
+ this.state = 'loaded';
108
+ this._w = width;
109
+ this._h = height;
110
+ // Update the texture source's width and height so that it can be used
111
+ // for rendering.
112
+ this.textureSource.setState('loaded', { width, height });
113
+
114
+ // cleanup source texture data next tick
115
+ // This is done using queueMicrotask to ensure it runs after the current
116
+ // event loop tick, allowing the texture to be fully loaded and bound
117
+ // to the GL context before freeing the source data.
118
+ // This is important to avoid issues with the texture data being
119
+ // freed while the texture is still being loaded or used.
120
+ queueMicrotask(() => {
126
121
  this.textureSource.freeTextureData();
127
- console.error(err);
128
122
  });
123
+ } catch (err: unknown) {
124
+ // If the texture has been freed while loading, return early.
125
+ // Type assertion needed because state could change during async operations
126
+ if ((this.state as string) === 'freed') {
127
+ return;
128
+ }
129
+
130
+ this.state = 'failed';
131
+ const error = err instanceof Error ? err : new Error(String(err));
132
+ this.textureSource.setState('failed', error);
133
+ this.textureSource.freeTextureData();
134
+ console.error(err);
135
+ throw error; // Re-throw to propagate the error
136
+ }
129
137
  }
130
138
 
131
139
  /**
@@ -268,17 +276,17 @@ export class WebGlCtxTexture extends CoreContextTexture {
268
276
  }
269
277
 
270
278
  /**
271
- * Create native context texture
279
+ * Create native context texture asynchronously
272
280
  *
273
281
  * @remarks
274
- * When this method returns the returned texture will be bound to the GL context state.
282
+ * When this method resolves, the returned texture will be bound to the GL context state
283
+ * and fully ready for use. This ensures proper GPU resource allocation timing.
275
284
  *
276
- * @param width
277
- * @param height
278
- * @returns
285
+ * @returns Promise that resolves to the native WebGL texture or null on failure
279
286
  */
280
- protected createNativeCtxTexture() {
287
+ protected createNativeCtxTexture(): WebGLTexture | null {
281
288
  const { glw } = this;
289
+
282
290
  const nativeTexture = glw.createTexture();
283
291
  if (!nativeTexture) {
284
292
  return null;
@@ -296,6 +304,7 @@ export class WebGlCtxTexture extends CoreContextTexture {
296
304
  // texture wrapping method
297
305
  glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
298
306
  glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
307
+
299
308
  return nativeTexture;
300
309
  }
301
310
  }
@@ -24,6 +24,8 @@ import type { BufferCollection } from './internal/BufferCollection.js';
24
24
  import type { WebGlShaderNode } from './WebGlShaderNode.js';
25
25
  import type { QuadOptions } from '../CoreRenderer.js';
26
26
  import type { CoreTextNode } from '../../CoreTextNode.js';
27
+ import type { RectWithValid } from '../../lib/utils.js';
28
+ import type { Dimensions } from '../../../common/CommonTypes.js';
27
29
 
28
30
  type ReqQuad =
29
31
  | 'alpha'
@@ -44,7 +46,6 @@ type RenderOpQuadOptions = Pick<QuadOptions, ReqQuad> &
44
46
  *
45
47
  */
46
48
  export class WebGlRenderOp extends CoreRenderOp {
47
- length = 0;
48
49
  numQuads = 0;
49
50
  textures: WebGlCtxTexture[] = [];
50
51
 
@@ -56,15 +57,32 @@ export class WebGlRenderOp extends CoreRenderOp {
56
57
  readonly maxTextures: number;
57
58
  readonly buffers: BufferCollection;
58
59
  readonly shader: WebGlShaderNode;
60
+ readonly width: number;
61
+ readonly height: number;
62
+ readonly clippingRect: RectWithValid;
63
+ readonly rtt: boolean;
64
+ readonly parentHasRenderTexture: boolean;
65
+ readonly framebufferDimensions?: Dimensions | null;
66
+ readonly alpha: number;
67
+ readonly pixelRatio: number;
59
68
 
60
69
  constructor(
61
70
  readonly renderer: WebGlRenderer,
62
- readonly quad: RenderOpQuadOptions,
71
+ quad: RenderOpQuadOptions,
63
72
  readonly bufferIdx: number,
64
73
  ) {
65
74
  super();
66
75
  this.buffers = quad.sdfBuffers || renderer.quadBufferCollection;
67
76
  this.shader = quad.shader as WebGlShaderNode;
77
+ this.width = quad.width;
78
+ this.height = quad.height;
79
+ this.clippingRect = quad.clippingRect;
80
+ this.parentHasRenderTexture = quad.parentHasRenderTexture;
81
+ this.framebufferDimensions = quad.framebufferDimensions;
82
+ this.rtt = quad.rtt;
83
+ this.alpha = quad.alpha;
84
+ this.pixelRatio =
85
+ this.parentHasRenderTexture === true ? 1 : renderer.stage.pixelRatio;
68
86
 
69
87
  /**
70
88
  * related to line 51
@@ -107,25 +125,21 @@ export class WebGlRenderOp extends CoreRenderOp {
107
125
  stage.shManager.useShader(this.shader.program);
108
126
  this.shader.program.bindRenderOp(this);
109
127
 
110
- // TODO: Reduce calculations required
111
- const quadIdx = (this.bufferIdx / 32) * 6 * 2;
112
128
  // Clipping
113
- if (this.quad.clippingRect.valid) {
114
- const { x, y, width, height } = this.quad.clippingRect;
115
- const pixelRatio = this.quad.parentHasRenderTexture
116
- ? 1
117
- : stage.pixelRatio;
118
- const canvasHeight = options.canvas.height;
119
-
120
- const clipX = Math.round(x * pixelRatio);
121
- const clipWidth = Math.round(width * pixelRatio);
122
- const clipHeight = Math.round(height * pixelRatio);
123
- let clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
129
+ if (this.clippingRect.valid === true) {
130
+ const clipX = Math.round(this.clippingRect.x * this.pixelRatio);
131
+ const clipWidth = Math.round(this.clippingRect.width * this.pixelRatio);
132
+ const clipHeight = Math.round(this.clippingRect.height * this.pixelRatio);
133
+ let clipY = Math.round(
134
+ options.canvas.height -
135
+ clipHeight -
136
+ this.clippingRect.y * this.pixelRatio,
137
+ );
124
138
  // if parent has render texture, we need to adjust the scissor rect
125
139
  // to be relative to the parent's framebuffer
126
- if (this.quad.parentHasRenderTexture) {
127
- clipY = this.quad.framebufferDimensions
128
- ? this.quad.framebufferDimensions.height - this.quad.height
140
+ if (this.parentHasRenderTexture) {
141
+ clipY = this.framebufferDimensions
142
+ ? this.framebufferDimensions.height - this.height
129
143
  : 0;
130
144
  }
131
145
 
@@ -135,11 +149,19 @@ export class WebGlRenderOp extends CoreRenderOp {
135
149
  glw.setScissorTest(false);
136
150
  }
137
151
 
138
- glw.drawElements(
139
- glw.TRIANGLES,
140
- 6 * this.numQuads,
141
- glw.UNSIGNED_SHORT,
142
- quadIdx,
143
- );
152
+ // Check if this is SDF rendering (has sdfBuffers)
153
+ if (this.sdfShaderProps !== undefined) {
154
+ // SDF rendering uses drawArrays with explicit triangle vertices (6 vertices per quad)
155
+ glw.drawArrays(glw.TRIANGLES, 0, 6 * this.numQuads);
156
+ } else {
157
+ // Regular rendering uses drawElements with index buffer (4 vertices per quad)
158
+ const quadIdx = (this.bufferIdx / 32) * 6 * 2;
159
+ glw.drawElements(
160
+ glw.TRIANGLES,
161
+ 6 * this.numQuads,
162
+ glw.UNSIGNED_SHORT,
163
+ quadIdx,
164
+ );
165
+ }
144
166
  }
145
167
  }