@lightningjs/renderer 0.9.4 → 1.0.0-rc.1

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 +42 -3
  3. package/dist/exports/index.js +37 -3
  4. package/dist/exports/index.js.map +1 -1
  5. package/dist/src/core/CoreNode.d.ts +461 -46
  6. package/dist/src/core/CoreNode.js +170 -104
  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 +137 -43
  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 +2 -43
  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 +69 -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 +9 -14
  118. package/dist/src/main-api/DynamicShaderController.js +21 -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 +71 -25
  127. package/dist/src/main-api/Renderer.js +80 -109
  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 +62 -3
  137. package/package.json +8 -7
  138. package/src/core/CoreNode.test.ts +93 -0
  139. package/src/core/CoreNode.ts +675 -188
  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 +194 -67
  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 +94 -92
  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 +80 -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 +104 -0
  186. package/src/main-api/INode.ts +57 -479
  187. package/src/main-api/Inspector.ts +37 -39
  188. package/src/main-api/Renderer.ts +586 -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
  }
@@ -16,7 +16,6 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import type { ExtractProps } from '../../../CoreTextureManager.js';
20
19
  import type { WebGlCoreRenderer } from '../WebGlCoreRenderer.js';
21
20
  import {
22
21
  WebGlCoreShader,
@@ -25,80 +24,85 @@ import {
25
24
  } from '../WebGlCoreShader.js';
26
25
  import type { UniformInfo } from '../internal/ShaderUtils.js';
27
26
  import type { WebGlCoreCtxTexture } from '../WebGlCoreCtxTexture.js';
28
- import { ShaderEffect } from './effects/ShaderEffect.js';
27
+ import {
28
+ ShaderEffect,
29
+ type EffectDescUnion,
30
+ type ShaderEffectUniform,
31
+ type ShaderEffectValueMap,
32
+ type BaseEffectDesc,
33
+ } from './effects/ShaderEffect.js';
29
34
  import type { EffectMap } from '../../../CoreShaderManager.js';
30
- import memize from 'memize';
31
-
32
- /**
33
- * Allows the `keyof EffectMap` to be mapped over and form an discriminated
34
- * union of all the EffectDescs structures individually.
35
- *
36
- * @remarks
37
- * When used like the following:
38
- * ```
39
- * MapEffectDescs<keyof EffectMap>[]
40
- * ```
41
- * The resultant type will be a discriminated union like so:
42
- * ```
43
- * (
44
- * {
45
- * type: 'radius',
46
- * props?: {
47
- * radius?: number | number[];
48
- * }
49
- * } |
50
- * {
51
- * type: 'border',
52
- * props?: {
53
- * width?: number;
54
- * color?: number;
55
- * }
56
- * } |
57
- * // ...
58
- * )[]
59
- * ```
60
- * Which means TypeScript will now base its type checking on the `type` field
61
- * and will know exactly what the `props` field should be based on the `type`
62
- * field.
63
- */
64
- type MapEffectDescs<T extends keyof EffectMap> = T extends keyof EffectMap
65
- ? SpecificEffectDesc<T>
66
- : never;
67
-
68
- export type EffectDesc = MapEffectDescs<keyof EffectMap>;
35
+ import { assertTruthy } from '../../../../utils.js';
69
36
 
70
37
  export interface DynamicShaderProps
71
38
  extends DimensionsShaderProp,
72
39
  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]>;
40
+ effects?: EffectDescUnion[];
81
41
  }
82
42
 
