@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21

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 (587) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +124 -100
  19. package/dist/src/core/CoreNode.js +720 -472
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +355 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +93 -33
  30. package/dist/src/core/Stage.js +315 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/Animation.d.ts +21 -0
  39. package/dist/src/core/animations/Animation.js +194 -0
  40. package/dist/src/core/animations/Animation.js.map +1 -0
  41. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  42. package/dist/src/core/animations/CoreAnimation.js +8 -3
  43. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  44. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  45. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  46. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  47. package/dist/src/core/animations/Playback.d.ts +64 -0
  48. package/dist/src/core/animations/Playback.js +169 -0
  49. package/dist/src/core/animations/Playback.js.map +1 -0
  50. package/dist/src/core/animations/Transition.d.ts +27 -0
  51. package/dist/src/core/animations/Transition.js +52 -0
  52. package/dist/src/core/animations/Transition.js.map +1 -0
  53. package/dist/src/core/animations/utils.d.ts +2 -0
  54. package/dist/src/core/animations/utils.js +136 -0
  55. package/dist/src/core/animations/utils.js.map +1 -0
  56. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  57. package/dist/src/core/lib/ImageWorker.js +31 -12
  58. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  59. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  60. package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
  61. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  62. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  63. package/dist/src/core/lib/collectionUtils.js +100 -0
  64. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  65. package/dist/src/core/lib/colorCache.d.ts +1 -0
  66. package/dist/src/core/lib/colorCache.js +19 -0
  67. package/dist/src/core/lib/colorCache.js.map +1 -0
  68. package/dist/src/core/lib/colorParser.d.ts +21 -0
  69. package/dist/src/core/lib/colorParser.js +72 -0
  70. package/dist/src/core/lib/colorParser.js.map +1 -0
  71. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  72. package/dist/src/core/lib/textureCompression.js +320 -67
  73. package/dist/src/core/lib/textureCompression.js.map +1 -1
  74. package/dist/src/core/lib/utils.d.ts +8 -2
  75. package/dist/src/core/lib/utils.js +43 -21
  76. package/dist/src/core/lib/utils.js.map +1 -1
  77. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  78. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  79. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  80. package/dist/src/core/platform.js +30 -5
  81. package/dist/src/core/platform.js.map +1 -1
  82. package/dist/src/core/platforms/Platform.d.ts +42 -0
  83. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  84. package/dist/src/core/platforms/Platform.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  86. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  87. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  88. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  89. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  90. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
  91. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  92. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  93. package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
  94. package/dist/src/core/renderers/CoreShaderNode.js +26 -0
  95. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  96. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  97. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  98. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  99. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  100. package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
  101. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  102. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  103. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  104. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  105. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  106. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  107. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  108. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  109. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  110. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  111. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  112. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  113. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  115. package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
  116. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  117. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  118. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  119. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  120. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
  121. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  122. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  124. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  125. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  126. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  127. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  129. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  132. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  133. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  135. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -52
  136. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
  139. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  140. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
  141. package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
  142. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  143. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
  144. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  145. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  147. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -43
  148. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  150. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  152. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  154. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  155. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  156. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  157. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  158. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  159. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  160. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  162. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  163. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  164. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  165. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  166. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  171. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  172. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  173. package/dist/src/core/shaders/canvas/Border.js +64 -25
  174. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  175. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  176. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  177. package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
  178. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  179. package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
  180. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  181. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  182. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  184. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +45 -7
  185. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  187. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +50 -11
  188. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
  190. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  191. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  194. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -11
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  203. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  204. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  205. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  206. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  207. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  208. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  209. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  210. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  211. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  212. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  213. package/dist/src/core/shaders/utils.js.map +1 -0
  214. package/dist/src/core/shaders/webgl/Border.js +116 -35
  215. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/Default.js +6 -7
  217. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  219. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  221. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  222. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  223. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  224. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  225. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
  227. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  228. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
  229. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  230. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
  231. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  232. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  233. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  234. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  235. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  236. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  237. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/Shadow.js +12 -6
  239. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  240. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  241. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  242. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  243. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  244. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  245. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  247. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  248. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  249. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  250. package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -0
  251. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  252. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  253. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  254. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  255. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  256. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  257. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  258. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  259. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  260. package/dist/src/core/text-rendering/Utils.js +84 -0
  261. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  262. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  263. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  264. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  266. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  267. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  269. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  270. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  271. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  272. package/dist/src/core/textures/ColorTexture.js +3 -4
  273. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  274. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  275. package/dist/src/core/textures/ImageTexture.js +31 -40
  276. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  277. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  278. package/dist/src/core/textures/NoiseTexture.js +8 -8
  279. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  280. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  281. package/dist/src/core/textures/RenderTexture.js +12 -12
  282. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  283. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  284. package/dist/src/core/textures/SubTexture.js +19 -37
  285. package/dist/src/core/textures/SubTexture.js.map +1 -1
  286. package/dist/src/core/textures/Texture.d.ts +87 -10
  287. package/dist/src/core/textures/Texture.js +160 -17
  288. package/dist/src/core/textures/Texture.js.map +1 -1
  289. package/dist/src/core/utils.d.ts +2 -1
  290. package/dist/src/core/utils.js +1 -1
  291. package/dist/src/core/utils.js.map +1 -1
  292. package/dist/src/main-api/INode.d.ts +2 -2
  293. package/dist/src/main-api/Inspector.d.ts +131 -2
  294. package/dist/src/main-api/Inspector.js +345 -28
  295. package/dist/src/main-api/Inspector.js.map +1 -1
  296. package/dist/src/main-api/Renderer.d.ts +295 -82
  297. package/dist/src/main-api/Renderer.js +223 -76
  298. package/dist/src/main-api/Renderer.js.map +1 -1
  299. package/dist/src/utils.d.ts +1 -6
  300. package/dist/src/utils.js +2 -9
  301. package/dist/src/utils.js.map +1 -1
  302. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  303. package/dist/tsconfig.tsbuildinfo +1 -0
  304. package/exports/canvas.ts +1 -1
  305. package/exports/index.ts +2 -8
  306. package/exports/utils.ts +7 -1
  307. package/exports/webgl.ts +3 -1
  308. package/package.json +15 -17
  309. package/src/common/CommonTypes.ts +18 -2
  310. package/src/core/Autosizer.ts +224 -0
  311. package/src/core/CoreNode.test.ts +179 -17
  312. package/src/core/CoreNode.ts +895 -599
  313. package/src/core/CoreShaderManager.ts +5 -10
  314. package/src/core/CoreTextNode.ts +422 -286
  315. package/src/core/CoreTextureManager.ts +110 -130
  316. package/src/core/Stage.ts +397 -195
  317. package/src/core/TextureError.ts +46 -0
  318. package/src/core/TextureMemoryManager.ts +164 -141
  319. package/src/core/animations/CoreAnimation.ts +15 -9
  320. package/src/core/animations/CoreAnimationController.ts +13 -4
  321. package/src/core/lib/ImageWorker.ts +43 -12
  322. package/src/core/lib/WebGlContextWrapper.ts +127 -79
  323. package/src/core/lib/collectionUtils.ts +118 -0
  324. package/src/core/lib/colorCache.ts +20 -0
  325. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  326. package/src/core/lib/textureCompression.ts +433 -75
  327. package/src/core/lib/utils.ts +54 -25
  328. package/src/core/lib/validateImageBitmap.ts +17 -6
  329. package/src/core/platforms/Platform.ts +83 -0
  330. package/src/core/platforms/web/WebPlatform.ts +132 -0
  331. package/src/core/renderers/CoreContextTexture.ts +2 -1
  332. package/src/core/renderers/CoreRenderer.ts +5 -32
  333. package/src/core/renderers/CoreShaderNode.ts +38 -3
  334. package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
  335. package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
  336. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  337. package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
  338. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  339. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  340. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
  341. package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
  342. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
  343. package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
  344. package/src/core/shaders/canvas/Border.ts +88 -34
  345. package/src/core/shaders/canvas/HolePunch.ts +5 -11
  346. package/src/core/shaders/canvas/LinearGradient.ts +14 -10
  347. package/src/core/shaders/canvas/RadialGradient.ts +24 -41
  348. package/src/core/shaders/canvas/Rounded.ts +7 -7
  349. package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
  350. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
  351. package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
  352. package/src/core/shaders/canvas/Shadow.ts +7 -5
  353. package/src/core/shaders/canvas/utils/render.ts +45 -36
  354. package/src/core/shaders/templates/BorderTemplate.ts +42 -12
  355. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  356. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  357. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  358. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  359. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  360. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  361. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  362. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  363. package/src/core/shaders/webgl/Border.ts +116 -39
  364. package/src/core/shaders/webgl/Default.ts +6 -7
  365. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  366. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  367. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  368. package/src/core/shaders/webgl/Rounded.ts +4 -6
  369. package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
  370. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
  371. package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
  372. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  373. package/src/core/shaders/webgl/Shadow.ts +12 -6
  374. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  375. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  376. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  377. package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
  378. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  379. package/src/core/text-rendering/TextRenderer.ts +444 -0
  380. package/src/core/text-rendering/Utils.ts +99 -0
  381. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  382. package/src/core/textures/ColorTexture.ts +7 -5
  383. package/src/core/textures/ImageTexture.ts +78 -66
  384. package/src/core/textures/NoiseTexture.ts +14 -12
  385. package/src/core/textures/RenderTexture.ts +18 -16
  386. package/src/core/textures/SubTexture.ts +25 -46
  387. package/src/core/textures/Texture.ts +207 -24
  388. package/src/core/utils.ts +9 -7
  389. package/src/main-api/INode.ts +4 -3
  390. package/src/main-api/Inspector.ts +577 -36
  391. package/src/main-api/Renderer.ts +518 -139
  392. package/src/utils.ts +10 -10
  393. package/dist/exports/core-api.d.ts +0 -74
  394. package/dist/exports/core-api.js +0 -96
  395. package/dist/exports/core-api.js.map +0 -1
  396. package/dist/exports/main-api.d.ts +0 -30
  397. package/dist/exports/main-api.js +0 -45
  398. package/dist/exports/main-api.js.map +0 -1
  399. package/dist/src/core/CoreExtension.d.ts +0 -12
  400. package/dist/src/core/CoreExtension.js +0 -29
  401. package/dist/src/core/CoreExtension.js.map +0 -1
  402. package/dist/src/core/CoreStuff.d.ts +0 -1
  403. package/dist/src/core/CoreStuff.js +0 -138
  404. package/dist/src/core/CoreStuff.js.map +0 -1
  405. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  406. package/dist/src/core/CoreTexturizer.js +0 -47
  407. package/dist/src/core/CoreTexturizer.js.map +0 -1
  408. package/dist/src/core/LngNode.d.ts +0 -736
  409. package/dist/src/core/LngNode.js +0 -1174
  410. package/dist/src/core/LngNode.js.map +0 -1
  411. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  412. package/dist/src/core/Matrix2DContext.js +0 -45
  413. package/dist/src/core/Matrix2DContext.js.map +0 -1
  414. package/dist/src/core/ShaderNode.d.ts +0 -10
  415. package/dist/src/core/ShaderNode.js +0 -30
  416. package/dist/src/core/ShaderNode.js.map +0 -1
  417. package/dist/src/core/TextNode.d.ts +0 -103
  418. package/dist/src/core/TextNode.js +0 -331
  419. package/dist/src/core/TextNode.js.map +0 -1
  420. package/dist/src/core/lib/Coords.d.ts +0 -14
  421. package/dist/src/core/lib/Coords.js +0 -55
  422. package/dist/src/core/lib/Coords.js.map +0 -1
  423. package/dist/src/core/lib/glm/common.d.ts +0 -162
  424. package/dist/src/core/lib/glm/common.js +0 -81
  425. package/dist/src/core/lib/glm/common.js.map +0 -1
  426. package/dist/src/core/lib/glm/index.d.ts +0 -11
  427. package/dist/src/core/lib/glm/index.js +0 -30
  428. package/dist/src/core/lib/glm/index.js.map +0 -1
  429. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  430. package/dist/src/core/lib/glm/mat2.js +0 -396
  431. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  432. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  433. package/dist/src/core/lib/glm/mat2d.js +0 -442
  434. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  435. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  436. package/dist/src/core/lib/glm/mat3.js +0 -680
  437. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  438. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  439. package/dist/src/core/lib/glm/mat4.js +0 -1802
  440. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  441. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  442. package/dist/src/core/lib/glm/quat.js +0 -693
  443. package/dist/src/core/lib/glm/quat.js.map +0 -1
  444. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  445. package/dist/src/core/lib/glm/quat2.js +0 -754
  446. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  447. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  448. package/dist/src/core/lib/glm/vec2.js +0 -569
  449. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  450. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  451. package/dist/src/core/lib/glm/vec3.js +0 -720
  452. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  453. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  454. package/dist/src/core/lib/glm/vec4.js +0 -608
  455. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  456. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  457. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  458. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  460. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  461. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  463. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  464. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  465. package/dist/src/core/scene/Scene.d.ts +0 -59
  466. package/dist/src/core/scene/Scene.js +0 -106
  467. package/dist/src/core/scene/Scene.js.map +0 -1
  468. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  469. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  470. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  471. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  472. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  473. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  474. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  475. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  476. package/dist/src/main-api/IShaderController.d.ts +0 -14
  477. package/dist/src/main-api/IShaderController.js +0 -30
  478. package/dist/src/main-api/IShaderController.js.map +0 -1
  479. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  480. package/dist/src/main-api/IShaderNode.js +0 -19
  481. package/dist/src/main-api/IShaderNode.js.map +0 -1
  482. package/dist/src/main-api/RendererMain.d.ts +0 -375
  483. package/dist/src/main-api/RendererMain.js +0 -365
  484. package/dist/src/main-api/RendererMain.js.map +0 -1
  485. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  486. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  487. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  488. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  489. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  490. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  491. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  492. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  493. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  494. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  495. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  496. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  497. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  498. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  499. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  500. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  501. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  502. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  503. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  504. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  505. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  506. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  507. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  508. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  509. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  510. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  511. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  512. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  513. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  514. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  515. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  516. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  517. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  518. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  519. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  520. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  521. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  522. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  523. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  524. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  525. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  526. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  527. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  528. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  529. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  530. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  531. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  532. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  533. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  534. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  535. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  536. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  537. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  538. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  539. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  540. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  541. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  542. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  543. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  544. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  545. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  546. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  547. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  548. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  549. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  550. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  551. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  552. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  553. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  554. package/dist/src/render-drivers/utils.d.ts +0 -12
  555. package/dist/src/render-drivers/utils.js +0 -69
  556. package/dist/src/render-drivers/utils.js.map +0 -1
  557. package/scripts/please-use-pnpm.js +0 -13
  558. package/src/core/platform.ts +0 -64
  559. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  560. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  561. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  562. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  563. package/src/core/text-rendering/TrFontManager.ts +0 -183
  564. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  565. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  566. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  567. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  568. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  569. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  570. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  571. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  572. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  573. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  574. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  575. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  576. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  577. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  578. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  579. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  580. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  581. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  582. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  583. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  584. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  585. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  586. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  587. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -16,34 +16,134 @@
