@lightningjs/renderer 0.9.4 → 1.0.0-rc.0

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 (289) hide show
  1. package/README.md +0 -82
  2. package/dist/exports/index.d.ts +40 -3
  3. package/dist/exports/index.js +35 -3
  4. package/dist/exports/index.js.map +1 -1
  5. package/dist/src/core/CoreNode.d.ts +462 -46
  6. package/dist/src/core/CoreNode.js +171 -103
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreShaderManager.d.ts +16 -6
  9. package/dist/src/core/CoreShaderManager.js +20 -20
  10. package/dist/src/core/CoreShaderManager.js.map +1 -1
  11. package/dist/src/core/CoreTextNode.d.ts +30 -4
  12. package/dist/src/core/CoreTextNode.js +24 -1
  13. package/dist/src/core/CoreTextNode.js.map +1 -1
  14. package/dist/src/core/CoreTextureManager.d.ts +31 -82
  15. package/dist/src/core/CoreTextureManager.js +39 -126
  16. package/dist/src/core/CoreTextureManager.js.map +1 -1
  17. package/dist/src/core/Stage.d.ts +67 -9
  18. package/dist/src/core/Stage.js +174 -30
  19. package/dist/src/core/Stage.js.map +1 -1
  20. package/dist/src/core/TextureMemoryManager.d.ts +97 -8
  21. package/dist/src/core/TextureMemoryManager.js +142 -19
  22. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  23. package/dist/src/core/animations/CoreAnimation.d.ts +14 -6
  24. package/dist/src/core/animations/CoreAnimation.js +136 -44
  25. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  26. package/dist/src/core/lib/ImageWorker.js +59 -52
  27. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  28. package/dist/src/core/lib/utils.js.map +1 -1
  29. package/dist/src/core/platform.js +7 -1
  30. package/dist/src/core/platform.js.map +1 -1
  31. package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
  32. package/dist/src/core/renderers/CoreContextTexture.js +7 -1
  33. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  34. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
  35. package/dist/src/core/renderers/CoreRenderer.js +0 -1
  36. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  37. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
  38. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
  39. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  40. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
  41. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
  42. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
  52. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
  53. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
  55. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
  56. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
  57. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
  59. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
  60. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
  61. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
  63. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
  65. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
  66. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  67. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
  68. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
  69. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
  70. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
  71. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
  72. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
  74. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
  76. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  77. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
  78. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
  79. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
  80. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  83. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
  84. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  85. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
  86. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
  87. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  88. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
  89. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  90. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
  91. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
  92. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  93. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
  94. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
  95. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  100. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
  101. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  102. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  103. package/dist/src/core/textures/ColorTexture.js +1 -1
  104. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  105. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  106. package/dist/src/core/textures/NoiseTexture.js +3 -0
  107. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  108. package/dist/src/core/textures/SubTexture.d.ts +2 -2
  109. package/dist/src/core/textures/SubTexture.js +5 -1
  110. package/dist/src/core/textures/SubTexture.js.map +1 -1
  111. package/dist/src/core/textures/Texture.d.ts +23 -2
  112. package/dist/src/core/textures/Texture.js +32 -3
  113. package/dist/src/core/textures/Texture.js.map +1 -1
  114. package/dist/src/core/utils.d.ts +7 -0
  115. package/dist/src/core/utils.js +12 -10
  116. package/dist/src/core/utils.js.map +1 -1
  117. package/dist/src/main-api/DynamicShaderController.d.ts +3 -9
  118. package/dist/src/main-api/DynamicShaderController.js +18 -17
  119. package/dist/src/main-api/DynamicShaderController.js.map +1 -1
  120. package/dist/src/main-api/INode.d.ts +43 -463
  121. package/dist/src/main-api/INode.js +1 -19
  122. package/dist/src/main-api/INode.js.map +1 -1
  123. package/dist/src/main-api/Inspector.d.ts +10 -10
  124. package/dist/src/main-api/Inspector.js +18 -15
  125. package/dist/src/main-api/Inspector.js.map +1 -1
  126. package/dist/src/main-api/Renderer.d.ts +27 -21
  127. package/dist/src/main-api/Renderer.js +38 -107
  128. package/dist/src/main-api/Renderer.js.map +1 -1
  129. package/dist/src/main-api/ShaderController.d.ts +3 -8
  130. package/dist/src/main-api/ShaderController.js +8 -3
  131. package/dist/src/main-api/ShaderController.js.map +1 -1
  132. package/dist/src/utils.d.ts +1 -0
  133. package/dist/src/utils.js +7 -0
  134. package/dist/src/utils.js.map +1 -1
  135. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  136. package/exports/index.ts +60 -3
  137. package/package.json +8 -7
  138. package/src/core/CoreNode.test.ts +93 -0
  139. package/src/core/CoreNode.ts +675 -187
  140. package/src/core/CoreShaderManager.ts +56 -29
  141. package/src/core/CoreTextNode.ts +41 -9
  142. package/src/core/CoreTextureManager.ts +55 -175
  143. package/src/core/Stage.ts +199 -43
  144. package/src/core/TextureMemoryManager.ts +231 -22
  145. package/src/core/animations/CoreAnimation.ts +193 -68
  146. package/src/core/lib/ImageWorker.ts +79 -52
  147. package/src/core/lib/utils.ts +1 -0
  148. package/src/core/platform.ts +8 -1
  149. package/src/core/renderers/CoreContextTexture.ts +9 -2
  150. package/src/core/renderers/CoreRenderer.ts +5 -2
  151. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
  152. package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
  153. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
  154. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
  155. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
  156. package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
  157. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
  158. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
  159. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
  160. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
  161. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
  162. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
  163. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
  164. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
  165. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
  166. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
  167. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
  168. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
  169. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
  170. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
  171. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
  172. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
  173. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
  174. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
  175. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
  176. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
  177. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
  178. package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
  179. package/src/core/textures/ColorTexture.ts +1 -1
  180. package/src/core/textures/ImageTexture.ts +1 -1
  181. package/src/core/textures/NoiseTexture.ts +4 -1
  182. package/src/core/textures/SubTexture.ts +7 -7
  183. package/src/core/textures/Texture.ts +46 -3
  184. package/src/core/utils.ts +12 -11
  185. package/src/main-api/DynamicShaderController.ts +97 -0
  186. package/src/main-api/INode.ts +56 -479
  187. package/src/main-api/Inspector.ts +37 -39
  188. package/src/main-api/Renderer.ts +543 -0
  189. package/src/main-api/ShaderController.ts +81 -0
  190. package/src/main-api/utils.ts +45 -0
  191. package/src/utils.ts +8 -0
  192. package/dist/exports/core-api.d.ts +0 -74
  193. package/dist/exports/core-api.js +0 -96
  194. package/dist/exports/core-api.js.map +0 -1
  195. package/dist/exports/main-api.d.ts +0 -30
  196. package/dist/exports/main-api.js +0 -45
  197. package/dist/exports/main-api.js.map +0 -1
  198. package/dist/src/core/CoreExtension.d.ts +0 -12
  199. package/dist/src/core/CoreExtension.js +0 -29
  200. package/dist/src/core/CoreExtension.js.map +0 -1
  201. package/dist/src/core/renderers/SpecificNode.d.ts +0 -1
  202. package/dist/src/core/renderers/SpecificNode.js +0 -19
  203. package/dist/src/core/renderers/SpecificNode.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/newShader/effectsMock.d.ts +0 -13
  205. package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -62
  206. package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
  207. package/dist/src/main-api/ICoreDriver.d.ts +0 -24
  208. package/dist/src/main-api/ICoreDriver.js +0 -20
  209. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  210. package/dist/src/main-api/RendererMain.d.ts +0 -378
  211. package/dist/src/main-api/RendererMain.js +0 -367
  212. package/dist/src/main-api/RendererMain.js.map +0 -1
  213. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  214. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  215. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  216. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  217. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  218. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  219. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  220. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  221. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  222. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
  223. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
  224. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  225. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
  226. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
  227. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  228. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  229. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
  230. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  231. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
  232. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
  233. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  234. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
  235. package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
  236. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  237. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  238. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
  239. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  240. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
  241. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
  242. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  243. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
  244. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
  245. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  246. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
  247. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
  248. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  249. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  250. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  251. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  252. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  253. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  254. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  255. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  256. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
  257. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  258. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  259. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
  260. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  261. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  262. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
  263. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  264. package/dist/src/render-drivers/utils.d.ts +0 -12
  265. package/dist/src/render-drivers/utils.js +0 -74
  266. package/dist/src/render-drivers/utils.js.map +0 -1
  267. package/exports/core-api.ts +0 -102
  268. package/exports/main-api.ts +0 -62
  269. package/src/core/CoreExtension.ts +0 -32
  270. package/src/main-api/ICoreDriver.ts +0 -68
  271. package/src/main-api/RendererMain.ts +0 -685
  272. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
  273. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
  274. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
  275. package/src/render-drivers/main/MainCoreDriver.ts +0 -159
  276. package/src/render-drivers/main/MainOnlyNode.ts +0 -553
  277. package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
  278. package/src/render-drivers/threadx/NodeStruct.ts +0 -320
  279. package/src/render-drivers/threadx/SharedNode.ts +0 -101
  280. package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
  281. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
  282. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
  283. package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
  284. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
  285. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
  286. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
  287. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
  288. package/src/render-drivers/threadx/worker/renderer.ts +0 -156
  289. package/src/render-drivers/utils.ts +0 -102
