@lightningtv/renderer 3.0.0-beta1 → 3.2.3

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 (497) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +22 -28
  3. package/dist/exports/canvas-shaders.js +0 -16
  4. package/dist/exports/canvas-shaders.js.map +1 -1
  5. package/dist/exports/canvas.d.ts +1 -1
  6. package/dist/exports/canvas.js +1 -19
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +2 -5
  9. package/dist/exports/index.js +1 -23
  10. package/dist/exports/index.js.map +1 -1
  11. package/dist/exports/inspector.js +0 -18
  12. package/dist/exports/inspector.js.map +1 -1
  13. package/dist/exports/utils.d.ts +2 -1
  14. package/dist/exports/utils.js +2 -19
  15. package/dist/exports/utils.js.map +1 -1
  16. package/dist/exports/webgl-shaders.js +0 -16
  17. package/dist/exports/webgl-shaders.js.map +1 -1
  18. package/dist/exports/webgl.d.ts +2 -1
  19. package/dist/exports/webgl.js +2 -19
  20. package/dist/exports/webgl.js.map +1 -1
  21. package/dist/src/common/CommonTypes.d.ts +15 -3
  22. package/dist/src/common/CommonTypes.js +0 -18
  23. package/dist/src/common/CommonTypes.js.map +1 -1
  24. package/dist/src/common/EventEmitter.js +0 -18
  25. package/dist/src/common/EventEmitter.js.map +1 -1
  26. package/dist/src/common/IEventEmitter.js +0 -16
  27. package/dist/src/common/IEventEmitter.js.map +1 -1
  28. package/dist/src/core/Autosizer.d.ts +35 -0
  29. package/dist/src/core/Autosizer.js +178 -0
  30. package/dist/src/core/Autosizer.js.map +1 -0
  31. package/dist/src/core/CoreNode.d.ts +140 -102
  32. package/dist/src/core/CoreNode.js +812 -528
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +3 -3
  35. package/dist/src/core/CoreShaderManager.js +0 -18
  36. package/dist/src/core/CoreShaderManager.js.map +1 -1
  37. package/dist/src/core/CoreTextNode.d.ts +75 -87
  38. package/dist/src/core/CoreTextNode.js +380 -258
  39. package/dist/src/core/CoreTextNode.js.map +1 -1
  40. package/dist/src/core/CoreTextureManager.d.ts +25 -14
  41. package/dist/src/core/CoreTextureManager.js +82 -139
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +102 -36
  44. package/dist/src/core/Stage.js +424 -191
  45. package/dist/src/core/Stage.js.map +1 -1
  46. package/dist/src/core/TextureError.d.ts +11 -0
  47. package/dist/src/core/TextureError.js +37 -0
  48. package/dist/src/core/TextureError.js.map +1 -0
  49. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  50. package/dist/src/core/TextureMemoryManager.js +114 -134
  51. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  52. package/dist/src/core/animations/AnimationManager.js +0 -18
  53. package/dist/src/core/animations/AnimationManager.js.map +1 -1
  54. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  55. package/dist/src/core/animations/CoreAnimation.js +8 -24
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  58. package/dist/src/core/animations/CoreAnimationController.js +11 -22
  59. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  60. package/dist/src/core/lib/ContextSpy.js +0 -18
  61. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  62. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  63. package/dist/src/core/lib/ImageWorker.js +33 -31
  64. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  65. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  66. package/dist/src/core/lib/Matrix3d.js +7 -19
  67. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  68. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  69. package/dist/src/core/lib/RenderCoords.js +27 -55
  70. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  71. package/dist/src/core/lib/WebGlContextWrapper.d.ts +83 -8
  72. package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
  73. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  74. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  75. package/dist/src/core/lib/collectionUtils.js +82 -0
  76. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  77. package/dist/src/core/lib/colorCache.d.ts +1 -0
  78. package/dist/src/core/lib/colorCache.js +19 -0
  79. package/dist/src/core/lib/colorCache.js.map +1 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
  81. package/dist/src/core/lib/colorParser.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  83. package/dist/src/core/lib/textureCompression.js +320 -85
  84. package/dist/src/core/lib/textureCompression.js.map +1 -1
  85. package/dist/src/core/lib/textureSvg.js +0 -18
  86. package/dist/src/core/lib/textureSvg.js.map +1 -1
  87. package/dist/src/core/lib/utils.d.ts +8 -1
  88. package/dist/src/core/lib/utils.js +44 -20
  89. package/dist/src/core/lib/utils.js.map +1 -1
  90. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  91. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  92. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  93. package/dist/src/core/platforms/Platform.d.ts +42 -0
  94. package/dist/src/core/platforms/Platform.js +4 -0
  95. package/dist/src/core/platforms/Platform.js.map +1 -0
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  100. package/dist/src/core/renderers/CoreContextTexture.js +0 -18
  101. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  102. package/dist/src/core/renderers/CoreRenderOp.js +0 -18
  103. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -18
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
  108. package/dist/src/core/renderers/CoreShaderNode.js +25 -2
  109. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
  111. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
  112. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
  116. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  117. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  118. package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
  119. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  121. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  122. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  124. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  125. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  128. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
  131. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  133. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  134. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  136. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  137. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  139. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  140. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  142. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  143. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  145. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
  147. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  148. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  149. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  150. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  151. package/dist/src/core/shaders/canvas/Border.js +67 -41
  152. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  154. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  155. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
  156. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  157. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  158. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  159. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  160. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  161. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  162. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
  163. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  169. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  170. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  171. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  172. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  173. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  174. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  175. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  176. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  177. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  178. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
  179. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  181. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  182. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  183. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  184. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
  186. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  187. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  188. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  189. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  191. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  192. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  194. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  195. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  200. package/dist/src/core/shaders/utils.js +25 -0
  201. package/dist/src/core/shaders/utils.js.map +1 -0
  202. package/dist/src/core/shaders/webgl/Border.js +118 -51
  203. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/Default.js +6 -41
  205. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  207. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  208. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  209. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  210. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  211. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  212. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  213. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  214. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  215. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  217. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  219. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  221. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  222. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  224. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  225. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  226. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  227. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  228. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  229. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  230. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  231. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  232. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  233. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  235. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  236. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  237. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  238. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  239. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  241. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  242. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  243. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  244. package/dist/src/core/text-rendering/Utils.js +66 -0
  245. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  246. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  247. package/dist/src/core/textures/ColorTexture.js +3 -22
  248. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  249. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  250. package/dist/src/core/textures/ImageTexture.js +57 -66
  251. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  252. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  253. package/dist/src/core/textures/NoiseTexture.js +8 -26
  254. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  255. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  256. package/dist/src/core/textures/RenderTexture.js +12 -30
  257. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  258. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  259. package/dist/src/core/textures/SubTexture.js +19 -55
  260. package/dist/src/core/textures/SubTexture.js.map +1 -1
  261. package/dist/src/core/textures/Texture.d.ts +90 -12
  262. package/dist/src/core/textures/Texture.js +160 -35
  263. package/dist/src/core/textures/Texture.js.map +1 -1
  264. package/dist/src/core/utils.d.ts +2 -1
  265. package/dist/src/core/utils.js +1 -19
  266. package/dist/src/core/utils.js.map +1 -1
  267. package/dist/src/main-api/INode.js.map +1 -1
  268. package/dist/src/main-api/Inspector.d.ts +135 -2
  269. package/dist/src/main-api/Inspector.js +507 -30
  270. package/dist/src/main-api/Inspector.js.map +1 -1
  271. package/dist/src/main-api/Renderer.d.ts +294 -81
  272. package/dist/src/main-api/Renderer.js +225 -96
  273. package/dist/src/main-api/Renderer.js.map +1 -1
  274. package/dist/src/utils.d.ts +19 -6
  275. package/dist/src/utils.js +32 -27
  276. package/dist/src/utils.js.map +1 -1
  277. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  278. package/dist/tsconfig.tsbuildinfo +1 -0
  279. package/exports/canvas-shaders.ts +0 -17
  280. package/exports/canvas.ts +1 -19
  281. package/exports/index.ts +6 -27
  282. package/exports/inspector.ts +0 -19
  283. package/exports/utils.ts +7 -19
  284. package/exports/webgl-shaders.ts +0 -16
  285. package/exports/webgl.ts +3 -20
  286. package/package.json +23 -22
  287. package/src/common/CommonTypes.ts +20 -22
  288. package/src/common/EventEmitter.ts +0 -19
  289. package/src/common/IAnimationController.ts +0 -18
  290. package/src/common/IEventEmitter.ts +0 -17
  291. package/src/core/Autosizer.ts +205 -0
  292. package/src/core/CoreNode.test.ts +376 -45
  293. package/src/core/CoreNode.ts +1015 -656
  294. package/src/core/CoreShaderManager.ts +3 -21
  295. package/src/core/CoreTextNode.ts +457 -314
  296. package/src/core/CoreTextureManager.ts +110 -167
  297. package/src/core/Stage.ts +526 -236
  298. package/src/core/TextureError.ts +46 -0
  299. package/src/core/TextureMemoryManager.ts +150 -167
  300. package/src/core/animations/AnimationManager.ts +0 -19
  301. package/src/core/animations/CoreAnimation.ts +15 -32
  302. package/src/core/animations/CoreAnimationController.ts +13 -23
  303. package/src/core/lib/ContextSpy.ts +0 -19
  304. package/src/core/lib/ImageWorker.ts +45 -32
  305. package/src/core/lib/Matrix3d.ts +7 -20
  306. package/src/core/lib/RenderCoords.ts +36 -67
  307. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  308. package/src/core/lib/collectionUtils.ts +99 -0
  309. package/src/core/lib/colorCache.ts +20 -0
  310. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  311. package/src/core/lib/textureCompression.ts +433 -93
  312. package/src/core/lib/textureSvg.ts +0 -19
  313. package/src/core/lib/utils.ts +58 -19
  314. package/src/core/lib/validateImageBitmap.ts +17 -6
  315. package/src/core/platforms/Platform.ts +64 -0
  316. package/src/core/platforms/web/WebPlatform.ts +132 -0
  317. package/src/core/renderers/CoreContextTexture.ts +2 -20
  318. package/src/core/renderers/CoreRenderOp.ts +0 -19
  319. package/src/core/renderers/CoreRenderer.ts +16 -23
  320. package/src/core/renderers/CoreShaderNode.ts +37 -6
  321. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  322. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  323. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  324. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  325. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  326. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  327. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  328. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  329. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  330. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  331. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  332. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  333. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  334. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  335. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  336. package/src/core/shaders/canvas/Border.ts +91 -50
  337. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  338. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  339. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  340. package/src/core/shaders/canvas/Rounded.ts +2 -19
  341. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  342. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  343. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  344. package/src/core/shaders/canvas/Shadow.ts +0 -17
  345. package/src/core/shaders/canvas/utils/render.ts +45 -53
  346. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  347. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  348. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  349. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  350. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  351. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  352. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  353. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  354. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  355. package/src/core/shaders/utils.ts +30 -0
  356. package/src/core/shaders/webgl/Border.ts +118 -55
  357. package/src/core/shaders/webgl/Default.ts +6 -43
  358. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  359. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  360. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  361. package/src/core/shaders/webgl/Rounded.ts +25 -45
  362. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  363. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  364. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  365. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  366. package/src/core/shaders/webgl/Shadow.ts +39 -35
  367. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  368. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  369. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  370. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  371. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  372. package/src/core/text-rendering/TextRenderer.ts +426 -0
  373. package/src/core/text-rendering/Utils.ts +80 -0
  374. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  375. package/src/core/textures/ColorTexture.ts +7 -24
  376. package/src/core/textures/ImageTexture.ts +110 -92
  377. package/src/core/textures/NoiseTexture.ts +14 -31
  378. package/src/core/textures/RenderTexture.ts +18 -35
  379. package/src/core/textures/SubTexture.ts +25 -65
  380. package/src/core/textures/Texture.ts +214 -46
  381. package/src/core/utils.ts +9 -26
  382. package/src/main-api/INode.ts +0 -18
  383. package/src/main-api/Inspector.ts +794 -38
  384. package/src/main-api/Renderer.ts +519 -159
  385. package/src/utils.ts +64 -29
  386. package/dist/src/core/platform.d.ts +0 -10
  387. package/dist/src/core/platform.js +0 -56
  388. package/dist/src/core/platform.js.map +0 -1
  389. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  390. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  391. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  393. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  394. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  395. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  396. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  397. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  398. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  399. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  400. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  401. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  402. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  403. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  404. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  405. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  406. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  407. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  408. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  409. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  410. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  411. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  412. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  417. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  418. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  420. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  421. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  423. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  424. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  425. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  426. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  427. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  428. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  429. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  430. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  432. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  433. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  462. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  463. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  464. package/scripts/please-use-pnpm.js +0 -13
  465. package/src/core/platform.ts +0 -64
  466. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  467. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  468. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  469. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  470. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  471. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  472. package/src/core/text-rendering/TrFontManager.ts +0 -183
  473. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  474. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  475. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  476. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  477. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  478. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  479. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  480. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  481. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  496. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  497. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -2,7 +2,12 @@
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
4
4
 