16
16
  */
17
17
 
18
18
  import type { CoreNode } from '../../CoreNode.js';
19
- import { calcFactoredRadiusArray, valuesAreEqual } from '../../lib/utils.js';
19
+ import { calcFactoredRadiusArray } from '../../lib/utils.js';
20
20
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
21
21
  import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
22
22
  import {
23
23
  RoundedWithBorderTemplate,
24
24
  type RoundedWithBorderProps,
25
25
  } from '../templates/RoundedWithBorderTemplate.js';
26
- import { Rounded } from './Rounded.js';
27
26
 
28
27
  export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
29
28
  props: RoundedWithBorderTemplate.props,
30
29
  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
- );
30
+ this.uniformRGBA('u_borderColor', this.props!['border-color']);
31
+ this.uniform4fa('u_borderWidth', this.props!['border-w'] as Vec4);
32
+ this.uniform1f('u_borderGap', this.props!['border-gap'] as number);
33
+ this.uniform1f('u_borderAlign', this.props!['border-align'] as number);
34
+
37
35
  this.uniform4fa(
38
36
  'u_radius',
39
- calcFactoredRadiusArray(
40
- this.props!.radius as Vec4,
41
- node.width,
42
- node.height,
43
- ),
37
+ calcFactoredRadiusArray(this.props!.radius as Vec4, node.w, node.h),
44
38
  );
