@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,6 @@ import type { CoreNode } from '../../CoreNode.js';
2
2
  import { getNormalizedRgbaComponents } from '../../lib/utils.js';
3
3
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
4
4
  import type { Stage } from '../../Stage.js';
5
- import type { QuadOptions } from '../CoreRenderer.js';
6
5
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
7
6
  import type {
8
7
  UniformCollection,
@@ -10,7 +9,7 @@ import type {
10
9
  Vec3,
11
10
  Vec4,
12
11
  } from './internal/ShaderUtils.js';
13
- import type { WebGlRenderer } from './WebGlRenderer.js';
12
+ import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
14
13
  import type { WebGlShaderProgram } from './WebGlShaderProgram.js';
15
14
 
16
15
  export type ShaderSource<T> =
@@ -46,7 +45,7 @@ export type WebGlShaderType<T extends object = Record<string, unknown>> =
46
45
  * This function is used to check if the shader can be reused based on quad info
47
46
  * @param props
48
47
  */
49
- canBatch?: (renderOpA: QuadOptions, renderOpB: QuadOptions) => boolean;
48
+ canBatch?: (node: CoreNode, currentRenderOp: WebGlRenderOp) => boolean;
50
49
  /**
51
50
  * extensions required for specific shader?
52
51
  */
@@ -86,11 +85,9 @@ export class WebGlShaderNode<
86
85
  this.updater!(this.node as CoreNode, this.props);
87
86
  return;
88
87
  }
88
+
89
89
  const prevKey = this.valueKey;
90
- this.valueKey = '';
91
- for (const key in this.resolvedProps) {
92
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
93
- }
90
+ this.valueKey = this.createValueKey();
94
91
 