@@ -61,10 +61,6 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
61
61
  return this._nativeCtxTexture;
62
62
  }
63
63
 
64
- get renderable(): boolean {
65
- return this.textureSource.renderable;
66
- }
67
-
68
64
  get w() {
69
65
  return this._w;
70
66
  }
@@ -118,11 +114,11 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
118
114
  * Called when the texture data needs to be loaded and uploaded to a texture
119
115
  */
120
116
  async onLoadRequest(): Promise<Dimensions> {
121
- const { glw, memManager } = this;
117
+ const { glw } = this;
122
118
 
123
119
  // Set to a 1x1 transparent texture
124
120
  glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
125
- memManager.setTextureMemUse(this, TRANSPARENT_TEXTURE_DATA.byteLength);
121
+ this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
126
122
 
127
123
  const textureData = await this.textureSource?.getTextureData();
128
124
  // If the texture has been freed while loading, return early.
@@ -153,7 +149,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
153
149
  );
154
150
 
155
151
  glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, data);
156
- memManager.setTextureMemUse(this, width * height * 4);
152
+ this.setTextureMemUse(width * height * 4);
157
153
 
158
154
  // generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
159
155
  if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
@@ -175,7 +171,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
175
171
  glw.UNSIGNED_BYTE,
176
172
  TRANSPARENT_TEXTURE_DATA,
