@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 { 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
  };