@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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