@lightningtv/renderer 3.0.0-beta1 → 3.2.4

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 (503) 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 +139 -101
  32. package/dist/src/core/CoreNode.js +813 -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 +83 -140
  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 +78 -3
  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/BatchRenderOp.d.ts +25 -0
  121. package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
  122. package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  124. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  125. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  126. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  130. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  133. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  136. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  137. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  139. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  140. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  142. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  143. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  145. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  146. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  147. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  148. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
  150. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  152. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  154. package/dist/src/core/shaders/canvas/Border.js +67 -41
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
  166. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  168. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
  169. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  170. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  171. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  172. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  173. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  174. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  175. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  176. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  177. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  178. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  179. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  181. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
  182. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  183. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  184. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  186. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  187. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  188. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
  189. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  191. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  192. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  194. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  195. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  200. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  201. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  203. package/dist/src/core/shaders/utils.js +25 -0
  204. package/dist/src/core/shaders/utils.js.map +1 -0
  205. package/dist/src/core/shaders/webgl/Border.js +118 -51
  206. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  207. package/dist/src/core/shaders/webgl/Default.js +6 -41
  208. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  209. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  210. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  211. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  212. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  213. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  214. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  215. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  216. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  217. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  218. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  219. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  220. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  221. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  222. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  224. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  225. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  227. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  228. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  229. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  230. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  231. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  232. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  233. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  235. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  236. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  237. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  238. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  239. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  241. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  242. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  243. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  244. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  245. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  247. package/dist/src/core/text-rendering/Utils.js +66 -0
  248. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  249. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  250. package/dist/src/core/textures/ColorTexture.js +3 -22
  251. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  252. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  253. package/dist/src/core/textures/ImageTexture.js +57 -66
  254. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  255. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  256. package/dist/src/core/textures/NoiseTexture.js +8 -26
  257. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  258. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  259. package/dist/src/core/textures/RenderTexture.js +12 -30
  260. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  261. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  262. package/dist/src/core/textures/SubTexture.js +19 -55
  263. package/dist/src/core/textures/SubTexture.js.map +1 -1
  264. package/dist/src/core/textures/Texture.d.ts +90 -12
  265. package/dist/src/core/textures/Texture.js +160 -35
  266. package/dist/src/core/textures/Texture.js.map +1 -1
  267. package/dist/src/core/utils.d.ts +2 -1
  268. package/dist/src/core/utils.js +1 -19
  269. package/dist/src/core/utils.js.map +1 -1
  270. package/dist/src/main-api/INode.js.map +1 -1
  271. package/dist/src/main-api/Inspector.d.ts +135 -2
  272. package/dist/src/main-api/Inspector.js +507 -30
  273. package/dist/src/main-api/Inspector.js.map +1 -1
  274. package/dist/src/main-api/Renderer.d.ts +294 -81
  275. package/dist/src/main-api/Renderer.js +225 -96
  276. package/dist/src/main-api/Renderer.js.map +1 -1
  277. package/dist/src/utils.d.ts +19 -6
  278. package/dist/src/utils.js +32 -27
  279. package/dist/src/utils.js.map +1 -1
  280. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  281. package/dist/tsconfig.tsbuildinfo +1 -0
  282. package/exports/canvas-shaders.ts +0 -17
  283. package/exports/canvas.ts +1 -19
  284. package/exports/index.ts +6 -27
  285. package/exports/inspector.ts +0 -19
  286. package/exports/utils.ts +7 -19
  287. package/exports/webgl-shaders.ts +0 -16
  288. package/exports/webgl.ts +3 -20
  289. package/package.json +23 -22
  290. package/src/common/CommonTypes.ts +20 -22
  291. package/src/common/EventEmitter.ts +0 -19
  292. package/src/common/IAnimationController.ts +0 -18
  293. package/src/common/IEventEmitter.ts +0 -17
  294. package/src/core/Autosizer.ts +205 -0
  295. package/src/core/CoreNode.test.ts +376 -45
  296. package/src/core/CoreNode.ts +1017 -656
  297. package/src/core/CoreShaderManager.ts +3 -21
  298. package/src/core/CoreTextNode.ts +457 -314
  299. package/src/core/CoreTextureManager.ts +123 -168
  300. package/src/core/Stage.ts +526 -236
  301. package/src/core/TextureError.ts +46 -0
  302. package/src/core/TextureMemoryManager.ts +150 -167
  303. package/src/core/animations/AnimationManager.ts +0 -19
  304. package/src/core/animations/CoreAnimation.ts +15 -32
  305. package/src/core/animations/CoreAnimationController.ts +13 -23
  306. package/src/core/lib/ContextSpy.ts +0 -19
  307. package/src/core/lib/ImageWorker.ts +45 -32
  308. package/src/core/lib/Matrix3d.ts +7 -20
  309. package/src/core/lib/RenderCoords.ts +36 -67
  310. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  311. package/src/core/lib/collectionUtils.ts +99 -0
  312. package/src/core/lib/colorCache.ts +20 -0
  313. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  314. package/src/core/lib/textureCompression.ts +433 -93
  315. package/src/core/lib/textureSvg.ts +0 -19
  316. package/src/core/lib/utils.ts +58 -19
  317. package/src/core/lib/validateImageBitmap.ts +17 -6
  318. package/src/core/platforms/Platform.ts +64 -0
  319. package/src/core/platforms/web/WebPlatform.ts +132 -0
  320. package/src/core/renderers/CoreContextTexture.ts +2 -20
  321. package/src/core/renderers/CoreRenderOp.ts +0 -19
  322. package/src/core/renderers/CoreRenderer.ts +16 -23
  323. package/src/core/renderers/CoreShaderNode.ts +37 -6
  324. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  325. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  326. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  327. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  328. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  329. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  330. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  331. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  332. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  333. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  334. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  335. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  336. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  337. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  338. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  339. package/src/core/shaders/canvas/Border.ts +91 -50
  340. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  341. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  342. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  343. package/src/core/shaders/canvas/Rounded.ts +2 -19
  344. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  345. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  346. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  347. package/src/core/shaders/canvas/Shadow.ts +0 -17
  348. package/src/core/shaders/canvas/utils/render.ts +45 -53
  349. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  350. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  351. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  352. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  353. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  354. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  355. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  356. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  357. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  358. package/src/core/shaders/utils.ts +30 -0
  359. package/src/core/shaders/webgl/Border.ts +118 -55
  360. package/src/core/shaders/webgl/Default.ts +6 -43
  361. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  362. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  363. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  364. package/src/core/shaders/webgl/Rounded.ts +25 -45
  365. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  366. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  367. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  368. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  369. package/src/core/shaders/webgl/Shadow.ts +39 -35
  370. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  371. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  372. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  373. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  374. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  375. package/src/core/text-rendering/TextRenderer.ts +426 -0
  376. package/src/core/text-rendering/Utils.ts +80 -0
  377. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  378. package/src/core/textures/ColorTexture.ts +7 -24
  379. package/src/core/textures/ImageTexture.ts +110 -92
  380. package/src/core/textures/NoiseTexture.ts +14 -31
  381. package/src/core/textures/RenderTexture.ts +18 -35
  382. package/src/core/textures/SubTexture.ts +25 -65
  383. package/src/core/textures/Texture.ts +214 -46
  384. package/src/core/utils.ts +9 -26
  385. package/src/main-api/INode.ts +0 -18
  386. package/src/main-api/Inspector.ts +794 -38
  387. package/src/main-api/Renderer.ts +519 -159
  388. package/src/utils.ts +64 -29
  389. package/dist/src/core/platform.d.ts +0 -10
  390. package/dist/src/core/platform.js +0 -56
  391. package/dist/src/core/platform.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  393. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  394. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  395. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  396. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  397. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  398. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  399. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  400. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  401. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
  402. package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
  403. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
  404. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  405. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  406. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  407. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  408. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  409. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  410. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  411. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  412. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  417. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  418. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  420. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  421. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  423. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  424. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  425. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  426. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  427. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  428. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  429. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  430. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  432. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  433. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  435. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  436. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  462. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  463. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  464. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  465. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  466. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  467. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  468. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  469. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  470. package/scripts/please-use-pnpm.js +0 -13
  471. package/src/core/platform.ts +0 -64
  472. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  473. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  474. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  475. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  476. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  477. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  478. package/src/core/text-rendering/TrFontManager.ts +0 -183
  479. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  480. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  481. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  482. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  483. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  484. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  485. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  486. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  487. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  496. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  497. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  498. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  499. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  500. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  501. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  502. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  503. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -1,21 +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
