@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
@@ -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 { assertTruthy } from '../utils.js';
20
19
  import { ImageWorkerManager } from './lib/ImageWorker.js';
21
20
  import { ColorTexture } from './textures/ColorTexture.js';
22
21
  import { ImageTexture } from './textures/ImageTexture.js';
@@ -25,14 +24,17 @@ import { SubTexture } from './textures/SubTexture.js';
25
24
  import { RenderTexture } from './textures/RenderTexture.js';
26
25
  export class CoreTextureManager {
27
26
  /**
28
- * Amount of used memory defined in pixels
27
+ * Map of textures by cache key
28
+ */
29
+ keyCache = new Map();
30
+ /**
31
+ * Map of cache keys by texture
32
+ */
33
+ inverseKeyCache = new WeakMap();
34
+ /**
35
+ * Map of texture constructors by their type name
29
36
  */
30
- usedMemory = 0;
31
37
  txConstructors = {};
32
- textureKeyCache = new Map();
33
- textureIdCache = new Map();
34
- ctxTextureCache = new WeakMap();
35
- textureRefCountMap = new WeakMap();
36
38
  imageWorkerManager = null;
37
39
  hasCreateImageBitmap = !!self.createImageBitmap;
38
40
  hasWorker = !!self.Worker;
@@ -44,6 +46,16 @@ export class CoreTextureManager {
44
46
  * will occur when using the texture manager.
45
47
  */
46
48
  renderer;
49
+ /**
50
+ * The current frame time in milliseconds
51
+ *
52
+ * @remarks
53
+ * This is used to populate the `lastRenderableChangeTime` property of
54
+ * {@link Texture} instances when their renderable state changes.
55
+ *
56
+ * Set by stage via `updateFrameTime` method.
57
+ */
58
+ frameTime = 0;
47
59
  constructor(numImageWorkers) {
48
60
  // Register default known texture types
49
61
  if (this.hasCreateImageBitmap && this.hasWorker && numImageWorkers > 0) {
@@ -61,147 +73,48 @@ export class CoreTextureManager {
61
73
  registerTextureType(textureType, textureClass) {
62
74
  this.txConstructors[textureType] = textureClass;
63
75
  }
64
- loadTexture(textureType, props, options = null) {
76
+ loadTexture(textureType, props) {
77
+ let texture;
65
78
  const TextureClass = this.txConstructors[textureType];
66
79
  if (!TextureClass) {
67
80
  throw new Error(`Texture type "${textureType}" is not registered`);
68
81
  }
69
- let texture;
70
- // If an ID is specified, try to get the texture from the ID cache first
71
- if (options?.id !== undefined && this.textureIdCache.has(options.id)) {
72
- // console.log('Getting texture by texture desc ID', options.id);
73
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
74
- texture = this.textureIdCache.get(options.id);
75
- }
76
- // If the texture is not found in the ID cache, try to get it from the key cache
77
82
  if (!texture) {
78
- const descId = options?.id;
79
- const cacheKey = options?.cacheKey ?? TextureClass.makeCacheKey(props);
80
- if (cacheKey && this.textureKeyCache.has(cacheKey)) {
83
+ const cacheKey = TextureClass.makeCacheKey(props);
84
+ if (cacheKey && this.keyCache.has(cacheKey)) {
81
85
  // console.log('Getting texture by cache key', cacheKey);
82
86
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
83
- texture = this.textureKeyCache.get(cacheKey);
87
+ texture = this.keyCache.get(cacheKey);
84
88
  }
85
89
  else {
86
90
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
87
91
  texture = new TextureClass(this, props);
88
- }
89
- if (descId) {
90
- this.addTextureIdToCache(descId, cacheKey, texture);
91
- }
92
- }
93
- if (options?.preload) {
94
- const ctxTx = this.getCtxTexture(texture);
95
- ctxTx.load();
96
- }
97
- return texture;
98
- }
99
- /**
100
- * Add a `Texture` to the texture cache by its texture desc ID and cache key
101
- *
102
- * @remarks
103
- * This is used internally by the `CoreTextureManager` to cache textures
104
- * when they are created.
105
- *
106
- * It handles updating the texture ID cache, texture key cache, and texture
107
- * reference count map.
108
- *
109
- * @param textureDescId
110
- * @param cacheKey
111
- * @param texture
112
- */
113
- addTextureIdToCache(textureDescId, cacheKey, texture) {
114
- const { textureIdCache, textureRefCountMap } = this;
115
- textureIdCache.set(textureDescId, texture);
116
- if (textureRefCountMap.has(texture)) {
117
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
118
- textureRefCountMap.get(texture).count++;
119
- }
120
- else {
121
- textureRefCountMap.set(texture, { cacheKey, count: 1 });
122
- if (cacheKey) {
123
- this.textureKeyCache.set(cacheKey, texture);
124
- }
125
- }
126
- }
127
- /**
128
- * Remove a `Texture` from the texture cache by its texture desc ID
129
- *
130
- * @remarks
131
- * This is called externally by when we know (at least reasonably well) that
132
- * the `TextureRef` in the Main API space has been is no longer used. This
133
- * allows us to remove the `Texture` from the Usage Cache so that it can be
134
- * garbage collected as well.
135
- *
136
- * @param textureDescId
137
- */
138
- removeTextureIdFromCache(textureDescId) {
139
- const { textureIdCache, textureRefCountMap } = this;
140
- const texture = textureIdCache.get(textureDescId);
141
- if (!texture) {
142
- // Sometimes a texture is removed from the cache before it ever gets
143
- // added to the cache. This is fine and not an error.
144
- return;
145
- }
146
- textureIdCache.delete(textureDescId);
147
- if (textureRefCountMap.has(texture)) {
148
- const refCountObj = textureRefCountMap.get(texture);
149
- assertTruthy(refCountObj);
150
- refCountObj.count--;
151
- if (refCountObj.count === 0) {
152
- textureRefCountMap.delete(texture);
153
- // If the texture is not referenced anywhere else, remove it from the key cache
154
- // as well.
155
- // This should allow the `Texture` instance to be garbage collected.
156
- if (refCountObj.cacheKey) {
157
- this.textureKeyCache.delete(refCountObj.cacheKey);
92
+ if (cacheKey) {
93
+ this.initTextureToCache(texture, cacheKey);
158
94
  }
159
95
  }
160
96
  }
161
- // Free the ctx texture if it exists.
162
- this.ctxTextureCache.get(texture)?.free();
97
+ return texture;
163
98
  }
164
- /**
165
- * Get an object containing debug information about the texture manager.
166
- *
167
- * @returns
168
- */
169
- getDebugInfo() {
170
- // const textureSet = new Set<Texture>();
171
- // for (const texture of this.textureIdCache.values()) {
172
- // textureSet.add(texture);
173
- // }
174
- // for (const texture of this.textureKeyCache.values()) {
175
- // textureSet.add(texture);
176
- // }
177
- // TODO: Output number of bytes used by textures
178
- return {
179
- keyCacheSize: this.textureKeyCache.size,
180
- idCacheSize: this.textureIdCache.size,
181
- };
99
+ initTextureToCache(texture, cacheKey) {
100
+ const { keyCache, inverseKeyCache } = this;
101
+ keyCache.set(cacheKey, texture);
102
+ inverseKeyCache.set(texture, cacheKey);
182
103
  }
183
104
  /**
184
- * Get a CoreContextTexture for the given Texture source.
105
+ * Remove a texture from the cache
185
106
  *
186
107
  * @remarks
187
- * If the texture source already has an allocated CoreContextTexture, it will be
188
- * returned from the cache. Otherwise, a new CoreContextTexture will be created
189
- * and cached.
190
- *
191
- * ContextTextures are stored in a WeakMap, so they will be garbage collected
192
- * when the Texture source is no longer referenced.
108
+ * Called by Texture Cleanup when a texture is freed.
193
109
  *
194
- * @param textureSource
195
- * @returns
110
+ * @param texture
196
111
  */
197
- getCtxTexture(textureSource) {
198
- if (this.ctxTextureCache.has(textureSource)) {
199
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
200
- return this.ctxTextureCache.get(textureSource);
112
+ removeTextureFromCache(texture) {
113
+ const { inverseKeyCache, keyCache } = this;
114
+ const cacheKey = inverseKeyCache.get(texture);
115
+ if (cacheKey) {
116
+ keyCache.delete(cacheKey);
201
117
  }
202
- const texture = this.renderer.createCtxTexture(textureSource);
203
- this.ctxTextureCache.set(textureSource, texture);
204
- return texture;
205
118
  }
206
119
  }
207
120
  //# sourceMappingURL=CoreTextureManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoreTextureManager.js","sourceRoot":"","sources":["../../../src/core/CoreTextureManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoreTextureManager.js","sourceRoot":"","sources":["../../../src/core/CoreTextureManager.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,20 @@
1
1
  import { AnimationManager } from './animations/AnimationManager.js';
2
- import { CoreNode } from './CoreNode.js';
2
+ import { CoreNode, type CoreNodeProps } from './CoreNode.js';
3
3
  import { CoreTextureManager } from './CoreTextureManager.js';
4
4
  import { TrFontManager } from './text-rendering/TrFontManager.js';
5
- import { CoreShaderManager } from './CoreShaderManager.js';
5
+ import { CoreShaderManager, type ShaderMap } from './CoreShaderManager.js';
6
6
  import type { TextRenderer, TextRendererMap, TrProps } from './text-rendering/renderers/TextRenderer.js';
7
7
  import { EventEmitter } from '../common/EventEmitter.js';
8
8
  import { ContextSpy } from './lib/ContextSpy.js';
9
9
  import type { FpsUpdatePayload, FrameTickPayload } from '../common/CommonTypes.js';
10
- import { TextureMemoryManager } from './TextureMemoryManager.js';
10
+ import { TextureMemoryManager, type TextureMemoryManagerSettings } from './TextureMemoryManager.js';
11
11
  import type { CoreRenderer } from './renderers/CoreRenderer.js';
12
+ import type { BaseShaderController } from '../main-api/ShaderController.js';
13
+ import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
12
14
  export interface StageOptions {
13
- rootId: number;
14
15
  appWidth: number;
15
16
  appHeight: number;
16
- txMemByteThreshold: number;
17
+ textureMemory: TextureMemoryManagerSettings;
17
18
  boundsMargin: number | [number, number, number, number];
18
19
  deviceLogicalPixelRatio: number;
19
20
  devicePhysicalPixelRatio: number;
@@ -23,13 +24,11 @@ export interface StageOptions {
23
24
  enableContextSpy: boolean;
24
25
  numImageWorkers: number;
25
26
  renderMode: 'webgl' | 'canvas';
26
- debug?: {
27
- monitorTextureCache?: boolean;
28
- };
27
+ eventBus: EventEmitter;
29
28
  }
30
29
  export type StageFpsUpdateHandler = (stage: Stage, fpsData: FpsUpdatePayload) => void;
31
30
  export type StageFrameTickHandler = (stage: Stage, frameTickData: FrameTickPayload) => void;
32
- export declare class Stage extends EventEmitter {
31
+ export declare class Stage {
33
32
  readonly options: StageOptions;
34
33
  readonly animationManager: AnimationManager;
35
34
  readonly txManager: CoreTextureManager;
@@ -40,17 +39,29 @@ export declare class Stage extends EventEmitter {
40
39
  readonly renderer: CoreRenderer;
41
40
  readonly root: CoreNode;
42
41
  readonly boundsMargin: [number, number, number, number];
42
+ readonly defShaderCtr: BaseShaderController;
43
+ /**
44
+ * Renderer Event Bus for the Stage to emit events onto
45
+ *
46
+ * @remarks
47
+ * In reality this is just the RendererMain instance, which is an EventEmitter.
48
+ * this allows us to directly emit events from the Stage to RendererMain
49
+ * without having to set up forwarding handlers.
50
+ */
51
+ readonly eventBus: EventEmitter;
43
52
  deltaTime: number;
44
53
  lastFrameTime: number;
45
54
  currentFrameTime: number;
46
55
  private fpsNumFrames;
47
56
  private fpsElapsedTime;
48
57
  private renderRequested;
58
+ private frameEventQueue;
49
59
  contextSpy: ContextSpy | null;
50
60
  /**
51
61
  * Stage constructor
52
62
  */
53
63
  constructor(options: StageOptions);
64
+ updateFrameTime(): void;
54
65
  /**
55
66
  * Update animations
56
67
  */
@@ -63,6 +74,31 @@ export declare class Stage extends EventEmitter {
63
74
  * Start a new frame draw
64
75
  */
65
76
  drawFrame(): void;
77
+ /**
78
+ * Queue an event to be emitted after the current/next frame is rendered
79
+ *
80
+ * @remarks
81
+ * When we are operating in the context of the render loop, we may want to
82
+ * emit events that are related to the current frame. However, we generally do
83
+ * NOT want to emit events directly in the middle of the render loop, since
84
+ * this could enable event handlers to modify the scene graph and cause
85
+ * unexpected behavior. Instead, we queue up events to be emitted and then
86
+ * flush the queue after the frame has been rendered.
87
+ *
88
+ * @param name
89
+ * @param data
90
+ */
91
+ queueFrameEvent(name: string, data: unknown): void;
92
+ /**
93
+ * Emit all queued frame events
94
+ *
95
+ * @remarks
96
+ * This method should be called after the frame has been rendered to emit
97
+ * all events that were queued during the frame.
98
+ *
99
+ * See {@link queueFrameEvent} for more information.
100
+ */
101
+ flushFrameEvents(): void;
66
102
  calculateFps(): void;
67
103
  addQuads(node: CoreNode): void;
68
104
  /**
@@ -80,4 +116,26 @@ export declare class Stage extends EventEmitter {
80
116
  * @returns
81
117
  */
82
118
  resolveTextRenderer(trProps: TrProps, textRendererOverride?: keyof TextRendererMap | null): TextRenderer;
119
+ /**
120
+ * Create a shader controller instance
121
+ *
122
+ * @param type
123
+ * @param props
124
+ * @returns
125
+ */
126
+ createShaderCtr(type: keyof ShaderMap, props: Record<string, unknown>): BaseShaderController;
127
+ createNode(props: Partial<CoreNodeProps>): CoreNode;
128
+ createTextNode(props: Partial<CoreTextNodeProps>): CoreTextNode;
129
+ /**
130
+ * Resolves the default property values for a Node
131
+ *
132
+ * @remarks
133
+ * This method is used internally by the RendererMain to resolve the default
134
+ * property values for a Node. It is exposed publicly so that it can be used
135
+ * by Core Driver implementations.
136
+ *
137
+ * @param props
138
+ * @returns
139
+ */
140
+ protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps;
83
141
  }
@@ -28,11 +28,13 @@ import { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfT
28
28
  import { CanvasTextRenderer } from './text-rendering/renderers/CanvasTextRenderer.js';
29
29
  import { EventEmitter } from '../common/EventEmitter.js';
30
30
  import { ContextSpy } from './lib/ContextSpy.js';
31
- import { TextureMemoryManager } from './TextureMemoryManager.js';
31
+ import { TextureMemoryManager, } from './TextureMemoryManager.js';
32
32
  import { CanvasCoreRenderer } from './renderers/canvas/CanvasCoreRenderer.js';
33
+ import { CoreTextNode } from './CoreTextNode.js';
34
+ import { santizeCustomDataMap } from '../main-api/utils.js';
33
35
  const bufferMemory = 2e6;
34
36
  const autoStart = true;
35
- export class Stage extends EventEmitter {
37
+ export class Stage {
36
38
  options;
37
39
  /// Module Instances
38
40
  animationManager;
@@ -44,6 +46,16 @@ export class Stage extends EventEmitter {
44
46
  renderer;
45
47
  root;
46
48
  boundsMargin;
49
+ defShaderCtr;
50
+ /**
51
+ * Renderer Event Bus for the Stage to emit events onto
52
+ *
53
+ * @remarks
54
+ * In reality this is just the RendererMain instance, which is an EventEmitter.
55
+ * this allows us to directly emit events from the Stage to RendererMain
56
+ * without having to set up forwarding handlers.
57
+ */
58
+ eventBus;
47
59
  /// State
48
60
  deltaTime = 0;
49
61
  lastFrameTime = 0;
@@ -51,17 +63,18 @@ export class Stage extends EventEmitter {
51
63
  fpsNumFrames = 0;
52
64
  fpsElapsedTime = 0;
53
65
  renderRequested = false;
66
+ frameEventQueue = [];
54
67
  /// Debug data
55
68
  contextSpy = null;
56
69
  /**
57
70
  * Stage constructor
58
71
  */
59
72
  constructor(options) {
60
- super();
61
73
  this.options = options;
62
- const { canvas, clearColor, rootId, debug, appWidth, appHeight, boundsMargin, enableContextSpy, numImageWorkers, txMemByteThreshold, renderMode, } = options;
74
+ const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, numImageWorkers, textureMemory, renderMode, } = options;
75
+ this.eventBus = options.eventBus;
63
76
  this.txManager = new CoreTextureManager(numImageWorkers);
64
- this.txMemManager = new TextureMemoryManager(txMemByteThreshold);
77
+ this.txMemManager = new TextureMemoryManager(this, textureMemory);
65
78
  this.shManager = new CoreShaderManager();
66
79
  this.animationManager = new AnimationManager();
67
80
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
@@ -72,14 +85,6 @@ export class Stage extends EventEmitter {
72
85
  : [boundsMargin, boundsMargin, boundsMargin, boundsMargin];
73
86
  }
74
87
  this.boundsMargin = bm;
75
- if (debug?.monitorTextureCache) {
76
- setInterval(() => {
77
- assertTruthy(this.txManager);
78
- const debugInfo = this.txManager.getDebugInfo();
79
- console.log('Texture ID Cache Size: ', debugInfo.idCacheSize);
80
- console.log('Texture Key Cache Size: ', debugInfo.keyCacheSize);
81
- }, 1000);
82
- }
83
88
  const rendererOptions = {
84
89
  stage: this,
85
90
  canvas,
@@ -97,6 +102,7 @@ export class Stage extends EventEmitter {
97
102
  else {
98
103
  this.renderer = new WebGlCoreRenderer(rendererOptions);
99
104
  }
105
+ this.defShaderCtr = this.renderer.getDefShaderCtr();
100
106
  setPremultiplyMode(renderMode);
101
107
  // Must do this after renderer is created
102
108
  this.txManager.renderer = this.renderer;
@@ -112,7 +118,6 @@ export class Stage extends EventEmitter {
112
118
  this.fontManager = new TrFontManager(this.textRenderers);
113
119
  // create root node
114
120
  const rootNode = new CoreNode(this, {
115
- id: rootId,
116
121
  x: 0,
117
122
  y: 0,
118
123
  width: appWidth,
@@ -142,10 +147,11 @@ export class Stage extends EventEmitter {
142
147
  rotation: 0,
143
148
  parent: null,
144
149
  texture: null,
145
- textureOptions: null,
146
- shader: null,
147
- shaderProps: null,
150
+ textureOptions: {},
151
+ shader: this.defShaderCtr,
148
152
  rtt: false,
153
+ src: null,
154
+ scale: 1,
149
155
  });
150
156
  this.root = rootNode;
151
157
  // execute platform start loop
@@ -153,6 +159,22 @@ export class Stage extends EventEmitter {
153
159
  startLoop(this);
154
160
  }
155
161
  }
162
+ updateFrameTime() {
163
+ const newFrameTime = getTimeStamp();
164
+ this.lastFrameTime = this.currentFrameTime;
165
+ this.currentFrameTime = newFrameTime;
166
+ this.deltaTime = !this.lastFrameTime
167
+ ? 100 / 6
168
+ : newFrameTime - this.lastFrameTime;
169
+ this.txManager.frameTime = newFrameTime;
170
+ this.txMemManager.frameTime = newFrameTime;
171
+ // This event is emitted at the beginning of the frame (before any updates
172
+ // or rendering), so no need to to use `stage.queueFrameEvent` here.
173
+ this.eventBus.emit('frameTick', {
174
+ time: this.currentFrameTime,
175
+ delta: this.deltaTime,
176
+ });
177
+ }
156
178
  /**
157
179
  * Update animations
158
180
  */
@@ -161,15 +183,6 @@ export class Stage extends EventEmitter {
161
183
  if (!this.root) {
162
184
  return;
163
185
  }
164
- this.lastFrameTime = this.currentFrameTime;
165
- this.currentFrameTime = getTimeStamp();
166
- this.deltaTime = !this.lastFrameTime
167
- ? 100 / 6
168
- : this.currentFrameTime - this.lastFrameTime;
169
- this.emit('frameTick', {
170
- time: this.currentFrameTime,
171
- delta: this.deltaTime,
172
- });
173
186
  // step animation
174
187
  animationManager.update(this.deltaTime);
175
188
  }
@@ -191,9 +204,9 @@ export class Stage extends EventEmitter {
191
204
  }
192
205
  // Reset render operations and clear the canvas
193
206
  renderer.reset();
194
- // Check if we need to garbage collect
195
- if (renderer.txMemManager.gcRequested) {
196
- renderer.txMemManager.gc();
207
+ // Check if we need to cleanup textures
208
+ if (this.txMemManager.criticalCleanupRequested) {
209
+ this.txMemManager.cleanup();
197
210
  }
198
211
  // If we have RTT nodes draw them first
199
212
  // So we can use them as textures in the main scene
@@ -210,6 +223,38 @@ export class Stage extends EventEmitter {
210
223
  this.renderRequested = false;
211
224
  }
212
225
  }
226
+ /**
227
+ * Queue an event to be emitted after the current/next frame is rendered
228
+ *
229
+ * @remarks
230
+ * When we are operating in the context of the render loop, we may want to
231
+ * emit events that are related to the current frame. However, we generally do
232
+ * NOT want to emit events directly in the middle of the render loop, since
233
+ * this could enable event handlers to modify the scene graph and cause
234
+ * unexpected behavior. Instead, we queue up events to be emitted and then
235
+ * flush the queue after the frame has been rendered.
236
+ *
237
+ * @param name
238
+ * @param data
239
+ */
240
+ queueFrameEvent(name, data) {
241
+ this.frameEventQueue.push([name, data]);
242
+ }
243
+ /**
244
+ * Emit all queued frame events
245
+ *
246
+ * @remarks
247
+ * This method should be called after the frame has been rendered to emit
248
+ * all events that were queued during the frame.
249
+ *
250
+ * See {@link queueFrameEvent} for more information.
251
+ */
252
+ flushFrameEvents() {
253
+ for (const [name, data] of this.frameEventQueue) {
254
+ this.eventBus.emit(name, data);
255
+ }
256
+ this.frameEventQueue = [];
257
+ }
213
258
  calculateFps() {
214
259
  // If there's an FPS update interval, emit the FPS update event
215
260
  // when the specified interval has elapsed.
@@ -221,7 +266,7 @@ export class Stage extends EventEmitter {
221
266
  const fps = Math.round((this.fpsNumFrames * 1000) / this.fpsElapsedTime);
222
267
  this.fpsNumFrames = 0;
223
268
  this.fpsElapsedTime = 0;
224
- this.emit('fpsUpdate', {
269
+ this.queueFrameEvent('fpsUpdate', {
225
270
  fps,
226
271
  contextSpyData: this.contextSpy?.getData() ?? null,
227
272
  });
@@ -305,5 +350,104 @@ export class Stage extends EventEmitter {
305
350
  // the covariant state argument in the setter method map
306
351
  return resolvedTextRenderer;
307
352
  }
353
+ /**
354
+ * Create a shader controller instance
355
+ *
356
+ * @param type
357
+ * @param props
358
+ * @returns
359
+ */
360
+ createShaderCtr(type, props) {
361
+ return this.shManager.loadShader(type, props);
362
+ }
363
+ createNode(props) {
364
+ const resolvedProps = this.resolveNodeDefaults(props);
365
+ return new CoreNode(this, resolvedProps);
366
+ }
367
+ createTextNode(props) {
368
+ const fontSize = props.fontSize ?? 16;
369
+ const resolvedProps = {
370
+ ...this.resolveNodeDefaults(props),
371
+ text: props.text ?? '',
372
+ textRendererOverride: props.textRendererOverride ?? null,
373
+ fontSize,
374
+ fontFamily: props.fontFamily ?? 'sans-serif',
375
+ fontStyle: props.fontStyle ?? 'normal',
376
+ fontWeight: props.fontWeight ?? 'normal',
377
+ fontStretch: props.fontStretch ?? 'normal',
378
+ textAlign: props.textAlign ?? 'left',
379
+ contain: props.contain ?? 'none',
380
+ scrollable: props.scrollable ?? false,
381
+ scrollY: props.scrollY ?? 0,
382
+ offsetY: props.offsetY ?? 0,
383
+ letterSpacing: props.letterSpacing ?? 0,
384
+ lineHeight: props.lineHeight,
385
+ maxLines: props.maxLines ?? 0,
386
+ textBaseline: props.textBaseline ?? 'alphabetic',
387
+ verticalAlign: props.verticalAlign ?? 'middle',
388
+ overflowSuffix: props.overflowSuffix ?? '...',
389
+ debug: props.debug ?? {},
390
+ shaderProps: null,
391
+ };
392
+ return new CoreTextNode(this, resolvedProps);
393
+ }
394
+ /**
395
+ * Resolves the default property values for a Node
396
+ *
397
+ * @remarks
398
+ * This method is used internally by the RendererMain to resolve the default
399
+ * property values for a Node. It is exposed publicly so that it can be used
400
+ * by Core Driver implementations.
401
+ *
402
+ * @param props
403
+ * @returns
404
+ */
405
+ resolveNodeDefaults(props) {
406
+ const color = props.color ?? 0xffffffff;
407
+ const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
408
+ const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
409
+ const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
410
+ const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
411
+ const data = santizeCustomDataMap(props.data ?? {});
412
+ return {
413
+ x: props.x ?? 0,
414
+ y: props.y ?? 0,
415
+ width: props.width ?? 0,
416
+ height: props.height ?? 0,
417
+ alpha: props.alpha ?? 1,
418
+ autosize: props.autosize ?? false,
419
+ clipping: props.clipping ?? false,
420
+ color,
421
+ colorTop: props.colorTop ?? color,
422
+ colorBottom: props.colorBottom ?? color,
423
+ colorLeft: props.colorLeft ?? color,
424
+ colorRight: props.colorRight ?? color,
425
+ colorBl,
426
+ colorBr,
427
+ colorTl,
428
+ colorTr,
429
+ zIndex: props.zIndex ?? 0,
430
+ zIndexLocked: props.zIndexLocked ?? 0,
431
+ parent: props.parent ?? null,
432
+ texture: props.texture ?? null,
433
+ textureOptions: props.textureOptions ?? {},
434
+ shader: props.shader ?? this.defShaderCtr,
435
+ // Since setting the `src` will trigger a texture load, we need to set it after
436
+ // we set the texture. Otherwise, problems happen.
437
+ src: props.src ?? null,
438
+ scale: props.scale ?? null,
439
+ scaleX: props.scaleX ?? props.scale ?? 1,
440
+ scaleY: props.scaleY ?? props.scale ?? 1,
441
+ mount: props.mount ?? 0,
442
+ mountX: props.mountX ?? props.mount ?? 0,
443
+ mountY: props.mountY ?? props.mount ?? 0,
444
+ pivot: props.pivot ?? 0.5,
445
+ pivotX: props.pivotX ?? props.pivot ?? 0.5,
446
+ pivotY: props.pivotY ?? props.pivot ?? 0.5,
447
+ rotation: props.rotation ?? 0,
448
+ rtt: props.rtt ?? false,
449
+ data: data,
450
+ };
451
+ }
308
452
  }
309
453
  //# sourceMappingURL=Stage.js.map