5
- import { assertTruthy } from '../../utils.js';
5
+ import { assertTruthy, isProductionEnvironment } from '../../utils.js';
6
+ import type {
7
+ Vec2,
8
+ Vec3,
9
+ Vec4,
10
+ } from '../renderers/webgl/internal/ShaderUtils.js';
6
11
  import { isWebGl2 } from '../renderers/webgl/internal/WebGlUtils.js';
7
12
 
8
13
  /**
@@ -45,6 +50,7 @@ export class WebGlContextWrapper {
45
50
  private boundArrayBuffer: WebGLBuffer | null;
46
51
  private boundElementArrayBuffer: WebGLBuffer | null;
47
52
  private curProgram: WebGLProgram | null;
53
+ private curUniformLocations: Record<string, WebGLUniformLocation> = {};
48
54
  //#endregion Cached WebGL State
49
55
 
50
56
  //#region Canvas
@@ -67,6 +73,7 @@ export class WebGlContextWrapper {
67
73
  public readonly TEXTURE_WRAP_S;
68
74
  public readonly TEXTURE_WRAP_T;
69
75
  public readonly LINEAR;
76
+ public readonly LINEAR_MIPMAP_LINEAR;
70
77
  public readonly CLAMP_TO_EDGE;
71
78
  public readonly RGB;
72
79
  public readonly RGBA;
@@ -158,6 +165,7 @@ export class WebGlContextWrapper {
158
165
  this.TEXTURE_WRAP_S = gl.TEXTURE_WRAP_S;
159
166
  this.TEXTURE_WRAP_T = gl.TEXTURE_WRAP_T;
160
167
  this.LINEAR = gl.LINEAR;
168
+ this.LINEAR_MIPMAP_LINEAR = gl.LINEAR_MIPMAP_LINEAR;
161
169
  this.CLAMP_TO_EDGE = gl.CLAMP_TO_EDGE;
162
170
  this.RGB = gl.RGB;
163
171
  this.RGBA = gl.RGBA;
@@ -621,6 +629,32 @@ export class WebGlContextWrapper {
621
629
  this.gl.bufferData(this.gl.ARRAY_BUFFER, data, usage);
622
630
  }
623
631
 
632
+ /**
633
+ * ```
634
+ * gl.bindBuffer(gl.ARRAY_BUFFER, buffer); // if needed
635
+ * gl.bufferSubData(gl.ARRAY_BUFFER, dstByteOffset, data);
636
+ * ```
637
+ *
638
+ * @remarks
639
+ * **WebGL Combo**: `gl.bindBuffer` is only called when the buffer changes.
640
+ * Used to surgically update a subset of the GPU buffer without reallocating it.
641
+ *
642
+ * @param buffer
643
+ * @param dstByteOffset - Byte offset into the GPU buffer where `data` will be written
644
+ * @param data
645
+ */
646
+ arrayBufferSubData(
647
+ buffer: WebGLBuffer | null,
648
+ dstByteOffset: number,
649
+ data: ArrayBufferView,
650
+ ) {
651
+ if (this.boundArrayBuffer !== buffer) {
652
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
653
+ this.boundArrayBuffer = buffer;
654
+ }
655
+ this.gl.bufferSubData(this.gl.ARRAY_BUFFER, dstByteOffset, data);
656
+ }
657
+
624
658
  /**
625
659
  * ```
626
660
  * gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
@@ -684,16 +718,23 @@ export class WebGlContextWrapper {
684
718
  * @param program
685
719
  * @returns object with numbers
686
720
  */