1
  import type { CoreNode } from '../../CoreNode.js';
20
2
  import { SubTexture } from '../../textures/SubTexture.js';
21
3
  import { TextureType, type Texture } from '../../textures/Texture.js';
@@ -26,14 +8,9 @@ import {
26
8
  type QuadOptions,
27
9
  } from '../CoreRenderer.js';
28
10
  import { CanvasTexture } from './CanvasTexture.js';
29
- import {
30
- parseColor,
31
- parseToAbgrString,
32
- parseToRgbaString,
33
- } from './internal/ColorUtils.js';
34
- import { assertTruthy } from '../../../utils.js';
11
+ import { parseColor } from '../../lib/colorParser.js';
35
12
  import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
36
- import type { CoreShaderType } from '../CoreShaderNode.js';
13
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
37
14
 
38
15
  export class CanvasRenderer extends CoreRenderer {
39
16
  private context: CanvasRenderingContext2D;
@@ -43,18 +20,15 @@ export class CanvasRenderer extends CoreRenderer {
43
20
  public renderToTextureActive = false;
44
21
  activeRttNode: CoreNode | null = null;
45
22
 
46
- private parsedColorCache: Map<number, string> = new Map();
47
-
48
23
  constructor(options: CoreRendererOptions) {
49
24
  super(options);
50
25
 
51
26
  this.mode = 'canvas';
52
-
53
27
  const { canvas } = options;
54
28
  this.canvas = canvas as HTMLCanvasElement;
55
29
  this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
56
30
  this.pixelRatio = this.stage.pixelRatio;
57
- this.clearColor = this.getParsedColor(this.stage.clearColor);
31
+ this.clearColor = normalizeCanvasColor(this.stage.clearColor);
58
32
  }
59
33
 
60
34
  reset(): void {
@@ -74,44 +48,32 @@ export class CanvasRenderer extends CoreRenderer {
74
48
  // noop
75
49
  }
76
50
 
77
- addQuad(quad: QuadOptions): void {
51
+ addQuad(node: CoreNode): void {
78
52
  const ctx = this.context;
79
- const { tx, ty, ta, tb, tc, td, clippingRect } = quad;
80
- let texture = quad.texture;
81
- const textureType = texture?.type;
82
- assertTruthy(textureType, 'Texture type is not defined');
83
-
84
- // The Canvas2D renderer only supports image and color textures
85
- if (
86
- textureType !== TextureType.image &&
87
- textureType !== TextureType.color &&
88
- textureType !== TextureType.subTexture &&
89
- textureType !== TextureType.noise
90
- ) {
91
- return;
92
- }
93
-
94
- if (texture) {
95
- if (texture instanceof SubTexture) {
96
- texture = texture.parentTexture;
97
- }
98
-
99
- if (texture.state === 'freed') {
100
- return;
101
- }
102
- if (texture.state !== 'loaded') {
53
+ const { tx, ty, ta, tb, tc, td } = node.globalTransform!;
54
+ const clippingRect = node.clippingRect;
55
+ let texture = node.renderTexture;
56
+ // The Canvas2D renderer only supports image textures, no textures are used for color blocks
57
+ if (texture !== null) {
58
+ const textureType = texture.type;
59
+ if (
60
+ textureType !== TextureType.image &&
61
+ textureType !== TextureType.subTexture &&
62
+ textureType !== TextureType.color &&
63
+ textureType !== TextureType.noise
64
+ ) {
103
65
  return;
104
66
  }
105
67
  }
106
68
 
107
69
  const hasTransform = ta !== 1;
108
70
  const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
109
- const hasShader = quad.shader !== null;
71
+ const shader = node.props.shader;
72
+ const hasShader = shader !== null;
110
73
 
111
74
  let saveAndRestore = hasTransform === true || hasClipping === true;
112
75
  if (hasShader === true) {
113
- saveAndRestore =
114
- saveAndRestore || (quad.shader as CanvasShaderNode).applySNR;
76
+ saveAndRestore = saveAndRestore || (shader as CanvasShaderNode).applySNR;
115
77
  }
116
78
 
117
79
  if (saveAndRestore) {
@@ -142,12 +104,40 @@ export class CanvasRenderer extends CoreRenderer {
142
104
 
143
105
  if (hasShader === true) {
144
106
  let renderContext: (() => void) | null = () => {
145
- this.renderContext(quad);
107
+ this.renderContext(node);
146
108
  };
147
- (quad.shader as CanvasShaderNode).render(ctx, quad, renderContext);
109
+ const quad: QuadOptions = {
110
+ width: node.props.w,
111
+ height: node.props.h,
112
+ colorTl: node.premultipliedColorTl,
113
+ colorTr: node.premultipliedColorTr,
114
+ colorBl: node.premultipliedColorBl,
115
+ colorBr: node.premultipliedColorBr,
116
+ texture: texture,
117
+ textureOptions: node.props.textureOptions,
118
+ textureCoords: node.renderTextureCoords,
119
+ zIndex: node.zIndex, // zIndex usage?
120
+ shader: shader,
121
+ alpha: node.worldAlpha,
122
+ clippingRect: clippingRect,
123
+ tx,
124
+ ty,
125
+ ta,
126
+ tb,
127
+ tc,
128
+ td,
129
+ renderCoords: node.renderCoords,
130
+ rtt: node.props.rtt,
131
+ parentHasRenderTexture: node.parentHasRenderTexture,
132
+ framebufferDimensions: node.parentHasRenderTexture
133
+ ? node.parentFramebufferDimensions
134
+ : null,
135
+ };
136
+
137
+ (shader as CanvasShaderNode).render(ctx, quad, renderContext);
148
138
  renderContext = null;
149
139
  } else {
150
- this.renderContext(quad);
140
+ this.renderContext(node);
151
141
  }
152
142
 
153
143
  if (saveAndRestore) {
@@ -155,79 +145,70 @@ export class CanvasRenderer extends CoreRenderer {
155
145
  }
156
146
  }
157
147
 
158
- renderContext(quad: QuadOptions) {
159
- const color = quad.colorTl;
160
- const textureType = quad.texture?.type;
161
- if (
162
- (textureType === TextureType.image ||
163
- textureType === TextureType.subTexture ||
164
- textureType === TextureType.noise) &&
165
- quad.texture?.ctxTexture
166
- ) {
148
+ renderContext(node: CoreNode) {
149
+ const color = node.premultipliedColorTl;
150
+ const texture = node.renderTexture!;
151
+ const textureType = texture.type;
152
+ const tx = node.globalTransform!.tx;
153
+ const ty = node.globalTransform!.ty;
154
+ const width = node.props.w;
155
+ const height = node.props.h;
156
+
157
+ if (textureType !== TextureType.color) {
167
158
  const tintColor = parseColor(color);
168
- const image = (quad.texture.ctxTexture as CanvasTexture).getImage(
169
- tintColor,
170
- );
171
- this.context.globalAlpha = tintColor.a ?? quad.alpha;
172
- if (textureType === TextureType.subTexture) {
173
- this.context.drawImage(
174
- image,
175
- (quad.texture as SubTexture).props.x,
176
- (quad.texture as SubTexture).props.y,
177
- (quad.texture as SubTexture).props.width,
178
- (quad.texture as SubTexture).props.height,
179
- quad.tx,
180
- quad.ty,
181
- quad.width,
182
- quad.height,
183
- );
184
- } else {
185
- try {
186
- this.context.drawImage(
187
- image,
188
- quad.tx,
189
- quad.ty,
190
- quad.width,
191
- quad.height,
192
- );
193
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
194
- } catch (error) {
195
- // noop
196
- }
159
+ if (textureType !== TextureType.subTexture) {
160
+ const image = (texture.ctxTexture as CanvasTexture).getImage(tintColor);
161
+ this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
162
+ this.context.drawImage(image, tx, ty, width, height);
163
+ this.context.globalAlpha = 1;
164
+ return;
197
165
  }
166
+ const image = (
167
+ (texture as SubTexture).parentTexture.ctxTexture as CanvasTexture
168
+ ).getImage(tintColor);
169
+ const props = (texture as SubTexture).props;
170
+
171
+ this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
172
+ this.context.drawImage(
173
+ image,
174
+ props.x,
175
+ props.y,
176
+ props.w,
177
+ props.h,
178
+ tx,
179
+ ty,
180
+ width,
181
+ height,
182
+ );
198
183
  this.context.globalAlpha = 1;
199
184
  return;
200
185
  }
201
186
  const hasGradient =
202
- quad.colorTl !== quad.colorTr || quad.colorTl !== quad.colorBr;
203
- if (textureType === TextureType.color && hasGradient) {
204
- let endX: number = quad.tx;
205
- let endY: number = quad.ty;
187
+ node.premultipliedColorTl !== node.premultipliedColorTr ||
188
+ node.premultipliedColorTl !== node.premultipliedColorBr;
189
+ if (hasGradient === true) {
190
+ let endX: number = tx;
191
+ let endY: number = ty;
206
192
  let endColor: number;
207
- if (quad.colorTl === quad.colorTr) {
193
+ if (node.premultipliedColorTl === node.premultipliedColorTr) {
208
194
  // vertical
209
- endX = quad.tx;
210
- endY = quad.ty + quad.height;
211
- endColor = quad.colorBr;
195
+ endX = tx;
196
+ endY = ty + height;
197
+ endColor = node.premultipliedColorBr;
212
198
  } else {
213
199
  // horizontal
214
- endX = quad.tx + quad.width;
215
- endY = quad.ty;
216
- endColor = quad.colorTr;
200
+ endX = tx + width;
201
+ endY = ty;
202
+ endColor = node.premultipliedColorTr;
217
203
  }
218
- const gradient = this.context.createLinearGradient(
219
- quad.tx,
220
- quad.ty,
221
- endX,
222
- endY,
223
- );
224
- gradient.addColorStop(0, this.getParsedColor(color));
225
- gradient.addColorStop(1, this.getParsedColor(endColor));
204
+ const gradient = this.context.createLinearGradient(tx, ty, endX, endY);
205
+ gradient.addColorStop(0, normalizeCanvasColor(color));
206
+ gradient.addColorStop(1, normalizeCanvasColor(endColor));
226
207
  this.context.fillStyle = gradient;
227
- this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
228
- } else if (textureType === TextureType.color) {
229
- this.context.fillStyle = this.getParsedColor(color);
230
- this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
208
+ this.context.fillRect(tx, ty, width, height);
209
+ } else {
210
+ this.context.fillStyle = normalizeCanvasColor(color);
211
+ this.context.fillRect(tx, ty, width, height);
231
212
  }
232
213
  }
233
214
 
@@ -270,30 +251,20 @@ export class CanvasRenderer extends CoreRenderer {
270
251
  return null;
271
252
  }
272
253
 
273
- getParsedColor(color: number, isRGBA: boolean = false) {
274
- let out = this.parsedColorCache.get(color);
275
- if (out !== undefined) {
276
- return out;
277
- }
278
- if (isRGBA) {
279
- out = parseToRgbaString(color);
280
- } else {
281
- out = parseToAbgrString(color);
282
- }
283
- this.parsedColorCache.set(color, out);
284
- return out;
285
- }
286
-
287
254
  /**
288
255
  * Updates the clear color of the canvas renderer.
289
256
  *
290
257
  * @param color - The color to set as the clear color.
291
258
  */
292
259
  updateClearColor(color: number) {
293
- this.clearColor = this.getParsedColor(color);
260
+ this.clearColor = normalizeCanvasColor(color);
261
+ }
262
+
263
+ override updateViewport(): void {
264
+ // noop
294
265
  }
295
266
 
296
- override getDefaultShaderNode() {
267
+ getDefaultShaderNode() {
297
268
  return null;
298
269
  }
299
270
  }
@@ -1,25 +1,8 @@
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
-
18
1
  import type { CoreNode } from '../../CoreNode.js';
2
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
19
3
  import type { Stage } from '../../Stage.js';
20
4
  import type { QuadOptions } from '../CoreRenderer.js';
21
5
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
22
- import type { CanvasRenderer } from './CanvasRenderer.js';
23
6
 
24
7
  export type CanvasShaderType<
25
8
  T extends object = Record<string, unknown>,
@@ -67,10 +50,7 @@ export class CanvasShaderNode<
67
50
 
68
51
  this.update = () => {
69
52
  const prevKey = this.valueKey;
70
- this.valueKey = '';
71
- for (const key in this.resolvedProps) {
72
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
- }
53
+ this.valueKey = this.createValueKey();
74
54
 
75
55
  if (prevKey === this.valueKey) {
76
56
  return;
@@ -94,6 +74,6 @@ export class CanvasShaderNode<
94
74
  }
95
75
 
96
76
  toColorString(rgba: number) {
97
- return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
77
+ return normalizeCanvasColor(rgba, true);
98
78
  }
99
79
  }
@@ -1,26 +1,7 @@
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 { Dimensions } from '../../../common/CommonTypes.js';
21
2
  import { assertTruthy } from '../../../utils.js';
3
+ import { formatRgba, type IParsedColor } from '../../lib/colorParser.js';
22
4
  import { CoreContextTexture } from '../CoreContextTexture.js';
23
- import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
5
 
25
6
  export class CanvasTexture extends CoreContextTexture {
26
7
  protected image:
@@ -35,24 +16,28 @@ export class CanvasTexture extends CoreContextTexture {
35
16
  }
36
17
  | undefined;
37
18
 
38
- load(): void {
19
+ async load(): Promise<void> {
39
20
  this.textureSource.setState('loading');
40
21
 
41
- this.onLoadRequest()
42
- .then((size) => {
43
- this.textureSource.setState('loaded', size);
44
- this.textureSource.freeTextureData();
45
- this.updateMemSize();
46
- })
47
- .catch((err) => {
48
- this.textureSource.setState('failed', err as Error);
49
- this.textureSource.freeTextureData();
50
- });
22
+ try {
23
+ const size = await this.onLoadRequest();
24
+ this.textureSource.setState('loaded', size);
25
+ this.textureSource.freeTextureData();
26
+ this.updateMemSize();
27
+ } catch (err) {
28
+ this.textureSource.setState('failed', err as Error);
29
+ this.textureSource.freeTextureData();
30
+ throw err;
31
+ }
51
32
  }
52
33
 
53
- free(): void {
34
+ release(): void {
54
35
  this.image = undefined;
55
36
  this.tintCache = undefined;
37
+ }
38
+
39
+ free(): void {
40
+ this.release();
56
41
  this.textureSource.setState('freed');
57
42
  this.setTextureMemUse(0);
58
43
  this.textureSource.freeTextureData();
@@ -64,8 +49,11 @@ export class CanvasTexture extends CoreContextTexture {
64
49
  // - tinted image
65
50
  const mult = this.tintCache ? 8 : 4;
66
51
  if (this.textureSource.dimensions) {
67
- const { width, height } = this.textureSource.dimensions;
68
- this.setTextureMemUse(width * height * mult);
52
+ this.setTextureMemUse(
53
+ this.textureSource.dimensions.w *
54
+ this.textureSource.dimensions.h *
55
+ mult,
56
+ );
69
57
  }
70
58
  }
71
59
 
@@ -139,15 +127,15 @@ export class CanvasTexture extends CoreContextTexture {
139
127
  const ctx = canvas.getContext('2d');
140
128
  if (ctx) ctx.putImageData(data, 0, 0);
141
129
  this.image = canvas;
142
- return { width: data.width, height: data.height };
130
+ return { w: data.width, h: data.height };
143
131
  } else if (
144
132
  (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
145
133
  data instanceof HTMLImageElement
146
134
  ) {
147
135
  this.image = data;
148
- return { width: data.width, height: data.height };
136
+ return { w: data.width, h: data.height };
149
137
  }
150
138
 
151
- return { width: 0, height: 0 };
139
+ return { w: 0, h: 0 };
152
140
  }
153
141
  }
@@ -0,0 +1,88 @@
1
+ import { CoreRenderOp } from '../CoreRenderOp.js';
2
+ import { USE_RTT } from '../../../utils.js';
3
+ import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
4
+ import type { WebGlRenderer } from './WebGlRenderer.js';
5
+ import type { BufferCollection } from './internal/BufferCollection.js';
6
+ import type { WebGlShaderNode } from './WebGlShaderNode.js';
7
+ import type { RectWithValid } from '../../lib/utils.js';
8
+ import type { Dimensions } from '../../../common/CommonTypes.js';
9
+ import type { Stage } from '../../Stage.js';
10
+
11
+ /**
12
+ * Can render multiple quads with multiple textures (up to vertex shader texture limit)
13
+ *
14
+ */
15
+ export class SdfRenderOp extends CoreRenderOp {
16
+ public numQuads = 0;
17
+ public readonly isCoreNode = false as const;
18
+ public renderOpTextures: WebGlCtxTexture[] = [];
19
+ public time: number = 0;
20
+ readonly stage: Stage;
21
+
22
+ constructor(
23
+ readonly renderer: WebGlRenderer,
24
+ readonly shader: WebGlShaderNode,
25
+ public sdfShaderProps: Record<string, unknown>,
26
+ readonly quadBufferCollection: BufferCollection,
27
+ public worldAlpha: number,
28
+ public clippingRect: RectWithValid,
29
+ readonly width: number,
30
+ readonly height: number,
31
+ readonly rtt: boolean,
32
+ public parentHasRenderTexture: boolean,
33
+ public framebufferDimensions: Dimensions | null,
34
+ ) {
35
+ super();
36
+ this.stage = renderer.stage;
37
+ }
38
+
39
+ addTexture(texture: WebGlCtxTexture): number {
40
+ const { renderOpTextures } = this;
41
+ const length = renderOpTextures.length;
42
+
43
+ // We only support 1 texture (atlas) for SDF for now, but following the pattern
44
+ for (let i = 0; i < length; i++) {
45
+ if (renderOpTextures[i] === texture) {
46
+ return i;
47
+ }
48
+ }
49
+
50
+ renderOpTextures.push(texture);
51
+ return length;
52
+ }
53
+
54
+ draw() {
55
+ const { glw, options, stage } = this.renderer;
56
+
57
+ stage.shManager.useShader(this.shader.program);
58
+ this.shader.program.bindRenderOp(this);
59
+
60
+ // Clipping
61
+ if (this.clippingRect.valid === true) {
62
+ const pixelRatio =
63
+ USE_RTT && this.parentHasRenderTexture ? 1 : stage.pixelRatio;
64
+ const clipX = Math.round(this.clippingRect.x * pixelRatio);
65
+ const clipWidth = Math.round(this.clippingRect.width * pixelRatio);
66
+ const clipHeight = Math.round(this.clippingRect.height * pixelRatio);
67
+ let clipY = Math.round(
68
+ options.canvas.height - clipHeight - this.clippingRect.y * pixelRatio,
69
+ );
70
+ // if parent has render texture, we need to adjust the scissor rect
71
+ // to be relative to the parent's framebuffer
72
+ if (USE_RTT && this.parentHasRenderTexture) {
73
+ clipY = this.framebufferDimensions
74
+ ? this.framebufferDimensions.h - this.height
75
+ : 0;
76
+ }
77
+
78
+ glw.setScissorTest(true);
79
+ glw.scissor(clipX, clipY, clipWidth, clipHeight);
80
+ } else {
81
+ glw.setScissorTest(false);
82
+ }
83
+
84
+ // SDF rendering uses drawArrays with explicit triangle vertices (6 vertices per quad)
85
+ // Note: buffers should be bound by bindRenderOp -> bindBufferCollection
86
+ glw.drawArrays(glw.TRIANGLES, 0, 6 * this.numQuads);
87
+ }
88
+ }
@@ -1,26 +1,7 @@
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 2024 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 { Dimensions } from '../../../common/CommonTypes.js';
21
- import { assertTruthy } from '../../../utils.js';
22
2
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
3
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
4
+ import type { Bound } from '../../lib/utils.js';
24
5
  import type { RenderTexture } from '../../textures/RenderTexture.js';
25
6
  import { WebGlCtxTexture } from './WebGlCtxTexture.js';
26
7
 
@@ -29,6 +10,13 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
29
10
 
30
11
  public framebuffer: WebGLFramebuffer | null = null;
31
12
 
13
+ override txCoords: Bound = {
14
+ x1: 0,
15
+ y1: 1,
16
+ x2: 1,
17
+ y2: 0,
18
+ };
19
+
32
20
  constructor(
33
21
  glw: WebGlContextWrapper,
34
22
  memManager: TextureMemoryManager,
@@ -41,25 +29,21 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
41
29
  const { glw } = this;
42
30
  const nativeTexture = (this._nativeCtxTexture =
43
31
  this.createNativeCtxTexture());
44
- const { width, height } = this.textureSource;
32
+
33
+ if (!nativeTexture) {
34
+ throw new Error('Failed to create native texture for RenderTexture');
35
+ }
36
+
37
+ const { w, h } = this.textureSource;
45
38
 
46
39
  // Create Framebuffer object
47
40
  this.framebuffer = glw.createFramebuffer();
48
41
 
49
42
  // Set the dimensions of the render texture
50
- glw.texImage2D(
51
- 0,
52
- glw.RGBA,
53
- width,
54
- height,
55
- 0,
56
- glw.RGBA,
57
- glw.UNSIGNED_BYTE,
58
- null,
59
- );
43
+ glw.texImage2D(0, glw.RGBA, w, h, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
60
44
 
61
45
  // Update the texture memory manager
62
- this.setTextureMemUse(width * height * 4);
46
+ this.setTextureMemUse(w * h * 4);
63
47
 
64
48
  // Bind the framebuffer
65
49
  glw.bindFramebuffer(this.framebuffer);
@@ -71,8 +55,8 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
71
55
  glw.bindFramebuffer(null);
72
56
 
73
57
  return {
74
- width,
75
- height,
58
+ w,
59
+ h,
76
60
  };
77
61
  }
78
62