45
39
  },
46
- vertex: Rounded.vertex,
40
+ vertex: `
41
+ # ifdef GL_FRAGMENT_PRECISION_HIGH
42
+ precision highp float;
43
+ # else
44
+ precision mediump float;
45
+ # endif
46
+
47
+ attribute vec2 a_position;
48
+ attribute vec2 a_textureCoords;
49
+ attribute vec4 a_color;
50
+ attribute vec2 a_nodeCoords;
51
+
52
+ uniform vec2 u_resolution;
53
+ uniform float u_pixelRatio;
54
+ uniform vec2 u_dimensions;
55
+
56
+ uniform vec4 u_radius;
57
+ uniform vec4 u_borderWidth;
58
+ uniform float u_borderGap;
59
+ uniform float u_borderAlign;
60
+
61
+ varying vec4 v_color;
62
+ varying vec2 v_textureCoords;
63
+ varying vec2 v_nodeCoords;
64
+
65
+ varying vec2 v_innerSize;
66
+ varying vec2 v_outerSize;
67
+ varying vec2 v_outerBorderUv;
68
+ varying vec2 v_innerBorderUv;
69
+ varying vec4 v_innerBorderRadius;
70
+ varying vec4 v_outerBorderRadius;
71
+ varying vec2 v_halfDimensions;
72
+ varying float v_edgeWidth;
73
+ varying float v_borderZero;
74
+
75
+ void main() {
76
+ vec2 vertexPos = a_position * u_pixelRatio;
77
+ vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
78
+ vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
79
+ vec2 edgeOffset = vec2(0.0);
80
+
81
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
82
+ v_innerSize = vec2(0.0);
83
+ v_outerSize = vec2(0.0);
84
+
85
+ if(v_borderZero == 0.0) {
86
+ float borderTop = u_borderWidth.x;
87
+ float borderRight = u_borderWidth.y;
88
+ float borderBottom = u_borderWidth.z;
89
+ float borderLeft = u_borderWidth.w;
90
+
91
+ v_outerBorderUv = vec2(0.0);
92
+ v_innerBorderUv = vec2(0.0);
93
+
94
+ vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
95
+ vec2 extraSize = borderSize * u_borderAlign;
96
+ float gapLeft = step(0.001, borderLeft) * u_borderGap;
97
+ float gapRight = step(0.001, borderRight) * u_borderGap;
98
+ float gapTop = step(0.001, borderTop) * u_borderGap;
99
+ float gapBottom = step(0.001, borderBottom) * u_borderGap;
100
+ vec2 gapSize = vec2(gapLeft + gapRight, gapTop + gapBottom);
101
+
102
+ v_outerSize = (u_dimensions + gapSize + extraSize) * 0.5;
103
+ v_innerSize = v_outerSize - borderSize * 0.5;
104
+
105
+ // Use sign() to avoid branching
106
+ vec2 borderDiff = vec2(borderRight - borderLeft, borderBottom - borderTop);
107
+ vec2 signDiff = sign(borderDiff);
108
+ borderDiff = abs(borderDiff);
109
+
110
+ vec2 gapDiff = vec2(gapRight - gapLeft, gapBottom - gapTop);
111
+ vec2 signGapDiff = sign(gapDiff);
112
+ gapDiff = abs(gapDiff);
113
+
114
+ v_outerBorderUv = -signDiff * borderDiff * u_borderAlign * 0.5 - signGapDiff * gapDiff * 0.5;
115
+ v_innerBorderUv = v_outerBorderUv + signDiff * borderDiff * 0.5;
116
+
117
+ v_outerBorderRadius = vec4(
118
+ max(0.0, u_radius.x + max(borderTop * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap)),
119
+ max(0.0, u_radius.y + max(borderTop * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
120
+ max(0.0, u_radius.z + max(borderBottom * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
121
+ max(0.0, u_radius.w + max(borderBottom * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap))
122
+ );
123
+
124
+ v_innerBorderRadius = vec4(
125
+ max(0.0, v_outerBorderRadius.x - max(borderTop, borderLeft)),
126
+ max(0.0, v_outerBorderRadius.y - max(borderTop, borderRight)),
127
+ max(0.0, v_outerBorderRadius.z - max(borderBottom, borderRight)),
128
+ max(0.0, v_outerBorderRadius.w - max(borderBottom, borderLeft))
129
+ );
130
+
131
+ vec2 edgeOffsetExtra = step(u_dimensions * 0.5, v_outerSize) * edge * (extraSize + u_borderGap);
132
+ edgeOffset = edgeOffsetExtra;
133
+
134
+ vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
135
+ }
136
+
137
+ gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
138
+
139
+ v_color = a_color;
140
+ v_nodeCoords = a_nodeCoords + (screenSpace + edgeOffset) / (u_dimensions);
141
+ v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
142
+
143
+ v_halfDimensions = u_dimensions * 0.5;
144
+ v_edgeWidth = 1.0 / u_pixelRatio;
145
+ }
146
+ `,
47
147
  fragment: `
48
148
  # ifdef GL_FRAGMENT_PRECISION_HIGH
49
149
  precision highp float;
@@ -58,15 +158,25 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
58
158
  uniform sampler2D u_texture;
59
159
 
60
160
  uniform vec4 u_radius;
61
-
62
- uniform vec4 u_border_width;
63
- uniform vec4 u_border_color;
64
- uniform int u_border_asym;
161
+ uniform vec4 u_borderWidth;
162
+ uniform vec4 u_borderColor;
163
+ uniform float u_borderGap;
164
+ uniform float u_borderAlign;
65
165
 
66
166
  varying vec4 v_color;
67
167
  varying vec2 v_textureCoords;
68
168
  varying vec2 v_nodeCoords;
69
169
 
170
+ varying vec2 v_innerSize;
171
+ varying vec2 v_outerSize;
172
+ varying vec2 v_outerBorderUv;
173
+ varying vec2 v_innerBorderUv;
174
+ varying vec4 v_innerBorderRadius;
175
+ varying vec4 v_outerBorderRadius;
176
+ varying vec2 v_halfDimensions;
177
+ varying float v_edgeWidth;
178
+ varying float v_borderZero;
179
+
70
180
  float roundedBox(vec2 p, vec2 s, vec4 r) {
71
181
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
72
182
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -74,41 +184,39 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
74
184
  return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
75
185
  }
76
186
 
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
187
  void main() {
92
188
  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);
189
+ vec4 resultColor = vec4(0.0);
190
+ vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
97
191
 
98
- float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, boxDist);
99
- float borderAlpha = 0.0;
192
+ float nodeDist;
193
+ float nodeAlpha;
100
194
 
101
- if(u_border_asym == 1) {
102
- borderAlpha = asymBorderWidth(boxUv, boxDist, u_radius, u_border_width);
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
+ gl_FragColor = mix(vec4(0.0), color, nodeAlpha) * u_alpha;
199
+ return;
103
200
  }
104
- else {
105
- borderAlpha = 1.0 - smoothstep(u_border_width[0] - u_pixelRatio, u_border_width[0], abs(boxDist));
201
+
202
+ float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - v_edgeWidth, v_outerBorderRadius);
203
+ float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - v_edgeWidth, v_innerBorderRadius);
204
+
205
+ if(u_borderGap == 0.0) {
206
+ resultColor = mix(resultColor, u_borderColor, 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, outerDist));
207
+ resultColor = mix(resultColor, color, 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, innerDist));
208
+ gl_FragColor = resultColor * u_alpha;
209
+ return;
106
210
  }
107
211
 
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;
212
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
213
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
214
+ float borderDist = max(-innerDist, outerDist);
215
+ float borderAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, borderDist);
216
+
217
+ resultColor = mix(vec4(0.0), color, nodeAlpha);
218
+ resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
219
+ gl_FragColor = resultColor * u_alpha;
112
220
  }
113
221
  `,