177
173
  );
178
- memManager.setTextureMemUse(this, TRANSPARENT_TEXTURE_DATA.byteLength);
174
+ this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
179
175
  } else if ('mipmaps' in textureData.data && textureData.data.mipmaps) {
180
176
  const {
181
177
  mipmaps,
@@ -197,7 +193,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
197
193
  glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
198
194
  glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
199
195
 
200
- memManager.setTextureMemUse(this, view.byteLength);
196
+ this.setTextureMemUse(view.byteLength);
201
197
  } else {
202
198
  console.error(
203
199
  `WebGlCoreCtxTexture.onLoadRequest: Unexpected textureData returned`,
@@ -227,10 +223,10 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
227
223
  if (!this._nativeCtxTexture) {
228
224
  return;
229
225
  }
230
- const { glw, memManager } = this;
226
+ const { glw } = this;
231
227
 
232
228
  glw.deleteTexture(this._nativeCtxTexture);
233
- memManager.setTextureMemUse(this, 0);
229
+ this.setTextureMemUse(0);
234
230
  this._nativeCtxTexture = null;
235
231
  }
236
232
 
@@ -50,6 +50,7 @@ import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
50
50
  import { RenderTexture } from '../../textures/RenderTexture.js';
51
51
  import type { CoreNode } from '../../CoreNode.js';
52
52
  import { WebGlCoreCtxRenderTexture } from './WebGlCoreCtxRenderTexture.js';
53
+ import type { BaseShaderController } from '../../../main-api/ShaderController.js';
53
54
  import { ImageTexture } from '../../textures/ImageTexture.js';
54
55
 
55
56
  const WORDS_PER_QUAD = 24;
@@ -80,6 +81,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
80
81
  activeRttNode: CoreNode | null = null;
81
82
 
82
83
  //// Default Shader
84
+ defShaderCtrl: BaseShaderController;
83
85
  defaultShader: WebGlCoreShader;
84
86
  quadBufferCollection: BufferCollection;
85
87
 
@@ -102,7 +104,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
102
104
  this.defaultTexture = new ColorTexture(this.txManager);
103
105
 
104
106
  // Mark the default texture as ALWAYS renderable
105
- // This prevents it from ever being garbage collected.
107
+ // This prevents it from ever being cleaned up.
106
108
  // Fixes https://github.com/lightning-js/renderer/issues/262
107
109
  this.defaultTexture.setRenderableOwner(this, true);
108
110
 
@@ -128,7 +130,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
128
130
  extensions: getWebGlExtensions(this.glw),
129
131
  };
130
132
  this.shManager.renderer = this;
131
- this.defaultShader = this.shManager.loadShader('DefaultShader').shader;
133
+ this.defShaderCtrl = this.shManager.loadShader('DefaultShader');
134
+ this.defaultShader = this.defShaderCtrl.shader as WebGlCoreShader;
132
135
  const quadBuffer = glw.createBuffer();
133
136
  assertTruthy(quadBuffer);
134
137
  const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
@@ -235,6 +238,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
235
238
  tb,
236
239
  tc,
237
240
  td,
241
+ renderCoords,
238
242
  rtt: renderToTexture,
239
243
  parentHasRenderTexture,
240
244
  framebufferDimensions,
@@ -281,7 +285,12 @@ export class WebGlCoreRenderer extends CoreRenderer {
281
285
  }
282
286
 
283
287
  const flipX = textureOptions?.flipX ?? false;
284
- const flipY = textureOptions?.flipY ?? false;
288
+ let flipY = textureOptions?.flipY ?? false;
289
+
290
+ // always flip flipY for render textures
291
+ if (texture instanceof RenderTexture) {
292
+ flipY = !flipY;
293
+ }
285
294
 
286
295
  let texCoordX1 = 0;
287
296
  let texCoordY1 = 0;
@@ -333,16 +342,46 @@ export class WebGlCoreRenderer extends CoreRenderer {
333
342
  [texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
334
343
  }
335
344
 
336
- const { txManager } = this.stage;
337
- const ctxTexture = txManager.getCtxTexture(texture);
345
+ const ctxTexture = texture.ctxTexture;
338
346
  assertTruthy(ctxTexture instanceof WebGlCoreCtxTexture);
339
347
  const textureIdx = this.addTexture(ctxTexture, bufferIdx);
340
348
 
341
349
  curRenderOp = this.curRenderOp;
342
350
  assertTruthy(curRenderOp);
351
+ if (renderCoords) {
352
+ const { x1, y1, x2, y2, x3, y3, x4, y4 } = renderCoords;
353
+ // Upper-Left
354
+ fQuadBuffer[bufferIdx++] = x1; // vertexX
355
+ fQuadBuffer[bufferIdx++] = y1; // vertexY
356
+ fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
357
+ fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
358
+ uiQuadBuffer[bufferIdx++] = colorTl; // color
359
+ fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
360
+
361
+ // Upper-Right
362
+ fQuadBuffer[bufferIdx++] = x2;
363
+ fQuadBuffer[bufferIdx++] = y2;
364
+ fQuadBuffer[bufferIdx++] = texCoordX2;
365
+ fQuadBuffer[bufferIdx++] = texCoordY1;
366
+ uiQuadBuffer[bufferIdx++] = colorTr;
367
+ fQuadBuffer[bufferIdx++] = textureIdx;
343
368
 
344
- // render quad advanced
345
- if (tb !== 0 || tc !== 0) {
369
+ // Lower-Left
370
+ fQuadBuffer[bufferIdx++] = x4;
371
+ fQuadBuffer[bufferIdx++] = y4;
372
+ fQuadBuffer[bufferIdx++] = texCoordX1;
373
+ fQuadBuffer[bufferIdx++] = texCoordY2;
374
+ uiQuadBuffer[bufferIdx++] = colorBl;
375
+ fQuadBuffer[bufferIdx++] = textureIdx;
376
+
377
+ // Lower-Right
378
+ fQuadBuffer[bufferIdx++] = x3;
379
+ fQuadBuffer[bufferIdx++] = y3;
380
+ fQuadBuffer[bufferIdx++] = texCoordX2;
381
+ fQuadBuffer[bufferIdx++] = texCoordY2;
382
+ uiQuadBuffer[bufferIdx++] = colorBr;
383
+ fQuadBuffer[bufferIdx++] = textureIdx;
384
+ } else if (tb !== 0 || tc !== 0) {
346
385
  // Upper-Left
347
386
  fQuadBuffer[bufferIdx++] = tx; // vertexX
348
387
  fQuadBuffer[bufferIdx++] = ty; // vertexY
@@ -412,7 +451,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
412
451
  uiQuadBuffer[bufferIdx++] = colorBr;
413
452
  fQuadBuffer[bufferIdx++] = textureIdx;
414
453
  }
415
-
416
454
  // Update the length of the current render op
417
455
  curRenderOp.length += WORDS_PER_QUAD;
418
456
  curRenderOp.numQuads++;
@@ -605,7 +643,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
605
643
  this.activeRttNode = node;
606
644
 
607
645
  assertTruthy(node.texture, 'RTT node missing texture');
608
- const ctxTexture = txManager.getCtxTexture(node.texture);
646
+ const ctxTexture = node.texture.ctxTexture;
609
647
  assertTruthy(ctxTexture instanceof WebGlCoreCtxRenderTexture);
610
648
  this.renderToTextureActive = true;
611
649
 
@@ -655,4 +693,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
655
693
  }
656
694
  this.rttNodes.splice(index, 1);
657
695
  }
696
+
697
+ override getDefShaderCtr(): BaseShaderController {
698
+ return this.defShaderCtrl;
699
+ }
658
700
  }
