@lightningjs/renderer 0.9.3 → 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 (295) 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 +19 -8
  9. package/dist/src/core/CoreShaderManager.js +21 -21
  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.d.ts +1 -0
  29. package/dist/src/core/lib/utils.js +3 -2
  30. package/dist/src/core/lib/utils.js.map +1 -1
  31. package/dist/src/core/platform.js +7 -1
  32. package/dist/src/core/platform.js.map +1 -1
  33. package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
  34. package/dist/src/core/renderers/CoreContextTexture.js +7 -1
  35. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  36. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
  37. package/dist/src/core/renderers/CoreRenderer.js +0 -1
  38. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  39. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
  40. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
  41. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
  43. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
  44. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
  49. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/newShader/abcMock.js +2 -0
  54. package/dist/src/core/renderers/webgl/newShader/abcMock.js.map +1 -0
  55. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
  56. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
  57. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
  59. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
  60. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
  61. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
  63. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
  65. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
  66. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
  67. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
  68. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
  69. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
  70. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  71. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
  72. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
  74. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
  76. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
  77. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
  78. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  79. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
  80. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
  82. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
  83. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
  84. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
  85. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  87. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
  88. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  89. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
  90. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
  91. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  92. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
  93. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  94. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
  95. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
  96. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  97. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
  98. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
  99. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
  101. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  102. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
  103. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  104. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
  105. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  106. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  107. package/dist/src/core/textures/ColorTexture.js +1 -1
  108. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  109. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  110. package/dist/src/core/textures/NoiseTexture.js +3 -0
  111. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  112. package/dist/src/core/textures/SubTexture.d.ts +2 -2
  113. package/dist/src/core/textures/SubTexture.js +5 -1
  114. package/dist/src/core/textures/SubTexture.js.map +1 -1
  115. package/dist/src/core/textures/Texture.d.ts +23 -2
  116. package/dist/src/core/textures/Texture.js +32 -3
  117. package/dist/src/core/textures/Texture.js.map +1 -1
  118. package/dist/src/core/utils.d.ts +7 -0
  119. package/dist/src/core/utils.js +12 -10
  120. package/dist/src/core/utils.js.map +1 -1
  121. package/dist/src/effectsMock.d.ts +13 -0
  122. package/dist/src/effectsMock.js +62 -0
  123. package/dist/src/effectsMock.js.map +1 -0
  124. package/dist/src/main-api/DynamicShaderController.d.ts +28 -0
  125. package/dist/src/main-api/DynamicShaderController.js +55 -0
  126. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  127. package/dist/src/main-api/INode.d.ts +43 -463
  128. package/dist/src/main-api/INode.js +1 -19
  129. package/dist/src/main-api/INode.js.map +1 -1
  130. package/dist/src/main-api/Inspector.d.ts +10 -10
  131. package/dist/src/main-api/Inspector.js +18 -15
  132. package/dist/src/main-api/Inspector.js.map +1 -1
  133. package/dist/src/main-api/Renderer.d.ts +28 -24
  134. package/dist/src/main-api/Renderer.js +22 -103
  135. package/dist/src/main-api/Renderer.js.map +1 -1
  136. package/dist/src/main-api/ShaderController.d.ts +31 -0
  137. package/dist/src/main-api/ShaderController.js +37 -0
  138. package/dist/src/main-api/ShaderController.js.map +1 -0
  139. package/dist/src/test.js +4 -0
  140. package/dist/src/test.js.map +1 -0
  141. package/dist/src/utils.d.ts +1 -0
  142. package/dist/src/utils.js +7 -0
  143. package/dist/src/utils.js.map +1 -1
  144. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  145. package/exports/index.ts +60 -3
  146. package/package.json +8 -7
  147. package/src/core/CoreNode.test.ts +93 -0
  148. package/src/core/CoreNode.ts +675 -187
  149. package/src/core/CoreShaderManager.ts +63 -31
  150. package/src/core/CoreTextNode.ts +41 -9
  151. package/src/core/CoreTextureManager.ts +55 -175
  152. package/src/core/Stage.ts +199 -43
  153. package/src/core/TextureMemoryManager.ts +231 -22
  154. package/src/core/animations/CoreAnimation.ts +193 -68
  155. package/src/core/lib/ImageWorker.ts +79 -52
  156. package/src/core/lib/utils.ts +5 -2
  157. package/src/core/platform.ts +8 -1
  158. package/src/core/renderers/CoreContextTexture.ts +9 -2
  159. package/src/core/renderers/CoreRenderer.ts +5 -2
  160. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
  161. package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
  162. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
  163. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
  164. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
  165. package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
  166. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
  167. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
  168. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
  169. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
  170. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
  171. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
  172. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
  173. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
  174. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
  175. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
  176. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
  177. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
  178. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
  179. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
  180. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
  181. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
  182. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
  183. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
  184. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
  185. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
  186. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
  187. package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
  188. package/src/core/textures/ColorTexture.ts +1 -1
  189. package/src/core/textures/ImageTexture.ts +1 -1
  190. package/src/core/textures/NoiseTexture.ts +4 -1
  191. package/src/core/textures/SubTexture.ts +7 -7
  192. package/src/core/textures/Texture.ts +46 -3
  193. package/src/core/utils.ts +12 -11
  194. package/src/main-api/DynamicShaderController.ts +97 -0
  195. package/src/main-api/INode.ts +56 -479
  196. package/src/main-api/Inspector.ts +37 -39
  197. package/src/main-api/Renderer.ts +543 -0
  198. package/src/main-api/ShaderController.ts +81 -0
  199. package/src/main-api/utils.ts +45 -0
  200. package/src/utils.ts +8 -0
  201. package/dist/exports/core-api.d.ts +0 -74
  202. package/dist/exports/core-api.js +0 -96
  203. package/dist/exports/core-api.js.map +0 -1
  204. package/dist/exports/main-api.d.ts +0 -30
  205. package/dist/exports/main-api.js +0 -45
  206. package/dist/exports/main-api.js.map +0 -1
  207. package/dist/src/core/CoreExtension.d.ts +0 -12
  208. package/dist/src/core/CoreExtension.js +0 -29
  209. package/dist/src/core/CoreExtension.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -36
  211. package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
  212. package/dist/src/main-api/ICoreDriver.d.ts +0 -24
  213. package/dist/src/main-api/ICoreDriver.js +0 -20
  214. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  215. package/dist/src/main-api/RendererMain.d.ts +0 -378
  216. package/dist/src/main-api/RendererMain.js +0 -367
  217. package/dist/src/main-api/RendererMain.js.map +0 -1
  218. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  219. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  220. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  221. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  222. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  223. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  224. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  225. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  226. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  227. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
  228. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
  229. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  230. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
  231. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
  232. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  233. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  234. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
  235. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  236. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
  237. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
  238. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  239. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
  240. package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
  241. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  242. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  243. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
  244. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  245. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
  246. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
  247. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  248. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
  249. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
  250. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  251. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
  252. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
  253. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  254. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  255. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  256. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  257. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  258. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  259. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  260. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  261. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
  262. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  263. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  264. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
  265. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  266. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
  267. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  268. package/dist/src/render-drivers/utils.d.ts +0 -12
  269. package/dist/src/render-drivers/utils.js +0 -74
  270. package/dist/src/render-drivers/utils.js.map +0 -1
  271. package/exports/core-api.ts +0 -102
  272. package/exports/main-api.ts +0 -60
  273. package/src/core/CoreExtension.ts +0 -32
  274. package/src/main-api/ICoreDriver.ts +0 -68
  275. package/src/main-api/RendererMain.ts +0 -685
  276. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
  277. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
  278. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
  279. package/src/render-drivers/main/MainCoreDriver.ts +0 -159
  280. package/src/render-drivers/main/MainOnlyNode.ts +0 -553
  281. package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
  282. package/src/render-drivers/threadx/NodeStruct.ts +0 -320
  283. package/src/render-drivers/threadx/SharedNode.ts +0 -101
  284. package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
  285. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
  286. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
  287. package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
  288. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
  289. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
  290. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
  291. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
  292. package/src/render-drivers/threadx/worker/renderer.ts +0 -156
  293. package/src/render-drivers/utils.ts +0 -102
  294. /package/dist/src/core/renderers/webgl/newShader/{effectsMock.d.ts → abcMock.d.ts} +0 -0
  295. /package/dist/src/{render-drivers/threadx/worker/renderer.d.ts → test.d.ts} +0 -0
