@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
@@ -66,6 +66,11 @@ import {
66
66
  } from './renderers/webgl/shaders/effects/HolePunchEffect.js';
67
67
  import { WebGlCoreShader } from './renderers/webgl/WebGlCoreShader.js';
68
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';
69
74
 
70
75
  export type { FadeOutEffectProps };
71
76
  export type { LinearGradientEffectProps };
@@ -84,11 +89,6 @@ export interface ShaderMap {
84
89
  UnsupportedShader: typeof UnsupportedShader;
85
90
  }
86
91
 
87
- export type ShaderNode<Type extends keyof ShaderMap> = {
88
- shader: InstanceType<ShaderMap[Type]>;
89
- props: Record<string, unknown>;
90
- };
91
-
92
92
  export interface EffectMap {
93
93
  radius: typeof RadiusEffect;
94
94
  border: typeof BorderEffect;
@@ -166,10 +166,17 @@ export class CoreShaderManager {
166
166
  return this.shConstructors;
167
167
  }
168
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
+ */
169
176
  loadShader<Type extends keyof ShaderMap>(
170
177
  shType: Type,
171
178
  props?: ExtractProps<ShaderMap[Type]>,
172
- ): ShaderNode<Type> {
179
+ ): ShaderController<Type> {
173
180
  if (!this.renderer) {
174
181
  throw new Error(`Renderer is not been defined`);
175
182
  }
@@ -182,14 +189,17 @@ export class CoreShaderManager {
182
189
  this.renderer.mode === 'canvas' &&
183
190
  ShaderClass.prototype instanceof WebGlCoreShader
184
191
  ) {
185
- return {
186
- shader: new UnsupportedShader(shType) as InstanceType<ShaderMap[Type]>,
187
- props: props as Record<string, unknown>,
188
- };
192
+ return this._createShaderCtr(
193
+ shType,
194
+ new UnsupportedShader(shType) as InstanceType<ShaderMap[Type]>,
195
+ props as ExtractProps<ShaderMap[Type]>,
196
+ );
189
197
  }
190
198
 
191
199
  if (shType === 'DynamicShader') {
192
- return this.loadDynamicShader(props!);
200
+ return this.loadDynamicShader(
201
+ props!,
202
+ ) as unknown as ShaderController<Type>;
193
203
  }
194
204
 
195
205
  const resolvedProps = ShaderClass.resolveDefaults(
@@ -198,10 +208,11 @@ export class CoreShaderManager {
198
208
  const cacheKey =
199
209
  ShaderClass.makeCacheKey(resolvedProps) || ShaderClass.name;
200
210
  if (cacheKey && this.shCache.has(cacheKey)) {
201
- return {
202
- shader: this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
203
- props: resolvedProps,
204
- };
211
+ return this._createShaderCtr(
212
+ shType,
213
+ this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
214
+ resolvedProps as ExtractProps<ShaderMap[Type]>,
215
+ );
205
216
  }
206
217
 
207
218
  // @ts-expect-error ShaderClass WILL accept a Renderer
@@ -211,15 +222,16 @@ export class CoreShaderManager {
211
222
  if (cacheKey) {
212
223
  this.shCache.set(cacheKey, shader);
213
224
  }
214
- return {
225
+ return this._createShaderCtr(
226
+ shType,
215
227
  shader,
216
- props: resolvedProps,
217
- };
228
+ resolvedProps as ExtractProps<ShaderMap[Type]>,
229
+ );
218
230
  }
219
231
 
220
- loadDynamicShader<Type extends keyof ShaderMap>(
221
- props: DynamicShaderProps,
222
- ): ShaderNode<Type> {
232
+ loadDynamicShader<
233
+ T extends DynamicEffects<[...{ name: string; type: keyof EffectMap }[]]>,
234
+ >(props: DynamicShaderProps): DynamicShaderController<T> {
223
235
  if (!this.renderer) {
224
236
  throw new Error(`Renderer is not been defined`);
225
237
  }
@@ -232,10 +244,10 @@ export class CoreShaderManager {
232
244
  this.effectConstructors,
233
245
  );
234
246
  if (cacheKey && this.shCache.has(cacheKey)) {
235
- return {
236
- shader: this.shCache.get(cacheKey) as InstanceType<ShaderMap[Type]>,
237
- props: resolvedProps,
238
- };
247
+ return this._createDynShaderCtr(
248
+ this.shCache.get(cacheKey) as InstanceType<ShaderMap['DynamicShader']>,
249
+ resolvedProps,
250
+ );
239
251
  }
240
252
  const shader = new DynamicShader(
241
253
  this.renderer as WebGlCoreRenderer,
@@ -245,10 +257,25 @@ export class CoreShaderManager {
245
257
  if (cacheKey) {
246
258
  this.shCache.set(cacheKey, shader);
247
259
  }
248
- return {
249
- shader: shader as InstanceType<ShaderMap[Type]>,
250
- props: resolvedProps,
251
- };
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);
252
279
  }
253
280
 
254
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
  }