95
92
  if (prevKey === this.valueKey) {
96
93
  return;
@@ -1,29 +1,11 @@
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
1
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
2
+ import { USE_RTT } from '../../../utils.js';
20
3
  import { Default } from '../../shaders/webgl/Default.js';
21
- import type { QuadOptions } from '../CoreRenderer.js';
22
4
  import type { CoreShaderProgram } from '../CoreShaderProgram.js';
23
5
  import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
24
- import type { WebGlRenderOp } from './WebGlRenderOp.js';
25
- import type { WebGlRenderer } from './WebGlRenderer.js';
6
+ import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
26
7
  import type { WebGlShaderType } from './WebGlShaderNode.js';
8
+ import { WebGlShaderNode } from './WebGlShaderNode.js';
27
9
  import type { BufferCollection } from './internal/BufferCollection.js';
28
10
  import {
29
11
  createProgram,
@@ -33,10 +15,10 @@ import {
33
15
  type UniformSet3Params,
34
16
  type UniformSet4Params,
35
17
  } from './internal/ShaderUtils.js';
18
+ import { CoreNode } from '../../CoreNode.js';
36
19
 
37
20
  export class WebGlShaderProgram implements CoreShaderProgram {
38
- protected boundBufferCollection: BufferCollection | null = null;
39
- protected program: WebGLProgram;
21
+ protected program: WebGLProgram | null;
40
22
  /**
41
23
  * Vertex Array Object
42
24
  *
@@ -46,10 +28,13 @@ export class WebGlShaderProgram implements CoreShaderProgram {
46
28
  protected vao: WebGLVertexArrayObject | undefined;
47
29
  protected renderer: WebGlRenderer;
48
30
  protected glw: WebGlContextWrapper;
49
- protected attributeLocations: Record<string, number>;
31
+ protected attributeLocations: string[];
32
+ protected uniformLocations: Record<string, WebGLUniformLocation> | null;
50
33
  protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
51
34
  protected useSystemAlpha = false;
52
35
  protected useSystemDimensions = false;
36
+ protected useTimeValue = false;
37
+ public isDestroyed = false;
53
38
  supportsIndexedTextures = false;
54
39
 
55
40
  constructor(
@@ -117,10 +102,14 @@ export class WebGlShaderProgram implements CoreShaderProgram {
117
102
  this.program = program;
118
103
  this.attributeLocations = glw.getAttributeLocations(program);
119
104
 
120
- this.useSystemAlpha =
121
- this.glw.getUniformLocation(program, 'u_alpha') !== null;
122
- this.useSystemDimensions =
123
- this.glw.getUniformLocation(program, 'u_dimensions') !== null;
105
+ const uniLocs = (this.uniformLocations = glw.getUniformLocations(program));
106
+
107
+ this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
108
+ this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
109
+
110
+ this.useTimeValue =
111
+ this.glw.getUniformLocation(program, 'u_dimensions') !== null &&
112
+ config.time !== undefined;
124
113
 
125
114
  this.lifecycle = {
126
115
  update: config.update,
@@ -133,39 +122,62 @@ export class WebGlShaderProgram implements CoreShaderProgram {
133
122
  }
134
123
 
135
124
  disableAttributes() {
136
- const { glw } = this;
137
- const attribs = Object.keys(this.attributeLocations);
138
- const attribLen = attribs.length;
125
+ const glw = this.glw;
126
+ const attribLen = this.attributeLocations.length;
139
127
  for (let i = 0; i < attribLen; i++) {
140
128
  glw.disableVertexAttribArray(i);
141
129
  }
142
130
  }
143
131
 
144
- reuseRenderOp(renderOpA: QuadOptions, renderOpB: QuadOptions): boolean {
145
- const lifecycleCheck = this.lifecycle.canBatch
146
- ? this.lifecycle.canBatch(renderOpA, renderOpB)
147
- : true;
148
- if (!lifecycleCheck) {
149
- return false;
132
+ reuseRenderOp(node: CoreNode, currentRenderOp: WebGlRenderOp): boolean {
133
+ if (this.lifecycle.canBatch !== undefined) {
134
+ return this.lifecycle.canBatch(node, currentRenderOp);
135
+ }
136
+
137
+ const { time, worldAlpha, width, height } = node;
138
+
139
+ if (this.useTimeValue === true) {
140
+ if (time !== currentRenderOp.time) {
141
+ return false;
142
+ }
150
143
  }
151
144
 
152
- if (this.useSystemAlpha) {
153
- if (renderOpA.alpha !== renderOpB.alpha) {
145
+ if (this.useSystemAlpha === true) {
146
+ if (worldAlpha !== currentRenderOp.worldAlpha) {
154
147
  return false;
155
148
  }
156
149
  }
157
150
 
158
- if (this.useSystemDimensions) {
151
+ if (this.useSystemDimensions === true) {
159
152
  if (
160
- renderOpA.width !== renderOpB.width ||
161
- renderOpA.height !== renderOpB.height
153
+ width !== currentRenderOp.width ||
154
+ height !== currentRenderOp.height
162
155
  ) {
163
156
  return false;
164
157
  }
165
158
  }
166
159
 
167
- const shaderPropsA = renderOpA.shader?.getResolvedProps();
168
- const shaderPropsB = renderOpB.shader?.getResolvedProps();
160
+ let shaderPropsA: Record<string, unknown> | undefined = undefined;
161
+ let shaderPropsB: Record<string, unknown> | undefined = undefined;
162
+
163
+ const shader = node.props.shader;
164
+
165
+ if (shader !== null) {
166
+ shaderPropsA = (shader as WebGlShaderNode).resolvedProps;
167
+ }
168
+
169
+ const opShader = currentRenderOp.shader;
170
+ if (opShader !== null) {
171
+ shaderPropsB = (opShader as WebGlShaderNode).resolvedProps;
172
+ }
173
+
174
+ if (
175
+ (shaderPropsA === undefined && shaderPropsB !== undefined) ||
176
+ (shaderPropsA !== undefined && shaderPropsB === undefined)
177
+ ) {
178
+ return false;
179
+ }
180
+
169
181
  if (shaderPropsA !== undefined && shaderPropsB !== undefined) {
170
182
  for (const key in shaderPropsA) {
171
183
  if (shaderPropsA[key] !== shaderPropsB[key]) {
@@ -178,28 +190,35 @@ export class WebGlShaderProgram implements CoreShaderProgram {
178
190
  }
179
191
 
180
192
  bindRenderOp(renderOp: WebGlRenderOp) {
181
- this.bindBufferCollection(renderOp.buffers);
182
- this.bindTextures(renderOp.textures);
193
+ const isCoreNode = renderOp.isCoreNode;
183
194
 
184
- const { parentHasRenderTexture } = renderOp.quad;
195
+ this.bindTextures(renderOp.renderOpTextures);
196
+ this.bindBufferCollection(renderOp.quadBufferCollection);
197
+
198
+ const parentHasRenderTexture = renderOp.parentHasRenderTexture;
199
+ const framebufferDimensions =
200
+ isCoreNode && renderOp.parentHasRenderTexture
201
+ ? renderOp.parentFramebufferDimensions
202
+ : renderOp.framebufferDimensions;
185
203
 
186
204
  // Skip if the parent and current operation both have render textures
187
- if (renderOp.quad.rtt && parentHasRenderTexture) {
205
+ if (USE_RTT && renderOp.rtt === true && parentHasRenderTexture === true) {
188
206
  return;
189
207
  }
190
208
 
191
209
  // Bind render texture framebuffer dimensions as resolution
192
210
  // if the parent has a render texture
193
- if (parentHasRenderTexture) {
194
- const { width, height } = renderOp.quad.framebufferDimensions!;
211
+ if (USE_RTT && parentHasRenderTexture === true && framebufferDimensions) {
212
+ const { w, h } = framebufferDimensions;
195
213
  // Force pixel ratio to 1.0 for render textures since they are always 1:1
196
214
  // the final render texture will be rendered to the screen with the correct pixel ratio
197
215
  this.glw.uniform1f('u_pixelRatio', 1.0);
198
216
 
199
217
  // Set resolution to the framebuffer dimensions
200
- this.glw.uniform2f('u_resolution', width, height);
218
+ this.glw.uniform2f('u_resolution', w, h);
201
219
  } else {
202
- this.glw.uniform1f('u_pixelRatio', renderOp.renderer.stage.pixelRatio);
220
+ this.glw.uniform1f('u_pixelRatio', renderOp.stage.pixelRatio);
221
+
203
222
  this.glw.uniform2f(
204
223
  'u_resolution',
205
224
  this.glw.canvas.width,
@@ -207,45 +226,47 @@ export class WebGlShaderProgram implements CoreShaderProgram {
207
226
  );
208
227
  }
209
228
 
210
- this.glw.uniform1f('u_rtt', renderOp.quad.rtt ? 1 : 0);
229
+ if (this.useTimeValue === true) {
230
+ this.glw.uniform1f('u_time', renderOp.time);
231
+ }
211
232
 
212
- if (this.useSystemAlpha) {
213
- this.glw.uniform1f('u_alpha', renderOp.quad.alpha);
233
+ if (this.useSystemAlpha === true) {
234
+ this.glw.uniform1f('u_alpha', renderOp.worldAlpha);
214
235
  }
215
236
 
216
- if (this.useSystemDimensions) {
217
- this.glw.uniform2f(
218
- 'u_dimensions',
219
- renderOp.quad.width,
220
- renderOp.quad.height,
221
- );
237
+ if (this.useSystemDimensions === true) {
238
+ this.glw.uniform2f('u_dimensions', renderOp.width, renderOp.height);
222
239
  }
223
240
 
224
241
  /**temporary fix to make sdf texts work */
225
- if (renderOp.sdfShaderProps !== undefined) {
226
- (renderOp.shader.shaderType as WebGlShaderType).onSdfBind?.call(
242
+ if (isCoreNode === false && renderOp.sdfShaderProps !== undefined) {
243
+ const opShader = renderOp.shader; // SdfRenderOp has .shader
244
+ (opShader.shaderType as WebGlShaderType).onSdfBind?.call(
227
245
  this.glw,
228
246
  renderOp.sdfShaderProps,
229
247
  );
230
248
  return;
231
249
  }
232
250
 
233
- if (renderOp.shader.props) {
251
+ const shader = renderOp.shader as WebGlShaderNode;
252
+ if (shader.props !== undefined) {
234
253
  /**
235
254
  * loop over all precalculated uniform types
236
255
  */
237
- for (const key in renderOp.shader.uniforms.single) {
238
- const { method, value } = renderOp.shader.uniforms.single[key]!;
256
+ const uniforms = shader.uniforms;
257
+
258
+ for (const key in uniforms.single) {
259
+ const { method, value } = uniforms.single[key]!;
239
260
  this.glw[method as keyof UniformSet1Param](key, value as never);
240
261
  }
241
262
 
242
- for (const key in renderOp.shader.uniforms.vec2) {
243
- const { method, value } = renderOp.shader.uniforms.vec2[key]!;
263
+ for (const key in uniforms.vec2) {
264
+ const { method, value } = uniforms.vec2[key]!;
244
265
  this.glw[method as keyof UniformSet2Params](key, value[0], value[1]);
245
266
  }
246
267
 
247
- for (const key in renderOp.shader.uniforms.vec3) {
248
- const { method, value } = renderOp.shader.uniforms.vec3[key]!;
268
+ for (const key in uniforms.vec3) {
269
+ const { method, value } = uniforms.vec3[key]!;
249
270
  this.glw[method as keyof UniformSet3Params](
250
271
  key,
251
272
  value[0],
@@ -254,8 +275,8 @@ export class WebGlShaderProgram implements CoreShaderProgram {
254
275
  );
255
276
  }
256
277
 
257
- for (const key in renderOp.shader.uniforms.vec4) {
258
- const { method, value } = renderOp.shader.uniforms.vec4[key]!;
278
+ for (const key in uniforms.vec4) {
279
+ const { method, value } = uniforms.vec4[key]!;
259
280
  this.glw[method as keyof UniformSet4Params](
260
281
  key,
261
282
  value[0],
@@ -269,14 +290,14 @@ export class WebGlShaderProgram implements CoreShaderProgram {
269
290
 
270
291
  bindBufferCollection(buffer: BufferCollection) {
271
292
  const { glw } = this;
272
- const attribs = Object.keys(this.attributeLocations);
293
+ const attribs = this.attributeLocations;
273
294
  const attribLen = attribs.length;
274
295
 
275
296
  for (let i = 0; i < attribLen; i++) {
276
297
  const name = attribs[i]!;
277
298
  const resolvedBuffer = buffer.getBuffer(name);
278
299
  const resolvedInfo = buffer.getAttributeInfo(name);
279
- if (!resolvedBuffer || !resolvedInfo) {
300
+ if (resolvedBuffer === undefined || resolvedInfo === undefined) {
280
301
  continue;
281
302
  }
282
303
  glw.enableVertexAttribArray(i);
@@ -293,12 +314,18 @@ export class WebGlShaderProgram implements CoreShaderProgram {
293
314
  }
294
315
 
295
316
  bindTextures(textures: WebGlCtxTexture[]) {
317
+ if (textures[0] === undefined) {
318
+ return;
319
+ }
296
320
  this.glw.activeTexture(0);
297
- this.glw.bindTexture(textures[0]!.ctxTexture);
321
+ this.glw.bindTexture(textures[0].ctxTexture);
298
322
  }
299
323
 
300
324
  attach(): void {
301
- this.glw.useProgram(this.program);
325
+ if (this.isDestroyed === true) {
326
+ return;
327
+ }
328
+ this.glw.useProgram(this.program, this.uniformLocations!);
302
329
  if (this.glw.isWebGl2() && this.vao) {
303
330
  this.glw.bindVertexArray(this.vao);
304
331
  }
@@ -307,4 +334,23 @@ export class WebGlShaderProgram implements CoreShaderProgram {
307
334
  detach(): void {
308
335
  this.disableAttributes();
309
336
  }
337
+
338
+ destroy() {
339
+ if (this.isDestroyed === true) {
340
+ return;
341
+ }
342
+ const glw = this.glw;
343
+
344
+ this.detach();
345
+
346
+ glw.deleteProgram(this.program!);
347
+ this.program = null;
348
+ this.uniformLocations = null;
349
+
350
+ const attribs = this.attributeLocations;
351
+ const attribLen = this.attributeLocations.length;
352
+ for (let i = 0; i < attribLen; i++) {
353
+ this.glw.deleteBuffer(attribs[i]!);
354
+ }
355
+ }
310
356
  }
@@ -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
  import type { AttributeInfo } from './ShaderUtils.js';
21
2
 
22
3
  export interface BufferItem {
@@ -29,7 +10,19 @@ export interface BufferItem {
29
10
  * vertex attribute formats.
30
11
  */
31
12
  export class BufferCollection {
32
- constructor(readonly config: BufferItem[]) {}
13
+ private _lookup = new Map<string, BufferItem>();
14
+
15
+ constructor(readonly config: BufferItem[]) {
16
+ for (const item of config) {
17
+ for (const attrName in item.attributes) {
18
+ // We only care about attributes that are actually defined (truthy)
19
+ // and we want the first one found in the config array order
20
+ if (item.attributes[attrName] && !this._lookup.has(attrName)) {
21
+ this._lookup.set(attrName, item);
22
+ }
23
+ }
24
+ }
25
+ }
33
26
 
34
27
  /**
35
28
  * Get the WebGLBuffer associated with the given attribute name if it exists.
@@ -38,7 +31,7 @@ export class BufferCollection {
38
31
  * @returns
39
32
  */
40
33
  getBuffer(attributeName: string): WebGLBuffer | undefined {
41
- return this.config.find((item) => item.attributes[attributeName])?.buffer;
34
+ return this._lookup.get(attributeName)?.buffer;
42
35
  }
43
36
 
44
37
  /**
@@ -48,7 +41,6 @@ export class BufferCollection {
48
41
  * @returns
49
42
  */
50
43
  getAttributeInfo(attributeName: string): AttributeInfo | undefined {
51
- return this.config.find((item) => item.attributes[attributeName])
52
- ?.attributes[attributeName];
44
+ return this._lookup.get(attributeName)?.attributes[attributeName];
53
45
  }
54
46
  }
@@ -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
  import type { WebGlContextWrapper } from '../../../lib/WebGlContextWrapper.js';
21
2
 
22
3
  export interface CoreWebGlParameters {
@@ -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
  import type { WebGlContextWrapper } from '../../../lib/WebGlContextWrapper.js';
21
2
 
22
3
  //#region Types
@@ -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
  /**
21
2
  * Generic WebGL Utility Functions
22
3
  *
@@ -1,78 +1,119 @@
1
- /*
2
- * Copyright 2023 Comcast Cable Communications Management, LLC
3
- * Licensed under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License.
5
- * You may obtain a copy of the License at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software
10
- * distributed under the License is distributed on an "AS IS" BASIS,
11
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- * See the License for the specific language governing permissions and
13
- * limitations under the License.
14
- *
15
- * SPDX-License-Identifier: Apache-2.0
16
- */
17
-
1
+ import { formatRgba, parseColorRgba } from '../../lib/colorParser.js';
18
2
  import { valuesAreEqual } from '../../lib/utils.js';
19
3
  import type { CanvasShaderType } from '../../renderers/canvas/CanvasShaderNode.js';
20
- import {
21
- formatRgba,
22
- parseColorRgba,
23
- } from '../../renderers/canvas/internal/ColorUtils.js';
24
4
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
25
5
  import {
26
6
  BorderTemplate,
27
7
  type BorderProps,
28
8
  } from '../templates/BorderTemplate.js';
29
- import { strokeLine } from './utils/render.js';
30
9
 
31
10
  export interface ComputedBorderValues {
32
11
  borderColor: string;
33
12
  borderAsym: boolean;
34
- borderRadius: Vec4;
13
+ innerX: number;
14
+ innerY: number;
15
+ innerW: number;
16
+ innerH: number;
17
+ outerX: number;
18
+ outerY: number;
19
+ outerW: number;
20
+ outerH: number;
35
21
  }
36
22
 
37
23
  export const Border: CanvasShaderType<BorderProps, ComputedBorderValues> = {
38
24
  props: BorderTemplate.props,
39
25
  update() {
40
26
  this.computed.borderColor = formatRgba(parseColorRgba(this.props!.color));
41
- this.computed.borderAsym = !valuesAreEqual(this.props!.width as number[]);
27
+ this.computed.borderAsym = !valuesAreEqual(this.props!.w as number[]);
28
+ const borderAlign = this.props!.align as number;
29
+ const borderGap = this.props!.gap as number;
30
+
31
+ const borderW = this.props!.w as Vec4;
32
+
33
+ if (this.computed.borderAsym === false) {
34
+ const bWidth = borderW[0] * 0.5;
35
+ //inside
36
+ const baseline = bWidth - borderW[0] * borderAlign - borderGap;
37
+ this.computed.outerX = baseline;
38
+ this.computed.outerY = baseline;
39
+
40
+ this.computed.outerW = -baseline * 2;
41
+ this.computed.outerH = -baseline * 2;
42
+ return;
43
+ }
44
+
45
+ // Calculate outer and inner rectangle dimensions
46
+ const [t, r, b, l] = this.props!.w as Vec4;
47
+
48
+ const outerX = (this.computed.outerX = -l * borderAlign - borderGap);
49
+ const outerY = (this.computed.outerY = -t * borderAlign - borderGap);
50
+ let outerW = 0;
51
+ let outerH = 0;
52
+
53
+ if (r > 0) {
54
+ outerW += r * borderAlign + borderGap;
55
+ }
56
+ if (l > 0) {
57
+ outerW += l * borderAlign + borderGap;
58
+ }
59
+
60
+ if (b > 0) {
61
+ outerH += b * borderAlign + borderGap;
62
+ }
63
+ if (t > 0) {
64
+ outerH += t * borderAlign + borderGap;
65
+ }
66
+
67
+ this.computed.outerW = outerW;
68
+ this.computed.outerH = outerH;
69
+
70
+ this.computed.innerX = outerX + l;
71
+ this.computed.innerY = outerY + t;
72
+ this.computed.innerW = outerW - l - r;
73
+ this.computed.innerH = outerH - t - b;
42
74
  },
43
75
  render(ctx, quad, renderContext) {
44
76
  renderContext();
45
- ctx.strokeStyle = this.computed.borderColor!;
46
- if (this.computed.borderAsym === false && this.props!.width[0] > 0) {
47
- const bWidth = this.props!.width[0];
48
- const bHalfWidth = bWidth * 0.5;
49
- ctx.lineWidth = bWidth;
77
+ const computed = this.computed as ComputedBorderValues;
78
+ ctx.strokeStyle = computed.borderColor!;
79
+ if (computed.borderAsym === false && this.props!.w[0] > 0) {
80
+ ctx.lineWidth = this.props!.w[0];
50
81
  ctx.beginPath();
51
82
  ctx.strokeRect(
52
- quad.tx + bHalfWidth,
53
- quad.ty + bHalfWidth,
54
- quad.width - bWidth,
55
- quad.height - bWidth,
83
+ quad.tx + computed.outerX,
84
+ quad.ty + computed.outerY,
85
+ quad.width + computed.outerW,
86
+ quad.height + computed.outerH,
56
87
  );
57
88
  return;
58
89
  }
59
90
 
60
- const { 0: t, 1: r, 2: b, 3: l } = this.props!.width as Vec4;
61
- if (t > 0) {
62
- const y = quad.ty + t * 0.5;
63
- strokeLine(ctx, quad.tx, y, quad.tx + quad.width, y, t);
64
- }
65
- if (r > 0) {
66
- const x = quad.tx + quad.width - r * 0.5;
67
- strokeLine(ctx, x, quad.ty, x, quad.ty + quad.height, r);
68
- }
69
- if (b > 0) {
70
- const y = quad.ty + quad.height - b * 0.5;
71
- strokeLine(ctx, quad.tx, y, quad.tx + quad.width, y, b);
72
- }
73
- if (l > 0) {
74
- const x = quad.tx + l * 0.5;
75
- strokeLine(ctx, x, quad.ty, x, quad.ty + quad.height, l);
76
- }
91
+ // Pre-calculate common values
92
+ const tx = quad.tx;
93
+ const ty = quad.ty;
94
+ const width = quad.width;
95
+ const height = quad.height;
96
+
97
+ // Calculate outer rectangle (including border)
98
+ const outerX = tx + computed.outerX;
99
+ const outerY = ty + computed.outerY;
100
+ const outerW = width + computed.outerW;
101
+ const outerH = height + computed.outerH;
102
+
103
+ // Calculate inner rectangle (excluding border)
104
+ const innerX = tx + computed.innerX;
105
+ const innerY = ty + computed.innerY;
106
+ const innerW = width + computed.innerW;
107
+ const innerH = height + computed.innerH;
108
+
109
+ // Use clip to subtract inner from outer
110
+ ctx.save();
111
+ ctx.beginPath();
112
+ ctx.rect(outerX, outerY, outerW, outerH);
113
+ ctx.rect(innerX, innerY, innerW, innerH);
114
+ ctx.clip('evenodd');
115
+ ctx.fillStyle = this.computed.borderColor!;
116
+ ctx.fillRect(outerX, outerY, outerW, outerH);
117
+ ctx.restore();
77
118
  },
78
119
  };