@@ -25,9 +25,31 @@ import {
25
25
  } from '../WebGlCoreShader.js';
26
26
  import type { UniformInfo } from '../internal/ShaderUtils.js';
27
27
  import type { WebGlCoreCtxTexture } from '../WebGlCoreCtxTexture.js';
28
- import { ShaderEffect } from './effects/ShaderEffect.js';
28
+ import {
29
+ ShaderEffect,
30
+ type ShaderEffectUniform,
31
+ type ShaderEffectValueMap,
32
+ } from './effects/ShaderEffect.js';
29
33
  import type { EffectMap } from '../../../CoreShaderManager.js';
30
- import memize from 'memize';
34
+ import { assertTruthy } from '../../../../utils.js';
35
+
36
+ export interface BaseEffectDesc {
37
+ name: string;
38
+ type: keyof EffectMap;
39
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
+ props: Record<string, any>;
41
+ }
42
+
43
+ export interface EffectDesc<
44
+ T extends { name: string; type: keyof EffectMap } = {
45
+ name: string;
46
+ type: keyof EffectMap;
47
+ },
48
+ > extends BaseEffectDesc {
49
+ name: T['name'];
50
+ type: T['type'];
51
+ props: ExtractProps<EffectMap[T['type']]>;
52
+ }
31
53
 
