@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
@@ -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 { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
20
2
  import { calcFactoredRadiusArray } from '../../lib/utils.js';
21
3
  import {
@@ -34,11 +16,7 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
34
16
  update(node: CoreNode) {
35
17
  this.uniform4fa(
36
18
  'u_radius',
37
- calcFactoredRadiusArray(
38
- this.props!.radius as Vec4,
39
- node.width,
40
- node.height,
41
- ),
19
+ calcFactoredRadiusArray(this.props!.radius as Vec4, node.w, node.h),
42
20
  );
43
21
  },
44
22
  vertex: `
@@ -55,7 +33,6 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
55
33
 
56
34
  uniform vec2 u_resolution;
57
35
  uniform float u_pixelRatio;
58
- uniform vec2 u_dimensions;
59
36
 
60
37
  varying vec4 v_color;
61
38
  varying vec2 v_textureCoords;
@@ -69,8 +46,12 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
69
46
  v_nodeCoords = a_nodeCoords;
70
47
  v_textureCoords = a_textureCoords;
71
48
 
72
- gl_Position = vec4(normalized.x * screenSpace.x - 1.0, normalized.y * -abs(screenSpace.y) + 1.0, 0.0, 1.0);
73
- gl_Position.y = -sign(screenSpace.y) * gl_Position.y;
49
+ gl_Position = vec4(
50
+ normalized.x * screenSpace.x - 1.0,
51
+ normalized.y * -abs(screenSpace.y) + 1.0,
52
+ 0.0,
53
+ 1.0
54
+ );
74
55
  }
75
56
  `,
76
57
  fragment: `
@@ -80,38 +61,37 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
80
61
  precision mediump float;
81
62
  # endif
82
63
 
83
- //renderer applies these uniforms automatically
84
- uniform vec2 u_resolution;
85
64
  uniform vec2 u_dimensions;
86
65
  uniform float u_alpha;
66
+ uniform float u_pixelRatio;
87
67
  uniform sampler2D u_texture;
88
-
89
- //custom uniforms
90
68
  uniform vec4 u_radius;
91
69
 
92
70
  varying vec4 v_color;
93
71
  varying vec2 v_textureCoords;
94
72
  varying vec2 v_nodeCoords;
95
73
 
96
- float roundedBox(vec2 p, vec2 s, vec4 r) {
97
- r.xy = (p.x > 0.0) ? r.yz : r.xw;
98
- r.x = (p.y > 0.0) ? r.y : r.x;
99
- vec2 q = abs(p) - s + r.x;
100
- return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
101
- }
102
-
103
74
  void main() {
104
- vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
105
- vec2 halfDimensions = (u_dimensions * 0.5);
75
+ vec2 halfDimensions = u_dimensions * 0.5;
76
+ vec2 boxUv = v_nodeCoords * u_dimensions - halfDimensions;
106
77
 
107
- vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
108
- float boxDist = roundedBox(boxUv, halfDimensions, u_radius);
78
+ // Branchless radius selection based on quadrant
79
+ // x: TL, y: TR, z: BR, w: BL
80
+ vec2 stepVal = step(vec2(0.0), boxUv);
81
+ float r = mix(
82
+ mix(u_radius.x, u_radius.y, stepVal.x),
83
+ mix(u_radius.w, u_radius.z, stepVal.x),
84
+ stepVal.y
85
+ );
109
86
 
110
- float roundedAlpha = 1.0 - smoothstep(0.0, 1.0, boxDist);
87
+ vec2 q = abs(boxUv) - halfDimensions + r;
88
+ float d = min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r;
111
89
 
112
- vec4 resColor = vec4(0.0);
113
- resColor = mix(resColor, color, roundedAlpha);
114
- gl_FragColor = resColor * u_alpha;
90
+ float edgeWidth = 1.0 / u_pixelRatio;
91
+ float alpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, d);
92
+
93
+ vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
94
+ gl_FragColor = color * alpha * u_alpha;
115
95
  }
116
96
  `,
117
97
  };
@@ -1,49 +1,133 @@
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';
19
- import { calcFactoredRadiusArray, valuesAreEqual } from '../../lib/utils.js';
2
+ import { calcFactoredRadiusArray } from '../../lib/utils.js';
20
3
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
21
4
  import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
22
5
  import {
23
6
  RoundedWithBorderTemplate,
24
7
  type RoundedWithBorderProps,
25
8
  } from '../templates/RoundedWithBorderTemplate.js';
26
- import { Rounded } from './Rounded.js';
27
9
 
28
10
  export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
29
11
  props: RoundedWithBorderTemplate.props,
30
12
  update(node: CoreNode) {
31
- this.uniformRGBA('u_border_color', this.props!['border-color']);
32
- this.uniform4fa('u_border_width', this.props!['border-width'] as Vec4);
33
- this.uniform1i(
34
- 'u_border_asym',
35
- valuesAreEqual(this.props!['border-width'] as number[]) ? 0 : 1,
36
- );
13
+ this.uniformRGBA('u_borderColor', this.props!['border-color']);
14
+ this.uniformRGBA('u_fillColor', this.props!['border-fill']);
15
+ this.uniform4fa('u_borderWidth', this.props!['border-w'] as Vec4);
16
+ this.uniform1f('u_borderGap', this.props!['border-gap'] as number);
17
+ this.uniform1f('u_borderAlign', this.props!['border-align'] as number);
18
+
37
19
  this.uniform4fa(
38
20
  'u_radius',
39
- calcFactoredRadiusArray(
40
- this.props!.radius as Vec4,
41
- node.width,
42
- node.height,
43
- ),
21
+ calcFactoredRadiusArray(this.props!.radius as Vec4, node.w, node.h),
44
22
  );
45
23
  },
46
- vertex: Rounded.vertex,
24
+ vertex: `
25
+ # ifdef GL_FRAGMENT_PRECISION_HIGH
26
+ precision highp float;
27
+ # else
28
+ precision mediump float;
29
+ # endif
30
+
31
+ attribute vec2 a_position;
32
+ attribute vec2 a_textureCoords;
33
+ attribute vec4 a_color;
34
+ attribute vec2 a_nodeCoords;
35
+
36
+ uniform vec2 u_resolution;
37
+ uniform float u_pixelRatio;
38
+ uniform vec2 u_dimensions;
39
+
40
+ uniform vec4 u_radius;
41
+ uniform vec4 u_borderWidth;
42
+ uniform float u_borderGap;
43
+ uniform float u_borderAlign;
44
+
45
+ varying vec4 v_color;
46
+ varying vec2 v_textureCoords;
47
+ varying vec2 v_nodeCoords;
48
+
49
+ varying vec2 v_innerSize;
50
+ varying vec2 v_outerSize;
51
+ varying vec2 v_outerBorderUv;
52
+ varying vec2 v_innerBorderUv;
53
+ varying vec4 v_innerBorderRadius;
54
+ varying vec4 v_outerBorderRadius;
55
+ varying vec2 v_halfDimensions;
56
+ varying float v_edgeWidth;
57
+ varying float v_borderZero;
58
+
59
+ void main() {
60
+ vec2 vertexPos = a_position * u_pixelRatio;
61
+ vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
62
+ vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
63
+ vec2 edgeOffset = vec2(0.0);
64
+
65
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
66
+ v_innerSize = vec2(0.0);
67
+ v_outerSize = vec2(0.0);
68
+
69
+ if(v_borderZero == 0.0) {
70
+ float borderTop = u_borderWidth.x;
71
+ float borderRight = u_borderWidth.y;
72
+ float borderBottom = u_borderWidth.z;
73
+ float borderLeft = u_borderWidth.w;
74
+
75
+ v_outerBorderUv = vec2(0.0);
76
+ v_innerBorderUv = vec2(0.0);
77
+
78
+ vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
79
+ vec2 extraSize = borderSize * u_borderAlign;
80
+ float gapLeft = step(0.001, borderLeft) * u_borderGap;
81
+ float gapRight = step(0.001, borderRight) * u_borderGap;
82
+ float gapTop = step(0.001, borderTop) * u_borderGap;
83
+ float gapBottom = step(0.001, borderBottom) * u_borderGap;
84
+ vec2 gapSize = vec2(gapLeft + gapRight, gapTop + gapBottom);
85
+
86
+ v_outerSize = (u_dimensions + gapSize + extraSize) * 0.5;
87
+ v_innerSize = v_outerSize - borderSize * 0.5;
88
+
89
+ // Use sign() to avoid branching
90
+ vec2 borderDiff = vec2(borderRight - borderLeft, borderBottom - borderTop);
91
+ vec2 signDiff = sign(borderDiff);
92
+ borderDiff = abs(borderDiff);
93
+
94
+ vec2 gapDiff = vec2(gapRight - gapLeft, gapBottom - gapTop);
95
+ vec2 signGapDiff = sign(gapDiff);
96
+ gapDiff = abs(gapDiff);
97
+
98
+ v_outerBorderUv = -signDiff * borderDiff * u_borderAlign * 0.5 - signGapDiff * gapDiff * 0.5;
99
+ v_innerBorderUv = v_outerBorderUv + signDiff * borderDiff * 0.5;
100
+
101
+ v_outerBorderRadius = vec4(
102
+ max(0.0, u_radius.x + max(borderTop * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap)),
103
+ max(0.0, u_radius.y + max(borderTop * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
104
+ max(0.0, u_radius.z + max(borderBottom * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
105
+ max(0.0, u_radius.w + max(borderBottom * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap))
106
+ );
107
+
108
+ v_innerBorderRadius = vec4(
109
+ max(0.0, v_outerBorderRadius.x - max(borderTop, borderLeft)),
110
+ max(0.0, v_outerBorderRadius.y - max(borderTop, borderRight)),
111
+ max(0.0, v_outerBorderRadius.z - max(borderBottom, borderRight)),
112
+ max(0.0, v_outerBorderRadius.w - max(borderBottom, borderLeft))
113
+ );
114
+
115
+ vec2 edgeOffsetExtra = step(u_dimensions * 0.5, v_outerSize) * edge * (extraSize + u_borderGap);
116
+ edgeOffset = edgeOffsetExtra;
117
+
118
+ vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
119
+ }
120
+
121
+ gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
122
+
123
+ v_color = a_color;
124
+ v_nodeCoords = a_nodeCoords + (screenSpace + edgeOffset) / (u_dimensions);
125
+ v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
126
+
127
+ v_halfDimensions = u_dimensions * 0.5;
128
+ v_edgeWidth = 1.0 / u_pixelRatio;
129
+ }
130
+ `,
47
131
  fragment: `
48
132
  # ifdef GL_FRAGMENT_PRECISION_HIGH
49
133
  precision highp float;
@@ -58,15 +142,26 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
58
142
  uniform sampler2D u_texture;
59
143
 
60
144
  uniform vec4 u_radius;
61
-
62
- uniform vec4 u_border_width;
63
- uniform vec4 u_border_color;
64
- uniform int u_border_asym;
145
+ uniform vec4 u_borderWidth;
146
+ uniform vec4 u_borderColor;
147
+ uniform vec4 u_fillColor;
148
+ uniform float u_borderGap;
149
+ uniform float u_borderAlign;
65
150
 
66
151
  varying vec4 v_color;
67
152
  varying vec2 v_textureCoords;
68
153
  varying vec2 v_nodeCoords;
69
154
 
155
+ varying vec2 v_innerSize;
156
+ varying vec2 v_outerSize;
157
+ varying vec2 v_outerBorderUv;
158
+ varying vec2 v_innerBorderUv;
159
+ varying vec4 v_innerBorderRadius;
160
+ varying vec4 v_outerBorderRadius;
161
+ varying vec2 v_halfDimensions;
162
+ varying float v_edgeWidth;
163
+ varying float v_borderZero;
164
+
70
165
  float roundedBox(vec2 p, vec2 s, vec4 r) {
71
166
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
72
167
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -74,41 +169,44 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
74
169
  return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
75
170
  }
76
171
 
77
- float asymBorderWidth(vec2 p, float d, vec4 r, vec4 w) {
78
- r.x = (r.x - (max(w.w, w.x) - min(w.w, w.x))) * 0.5;
79
- r.y = (r.y - (max(w.y, w.x) - min(w.y, w.x))) * 0.5;
80
- r.z = (r.z - (max(w.y, w.z) - min(w.y, w.z))) * 0.5;
81
- r.w = (r.w - (max(w.w, w.z) - min(w.w, w.z))) * 0.5;
82
-
83
- p.x += w.y > w.w ? (w.y - w.w) * 0.5 : -(w.w - w.y) * 0.5;
84
- p.y += w.z > w.x ? (w.z - w.x) * 0.5 : -(w.x - w.z) * 0.5;
85
-
86
- vec2 size = vec2(u_dimensions.x - (w[3] + w[1]), u_dimensions.y - (w[0] + w[2])) * 0.5;
87
- float borderDist = roundedBox(p, size + u_pixelRatio, r);
88
- return 1.0 - smoothstep(0.0, u_pixelRatio, max(-borderDist, d));
89
- }
90
-
91
172
  void main() {
92
173
  vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
93
- vec2 halfDimensions = (u_dimensions * 0.5);
94
-
95
- vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
96
- float boxDist = roundedBox(boxUv, halfDimensions, u_radius);
174
+ vec4 resultColor = vec4(0.0);
175
+ vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
97
176
 
98
- float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, boxDist);
99
- float borderAlpha = 0.0;
177
+ float nodeDist;
178
+ float nodeAlpha;
100
179
 
101
- if(u_border_asym == 1) {
102
- borderAlpha = asymBorderWidth(boxUv, boxDist, u_radius, u_border_width);
180
+ if(v_borderZero == 1.0) {
181
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
182
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
183
+ gl_FragColor = (color * nodeAlpha) * u_alpha;
184
+ return;
103
185
  }
104
- else {
105
- borderAlpha = 1.0 - smoothstep(u_border_width[0] - u_pixelRatio, u_border_width[0], abs(boxDist));
186
+
187
+ float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - v_edgeWidth, v_outerBorderRadius);
188
+ float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - v_edgeWidth, v_innerBorderRadius);
189
+
190
+ if(u_borderGap == 0.0) {
191
+ float outerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, outerDist);
192
+ float innerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, innerDist);
193
+ resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
194
+ resultColor = mix(resultColor, color, innerAlpha);
195
+ gl_FragColor = resultColor * u_alpha;
196
+ return;
106
197
  }
107
198
 
108
- vec4 resColor = vec4(0.0);
109
- resColor = mix(resColor, color, min(color.a, roundedAlpha));
110
- resColor = mix(resColor, u_border_color, min(u_border_color.a, min(borderAlpha, roundedAlpha)));
111
- gl_FragColor = resColor * u_alpha;
199
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
200
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
201
+ float innerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, innerDist);
202
+ float gapAlpha = max(0.0, innerAlpha - nodeAlpha);
203
+
204
+ float borderDist = max(-innerDist, outerDist);
205
+ float borderAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, borderDist);
206
+
207
+ resultColor = (color * nodeAlpha) + (u_fillColor * gapAlpha);
208
+ resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
209
+ gl_FragColor = resultColor * u_alpha;
112
210
  }
113
211
  `,
114
212
  };