687
- getUniformLocations(program: WebGLProgram): Record<string, number> {
721
+ getUniformLocations(
722
+ program: WebGLProgram,
723
+ ): Record<string, WebGLUniformLocation> {
688
724
  const gl = this.gl;
689
725
  const length = gl.getProgramParameter(
690
726
  program,
691
727
  gl.ACTIVE_UNIFORMS,
692
728
  ) as number;
693
- const result = {} as Record<string, number>;
729
+ const result = {} as Record<string, WebGLUniformLocation>;
694
730
  for (let i = 0; i < length; i++) {
695
- const { name } = gl.getActiveUniform(program, i) as WebGLActiveInfo;
696
- result[name] = i;
731
+ const info = gl.getActiveUniform(program, i) as WebGLActiveInfo;
732
+ //remove bracket + value from uniform name;
733
+ let name = info.name.replace(/\[.*?\]/g, '');
734
+ result[name] = gl.getUniformLocation(
735
+ program,
736
+ name,
737
+ ) as WebGLUniformLocation;
697
738
  }
698
739
  return result;
699
740
  }
@@ -703,16 +744,17 @@ export class WebGlContextWrapper {
703
744
  * @param program
704
745
  * @returns object with numbers
705
746
  */
706
- getAttributeLocations(program: WebGLProgram): Record<string, number> {
747
+ getAttributeLocations(program: WebGLProgram): string[] {
707
748
  const gl = this.gl;
708
749
  const length = gl.getProgramParameter(
709
750
  program,
710
751
  gl.ACTIVE_ATTRIBUTES,
711
752
  ) as number;
712
- const result = {} as Record<string, number>;
753
+
754
+ const result: string[] = [];
713
755
  for (let i = 0; i < length; i++) {
714
756
  const { name } = gl.getActiveAttrib(program, i) as WebGLActiveInfo;
715
- result[name] = i;
757
+ result[gl.getAttribLocation(program, name)] = name;
716
758
  }
717
759
  return result;
718
760
  }
@@ -725,12 +767,16 @@ export class WebGlContextWrapper {
725
767
  * @param program
726
768
  * @returns
727
769
  */
728
- useProgram(program: WebGLProgram | null) {
770
+ useProgram(
771
+ program: WebGLProgram | null,
772
+ uniformLocations: Record<string, WebGLUniformLocation>,
773
+ ) {
729
774
  if (this.curProgram === program) {
730
775
  return;
731
776
  }
732
777
  this.gl.useProgram(program);
733
778
  this.curProgram = program;
779
+ this.curUniformLocations = uniformLocations;
734
780
  }
735
781
 
736
782
  /**
@@ -740,10 +786,7 @@ export class WebGlContextWrapper {
740
786
  * @param v0 - The value to set.
741
787
  */
742
788
  uniform1f(location: string, v0: number) {
743
- this.gl.uniform1f(
744
- this.gl.getUniformLocation(this.curProgram!, location),
745
- v0,
746
- );
789
+ this.gl.uniform1f(this.curUniformLocations[location] || null, v0);
747
790
  }
748
791
 
749
792
  /**
@@ -753,10 +796,7 @@ export class WebGlContextWrapper {
753
796
  * @param value - The array of values to set.
754
797
  */
755
798
  uniform1fv(location: string, value: Float32Array) {
756
- this.gl.uniform1fv(
757
- this.gl.getUniformLocation(this.curProgram!, location),
758
- value,
759
- );
799
+ this.gl.uniform1fv(this.curUniformLocations[location] || null, value);
760
800
  }
761
801
 
762
802
  /**
@@ -766,10 +806,7 @@ export class WebGlContextWrapper {
766
806
  * @param v0 - The value to set.
767
807
  */
768
808
  uniform1i(location: string, v0: number) {
769
- this.gl.uniform1i(
770
- this.gl.getUniformLocation(this.curProgram!, location),
771
- v0,
772
- );
809
+ this.gl.uniform1i(this.curUniformLocations[location] || null, v0);
773
810
  }
774
811
 
775
812
  /**
@@ -779,10 +816,7 @@ export class WebGlContextWrapper {
779
816
  * @param value - The array of values to set.
780
817
  */
781
818
  uniform1iv(location: string, value: Int32Array) {
782
- this.gl.uniform1iv(
783
- this.gl.getUniformLocation(this.curProgram!, location),
784
- value,
785
- );
819
+ this.gl.uniform1iv(this.curUniformLocations[location] || null, value);
786
820
  }
787
821
 
788
822
  /**
@@ -793,10 +827,20 @@ export class WebGlContextWrapper {
793
827
  * @param v1 - The second component of the vector.
794
828
  */
795
829
  uniform2f(location: string, v0: number, v1: number) {
830
+ this.gl.uniform2f(this.curUniformLocations[location] || null, v0, v1);
831
+ }
832
+
833
+ /**
834
+ * Sets the value of a vec3 uniform variable.
835
+ *
836
+ * @param location - The location of the uniform variable.
837
+ * @param v - array of 4 numbers.
838
+ */
839
+ uniform2fa(location: string, value: Vec2) {
796
840
  this.gl.uniform2f(
797
- this.gl.getUniformLocation(this.curProgram!, location),
798
- v0,
799
- v1,
841
+ this.curUniformLocations[location] || null,
842
+ value[0],
843
+ value[1],
800
844
  );
801
845
  }
802
846
 
@@ -807,10 +851,7 @@ export class WebGlContextWrapper {
807
851
  * @param value - The array of vec2 values to set.
808
852
  */
809
853
  uniform2fv(location: string, value: Float32Array) {
810
- this.gl.uniform2fv(
811
- this.gl.getUniformLocation(this.curProgram!, location),
812
- value,
813
- );
854
+ this.gl.uniform2fv(this.curUniformLocations[location] || null, value);
814
855
  }
815
856
 
816
857
  /**
@@ -821,11 +862,7 @@ export class WebGlContextWrapper {
821
862
  * @param v1 - The second component of the vector.
822
863
  */
823
864
  uniform2i(location: string, v0: number, v1: number) {
824
- this.gl.uniform2i(
825
- this.gl.getUniformLocation(this.curProgram!, location),
826
- v0,
827
- v1,
828
- );
865
+ this.gl.uniform2i(this.curUniformLocations[location] || null, v0, v1);
829
866
  }
830
867
 
831
868
  /**
@@ -835,10 +872,7 @@ export class WebGlContextWrapper {
835
872
  * @param value - The array of ivec2 values to set.
836
873
  */
837
874
  uniform2iv(location: string, value: Int32Array) {
838
- this.gl.uniform2iv(
839
- this.gl.getUniformLocation(this.curProgram!, location),
840
- value,
841
- );
875
+ this.gl.uniform2iv(this.curUniformLocations[location] || null, value);
842
876
  }
843
877
 
844
878
  /**
@@ -850,11 +884,21 @@ export class WebGlContextWrapper {
850
884
  * @param v2 - The third component of the vector.
851
885
  */
852
886
  uniform3f(location: string, v0: number, v1: number, v2: number) {
887
+ this.gl.uniform3f(this.curUniformLocations[location] || null, v0, v1, v2);
888
+ }
889
+
890
+ /**
891
+ * Sets the value of a vec3 uniform variable.
892
+ *
893
+ * @param location - The location of the uniform variable.
894
+ * @param v - array of 4 numbers.
895
+ */
896
+ uniform3fa(location: string, value: Vec3) {
853
897
  this.gl.uniform3f(
854
- this.gl.getUniformLocation(this.curProgram!, location),
855
- v0,
856
- v1,
857
- v2,
898
+ this.curUniformLocations[location] || null,
899
+ value[0],
900
+ value[1],
901
+ value[2],
858
902
  );
859
903
  }
860
904
 
@@ -865,10 +909,7 @@ export class WebGlContextWrapper {
865
909
  * @param value - The array of vec3 values to set.
866
910
  */
867
911
  uniform3fv(location: string, value: Float32Array) {
868
- this.gl.uniform3fv(
869
- this.gl.getUniformLocation(this.curProgram!, location),
870
- value,
871
- );
912
+ this.gl.uniform3fv(this.curUniformLocations[location] || null, value);
872
913
  }
873
914
 
874
915
  /**
@@ -880,12 +921,7 @@ export class WebGlContextWrapper {
880
921
  * @param v2 - The third component of the vector.
881
922
  */
882
923
  uniform3i(location: string, v0: number, v1: number, v2: number) {
883
- this.gl.uniform3i(
884
- this.gl.getUniformLocation(this.curProgram!, location),
885
- v0,
886
- v1,
887
- v2,
888
- );
924
+ this.gl.uniform3i(this.curUniformLocations[location] || null, v0, v1, v2);
889
925
  }
890
926
 
891
927
  /**
@@ -895,10 +931,7 @@ export class WebGlContextWrapper {
895
931
  * @param value - The array of ivec3 values to set.
896
932
  */
897
933
  uniform3iv(location: string, value: Int32Array) {
898
- this.gl.uniform3iv(
899
- this.gl.getUniformLocation(this.curProgram!, location),
900
- value,
901
- );
934
+ this.gl.uniform3iv(this.curUniformLocations[location] || null, value);
902
935
  }
903
936
 
904
937
  /**
@@ -912,7 +945,7 @@ export class WebGlContextWrapper {
912
945
  */
913
946
  uniform4f(location: string, v0: number, v1: number, v2: number, v3: number) {
914
947
  this.gl.uniform4f(
915
- this.gl.getUniformLocation(this.curProgram!, location),
948
+ this.curUniformLocations[location] || null,
916
949
  v0,
917
950
  v1,
918
951
  v2,
@@ -920,6 +953,22 @@ export class WebGlContextWrapper {
920
953
  );
921
954
  }
922
955
 
956
+ /**
957
+ * Sets the value of a vec4 uniform variable.
958
+ *
959
+ * @param location - The location of the uniform variable.
960
+ * @param v - array of 4 numbers.
961
+ */
962
+ uniform4fa(location: string, value: Vec4) {
963
+ this.gl.uniform4f(
964
+ this.curUniformLocations[location] || null,
965
+ value[0],
966
+ value[1],
967
+ value[2],
968
+ value[3],
969
+ );
970
+ }
971
+
923
972
  /**
924
973
  * Sets the value of a vec4 array uniform variable.
925
974
  *
@@ -927,10 +976,7 @@ export class WebGlContextWrapper {
927
976
  * @param value - The array of vec4 values to set.
928
977
  */
929
978
  uniform4fv(location: string, value: Float32Array) {
930
- this.gl.uniform4fv(
931
- this.gl.getUniformLocation(this.curProgram!, location),
932
- value,
933
- );
979
+ this.gl.uniform4fv(this.curUniformLocations[location] || null, value);
934
980
  }
935
981
 
936
982
  /**
@@ -944,7 +990,7 @@ export class WebGlContextWrapper {
944
990
  */
945
991
  uniform4i(location: string, v0: number, v1: number, v2: number, v3: number) {
946
992
  this.gl.uniform4i(
947
- this.gl.getUniformLocation(this.curProgram!, location),
993
+ this.curUniformLocations[location] || null,
948
994
  v0,
949
995
  v1,
950
996
  v2,
@@ -959,10 +1005,7 @@ export class WebGlContextWrapper {
959
1005
  * @param value - The array of ivec4 values to set.
960
1006
  */
961
1007
  uniform4iv(location: string, value: Int32Array) {
962
- this.gl.uniform4iv(
963
- this.gl.getUniformLocation(this.curProgram!, location),
964
- value,
965
- );
1008
+ this.gl.uniform4iv(this.curUniformLocations[location] || null, value);
966
1009
  }
967
1010
 
968
1011
  /**
@@ -974,7 +1017,7 @@ export class WebGlContextWrapper {
974
1017
  */
975
1018
  uniformMatrix2fv(location: string, value: Float32Array) {
976
1019
  this.gl.uniformMatrix2fv(
977
- this.gl.getUniformLocation(this.curProgram!, location),
1020
+ this.curUniformLocations[location] || null,
978
1021
  false,
979
1022
  value,
980
1023
  );
@@ -987,7 +1030,7 @@ export class WebGlContextWrapper {
987
1030
  */
988
1031
  uniformMatrix3fv(location: string, value: Float32Array) {
989
1032
  this.gl.uniformMatrix3fv(
990
- this.gl.getUniformLocation(this.curProgram!, location),
1033
+ this.curUniformLocations[location] || null,
991
1034
  false,
992
1035
  value,
993
1036
  );
@@ -1000,7 +1043,7 @@ export class WebGlContextWrapper {
1000
1043
  */
1001
1044
  uniformMatrix4fv(location: string, value: Float32Array) {
1002
1045
  this.gl.uniformMatrix4fv(
1003
- this.gl.getUniformLocation(this.curProgram!, location),
1046
+ this.curUniformLocations[location] || null,
1004
1047
  false,
1005
1048
  value,
1006
1049
  );
@@ -1032,6 +1075,19 @@ export class WebGlContextWrapper {
1032
1075
  this.gl.drawElements(mode, count, type, offset);
1033
1076
  }
1034
1077
 
1078
+ /**
1079
+ * ```
1080
+ * gl.drawArrays(mode, first, count);
1081
+ * ```
1082
+ *
1083
+ * @param mode
1084
+ * @param first
1085
+ * @param count
1086
+ */
1087
+ drawArrays(mode: GLenum, first: GLint, count: GLsizei) {
1088
+ this.gl.drawArrays(mode, first, count);
1089
+ }
1090
+
1035
1091
  /**
1036
1092
  * ```
1037
1093
  * gl.drawArrays(mode, first, count);
@@ -1269,6 +1325,74 @@ export class WebGlContextWrapper {
1269
1325
  deleteShader(shader: WebGLShader) {
1270
1326
  this.gl.deleteShader(shader);
1271
1327
  }
1328
+
1329
+ /**
1330
+ * ```
1331
+ * gl.deleteBuffer(buffer);
1332
+ * ```
1333
+ *
1334
+ * @param buffer - The buffer to delete
1335
+ */
1336
+ deleteBuffer(buffer: WebGLBuffer) {
1337
+ const { gl } = this;
1338
+ gl.deleteBuffer(buffer);
1339
+
1340
+ // Reset bound buffers if they match the deleted buffer
1341
+ if (this.boundArrayBuffer === buffer) {
1342
+ this.boundArrayBuffer = null;
1343
+ }
1344
+ }
1345
+
1346
+ /**
1347
+ * ```
1348
+ * gl.deleteVertexArray(vertexArray);
1349
+ * ```
1350
+ *
1351
+ * @param vertexArray - The vertex array object to delete
1352
+ */
1353
+ deleteVertexArray(vertexArray: WebGLVertexArrayObject) {
1354
+ if (this.isWebGl2()) {
1355
+ (this.gl as WebGL2RenderingContext).deleteVertexArray(vertexArray);
1356
+ }
1357
+ }
1358
+
1359
+ /**
1360
+ * Check for WebGL errors and return error information
1361
+ * @param operation Description of the operation for error reporting
1362
+ * @returns Object with error information or null if no error
1363
+ */
1364
+ checkError(
1365
+ operation: string,
1366
+ ): { error: number; errorName: string; message: string } | null {
1367
+ const error = this.getError();
1368
+ if (error !== 0) {
1369
+ // 0 is GL_NO_ERROR
1370
+ let errorName = 'UNKNOWN_ERROR';
1371
+ switch (error) {
1372
+ case this.INVALID_ENUM:
1373
+ errorName = 'INVALID_ENUM';
1374
+ break;
1375
+ case 0x0501: // GL_INVALID_VALUE
1376
+ errorName = 'INVALID_VALUE';
1377
+ break;
1378
+ case this.INVALID_OPERATION:
1379
+ errorName = 'INVALID_OPERATION';
1380
+ break;
1381
+ case 0x0505: // GL_OUT_OF_MEMORY
1382
+ errorName = 'OUT_OF_MEMORY';
1383
+ break;
1384
+ case 0x9242: // GL_CONTEXT_LOST_WEBGL
1385
+ errorName = 'CONTEXT_LOST_WEBGL';
1386
+ break;
1387
+ }
1388
+
1389
+ const message = `WebGL ${errorName} (0x${error.toString(
1390
+ 16,
1391
+ )}) during ${operation}`;
1392
+ return { error, errorName, message };
1393
+ }
1394
+ return null;
1395
+ }
1272
1396
  }
1273
1397
 
1274
1398
  // prettier-ignore
@@ -0,0 +1,99 @@
1
+ import type { CoreNode } from '../CoreNode.js';
2
+
3
+ //Bucket sort implementation for sorting CoreNode arrays by zIndex
4
+ export const bucketSortByZIndex = (nodes: CoreNode[], min: number): void => {
5
+ const buckets: CoreNode[][] = [];
6
+ const bucketIndices: number[] = [];
7
+ //distribute nodes into buckets
8
+ for (let i = 0; i < nodes.length; i++) {
9
+ const node = nodes[i]!;
10
+ const index = node.props.zIndex - min;
11
+ //create bucket if it doesn't exist
12
+ if (buckets[index] === undefined) {
13
+ buckets[index] = [];
14
+ bucketIndices.push(index);
15
+ }
16
+ buckets[index]!.push(node);
17
+ }
18
+
19
+ //sort each bucket using insertion sort
20
+ for (let i = 1; i < bucketIndices.length; i++) {
21
+ const key = bucketIndices[i]!;
22
+ let j = i - 1;
23
+ while (j >= 0 && bucketIndices[j]! > key) {
24
+ bucketIndices[j + 1] = bucketIndices[j]!;
25
+ j--;
26
+ }
27
+ bucketIndices[j + 1] = key;
28
+ }
29
+
30
+ //flatten buckets
31
+ let idx = 0;
32
+ for (let i = 0; i < bucketIndices.length; i++) {
33
+ const bucket = buckets[bucketIndices[i]!]!;
34
+ for (let j = 0; j < bucket.length; j++) {
35
+ nodes[idx++] = bucket[j]!;
36
+ }
37
+ }
38
+
39
+ //clean up
40
+ buckets.length = 0;
41
+ bucketIndices.length = 0;
42
+ };
43
+
44
+ export const incrementalRepositionByZIndex = (
45
+ changedNodes: CoreNode[],
46
+ nodes: CoreNode[],
47
+ ): void => {
48
+ for (let i = 0; i < changedNodes.length; i++) {
49
+ const node = changedNodes[i]!;
50
+ const currentIndex = findChildIndexById(node, nodes);
51
+ if (currentIndex === -1) continue;
52
+
53
+ const targetZIndex = node.props.zIndex;
54
+
55
+ //binary search for correct insertion position
56
+ let left = 0;
57
+ let right = nodes.length;
58
+
59
+ while (left < right) {
60
+ const mid = (left + right) >>> 1;
61
+ if (nodes[mid]!.props.zIndex <= targetZIndex) {
62
+ left = mid + 1;
63
+ } else {
64
+ right = mid;
65
+ }
66
+ }
67
+
68
+ //adjust target position if it's after the current position
69
+ const targetIndex = left > currentIndex ? left - 1 : left;
70
+
71
+ //only reposition if target is different from current
72
+ if (targetIndex !== currentIndex) {
73
+ nodes.splice(currentIndex, 1);
74
+ nodes.splice(targetIndex, 0, node);
75
+ }
76
+ }
77
+ };
78
+
79
+ export const findChildIndexById = (
80
+ node: CoreNode,
81
+ children: CoreNode[],
82
+ ): number => {
83
+ for (let i = 0; i < children.length; i++) {
84
+ const child = children[i]!;
85
+
86
+ // @ts-ignore - accessing protected property
87
+ if (child._id === node._id) {
88
+ return i;
89
+ }
90
+ }
91
+ return -1;
92
+ };
93
+
94
+ export const removeChild = (node: CoreNode, children: CoreNode[]): void => {
95
+ const index = findChildIndexById(node, children);
96
+ if (index !== -1) {
97
+ children.splice(index, 1);
98
+ }
99
+ };
@@ -0,0 +1,20 @@
1
+ import { parseToAbgrString, parseToRgbaString } from './colorParser.js';
2
+
3
+ const parsedArgbColors: Map<number, string> = new Map();
4
+ const parsedRgbaColors: Map<number, string> = new Map();
5
+
6
+ export function normalizeCanvasColor(color: number, isRGBA: boolean = false) {
7
+ let targetCache = isRGBA === true ? parsedRgbaColors : parsedArgbColors;
8
+ let out = targetCache.get(color);
9
+ if (out !== undefined) {
10
+ return out;
11
+ }
12
+
13
+ if (isRGBA === true) {
14
+ out = parseToRgbaString(color);
15
+ } else {
16
+ out = parseToAbgrString(color);
17
+ }
18
+ targetCache.set(color, out);
19
+ return out;
20
+ }
@@ -1,22 +1,3 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
1
  export interface IParsedColor {
21
2
  isWhite: boolean;
22
3
  a: number;
@@ -47,7 +28,7 @@ export function parseColor(abgr: number): IParsedColor {
47
28
  return { isWhite: false, a, r, g, b };
48
29
  }
49
30
 
50
- export function parseToAbgrString(abgr: number) {
31
+ export function parseToAbgrString(abgr: number): string {
51
32
  const a = ((abgr >>> 24) & 0xff) / 255;
52
33
  const b = (abgr >>> 16) & 0xff & 0xff;
53
34
  const g = (abgr >>> 8) & 0xff & 0xff;
@@ -55,7 +36,7 @@ export function parseToAbgrString(abgr: number) {
55
36
  return `rgba(${r},${g},${b},${a})`;
56
37
  }
57
38
 
58
- export function parseToRgbaString(rgba: number) {
39
+ export function parseToRgbaString(rgba: number): string {
59
40
  const r = (rgba >>> 24) & 0xff;
60
41
  const g = (rgba >>> 16) & 0xff & 0xff;
61
42
  const b = (rgba >>> 8) & 0xff & 0xff;