32
54
  /**
33
55
  * Allows the `keyof EffectMap` to be mapped over and form an discriminated
@@ -42,12 +64,14 @@ import memize from 'memize';
42
64
  * ```
43
65
  * (
44
66
  * {
67
+ * name: 'effect1',
45
68
  * type: 'radius',
46
69
  * props?: {
47
70
  * radius?: number | number[];
48
71
  * }
49
72
  * } |
50
73
  * {
74
+ * name: 'effect2',
51
75
  * type: 'border',
52
76
  * props?: {
53
77
  * width?: number;
@@ -62,43 +86,80 @@ import memize from 'memize';
62
86
  * field.
63
87
  */
64
88
  type MapEffectDescs<T extends keyof EffectMap> = T extends keyof EffectMap
65
- ? SpecificEffectDesc<T>
89
+ ? EffectDesc<{ type: T; name: string }>
66
90
  : never;
67
91
 
68
- export type EffectDesc = MapEffectDescs<keyof EffectMap>;
92
+ export type EffectDescUnion = MapEffectDescs<keyof EffectMap>;
69
93
 
70
94
  export interface DynamicShaderProps
71
95
  extends DimensionsShaderProp,
72
96
  AlphaShaderProp {
73
- effects?: EffectDesc[];
74
- }
75
-
76
- export interface SpecificEffectDesc<
77
- FxType extends keyof EffectMap = keyof EffectMap,
78
- > {
79
- type: FxType;
80
- props?: ExtractProps<EffectMap[FxType]>;
97
+ effects?: EffectDescUnion[];
81
98
  }
82
99
 
83
- const effectCache = new Map<string, EffectDesc[]>();
100
+ const effectCache = new Map<string, BaseEffectDesc[]>();
84
101
  const getResolvedEffect = (
85
- effects: EffectDesc[] | undefined,
86
- effectContructors: Partial<EffectMap> | undefined,
87
- ): EffectDesc[] => {
102
+ effects: BaseEffectDesc[],
103
+ effectContructors: Partial<EffectMap>,
104
+ ): BaseEffectDesc[] => {
88
105
  const key = JSON.stringify(effects);
89
106
  if (effectCache.has(key)) {
90
107
  return effectCache.get(key)!;
91
108
  }
109
+ effects = effects ?? [];
110
+ const resolvedEffects = [];
111
+ const effectsLength = effects.length;
112
+ let i = 0;
113
+ for (; i < effectsLength; i++) {
114
+ const { name, type, props } = effects[i] as BaseEffectDesc;
115
+ const resolvedEffect = {
116
+ name,
117
+ type,
118
+ props: {} as Record<string, any>,
119
+ };
120
+
121
+ const effectConstructor = effectContructors[type]!;
122
+ const defaultPropValues = effectConstructor.resolveDefaults(props);
123
+ const uniforms = effectConstructor.uniforms;
124
+ const uniformKeys = Object.keys(uniforms);
125
+ const uniformsLength = uniformKeys.length;
126
+ let j = 0;
127
+ for (; j < uniformsLength; j++) {
128
+ const key = uniformKeys[j]!;
129
+ const uniform = uniforms[key]!;
130
+
131
+ const result: ShaderEffectValueMap = {
132
+ value: defaultPropValues[key] as ShaderEffectUniform['value'],
133
+ programValue: undefined,
134
+ updateOnBind: uniform.updateOnBind || false,
135
+ hasValidator: uniform.validator !== undefined,
136
+ hasProgramValueUpdater: uniform.updateProgramValue !== undefined,
137
+ };
138
+
139
+ const validatedValue =
140
+ (result.hasValidator &&
141
+ uniform.validator!(defaultPropValues[key], defaultPropValues)) ||
142
+ defaultPropValues[key];
143
+
144
+ if (defaultPropValues[key] !== validatedValue) {
145
+ result.validatedValue = validatedValue as number | number[];
146
+ }
92
147
 
93
- const value = (effects ?? []).map((effect) => ({
94
- type: effect.type,
95
- props: effectContructors![effect.type]!.resolveDefaults(
96
- (effect.props || {}) as any,
97
- ),
98
- })) as EffectDesc[];
148
+ if (result.hasProgramValueUpdater) {
149
+ uniform.updateProgramValue!(result);
150
+ }
99
151
 
100
- effectCache.set(key, value);
101
- return value;
152
+ if (result.programValue === undefined) {
153
+ result.programValue = result.value as number;
154
+ }
155
+
156
+ resolvedEffect.props[key] = result;
157
+ }
158
+ resolvedEffects.push(resolvedEffect);
159
+ }
160
+
161
+ effectCache.set(key, resolvedEffects);
162
+ return resolvedEffects;
102
163
  };