@@ -60,9 +60,17 @@ import {
60
60
  RadialProgressEffect,
61
61
  type RadialProgressEffectProps,
62
62
  } from './renderers/webgl/shaders/effects/RadialProgressEffect.js';
63
- import { HolePunchEffect } from './renderers/webgl/shaders/effects/HolePunchEffect.js';
63
+ import {
64
+ HolePunchEffect,
65
+ type HolePunchEffectProps,
66
+ } from './renderers/webgl/shaders/effects/HolePunchEffect.js';
64
67
  import { WebGlCoreShader } from './renderers/webgl/WebGlCoreShader.js';
65
68
  import { UnsupportedShader } from './renderers/canvas/shaders/UnsupportedShader.js';
69
+ import { ShaderController } from '../main-api/ShaderController.js';
70
+ import {
71
+ DynamicShaderController,
72
+ type DynamicEffects,
73
+ } from '../main-api/DynamicShaderController.js';
66
74
 
67
75
  export type { FadeOutEffectProps };
68
76
  export type { LinearGradientEffectProps };
@@ -70,6 +78,7 @@ export type { RadialGradientEffectProps };
70
78
  export type { GrayscaleEffectProps };
71
79
  export type { GlitchEffectProps };
72
80
  export type { RadialProgressEffectProps };