114
222
  };
@@ -16,40 +16,142 @@
16
16
  */
17
17
 
18
18
  import type { CoreNode } from '../../CoreNode.js';
19
- import { calcFactoredRadiusArray, valuesAreEqual } from '../../lib/utils.js';
19
+ import { calcFactoredRadiusArray } from '../../lib/utils.js';
20
20
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
21
21
  import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
22
22
  import {
23
23
  RoundedWithBorderAndShadowTemplate,
24
24
  type RoundedWithBorderAndShadowProps,
25
25
  } from '../templates/RoundedWithBorderAndShadowTemplate.js';
26
- import { Shadow } from './Shadow.js';
27
26
 
28
27
  export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndShadowProps> =
29
28
  {
30
29
  props: RoundedWithBorderAndShadowTemplate.props,
31
30
  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);
31
+ const props = this.props!;
32
+ this.uniformRGBA('u_borderColor', props['border-color']);
33
+ this.uniform4fa('u_borderWidth', props['border-w'] as Vec4);
34
+ this.uniform1f('u_borderGap', this.props!['border-gap'] as number);
35
+ this.uniform1f('u_borderAlign', this.props!['border-align'] as number);
34
36
 
35
- this.uniform1i(
36
- 'u_border_asym',
37
- valuesAreEqual(this.props!['border-width'] as number[]) ? 0 : 1,
38
- );
39
-
40
- this.uniformRGBA('u_shadow_color', this.props!['shadow-color']);
41
- this.uniform4fa('u_shadow', this.props!['shadow-projection']);
37
+ this.uniformRGBA('u_shadowColor', props['shadow-color']);
38
+ this.uniform4fa('u_shadow', props['shadow-projection']);
42
39
 