103
164
 
104
165
  export class DynamicShader extends WebGlCoreShader {
@@ -130,8 +191,6 @@ export class DynamicShader extends WebGlCoreShader {
130
191
  this.effects = shader.effects as Array<
131
192
  InstanceType<EffectMap[keyof EffectMap]>
132
193
  >;
133
-
134
- this.calculateProps = memize(this.calculateProps.bind(this));
135
194
  }
136
195
 
137
196
  override bindTextures(textures: WebGlCoreCtxTexture[]) {
@@ -140,34 +199,29 @@ export class DynamicShader extends WebGlCoreShader {
140
199
  glw.bindTexture(textures[0]!.ctxTexture);
141
200
  }
142
201
 
143
- private calculateProps(effects: EffectDesc[]) {
144
- const regEffects = this.renderer.shManager.getRegisteredEffects();
145
- const results: { name: string; value: unknown }[] = [];
146
- effects?.forEach((eff, index) => {
147
- const effect = this.effects[index]!;
148
- const fxClass = regEffects[effect.name as keyof EffectMap]!;
149
- const props = eff.props ?? {};
150
- const uniInfo = effect.uniformInfo;
151
- Object.keys(props).forEach((p) => {
152
- const fxProp = fxClass.uniforms[p]!;
153
- const propInfo = uniInfo[p]!;
154
- let value = fxProp.validator
155
- ? fxProp.validator(props[p], props)
156
- : props[p];
157
- if (Array.isArray(value)) {
158
- value = new Float32Array(value);
159
- }
160
- results.push({ name: propInfo.name, value });
161
- });
162
- });
163
- return results;
164
- }
165
-
166
202
  protected override bindProps(props: Required<DynamicShaderProps>): void {
167
- const results = this.calculateProps(props.effects);
168
- results.forEach((r) => {
169
- this.setUniform(r.name, r.value);
170
- });
203
+ const effects = props.effects;
204
+ const effectsL = effects.length;
205
+ let i = 0;
206
+ for (; i < effectsL; i++) {
207
+ const effect = effects[i]! as Record<string, any>;
208
+ const uniformInfo = this.effects[i]!.uniformInfo;
209
+ const propKeys = Object.keys(effect.props);
210
+ const propsLength = propKeys.length;
211
+ let j = 0;
212
+ for (; j < propsLength; j++) {
213
+ const key = propKeys[j]!;
214
+ const prop = effect.props[key]!;
215
+ if (prop.updateOnBind === true) {
216
+ const uniform =
217
+ this.renderer.shManager.getRegisteredEffects()[
218
+ effect.type as keyof EffectMap
219
+ ]?.uniforms[key];
220
+ uniform?.updateProgramValue!(effect.props[key], props);
221
+ }
222
+ this.setUniform(uniformInfo[key]!.name, effect.props[key].programValue);
223
+ }
224
+ }
171
225
  }
172
226
 
173
227
  override canBatchShaderProps(
@@ -192,7 +246,8 @@ export class DynamicShader extends WebGlCoreShader {
192
246
  for (const key in effectA.props) {
193
247
  if (
194
248
  (effectB.props && !effectB.props[key]) ||
195
- effectA.props[key] !== effectB.props![key]
249
+ (effectA.props[key] as ShaderEffectValueMap).value !==
250
+ (effectB.props[key] as ShaderEffectValueMap).value
196
251
  ) {
197
252
  return false;
198
253
  }
@@ -396,8 +451,12 @@ export class DynamicShader extends WebGlCoreShader {
396
451
  props: DynamicShaderProps,
397
452
  effectContructors?: Partial<EffectMap>,
398
453
  ): Required<DynamicShaderProps> {
454
+ assertTruthy(effectContructors);
399
455
  return {
400
- effects: getResolvedEffect(props.effects, effectContructors),
456
+ effects: getResolvedEffect(
457
+ props.effects ?? [],
458
+ effectContructors,
459
+ ) as EffectDescUnion[],
401
460
  $dimensions: {
402
461
  width: 0,
403
462
  height: 0,
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { getNormalizedRgbaComponents } from '../../../../lib/utils.js';
19
+ import { updateShaderEffectColor } from './EffectUtils.js';
20
20
  import {
21
21
  ShaderEffect,
22
22
  type DefaultEffectProps,
@@ -69,7 +69,7 @@ export class BorderBottomEffect extends ShaderEffect {
69
69
  },
70
70
  color: {
71
71
  value: 0xffffffff,
72
- validator: (rgba): number[] => getNormalizedRgbaComponents(rgba),
72
+ updateProgramValue: updateShaderEffectColor,
73
73
  method: 'uniform4fv',
74
74
  type: 'vec4',
75
75
  },
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { getNormalizedRgbaComponents } from '../../../../lib/utils.js';
19
+ import { updateShaderEffectColor } from './EffectUtils.js';
20
20
  import {
21
21
  ShaderEffect,
22
22
  type DefaultEffectProps,
@@ -69,7 +69,7 @@ export class BorderEffect extends ShaderEffect {
69
69
  },
70
70
  color: {
71
71
  value: 0xffffffff,
72
- validator: (rgba): number[] => getNormalizedRgbaComponents(rgba),
72
+ updateProgramValue: updateShaderEffectColor,
73
73
  method: 'uniform4fv',
74
74
  type: 'vec4',
75
75
  },
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { getNormalizedRgbaComponents } from '../../../../lib/utils.js';
19
+ import { updateShaderEffectColor } from './EffectUtils.js';
20
20
  import {
21
21
  ShaderEffect,
22
22
  type DefaultEffectProps,
@@ -69,7 +69,7 @@ export class BorderLeftEffect extends ShaderEffect {
69
69
  },
70
70
  color: {
71
71
  value: 0xffffffff,
72
- validator: (rgba): number[] => getNormalizedRgbaComponents(rgba),
72
+ updateProgramValue: updateShaderEffectColor,
73
73
  method: 'uniform4fv',
74
74
  type: 'vec4',
75
75
  },
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { getNormalizedRgbaComponents } from '../../../../lib/utils.js';
19
+ import { updateShaderEffectColor } from './EffectUtils.js';
20
20
  import {
21
21
  ShaderEffect,
22
22
  type DefaultEffectProps,
@@ -69,7 +69,7 @@ export class BorderRightEffect extends ShaderEffect {
69
69
  },
70
70
  color: {
71
71
  value: 0xffffffff,
72
- validator: (rgba): number[] => getNormalizedRgbaComponents(rgba),
72
+ updateProgramValue: updateShaderEffectColor,
73
73
  method: 'uniform4fv',
74
74
  type: 'vec4',
75
75
  },
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { getNormalizedRgbaComponents } from '../../../../lib/utils.js';
19
+ import { updateShaderEffectColor } from './EffectUtils.js';
20
20
  import {
21
21
  ShaderEffect,
22
22
  type DefaultEffectProps,
@@ -69,7 +69,7 @@ export class BorderTopEffect extends ShaderEffect {
69
69
  },
70
70
  color: {
71
71
  value: 0xffffffff,
72
- validator: (rgba): number[] => getNormalizedRgbaComponents(rgba),
72
+ updateProgramValue: updateShaderEffectColor,
73
73
  method: 'uniform4fv',
74
74
  type: 'vec4',
75
75
  },
@@ -1,3 +1,6 @@
1
+ import type { DynamicShaderProps } from '../DynamicShader.js';
2
+ import type { ShaderEffectValueMap } from './ShaderEffect.js';
3
+
1
4
  /*
2
5
  * If not stated otherwise in this file or this component's LICENSE file the
3
6
  * following copyright and licenses apply:
@@ -18,9 +21,11 @@
18
21
  */
19
22
  export const colorToFloat32Array = (argb: number) => {
20
23
  const col = getRgbaComponentsNormalized(argb);
21
- col[0] *= col[3]!;
22
- col[1] *= col[3]!;
23
- col[2] *= col[3]!;
24
+ /* eslint-disable @typescript-eslint/no-non-null-assertion -- getRgbaComponentsNormalized has a constant array size */
25
+ col[0]! *= col[3]!;
26
+ col[1]! *= col[3]!;
27
+ col[2]! *= col[3]!;
28
+ /* eslint-enable */
24
29
  return col;
25
30
  };
26
31
 
@@ -31,3 +36,124 @@ const getRgbaComponentsNormalized = (argb: number): number[] => {
31
36
  const a = (argb / 16777216) | 0;
32
37
  return [r / 255, g / 255, b / 255, a / 255];
33
38
  };
39
+
40
+ export const updateShaderEffectColor = (values: ShaderEffectValueMap) => {
41
+ if (values.programValue === undefined) {
42
+ values.programValue = new Float32Array(4);
43
+ }
44
+ const rgba = values.value as number;
45
+ const floatArray = values.programValue as Float32Array;
46
+ floatArray[0] = (rgba >>> 24) / 255;
47
+ floatArray[1] = ((rgba >>> 16) & 0xff) / 255;
48
+ floatArray[2] = ((rgba >>> 8) & 0xff) / 255;
49
+ floatArray[3] = (rgba & 0xff) / 255;
50
+ };
51
+
52
+ export const updateFloat32ArrayLength2 = (values: ShaderEffectValueMap) => {
53
+ const validatedValue = (values.validatedValue || values.value) as number[];
54
+ if (values.programValue instanceof Float32Array) {
55
+ const floatArray = values.programValue;
56
+ floatArray[0] = validatedValue[0]!;
57
+ floatArray[1] = validatedValue[1]!;
58
+ } else {
59
+ values.programValue = new Float32Array(validatedValue);
60
+ }
61
+ };
62
+
63
+ export const updateFloat32ArrayLength4 = (values: ShaderEffectValueMap) => {
64
+ const validatedValue = (values.validatedValue || values.value) as number[];
65
+ if (values.programValue instanceof Float32Array) {
66
+ const floatArray = values.programValue;
67
+ floatArray[0] = validatedValue[0]!;
68
+ floatArray[1] = validatedValue[1]!;
69
+ floatArray[2] = validatedValue[1]!;
70
+ floatArray[3] = validatedValue[1]!;
71
+ } else {
72
+ values.programValue = new Float32Array(validatedValue);
73
+ }
74
+ };
75
+
76
+ export const updateFloat32ArrayLengthN = (values: ShaderEffectValueMap) => {
77
+ const validatedValue = (values.validatedValue || values.value) as number[];
78
+ if (values.programValue instanceof Float32Array) {
79
+ const len = validatedValue.length;
80
+ const programValue = values.programValue;
81
+ for (let i = 0; i < len; i++) {
82
+ programValue[i] = validatedValue[i]!;
83
+ }
84
+ } else {
85
+ values.programValue = new Float32Array(validatedValue);
86
+ }
87
+ };
88
+
89
+ export const validateArrayLength4 = (value: number | number[]): number[] => {
90
+ const isArray = Array.isArray(value);
91
+ if (!isArray) {
92
+ return [value, value, value, value];
93
+ } else if (isArray && value.length === 4) {
94
+ return value;
95
+ } else if (isArray && value.length === 2) {
96
+ return [value[0]!, value[1]!, value[0]!, value[1]!];
97
+ } else if (isArray && value.length === 3) {
98
+ return [value[0]!, value[1]!, value[2]!, value[0]!];
99
+ }
100
+ return [value[0]!, value[0]!, value[0]!, value[0]!];
101
+ };
102
+
103
+ export const updateWebSafeRadius = (
104
+ values: ShaderEffectValueMap,
105
+ shaderProps?: DynamicShaderProps,
106
+ ) => {
107
+ if (values.programValue === undefined) {
108
+ values.programValue = new Float32Array(4);
109
+ }
110
+ const programValue = values.programValue as Float32Array;
111
+ const validatedValue = (values.validatedValue || values.value) as number[];
112
+ if (shaderProps === undefined && values.$dimensions === undefined) {
113
+ programValue[0] = validatedValue[0]!;
114
+ programValue[1] = validatedValue[1]!;
115
+ programValue[2] = validatedValue[2]!;
116
+ programValue[3] = validatedValue[3]!;
117
+ return;
118
+ }
119
+
120
+ let storedDimensions = values.$dimensions;
121
+ if (shaderProps !== undefined) {
122
+ const { $dimensions } = shaderProps;
123
+ if (
124
+ storedDimensions !== undefined &&
125
+ (storedDimensions.width === $dimensions!.width ||
126
+ storedDimensions.height === $dimensions!.height)
127
+ ) {
128
+ return;
129
+ }
130
+ if (storedDimensions === undefined) {
131
+ storedDimensions = {
132
+ width: $dimensions?.width as number,
133
+ height: $dimensions?.height as number,
134
+ };
135
+ values.$dimensions = storedDimensions;
136
+ }
137
+ }
138
+
139
+ const { width, height } = storedDimensions!;
140
+ const [r0, r1, r2, r3] = validatedValue;
141
+ const factor = Math.min(
142
+ Math.min(
143
+ Math.min(
144
+ width / Math.max(width, r0! + r1!),
145
+ width / Math.max(width, r2! + r3!),
146
+ ),
147
+ Math.min(
148
+ height / Math.max(height, r0! + r2!),
149
+ height / Math.max(height, r1! + r3!),
150
+ ),
151
+ ),
152
+ 1,
153
+ );
154
+
155
+ programValue[0] = r0! * factor;
156
+ programValue[1] = r1! * factor;
157
+ programValue[2] = r2! * factor;
158
+ programValue[3] = r3! * factor;
159
+ };