83
- const effectCache = new Map<string, EffectDesc[]>();
43
+ const effectCache = new Map<string, BaseEffectDesc[]>();
84
44
  const getResolvedEffect = (
85
- effects: EffectDesc[] | undefined,
86
- effectContructors: Partial<EffectMap> | undefined,
87
- ): EffectDesc[] => {
45
+ effects: BaseEffectDesc[],
46
+ effectContructors: Partial<EffectMap>,
47
+ ): BaseEffectDesc[] => {
88
48
  const key = JSON.stringify(effects);
89
49
  if (effectCache.has(key)) {
90
50
  return effectCache.get(key)!;
91
51
  }
52
+ effects = effects ?? [];
53
+ const resolvedEffects = [];
54
+ const effectsLength = effects.length;
55
+ let i = 0;
56
+ for (; i < effectsLength; i++) {
57
+ const { name, type, props } = effects[i] as BaseEffectDesc;
58
+ const resolvedEffect = {
59
+ name,
60
+ type,
61
+ props: {} as Record<string, any>,
62
+ };
63
+
64
+ const effectConstructor = effectContructors[type]!;
65
+ const defaultPropValues = effectConstructor.resolveDefaults(props);
66
+ const uniforms = effectConstructor.uniforms;
67
+ const uniformKeys = Object.keys(uniforms);
68
+ const uniformsLength = uniformKeys.length;
69
+ let j = 0;
70
+ for (; j < uniformsLength; j++) {
71
+ const key = uniformKeys[j]!;
72
+ const uniform = uniforms[key]!;
73
+
74
+ const result: ShaderEffectValueMap = {
75
+ value: defaultPropValues[key] as ShaderEffectUniform['value'],
76
+ programValue: undefined,
77
+ updateOnBind: uniform.updateOnBind || false,
78
+ hasValidator: uniform.validator !== undefined,
79
+ hasProgramValueUpdater: uniform.updateProgramValue !== undefined,
80
+ };
81
+
82
+ const validatedValue =
83
+ (result.hasValidator &&
84
+ uniform.validator!(defaultPropValues[key], defaultPropValues)) ||
85
+ defaultPropValues[key];
86
+
87
+ if (defaultPropValues[key] !== validatedValue) {
88
+ result.validatedValue = validatedValue as number | number[];
89
+ }
92
90
 
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[];
91
+ if (result.hasProgramValueUpdater) {
92
+ uniform.updateProgramValue!(result);
93
+ }
99
94
 
100
- effectCache.set(key, value);
101
- return value;
95
+ if (result.programValue === undefined) {
96
+ result.programValue = result.value as number;
97
+ }
98
+
99
+ resolvedEffect.props[key] = result;
100
+ }
101
+ resolvedEffects.push(resolvedEffect);
102
+ }
103
+
104
+ effectCache.set(key, resolvedEffects);
105
+ return resolvedEffects;
102
106
  };
103
107
 
104
108
  export class DynamicShader extends WebGlCoreShader {
@@ -130,8 +134,6 @@ export class DynamicShader extends WebGlCoreShader {
130
134
  this.effects = shader.effects as Array<
131
135
  InstanceType<EffectMap[keyof EffectMap]>
132
136
  >;
133
-
134
- this.calculateProps = memize(this.calculateProps.bind(this));
135
137
  }
136
138
 
137
139
  override bindTextures(textures: WebGlCoreCtxTexture[]) {
@@ -140,34 +142,29 @@ export class DynamicShader extends WebGlCoreShader {
140
142
  glw.bindTexture(textures[0]!.ctxTexture);
141
143
  }
142
144
 
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
145
  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
- });
146
+ const effects = props.effects;
147
+ const effectsL = effects.length;
148
+ let i = 0;
149
+ for (; i < effectsL; i++) {
150
+ const effect = effects[i]! as Record<string, any>;
151
+ const uniformInfo = this.effects[i]!.uniformInfo;
152
+ const propKeys = Object.keys(effect.props);
153
+ const propsLength = propKeys.length;
154
+ let j = 0;
155
+ for (; j < propsLength; j++) {
156
+ const key = propKeys[j]!;
157
+ const prop = effect.props[key]!;
158
+ if (prop.updateOnBind === true) {
159
+ const uniform =
160
+ this.renderer.shManager.getRegisteredEffects()[
161
+ effect.type as keyof EffectMap
162
+ ]?.uniforms[key];
163
+ uniform?.updateProgramValue!(effect.props[key], props);
164
+ }
165
+ this.setUniform(uniformInfo[key]!.name, effect.props[key].programValue);
166
+ }
167
+ }
171
168
  }
172
169
 
173
170
  override canBatchShaderProps(
@@ -192,7 +189,8 @@ export class DynamicShader extends WebGlCoreShader {
192
189
  for (const key in effectA.props) {
193
190
  if (
194
191
  (effectB.props && !effectB.props[key]) ||
195
- effectA.props[key] !== effectB.props![key]
192
+ (effectA.props[key] as ShaderEffectValueMap).value !==
193
+ (effectB.props[key] as ShaderEffectValueMap).value
196
194
  ) {
197
195
  return false;
198
196
  }
@@ -396,8 +394,12 @@ export class DynamicShader extends WebGlCoreShader {
396
394
  props: DynamicShaderProps,
397
395
  effectContructors?: Partial<EffectMap>,
398
396
  ): Required<DynamicShaderProps> {
397
+ assertTruthy(effectContructors);
399
398
  return {
400
- effects: getResolvedEffect(props.effects, effectContructors),
399
+ effects: getResolvedEffect(
400
+ props.effects ?? [],
401
+ effectContructors,
402
+ ) as EffectDescUnion[],
401
403
  $dimensions: {
402
404
  width: 0,
403
405
  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
+ };