43
40
  this.uniform4fa(
44
41
  'u_radius',
45
- calcFactoredRadiusArray(
46
- this.props!.radius as Vec4,
47
- node.width,
48
- node.height,
49
- ),
42
+ calcFactoredRadiusArray(props.radius as Vec4, node.w, node.h),
50
43
  );
51
44
  },
52
- vertex: Shadow.vertex as string,
45
+ vertex: `
46
+ # ifdef GL_FRAGMENT_PRECISION_HIGH
47
+ precision highp float;
48
+ # else
49
+ precision mediump float;
50
+ # endif
51
+
52
+ attribute vec2 a_position;
53
+ attribute vec2 a_textureCoords;
54
+ attribute vec4 a_color;
55
+ attribute vec2 a_nodeCoords;
56
+
57
+ uniform vec2 u_resolution;
58
+ uniform float u_pixelRatio;
59
+ uniform float u_rtt;
60
+ uniform vec2 u_dimensions;
61
+
62
+ uniform vec4 u_shadow;
63
+ uniform vec4 u_radius;
64
+ uniform vec4 u_borderWidth;
65
+ uniform float u_borderGap;
66
+ uniform float u_borderAlign;
67
+
68
+ varying vec4 v_color;
69
+ varying vec2 v_textureCoords;
70
+ varying vec2 v_nodeCoords;
71
+
72
+ varying vec2 v_innerSize;
73
+ varying vec2 v_outerSize;
74
+ varying vec2 v_outerBorderUv;
75
+ varying vec2 v_innerBorderUv;
76
+ varying vec4 v_innerBorderRadius;
77
+ varying vec4 v_outerBorderRadius;
78
+ varying vec2 v_halfDimensions;
79
+ varying float v_edgeWidth;
80
+ varying float v_borderZero;
81
+
82
+ void main() {
83
+ vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
84
+ vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
85
+
86
+ vec2 edgeOffset = edge * ((u_shadow.w * 2.0)+ u_shadow.z) + u_shadow.xy;
87
+ vec2 vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
88
+
89
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
90
+
91
+ v_innerSize = vec2(0.0);
92
+ v_outerSize = vec2(0.0);
93
+
94
+ if(v_borderZero == 0.0) {
95
+ float borderTop = u_borderWidth.x;
96
+ float borderRight = u_borderWidth.y;
97
+ float borderBottom = u_borderWidth.z;
98
+ float borderLeft = u_borderWidth.w;
99
+
100
+ v_outerBorderUv = vec2(0.0);
101
+ v_innerBorderUv = vec2(0.0);
102
+
103
+ vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
104
+ vec2 extraSize = borderSize * u_borderAlign;
105
+ float gapLeft = step(0.001, borderLeft) * u_borderGap;
106
+ float gapRight = step(0.001, borderRight) * u_borderGap;
107
+ float gapTop = step(0.001, borderTop) * u_borderGap;
108
+ float gapBottom = step(0.001, borderBottom) * u_borderGap;
109
+ vec2 gapSize = vec2(gapLeft + gapRight, gapTop + gapBottom);
110
+
111
+ v_outerSize = (u_dimensions + gapSize + extraSize) * 0.5;
112
+ v_innerSize = v_outerSize - borderSize * 0.5;
113
+
114
+ // Use sign() to avoid branching
115
+ vec2 borderDiff = vec2(borderRight - borderLeft, borderBottom - borderTop);
116
+ vec2 signDiff = sign(borderDiff);
117
+ borderDiff = abs(borderDiff);
118
+
119
+ vec2 gapDiff = vec2(gapRight - gapLeft, gapBottom - gapTop);
120
+ vec2 signGapDiff = sign(gapDiff);
121
+ gapDiff = abs(gapDiff);
122
+
123
+ v_outerBorderUv = -signDiff * borderDiff * u_borderAlign * 0.5 - signGapDiff * gapDiff * 0.5;
124
+ v_innerBorderUv = v_outerBorderUv + signDiff * borderDiff * 0.5;
125
+
126
+ v_outerBorderRadius = vec4(
127
+ max(0.0, u_radius.x + max(borderTop * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap)),
128
+ max(0.0, u_radius.y + max(borderTop * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
129
+ max(0.0, u_radius.z + max(borderBottom * u_borderAlign + u_borderGap, borderRight * u_borderAlign + u_borderGap)),
130
+ max(0.0, u_radius.w + max(borderBottom * u_borderAlign + u_borderGap, borderLeft * u_borderAlign + u_borderGap))
131
+ );
132
+
133
+ v_innerBorderRadius = vec4(
134
+ max(0.0, v_outerBorderRadius.x - max(borderTop, borderLeft)),
135
+ max(0.0, v_outerBorderRadius.y - max(borderTop, borderRight)),
136
+ max(0.0, v_outerBorderRadius.z - max(borderBottom, borderRight)),
137
+ max(0.0, v_outerBorderRadius.w - max(borderBottom, borderLeft))
138
+ );
139
+
140
+ vec2 edgeOffsetExtra = step(u_dimensions * 0.5, v_outerSize) * edge * (extraSize + u_borderGap);
141
+ edgeOffset += edgeOffsetExtra;
142
+
143
+ vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
144
+ }
145
+
146
+ gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
147
+
148
+ v_halfDimensions = u_dimensions * 0.5;
149
+ v_edgeWidth = 1.0 / u_pixelRatio;
150
+ v_color = a_color;
151
+ v_nodeCoords = a_nodeCoords + (screenSpace + edgeOffset) / (u_dimensions);
152
+ v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
153
+ }
154
+ `,
53
155
  fragment: `
54
156
  # ifdef GL_FRAGMENT_PRECISION_HIGH
55
157
  precision highp float;
@@ -65,16 +167,25 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
65
167
  uniform float u_rtt;
66
168
 
67
169
  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;
170
+ uniform vec4 u_borderWidth;
171
+ uniform vec4 u_borderColor;
172
+ uniform vec4 u_shadowColor;
72
173
  uniform vec4 u_shadow;
73
174
 
74
175
  varying vec4 v_color;
75
176
  varying vec2 v_textureCoords;
76
177
  varying vec2 v_nodeCoords;
77
178
 
179
+ varying vec2 v_innerSize;
180
+ varying vec2 v_outerSize;
181
+ varying vec2 v_outerBorderUv;
182
+ varying vec2 v_innerBorderUv;
183
+ varying vec4 v_innerBorderRadius;
184
+ varying vec4 v_outerBorderRadius;
185
+ varying vec2 v_halfDimensions;
186
+ varying float v_edgeWidth;
187
+ varying float v_borderZero;
188
+
78
189
  float roundedBox(vec2 p, vec2 s, vec4 r) {
79
190
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
80
191
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -82,20 +193,6 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
82
193
  return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
83
194
  }
84
195
 
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
196
  float shadowBox(vec2 p, vec2 s, vec4 r) {
100
197
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
101
198
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -106,28 +203,38 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
106
203
 
107
204
  void main() {
108
205
  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;
206
+ vec4 resultColor = vec4(0.0);
207
+ vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
208
+ float nodeDist;
209
+ float nodeAlpha;
210
+ float shadowAlpha;
211
+
212
+ if(v_borderZero == 1.0) {
213
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
214
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
215
+ shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - v_edgeWidth, u_radius + u_shadow.z);
216
+ resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
217
+ gl_FragColor = mix(resultColor, color, nodeAlpha) * u_alpha;
218
+ return;
219
+ }
116
220
 
117
- if(u_border_asym == 1) {
118
- borderAlpha = asymBorderWidth(boxUv, outerBoxDist, u_radius, u_border_width);
221
+ if(v_outerSize.x > v_halfDimensions.x || v_outerSize.y > v_halfDimensions.y) {
222
+ shadowAlpha = shadowBox(boxUv + v_outerBorderUv - u_shadow.xy, v_outerSize + u_shadow.w - v_edgeWidth, v_outerBorderRadius + u_shadow.z);
119
223
  }
120
224
  else {
121
- borderAlpha = 1.0 - smoothstep(u_border_width[0], u_border_width[0], abs(outerBoxDist));
225
+ shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - v_edgeWidth, u_radius + u_shadow.z);
122
226
  }
123
227
 
124
- float shadowAlpha = shadowBox(boxUv - u_shadow.xy, halfDimensions + u_shadow.w, u_radius + u_shadow.z);
125
-
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;
228
+ nodeDist = roundedBox(boxUv, v_halfDimensions - v_edgeWidth, u_radius);
229
+ nodeAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, nodeDist);
230
+ float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - v_edgeWidth, v_outerBorderRadius);
231
+ float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - v_edgeWidth, v_innerBorderRadius);
232
+ float borderDist = max(-innerDist, outerDist);
233
+ float borderAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, borderDist);
234
+ resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
235
+ resultColor = mix(resultColor, color, nodeAlpha);
236
+ resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
237
+ gl_FragColor = resultColor * u_alpha;
131
238
  }
132
239
  `,