81
+ export type { HolePunchEffectProps };
73
82
 
74
83
  export interface ShaderMap {
75
84
  DefaultShader: typeof DefaultShader;
@@ -80,11 +89,6 @@ export interface ShaderMap {
80
89
  UnsupportedShader: typeof UnsupportedShader;
81
90
  }
82
91
 
83
- export type ShaderNode<Type extends keyof ShaderMap> = {
84
- shader: InstanceType<ShaderMap[Type]>;
85
- props: Record<string, unknown>;
86
- };
87
-
88
92
  export interface EffectMap {
89
93
  radius: typeof RadiusEffect;
90
94
  border: typeof BorderEffect;
@@ -107,7 +111,8 @@ export type EffectProps =
107
111
  | RadialGradientEffectProps
108
112
  | GrayscaleEffectProps
109
113
  | GlitchEffectProps
110
- | RadialProgressEffectProps;
114
+ | RadialProgressEffectProps
115
+ | HolePunchEffectProps;
111
116
 
112
117
  export class CoreShaderManager {
113
118
  protected shCache: Map<string, InstanceType<ShaderMap[keyof ShaderMap]>> =
@@ -161,10 +166,17 @@ export class CoreShaderManager {
161
166
  return this.shConstructors;
162
167
  }
163
168
 
169
+ /**
170
+ * Loads a shader (if not already loaded) and returns a controller for it.
171
+ *
172
+ * @param shType
173
+ * @param props
174
+ * @returns
175
+ */
164
176
  loadShader<Type extends keyof ShaderMap>(
165
177
  shType: Type,
166
178
  props?: ExtractProps<ShaderMap[Type]>,
167
- ): ShaderNode<Type> {
179
+ ): ShaderController<Type> {
168
180
  if (!this.renderer) {
169
181
  throw new Error(`Renderer is not been defined`);
170
182
  }
@@ -177,14 +189,17 @@ export class CoreShaderManager {
177
189
  this.renderer.mode === 'canvas' &&
178
190
  ShaderClass.prototype instanceof WebGlCoreShader
179
191
  ) {
180
- return {
181
- shader: new UnsupportedShader(shType) as InstanceType<ShaderMap[Type]>,
182
- props: props as Record<string, unknown>,
183
- };
192
+ return this._createShaderCtr(
193
+ shType,
194
+ new UnsupportedShader(shType) as InstanceType<ShaderMap[Type]>,
195
+ props as ExtractProps<ShaderMap[Type]>,
196
+ );
184
197
  }
185
198
 
186
199
  if (shType === 'DynamicShader') {
187
- return this.loadDynamicShader(props!);
200
+ return this.loadDynamicShader(
201
+ props!,
202
+ ) as unknown as ShaderController<Type>;
188
203
  }
189
204
 
190
205
  const resolvedProps = ShaderClass.resolveDefaults(
@@ -193,10 +208,11 @@ export class CoreShaderManager {
193
208
  const cacheKey =
194
209
  ShaderClass.makeCacheKey(resolvedProps) || ShaderClass.name;
195
210
  if (cacheKey && this.shCache.has(cacheKey)) {
196
- return {
197
- shader: this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
198
- props: resolvedProps,
199
- };
211
+ return this._createShaderCtr(
212
+ shType,
213
+ this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
214
+ resolvedProps as ExtractProps<ShaderMap[Type]>,
215
+ );
200
216
  }
201
217
 
202
218
  // @ts-expect-error ShaderClass WILL accept a Renderer
@@ -206,15 +222,16 @@ export class CoreShaderManager {
206
222
  if (cacheKey) {
207
223
  this.shCache.set(cacheKey, shader);
208
224
  }
209
- return {
225
+ return this._createShaderCtr(
226
+ shType,
210
227
  shader,
211
- props: resolvedProps,
212
- };
228
+ resolvedProps as ExtractProps<ShaderMap[Type]>,
229
+ );
213
230
  }
214
231
 
215
- loadDynamicShader<Type extends keyof ShaderMap>(
216
- props: DynamicShaderProps,
217
- ): ShaderNode<Type> {
232
+ loadDynamicShader<
233
+ T extends DynamicEffects<[...{ name: string; type: keyof EffectMap }[]]>,
234
+ >(props: DynamicShaderProps): DynamicShaderController<T> {
218
235
  if (!this.renderer) {
219
236
  throw new Error(`Renderer is not been defined`);
220
237
  }
@@ -227,10 +244,10 @@ export class CoreShaderManager {
227
244
  this.effectConstructors,
228
245
  );
229
246
  if (cacheKey && this.shCache.has(cacheKey)) {
230
- return {
231
- shader: this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
232
- props: resolvedProps,
233
- };
247
+ return this._createDynShaderCtr(
248
+ this.shCache.get(cacheKey) as InstanceType<ShaderMap['DynamicShader']>,
249
+ resolvedProps,
250
+ );
234
251
  }
235
252
  const shader = new DynamicShader(
236
253
  this.renderer as WebGlCoreRenderer,
@@ -240,10 +257,25 @@ export class CoreShaderManager {
240
257
  if (cacheKey) {
241
258
  this.shCache.set(cacheKey, shader);
242
259
  }
243
- return {
244
- shader: shader as InstanceType<ShaderMap[Type]>,
245
- props: resolvedProps,
246
- };
260
+
261
+ return this._createDynShaderCtr(shader, resolvedProps);
262
+ }
263
+
264
+ private _createShaderCtr<Type extends keyof ShaderMap>(
265
+ type: Type,
266
+ shader: InstanceType<ShaderMap[Type]>,
267
+ props: ExtractProps<ShaderMap[Type]>,
268
+ ): ShaderController<Type> {
269
+ return new ShaderController(type, shader, props, this.renderer.stage);
270
+ }
271
+
272
+ private _createDynShaderCtr<
273
+ T extends DynamicEffects<[...{ name: string; type: keyof EffectMap }[]]>,
274
+ >(
275
+ shader: InstanceType<ShaderMap['DynamicShader']>,
276
+ props: ExtractProps<ShaderMap['DynamicShader']>,
277
+ ): DynamicShaderController<T> {
278
+ return new DynamicShaderController(shader, props, this);
247
279
  }
248
280
 
249
281
  useShader(shader: CoreShader): void {
@@ -32,21 +32,44 @@ import type {
32
32
  NodeTextFailedPayload,
33
33
  NodeTextLoadedPayload,
34
34
  } from '../common/CommonTypes.js';
35
- import type { Rect, RectWithValid } from './lib/utils.js';
35
+ import type { RectWithValid } from './lib/utils.js';
36
36
  import { assertTruthy } from '../utils.js';
37
37
  import { Matrix3d } from './lib/Matrix3d.js';
38
38
 
39
39
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
40
- text: string;
40
+ /**
41
+ * Force Text Node to use a specific Text Renderer
42
+ *
43
+ * @remarks
44
+ * By default, Text Nodes resolve the Text Renderer to use based on the font
45
+ * that is matched using the font family and other font selection properties.
46
+ *
47
+ * If two fonts supported by two separate Text Renderers are matched setting
48
+ * this override forces the Text Node to resolve to the Text Renderer defined
49
+ * here.
50
+ *
51
+ * @default null
52
+ */
41
53
  textRendererOverride: keyof TextRendererMap | null;
42
54
  }
43
55
 
44
- type ICoreTextNode = Omit<
45
- CoreTextNodeProps,
46
- 'texture' | 'textureOptions' | 'shader' | 'shaderProps'
47
- >;
48
-
49
- export class CoreTextNode extends CoreNode implements ICoreTextNode {
56
+ /**
57
+ * An CoreNode in the Renderer scene graph that renders text.
58
+ *
59
+ * @remarks
60
+ * A Text Node is the second graphical building block of the Renderer scene
61
+ * graph. It renders text using a specific text renderer that is automatically
62
+ * chosen based on the font requested and what type of fonts are installed
63
+ * into an app.
64
+ *
65
+ * The text renderer can be overridden by setting the `textRendererOverride`
66
+ *
67
+ * The `texture` and `shader` properties are managed by loaded text renderer and
68
+ * should not be set directly.
69
+ *
70
+ * For non-text rendering, see {@link CoreNode}.
71
+ */
72
+ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
50
73
  textRenderer: TextRenderer;
51
74
  trState: TextRendererState;
52
75
  private _textRendererOverride: CoreTextNodeProps['textRendererOverride'] =
@@ -356,6 +379,15 @@ export class CoreTextNode extends CoreNode implements ICoreTextNode {
356
379
  override renderQuads(renderer: CoreRenderer) {
357
380
  assertTruthy(this.globalTransform);
358
381
 
382
+ // If the text renderer does not support rendering quads, fallback to the
383
+ // default renderQuads method
384
+ if (!this.textRenderer.renderQuads) {
385
+ super.renderQuads(renderer);
386
+ return;
387
+ }
388
+
389
+ // If the text renderer does support rendering quads, use it...
390
+
359
391
  // Prevent quad rendering if parent has a render texture
360
392
  // and this node is not the render texture
361
393
  if (this.parentHasRenderTexture) {
@@ -410,7 +442,7 @@ export class CoreTextNode extends CoreNode implements ICoreTextNode {
410
442
  this._textRendererOverride,
411
443
  );
412
444
 
413
- const textRendererState = resolvedTextRenderer.createState(props);
445
+ const textRendererState = resolvedTextRenderer.createState(props, this);
414
446
 
415
447
  textRendererState.emitter.on('loaded', this.onTextLoaded);
416
448
  textRendererState.emitter.on('failed', this.onTextFailed);
@@ -17,9 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import { assertTruthy } from '../utils.js';
21
20
  import { ImageWorkerManager } from './lib/ImageWorker.js';
22
- import type { CoreContextTexture } from './renderers/CoreContextTexture.js';
23
21
  import type { CoreRenderer } from './renderers/CoreRenderer.js';
24
22
  import { ColorTexture } from './textures/ColorTexture.js';
25
23
  import { ImageTexture } from './textures/ImageTexture.js';
@@ -29,14 +27,14 @@ import { RenderTexture } from './textures/RenderTexture.js';
29
27
  import type { Texture } from './textures/Texture.js';
30
28
 
31
29
  /**
32
- * Augmentable map of texture types
30
+ * Augmentable map of texture class types
33
31
  *
34
32
  * @remarks
35
33
  * This interface can be augmented by other modules/apps to add additional
36
34
  * texture types. The ones included directly here are the ones that are
37
35
  * included in the core library.
38
36
  */
39
- export interface TextureMap {
37
+ export interface TextureTypeMap {
40
38
  ColorTexture: typeof ColorTexture;
41
39
  ImageTexture: typeof ImageTexture;
42
40
  NoiseTexture: typeof NoiseTexture;
@@ -44,6 +42,13 @@ export interface TextureMap {
44
42
  RenderTexture: typeof RenderTexture;
45
43
  }
46
44
 
45
+ /**
46
+ * Map of texture instance types
47
+ */
48
+ export type TextureMap = {
49
+ [K in keyof TextureTypeMap]: InstanceType<TextureTypeMap[K]>;
50
+ };
51
+
47
52
  export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
48
53
  ? Props
49
54
  : never;
@@ -54,7 +59,6 @@ export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
54
59
  */
55
60
  export interface TextureManagerDebugInfo {
56
61
  keyCacheSize: number;
57
- idCacheSize: number;
58
62
  }
59
63
 
60
64
  export type ResizeModeOptions =
@@ -117,35 +121,6 @@ export interface TextureOptions {
117
121
  */
118
122
  preload?: boolean;
119
123
 
120
- /**
121
- * ID to use for this texture.
122
- *
123
- * @remarks
124
- * This is for internal use only as an optimization.
125
- *
126
- * @privateRemarks
127
- * This is used to avoid having to look up the texture in the texture cache
128
- * by its cache key. Theoretically this should be faster.
129
- *
130
- * @defaultValue Automatically generated
131
- */
132
- id?: number;
133
-
134
- /**
135
- * Cache key to use for this texture
136
- *
137
- * @remarks
138
- * If this is set, the texture will be cached using this key. If a texture
139
- * with the same key is already cached, it will be returned instead of
140
- * creating a new texture.
141
- *
142
- * If this is not set (undefined), it will be automatically generated via
143
- * the specified `Texture`'s `makeCacheKey()` method.
144
- *
145
- * @defaultValue Automatically generated via `Texture.makeCacheKey()`
146
- */
147
- cacheKey?: string | false;
148
-
149
124
  /**
150
125
  * Flip the texture horizontally when rendering
151
126
  *
@@ -172,20 +147,20 @@ export interface TextureOptions {
172
147
 
173
148
  export class CoreTextureManager {
174
149
  /**
175
- * Amount of used memory defined in pixels
150
+ * Map of textures by cache key
176
151
  */
177
- usedMemory = 0;
152
+ keyCache: Map<string, Texture> = new Map();
178
153
 
179
- txConstructors: Partial<TextureMap> = {};
154
+ /**
155
+ * Map of cache keys by texture
156
+ */
157
+ inverseKeyCache: WeakMap<Texture, string> = new WeakMap();
180
158
 
181
- textureKeyCache: Map<string, Texture> = new Map();
182
- textureIdCache: Map<number, Texture> = new Map();
159
+ /**
160
+ * Map of texture constructors by their type name
161
+ */
162
+ txConstructors: Partial<TextureTypeMap> = {};
183
163
 
184
- ctxTextureCache: WeakMap<Texture, CoreContextTexture> = new WeakMap();
185
- textureRefCountMap: WeakMap<
186
- Texture,
187
- { cacheKey: string | false; count: number }
188
- > = new WeakMap();
189
164
  imageWorkerManager: ImageWorkerManager | null = null;
190
165
  hasCreateImageBitmap = !!self.createImageBitmap;
191
166
  hasWorker = !!self.Worker;
@@ -198,6 +173,17 @@ export class CoreTextureManager {
198
173
  */
199
174
  renderer!: CoreRenderer;
200
175
 
176
+ /**
177
+ * The current frame time in milliseconds
178
+ *
179
+ * @remarks
180
+ * This is used to populate the `lastRenderableChangeTime` property of
181
+ * {@link Texture} instances when their renderable state changes.
182
+ *
183
+ * Set by stage via `updateFrameTime` method.
184
+ */
185
+ frameTime = 0;
186
+
201
187
  constructor(numImageWorkers: number) {
202
188
  // Register default known texture types
203
189
  if (this.hasCreateImageBitmap && this.hasWorker && numImageWorkers > 0) {
@@ -217,165 +203,59 @@ export class CoreTextureManager {
217
203
  this.registerTextureType('RenderTexture', RenderTexture);
218
204
  }
219
205
 
220
- registerTextureType<Type extends keyof TextureMap>(
206
+ registerTextureType<Type extends keyof TextureTypeMap>(
221
207
  textureType: Type,
222
- textureClass: TextureMap[Type],
208
+ textureClass: TextureTypeMap[Type],
223
209
  ): void {
224
210
  this.txConstructors[textureType] = textureClass;
225
211
  }
226
212
 
227
- loadTexture<Type extends keyof TextureMap>(
213
+ loadTexture<Type extends keyof TextureTypeMap>(
228
214
  textureType: Type,
229
- props: ExtractProps<TextureMap[Type]>,
230
- options: TextureOptions | null = null,
231
- ): InstanceType<TextureMap[Type]> {
215
+ props: ExtractProps<TextureTypeMap[Type]>,
216
+ ): InstanceType<TextureTypeMap[Type]> {
217
+ let texture: Texture | undefined;
232
218
  const TextureClass = this.txConstructors[textureType];
233
219
  if (!TextureClass) {
234
220
  throw new Error(`Texture type "${textureType}" is not registered`);
235
221
  }
236
- let texture: Texture | undefined;
237
- // If an ID is specified, try to get the texture from the ID cache first
238
- if (options?.id !== undefined && this.textureIdCache.has(options.id)) {
239
- // console.log('Getting texture by texture desc ID', options.id);
240
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
241
- texture = this.textureIdCache.get(options.id)!;
242
- }
243
- // If the texture is not found in the ID cache, try to get it from the key cache
222
+
244
223
  if (!texture) {
245
- const descId = options?.id;
246
- const cacheKey =
247
- options?.cacheKey ?? TextureClass.makeCacheKey(props as any);
248
- if (cacheKey && this.textureKeyCache.has(cacheKey)) {
224
+ const cacheKey = TextureClass.makeCacheKey(props as any);
225
+ if (cacheKey && this.keyCache.has(cacheKey)) {
249
226
  // console.log('Getting texture by cache key', cacheKey);
250
227
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
251
- texture = this.textureKeyCache.get(cacheKey)!;
228
+ texture = this.keyCache.get(cacheKey)!;
252
229
  } else {
253
230
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
254
231
  texture = new TextureClass(this, props as any);
255
- }
256
- if (descId) {
257
- this.addTextureIdToCache(descId, cacheKey, texture);
258
- }
259
- }
260
- if (options?.preload) {
261
- const ctxTx = this.getCtxTexture(texture);
262
- ctxTx.load();
263
- }
264
- return texture as InstanceType<TextureMap[Type]>;
265
- }
266
-
267
- /**
268
- * Add a `Texture` to the texture cache by its texture desc ID and cache key
269
- *
270
- * @remarks
271
- * This is used internally by the `CoreTextureManager` to cache textures
272
- * when they are created.
273
- *
274
- * It handles updating the texture ID cache, texture key cache, and texture
275
- * reference count map.
276
- *
277
- * @param textureDescId
278
- * @param cacheKey
279
- * @param texture
280
- */
281
- private addTextureIdToCache(
282
- textureDescId: number,
283
- cacheKey: string | false,
284
- texture: Texture,
285
- ): void {
286
- const { textureIdCache, textureRefCountMap } = this;
287
- textureIdCache.set(textureDescId, texture);
288
- if (textureRefCountMap.has(texture)) {
289
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
290
- textureRefCountMap.get(texture)!.count++;
291
- } else {
292
- textureRefCountMap.set(texture, { cacheKey, count: 1 });
293
- if (cacheKey) {
294
- this.textureKeyCache.set(cacheKey, texture);
295
- }
296
- }
297
- }
298
-
299
- /**
300
- * Remove a `Texture` from the texture cache by its texture desc ID
301
- *
302
- * @remarks
303
- * This is called externally by when we know (at least reasonably well) that
304
- * the `TextureRef` in the Main API space has been is no longer used. This
305
- * allows us to remove the `Texture` from the Usage Cache so that it can be
306
- * garbage collected as well.
307
- *
308
- * @param textureDescId
309
- */
310
- removeTextureIdFromCache(textureDescId: number): void {
311
- const { textureIdCache, textureRefCountMap } = this;
312
- const texture = textureIdCache.get(textureDescId);
313
- if (!texture) {
314
- // Sometimes a texture is removed from the cache before it ever gets
315
- // added to the cache. This is fine and not an error.
316
- return;
317
- }
318
- textureIdCache.delete(textureDescId);
319
- if (textureRefCountMap.has(texture)) {
320
- const refCountObj = textureRefCountMap.get(texture);
321
- assertTruthy(refCountObj);
322
- refCountObj.count--;
323
- if (refCountObj.count === 0) {
324
- textureRefCountMap.delete(texture);
325
- // If the texture is not referenced anywhere else, remove it from the key cache
326
- // as well.
327
- // This should allow the `Texture` instance to be garbage collected.
328
- if (refCountObj.cacheKey) {
329
- this.textureKeyCache.delete(refCountObj.cacheKey);
232
+ if (cacheKey) {
233
+ this.initTextureToCache(texture, cacheKey);
330
234
  }
331
235
  }
332
236
  }
333
- // Free the ctx texture if it exists.
334
- this.ctxTextureCache.get(texture)?.free();
237
+ return texture as InstanceType<TextureTypeMap[Type]>;
335
238
  }
336
239
 
337
- /**
338
- * Get an object containing debug information about the texture manager.
339
- *
340
- * @returns
341
- */
342
- getDebugInfo(): TextureManagerDebugInfo {
343
- // const textureSet = new Set<Texture>();
344
- // for (const texture of this.textureIdCache.values()) {
345
- // textureSet.add(texture);
346
- // }
347
- // for (const texture of this.textureKeyCache.values()) {
348
- // textureSet.add(texture);
349
- // }
350
- // TODO: Output number of bytes used by textures
351
- return {
352
- keyCacheSize: this.textureKeyCache.size,
353
- idCacheSize: this.textureIdCache.size,
354
- };
240
+ private initTextureToCache(texture: Texture, cacheKey: string) {
241
+ const { keyCache, inverseKeyCache } = this;
242
+ keyCache.set(cacheKey, texture);
243
+ inverseKeyCache.set(texture, cacheKey);
355
244
  }
356
245
 
357
246
  /**
358
- * Get a CoreContextTexture for the given Texture source.
247
+ * Remove a texture from the cache
359
248
  *
360
249
  * @remarks
361
- * If the texture source already has an allocated CoreContextTexture, it will be
362
- * returned from the cache. Otherwise, a new CoreContextTexture will be created
363
- * and cached.
250
+ * Called by Texture Cleanup when a texture is freed.
364
251
  *
365
- * ContextTextures are stored in a WeakMap, so they will be garbage collected
366
- * when the Texture source is no longer referenced.
367
- *
368
- * @param textureSource
369
- * @returns
252
+ * @param texture
370
253
  */
371
- getCtxTexture(textureSource: Texture): CoreContextTexture {
372
- if (this.ctxTextureCache.has(textureSource)) {
373
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
374
- return this.ctxTextureCache.get(textureSource)!;
254
+ removeTextureFromCache(texture: Texture) {
255
+ const { inverseKeyCache, keyCache } = this;
256
+ const cacheKey = inverseKeyCache.get(texture);
257
+ if (cacheKey) {
258
+ keyCache.delete(cacheKey);
375
259
  }
376
- const texture = this.renderer.createCtxTexture(textureSource);
377
-
378
- this.ctxTextureCache.set(textureSource, texture);
379
- return texture;
380
260
  }
381
261
  }