@@ -1,55 +1,140 @@
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';
19
- import { calcFactoredRadiusArray, valuesAreEqual } from '../../lib/utils.js';
2
+ import { calcFactoredRadiusArray } from '../../lib/utils.js';
20
3
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
21
4
  import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
22
5
  import {
23
6
  RoundedWithBorderAndShadowTemplate,
24
7
  type RoundedWithBorderAndShadowProps,
25
8
  } from '../templates/RoundedWithBorderAndShadowTemplate.js';
26
- import { Shadow } from './Shadow.js';
27
9
 
28
10
  export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndShadowProps> =
29
11
  {
30
12
  props: RoundedWithBorderAndShadowTemplate.props,
31
13
  update(node: CoreNode) {
32
- this.uniformRGBA('u_border_color', this.props!['border-color']);
33
- this.uniform4fa('u_border_width', this.props!['border-width'] as Vec4);
34
-
35
- this.uniform1i(
36
- 'u_border_asym',
37
- valuesAreEqual(this.props!['border-width'] as number[]) ? 0 : 1,
38
- );
14
+ const props = this.props!;
15
+ this.uniformRGBA('u_borderColor', props['border-color']);
16
+ this.uniform4fa('u_borderWidth', props['border-w'] as Vec4);
17
+ this.uniform1f('u_borderGap', this.props!['border-gap'] as number);
18
+ this.uniform1f('u_borderAlign', this.props!['border-align'] as number);
39
19
 
40
- this.uniformRGBA('u_shadow_color', this.props!['shadow-color']);
41
- this.uniform4fa('u_shadow', this.props!['shadow-projection']);
20
+ this.uniformRGBA('u_shadowColor', props['shadow-color']);
21
+ this.uniform4fa('u_shadow', props['shadow-projection']);
42
22
 
43
23
  this.uniform4fa(
44
24
  'u_radius',
45
- calcFactoredRadiusArray(
46
- this.props!.radius as Vec4,
47
- node.width,
48
- node.height,
49
- ),
25
+ calcFactoredRadiusArray(props.radius as Vec4, node.w, node.h),
50
26
  );
51
27
  },
52
- vertex: Shadow.vertex as string,
28
+ vertex: `
29
+ # ifdef GL_FRAGMENT_PRECISION_HIGH
30
+ precision highp float;
31
+ # else
32
+ precision mediump float;
33
+ # endif
34
+
35
+ attribute vec2 a_position;
36
+ attribute vec2 a_textureCoords;
37
+ attribute vec4 a_color;
38
+ attribute vec2 a_nodeCoords;
39
+
40
+ uniform vec2 u_resolution;
41
+ uniform float u_pixelRatio;
42
+ uniform float u_rtt;
43
+ uniform vec2 u_dimensions;
44
+
45
+ uniform vec4 u_shadow;
46
+ uniform vec4 u_radius;
47
+ uniform vec4 u_borderWidth;
48
+ uniform float u_borderGap;
49
+ uniform float u_borderAlign;
50
+
51
+ varying vec4 v_color;
52
+ varying vec2 v_textureCoords;
53
+ varying vec2 v_nodeCoords;
54
+
55
+ varying vec2 v_innerSize;
56
+ varying vec2 v_outerSize;
57
+ varying vec2 v_outerBorderUv;
58
+ varying vec2 v_innerBorderUv;
59
+ varying vec4 v_innerBorderRadius;
60
+ varying vec4 v_outerBorderRadius;
61
+ varying vec2 v_halfDimensions;
62
+ varying float v_edgeWidth;
63
+ varying float v_borderZero;
64
+
65
+ void main() {
66
+ vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
67
+ vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
68
+
69
+ vec2 edgeOffset = edge * ((u_shadow.w * 2.0)+ u_shadow.z) + u_shadow.xy;
70
+ vec2 vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
71
+
72
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
73
+
74
+ v_innerSize = vec2(0.0);
75
+ v_outerSize = vec2(0.0);
76
+
77
+ if(v_borderZero == 0.0) {
78
+ float borderTop = u_borderWidth.x;
79
+ float borderRight = u_borderWidth.y;
80
+ float borderBottom = u_borderWidth.z;
81
+ float borderLeft = u_borderWidth.w;
82
+
83
+ v_outerBorderUv = vec2(0.0);
84
+ v_innerBorderUv = vec2(0.0);
85
+
86
+ vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
87
+ vec2 extraSize = borderSize * u_borderAlign;
88
+ float gapLeft = step(0.001, borderLeft) * u_borderGap;
89
+ float gapRight = step(0.001, borderRight) * u_borderGap;
90
+ float gapTop = step(0.001, borderTop) * u_borderGap;
91
+ float gapBottom = step(0.001, borderBottom) * u_borderGap;
92
+ vec2 gapSize = vec2(gapLeft + gapRight, gapTop + gapBottom);
93
+
94
+ v_outerSize = (u_dimensions + gapSize + extraSize) * 0.5;
95
+ v_innerSize = v_outerSize - borderSize * 0.5;
96
+
97
+ // Use sign() to avoid branching
98
+ vec2 borderDiff = vec2(borderRight - borderLeft, borderBottom - borderTop);
99
+ vec2 signDiff = sign(borderDiff);
100
+ borderDiff = abs(borderDiff);
101
+
102
+ vec2 gapDiff = vec2(gapRight - gapLeft, gapBottom - gapTop);
103
+ vec2 signGapDiff = sign(gapDiff);
104
+ gapDiff = abs(gapDiff);
105
+
106
+ v_outerBorderUv = -signDiff * borderDiff * u_borderAlign * 0.5 - signGapDiff * gapDiff * 0.5;
107
+ v_innerBorderUv = v_outerBorderUv + signDiff * borderDiff * 0.5;
108
+
109
+ v_outerBorderRadius = vec4(
110
+ max(0.0, u_radius.x + max(borderTop * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap)),
111
+ max(0.0, u_radius.y + max(borderTop * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
112
+ max(0.0, u_radius.z + max(borderBottom * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
113
+ max(0.0, u_radius.w + max(borderBottom * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap))
114
+ );
115
+
116
+ v_innerBorderRadius = vec4(
117
+ max(0.0, v_outerBorderRadius.x - max(borderTop, borderLeft)),
118
+ max(0.0, v_outerBorderRadius.y - max(borderTop, borderRight)),
119
+ max(0.0, v_outerBorderRadius.z - max(borderBottom, borderRight)),
120
+ max(0.0, v_outerBorderRadius.w - max(borderBottom, borderLeft))
121
+ );
122
+
123
+ vec2 edgeOffsetExtra = step(u_dimensions * 0.5, v_outerSize) * edge * (extraSize + u_borderGap);
124
+ edgeOffset += edgeOffsetExtra;
125
+
126
+ vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
127
+ }
128
+
129
+ gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
130
+
131
+ v_halfDimensions = u_dimensions * 0.5;
132
+ v_edgeWidth = 1.0 / u_pixelRatio;
133
+ v_color = a_color;
134
+ v_nodeCoords = a_nodeCoords + (screenSpace + edgeOffset) / (u_dimensions);
135
+ v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
136
+ }
137
+ `,
53
138
  fragment: `
54
139
  # ifdef GL_FRAGMENT_PRECISION_HIGH
55
140
  precision highp float;
@@ -65,16 +150,25 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
65
150
  uniform float u_rtt;
66
151
 
67
152
  uniform vec4 u_radius;
68
- uniform vec4 u_border_width;
69
- uniform vec4 u_border_color;
70
- uniform int u_border_asym;
71
- uniform vec4 u_shadow_color;
153
+ uniform vec4 u_borderWidth;
154
+ uniform vec4 u_borderColor;
155
+ uniform vec4 u_shadowColor;
72
156
  uniform vec4 u_shadow;
73
157
 
74
158
  varying vec4 v_color;
75
159
  varying vec2 v_textureCoords;
76
160
  varying vec2 v_nodeCoords;
77
161
 
162
+ varying vec2 v_innerSize;
163
+ varying vec2 v_outerSize;
164
+ varying vec2 v_outerBorderUv;
165
+ varying vec2 v_innerBorderUv;
166
+ varying vec4 v_innerBorderRadius;
167
+ varying vec4 v_outerBorderRadius;
168
+ varying vec2 v_halfDimensions;
169
+ varying float v_edgeWidth;
170
+ varying float v_borderZero;
171
+
78
172
  float roundedBox(vec2 p, vec2 s, vec4 r) {
79
173
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
80
174
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -82,20 +176,6 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
82
176
  return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
83
177
  }
84
178
 
85
- float asymBorderWidth(vec2 p, float d, vec4 r, vec4 w) {
86
- r.x = (r.x - (max(w.w, w.x) - min(w.w, w.x))) * 0.5;
87
- r.y = (r.y - (max(w.y, w.x) - min(w.y, w.x))) * 0.5;
88
- r.z = (r.z - (max(w.y, w.z) - min(w.y, w.z))) * 0.5;
89
- r.w = (r.w - (max(w.w, w.z) - min(w.w, w.z))) * 0.5;
90
-
91
- p.x += w.y > w.w ? (w.y - w.w) * 0.5 : -(w.w - w.y) * 0.5;
92
- p.y += w.z > w.x ? (w.z - w.x) * 0.5 : -(w.x - w.z) * 0.5;
93
-
94
- vec2 size = vec2(u_dimensions.x - (w[3] + w[1]), u_dimensions.y - (w[0] + w[2])) * 0.5;
95
- float borderDist = roundedBox(p, size, r);
96
- return 1.0 - smoothstep(0.0, u_pixelRatio, max(-borderDist, d));
97
- }
98
-
99
179
  float shadowBox(vec2 p, vec2 s, vec4 r) {
100
180
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
101
181
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -106,28 +186,49 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
106
186
 
107
187
  void main() {
108
188
  vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
109
- vec2 halfDimensions = (u_dimensions * 0.5);
110
-
111
- vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
112
- float outerBoxDist = roundedBox(boxUv, halfDimensions, u_radius);
113
-
114
- float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, outerBoxDist);
115
- float borderAlpha = 0.0;
189
+ vec4 resultColor = vec4(0.0);
190
+ vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
191
+ float nodeDist;
192
+ float nodeAlpha;
193
+ float shadowAlpha;
194
+
195
+ if(v_borderZero == 1.0) {
196
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
197
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
198
+ shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - v_edgeWidth, u_radius + u_shadow.z);
199
+ resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
200
+ gl_FragColor = mix(resultColor, color, nodeAlpha) * u_alpha;
201
+ return;
202
+ }
116
203
 
117
- if(u_border_asym == 1) {
118
- borderAlpha = asymBorderWidth(boxUv, outerBoxDist, u_radius, u_border_width);
204
+ if(v_outerSize.x > v_halfDimensions.x || v_outerSize.y > v_halfDimensions.y) {
205
+ shadowAlpha = shadowBox(boxUv + v_outerBorderUv - u_shadow.xy, v_outerSize + u_shadow.w - v_edgeWidth, v_outerBorderRadius + u_shadow.z);
119
206
  }
120
207
  else {
121
- borderAlpha = 1.0 - smoothstep(u_border_width[0], u_border_width[0], abs(outerBoxDist));
208
+ shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - v_edgeWidth, u_radius + u_shadow.z);
122
209
  }
123
210
 
124
- float shadowAlpha = shadowBox(boxUv - u_shadow.xy, halfDimensions + u_shadow.w, u_radius + u_shadow.z);
211
+ float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - v_edgeWidth, v_outerBorderRadius);
212
+ float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - v_edgeWidth, v_innerBorderRadius);
213
+
214
+ if(u_borderGap == 0.0) {
215
+ float outerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, outerDist);
216
+ float innerAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, innerDist);
217
+ resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
218
+ resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
219
+ resultColor = mix(resultColor, color, innerAlpha);
220
+ gl_FragColor = resultColor * u_alpha;
221
+ return;
222
+ }
125
223
 
126
- vec4 resColor = vec4(0.0);
127
- resColor = mix(resColor, u_shadow_color, shadowAlpha);
128
- resColor = mix(resColor, color, min(color.a, roundedAlpha));
129
- resColor = mix(resColor, u_border_color, min(u_border_color.a, min(borderAlpha, roundedAlpha)));
130
- gl_FragColor = resColor * u_alpha;
224
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
225
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
226
+ float borderDist = max(-innerDist, outerDist);
227
+ float borderAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, borderDist);
228
+ resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
229
+ resultColor = mix(resultColor, color, nodeAlpha);
230
+ resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
231
+ gl_FragColor = resultColor * u_alpha;
131
232
  }
132
233
  `,
133
234
  };