133
240
  };
@@ -32,11 +32,7 @@ export const RoundedWithShadow: WebGlShaderType<RoundedWithShadowProps> = {
32
32
  this.uniform4fa('u_shadow', this.props!['shadow-projection']!);
33
33
  this.uniform4fa(
34
34
  'u_radius',
35
- calcFactoredRadiusArray(
36
- this.props!.radius as Vec4,
37
- node.width,
38
- node.height,
39
- ),
35
+ calcFactoredRadiusArray(this.props!.radius as Vec4, node.w, node.h),
40
36
  );
41
37
  },
42
38
  vertex: Shadow.vertex as string,
@@ -63,6 +59,8 @@ export const RoundedWithShadow: WebGlShaderType<RoundedWithShadowProps> = {
63
59
  varying vec2 v_textureCoords;
64
60
  varying vec2 v_nodeCoords;
65
61
 
62
+ varying float v_edgeWidth;
63
+
66
64
  float roundedBox(vec2 p, vec2 s, vec4 r) {
67
65
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
68
66
  r.x = (p.y > 0.0) ? r.y : r.x;
@@ -83,11 +81,11 @@ export const RoundedWithShadow: WebGlShaderType<RoundedWithShadowProps> = {
83
81
  vec2 halfDimensions = (u_dimensions * 0.5);
84
82
 
85
83
  vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
86
- float boxDist = roundedBox(boxUv, halfDimensions, u_radius);
84
+ float boxDist = roundedBox(boxUv, halfDimensions - v_edgeWidth, u_radius);
87
85
 
88
- float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, boxDist);
86
+ float roundedAlpha = 1.0 - smoothstep(-0.5 * v_edgeWidth, 0.5 * v_edgeWidth, boxDist);
89
87
 
90
- float shadowAlpha = shadowBox(boxUv - u_shadow.xy, halfDimensions + u_shadow.w, u_radius + u_shadow.z);
88
+ float shadowAlpha = shadowBox(boxUv - u_shadow.xy, halfDimensions + u_shadow.w - v_edgeWidth, u_radius + u_shadow.z);
91
89
 
92
90
  vec4 resColor = vec4(0.0);
93
91
  resColor = mix(resColor, u_shadow_color, shadowAlpha);
@@ -25,7 +25,6 @@ const IDENTITY_MATRIX_3x3 = new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
25
25
  */
26
26
  export interface SdfShaderProps {
27
27
  transform: Float32Array;
28
- scrollY: number;
29
28
  /**
30
29
  * Color in RGBA format
31
30
  *
@@ -35,7 +34,6 @@ export interface SdfShaderProps {
35
34
  color: number;
36
35
  size: number;
37
36
  distanceRange: number;
38
- debug: boolean;
39
37
  }
40
38
  /**
41
39
  * SdfShader supports multi-channel and single-channel signed distance field textures.
@@ -53,19 +51,15 @@ export interface SdfShaderProps {
53
51
  export const Sdf: WebGlShaderType<SdfShaderProps> = {
54
52
  props: {
55
53
  transform: IDENTITY_MATRIX_3x3,
56
- scrollY: 0,
57
54
  color: 0xffffffff,
58
55
  size: 16,
59
56
  distanceRange: 1.0,
60
- debug: false,
61
57
  },
62
58
  onSdfBind(props) {
63
59
  this.uniformMatrix3fv('u_transform', props.transform);
64
- this.uniform1f('u_scrollY', props.scrollY);
65
60
  this.uniform4fa('u_color', getNormalizedRgbaComponents(props.color));
66
61
  this.uniform1f('u_size', props.size);
67
62
  this.uniform1f('u_distanceRange', props.distanceRange);
68
- this.uniform1i('u_debug', props.debug ? 1 : 0);
69
63
  },
70
64
  vertex: `
71
65
  # ifdef GL_FRAGMENT_PRECISION_HIGH
@@ -80,14 +74,15 @@ export const Sdf: WebGlShaderType<SdfShaderProps> = {
80
74
 
81
75
  uniform vec2 u_resolution;
82
76
  uniform mat3 u_transform;
83
- uniform float u_scrollY;
84
77
  uniform float u_pixelRatio;
85
78
  uniform float u_size;
79
+ uniform float u_distanceRange;
86
80
 
87
81
  varying vec2 v_texcoord;
82
+ varying float v_scaledDistRange;
88
83
 
89
84
  void main() {
90
- vec2 scrolledPosition = a_position * u_size - vec2(0, u_scrollY);
85
+ vec2 scrolledPosition = a_position * u_size;
91
86
  vec2 transformedPosition = (u_transform * vec3(scrolledPosition, 1)).xy;
92
87
 
93
88
  // Calculate screen space with pixel ratio
@@ -95,7 +90,7 @@ export const Sdf: WebGlShaderType<SdfShaderProps> = {
95
90
 
96
91
  gl_Position = vec4(screenSpace, 0.0, 1.0);
97
92
  v_texcoord = a_textureCoords;
98
-
93
+ v_scaledDistRange = u_distanceRange * u_pixelRatio;
99
94
  }
100
95
  `,
101
96
  fragment: `
@@ -106,24 +101,17 @@ export const Sdf: WebGlShaderType<SdfShaderProps> = {
106
101
  # endif
107
102
  uniform vec4 u_color;
108
103
  uniform sampler2D u_texture;
109
- uniform float u_distanceRange;
110
- uniform float u_pixelRatio;
111
- uniform int u_debug;
112
104
 
113
105
  varying vec2 v_texcoord;
106
+ varying float v_scaledDistRange;
114
107
 
115
108
  float median(float r, float g, float b) {
116
- return max(min(r, g), min(max(r, g), b));
109
+ return clamp(b, min(r, g), max(r, g));
117
110
  }
118
111
 
119
112
  void main() {
120
113
  vec3 sample = texture2D(u_texture, v_texcoord).rgb;
121
- if (u_debug == 1) {
122
- gl_FragColor = vec4(sample.r, sample.g, sample.b, 1.0);
123
- return;
124
- }
125
- float scaledDistRange = u_distanceRange * u_pixelRatio;
126
- float sigDist = scaledDistRange * (median(sample.r, sample.g, sample.b) - 0.5);
114
+ float sigDist = v_scaledDistRange * (median(sample.r, sample.g, sample.b) - 0.5);
127
115
  float opacity = clamp(sigDist + 0.5, 0.0, 1.0) * u_color.a;
128
116
 
129
117
  // Build the final color.