@lightningjs/renderer 0.3.0 → 0.3.2

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/NOTICE +1 -2
  2. package/dist/exports/core-api.js +1 -1
  3. package/dist/exports/main-api.js +1 -1
  4. package/dist/exports/utils.js +1 -1
  5. package/dist/src/common/CommonTypes.js +1 -1
  6. package/dist/src/common/EventEmitter.js +1 -1
  7. package/dist/src/common/IAnimationController.js +1 -1
  8. package/dist/src/core/CoreExtension.js +1 -1
  9. package/dist/src/core/CoreNode.d.ts +5 -1
  10. package/dist/src/core/CoreNode.js +9 -2
  11. package/dist/src/core/CoreNode.js.map +1 -1
  12. package/dist/src/core/CoreTextNode.d.ts +2 -1
  13. package/dist/src/core/CoreTextNode.js +3 -3
  14. package/dist/src/core/CoreTextNode.js.map +1 -1
  15. package/dist/src/core/CoreTextureManager.js +1 -1
  16. package/dist/src/core/Matrix2DContext.js +1 -1
  17. package/dist/src/core/Stage.d.ts +2 -1
  18. package/dist/src/core/Stage.js +20 -6
  19. package/dist/src/core/Stage.js.map +1 -1
  20. package/dist/src/core/animations/AnimationManager.js +1 -1
  21. package/dist/src/core/animations/CoreAnimation.js +1 -1
  22. package/dist/src/core/animations/CoreAnimationController.js +1 -1
  23. package/dist/src/core/lib/glm/common.js +1 -1
  24. package/dist/src/core/lib/glm/index.js +1 -1
  25. package/dist/src/core/lib/glm/mat2.js +1 -1
  26. package/dist/src/core/lib/glm/mat2d.js +1 -1
  27. package/dist/src/core/lib/glm/mat3.js +1 -1
  28. package/dist/src/core/lib/glm/mat4.js +1 -1
  29. package/dist/src/core/lib/glm/quat.js +1 -1
  30. package/dist/src/core/lib/glm/quat2.js +1 -1
  31. package/dist/src/core/lib/glm/vec2.js +1 -1
  32. package/dist/src/core/lib/glm/vec3.js +1 -1
  33. package/dist/src/core/lib/glm/vec4.js +1 -1
  34. package/dist/src/core/lib/utils.d.ts +1 -0
  35. package/dist/src/core/lib/utils.js +10 -1
  36. package/dist/src/core/lib/utils.js.map +1 -1
  37. package/dist/src/core/platform.js +1 -1
  38. package/dist/src/core/renderers/CoreContextTexture.js +1 -1
  39. package/dist/src/core/renderers/CoreRenderOp.js +1 -1
  40. package/dist/src/core/renderers/CoreRenderer.d.ts +2 -0
  41. package/dist/src/core/renderers/CoreRenderer.js +1 -1
  42. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  43. package/dist/src/core/renderers/CoreShader.d.ts +2 -2
  44. package/dist/src/core/renderers/CoreShader.js +1 -1
  45. package/dist/src/core/renderers/CoreShader.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +4 -1
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +22 -4
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +2 -2
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +29 -15
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +46 -3
  55. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +44 -9
  56. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  57. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +1 -1
  58. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -1
  59. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +1 -1
  60. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +1 -1
  61. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +1 -1
  63. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +8 -6
  64. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +20 -13
  65. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  66. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +5 -6
  67. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +12 -11
  68. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  69. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +1 -1
  70. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +1 -1
  71. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  72. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +16 -0
  73. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +5 -2
  74. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +16 -0
  76. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +5 -2
  77. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
  78. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +16 -0
  79. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +5 -2
  80. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +16 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +5 -2
  83. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
  84. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +16 -0
  85. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +5 -2
  86. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +1 -1
  88. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +12 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +100 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +28 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +3 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
  94. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +3 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +4 -1
  96. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -1
  97. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +19 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +5 -2
  99. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +38 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +11 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -1
  105. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
  106. package/dist/src/core/scene/Scene.js +1 -1
  107. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +1 -1
  108. package/dist/src/core/text-rendering/TrFontManager.js +1 -1
  109. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +1 -1
  110. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +1 -1
  111. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +1 -1
  112. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +1 -1
  113. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +1 -1
  114. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +2 -2
  115. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +5 -2
  116. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  117. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +1 -1
  118. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -2
  119. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +3 -3
  120. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  121. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +1 -1
  122. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +1 -1
  123. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +1 -1
  124. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +1 -1
  125. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +1 -1
  126. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +1 -1
  127. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +1 -1
  128. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +1 -1
  129. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +2 -1
  130. package/dist/src/core/text-rendering/renderers/TextRenderer.js +1 -1
  131. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  132. package/dist/src/core/textures/ColorTexture.js +1 -1
  133. package/dist/src/core/textures/ImageTexture.js +1 -1
  134. package/dist/src/core/textures/NoiseTexture.js +1 -1
  135. package/dist/src/core/textures/SubTexture.js +1 -1
  136. package/dist/src/core/textures/Texture.js +1 -1
  137. package/dist/src/core/utils.js +1 -1
  138. package/dist/src/main-api/INode.d.ts +19 -0
  139. package/dist/src/main-api/INode.js +1 -1
  140. package/dist/src/main-api/IRenderDriver.js +1 -1
  141. package/dist/src/main-api/RendererMain.d.ts +1 -1
  142. package/dist/src/main-api/RendererMain.js +2 -1
  143. package/dist/src/main-api/RendererMain.js.map +1 -1
  144. package/dist/src/main-api/TextureRegistry.d.ts +33 -0
  145. package/dist/src/main-api/TextureRegistry.js +97 -0
  146. package/dist/src/main-api/TextureRegistry.js.map +1 -0
  147. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.d.ts +33 -0
  148. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js +97 -0
  149. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js.map +1 -0
  150. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +9 -0
  151. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +38 -0
  152. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +1 -0
  153. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +56 -0
  154. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +101 -0
  155. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -0
  156. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +32 -0
  157. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +28 -0
  158. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +1 -0
  159. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +2 -0
  160. package/dist/src/render-drivers/main/MainOnlyNode.js +8 -1
  161. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  162. package/dist/src/render-drivers/main/MainOnlyTextNode.js +2 -1
  163. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  164. package/dist/src/render-drivers/main/MainRenderDriver.js +1 -1
  165. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +3 -0
  166. package/dist/src/render-drivers/threadx/NodeStruct.js +10 -1
  167. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
  168. package/dist/src/render-drivers/threadx/SharedNode.d.ts +1 -0
  169. package/dist/src/render-drivers/threadx/SharedNode.js +2 -1
  170. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
  171. package/dist/src/render-drivers/threadx/TextNodeStruct.js +1 -1
  172. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +1 -1
  173. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +1 -1
  174. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +1 -1
  175. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +3 -1
  176. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +1 -1
  177. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +1 -1
  178. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +2 -1
  179. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  180. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +2 -1
  181. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  182. package/dist/src/render-drivers/threadx/worker/renderer.js +2 -1
  183. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  184. package/dist/src/utils.d.ts +10 -2
  185. package/dist/src/utils.js +13 -3
  186. package/dist/src/utils.js.map +1 -1
  187. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  188. package/package.json +6 -5
  189. package/src/common/CommonTypes.ts +70 -0
  190. package/src/common/EventEmitter.ts +77 -0
  191. package/src/common/IAnimationController.ts +29 -0
  192. package/src/core/CoreExtension.ts +32 -0
  193. package/src/core/CoreNode.ts +700 -0
  194. package/src/core/CoreShaderManager.ts +111 -0
  195. package/src/core/CoreTextNode.ts +342 -0
  196. package/src/core/CoreTextureManager.ts +323 -0
  197. package/src/core/Matrix2DContext.ts +52 -0
  198. package/src/core/Stage.ts +280 -0
  199. package/src/core/animations/AnimationManager.ts +38 -0
  200. package/src/core/animations/CoreAnimation.ts +139 -0
  201. package/src/core/animations/CoreAnimationController.ts +117 -0
  202. package/src/core/lib/glm/common.ts +231 -0
  203. package/src/core/lib/glm/index.ts +31 -0
  204. package/src/core/lib/glm/mat2.ts +499 -0
  205. package/src/core/lib/glm/mat2d.ts +547 -0
  206. package/src/core/lib/glm/mat3.ts +849 -0
  207. package/src/core/lib/glm/mat4.ts +2169 -0
  208. package/src/core/lib/glm/quat.ts +828 -0
  209. package/src/core/lib/glm/quat2.ts +951 -0
  210. package/src/core/lib/glm/vec2.ts +671 -0
  211. package/src/core/lib/glm/vec3.ts +859 -0
  212. package/src/core/lib/glm/vec4.ts +708 -0
  213. package/src/core/lib/utils.ts +144 -0
  214. package/src/core/platform.ts +40 -0
  215. package/src/core/renderers/CoreContextTexture.ts +30 -0
  216. package/src/core/renderers/CoreRenderOp.ts +22 -0
  217. package/src/core/renderers/CoreRenderer.ts +66 -0
  218. package/src/core/renderers/CoreShader.ts +41 -0
  219. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +36 -0
  220. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +208 -0
  221. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +111 -0
  222. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +567 -0
  223. package/src/core/renderers/webgl/WebGlCoreShader.ts +328 -0
  224. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
  225. package/src/core/renderers/webgl/internal/RendererUtils.ts +134 -0
  226. package/src/core/renderers/webgl/internal/ShaderUtils.ts +135 -0
  227. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
  228. package/src/core/renderers/webgl/shaders/DefaultShader.ts +95 -0
  229. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -0
  230. package/src/core/renderers/webgl/shaders/DynamicShader.ts +430 -0
  231. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +168 -0
  232. package/src/core/renderers/webgl/shaders/SdfShader.ts +165 -0
  233. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -0
  234. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +86 -0
  235. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -0
  236. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -0
  237. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -0
  238. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +33 -0
  239. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +111 -0
  240. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +145 -0
  241. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +37 -0
  242. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +182 -0
  243. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +159 -0
  244. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +106 -0
  245. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +114 -0
  246. package/src/core/scene/Scene.ts +120 -0
  247. package/src/core/text-rendering/TextTextureRendererUtils.ts +189 -0
  248. package/src/core/text-rendering/TrFontManager.ts +96 -0
  249. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +128 -0
  250. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
  251. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +159 -0
  252. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +164 -0
  253. package/src/core/text-rendering/font-face-types/TrFontFace.ts +105 -0
  254. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +77 -0
  255. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +634 -0
  256. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +705 -0
  257. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +647 -0
  258. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
  259. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
  260. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
  261. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
  262. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +76 -0
  263. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
  264. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
  265. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +381 -0
  266. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.test.ts +136 -0
  267. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.ts +64 -0
  268. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +41 -0
  269. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +51 -0
  270. package/src/core/text-rendering/renderers/TextRenderer.ts +371 -0
  271. package/src/core/textures/ColorTexture.ts +85 -0
  272. package/src/core/textures/ImageTexture.ts +113 -0
  273. package/src/core/textures/NoiseTexture.ts +96 -0
  274. package/src/core/textures/SubTexture.ts +140 -0
  275. package/src/core/textures/Texture.ts +162 -0
  276. package/src/core/utils.ts +222 -0
  277. package/src/main-api/INode.ts +443 -0
  278. package/src/main-api/IRenderDriver.ts +58 -0
  279. package/src/main-api/RendererMain.ts +451 -0
  280. package/src/render-drivers/main/MainOnlyNode.ts +429 -0
  281. package/src/render-drivers/main/MainOnlyTextNode.ts +220 -0
  282. package/src/render-drivers/main/MainRenderDriver.ts +117 -0
  283. package/src/render-drivers/threadx/NodeStruct.ts +290 -0
  284. package/src/render-drivers/threadx/SharedNode.ts +95 -0
  285. package/src/render-drivers/threadx/TextNodeStruct.ts +166 -0
  286. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +99 -0
  287. package/src/render-drivers/threadx/ThreadXMainNode.ts +151 -0
  288. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +75 -0
  289. package/src/render-drivers/threadx/ThreadXRenderDriver.ts +247 -0
  290. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +82 -0
  291. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +232 -0
  292. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +146 -0
  293. package/src/render-drivers/threadx/worker/renderer.ts +138 -0
  294. package/src/render-drivers/utils.ts +57 -0
  295. package/src/utils.ts +202 -0
@@ -0,0 +1,700 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+
20
+ import { assertTruthy } from '../utils.js';
21
+ import type { ShaderMap } from './CoreShaderManager.js';
22
+ import type {
23
+ ExtractProps,
24
+ TextureMap,
25
+ TextureOptions,
26
+ } from './CoreTextureManager.js';
27
+ import { Matrix2DContext } from './Matrix2DContext.js';
28
+ import type { CoreRenderer } from './renderers/CoreRenderer.js';
29
+ import type { CoreShader } from './renderers/CoreShader.js';
30
+ import type { Stage } from './Stage.js';
31
+ import type { Texture } from './textures/Texture.js';
32
+ import type {
33
+ TextureFailedEventHandler,
34
+ TextureLoadedEventHandler,
35
+ } from '../common/CommonTypes.js';
36
+ import { EventEmitter } from '../common/EventEmitter.js';
37
+ import type { Rect } from './lib/utils.js';
38
+
39
+ export interface CoreNodeProps {
40
+ id: number;
41
+ // External facing properties whose defaults are determined by
42
+ // RendererMain's resolveNodeDefaults() method
43
+ x: number;
44
+ y: number;
45
+ width: number;
46
+ height: number;
47
+ alpha: number;
48
+ clipping: boolean;
49
+ color: number;
50
+ colorTop: number;
51
+ colorBottom: number;
52
+ colorLeft: number;
53
+ colorRight: number;
54
+ colorTl: number;
55
+ colorTr: number;
56
+ colorBl: number;
57
+ colorBr: number;
58
+ parent: CoreNode | null;
59
+ zIndex: number;
60
+ texture: Texture | null;
61
+ textureOptions: TextureOptions | null;
62
+ shader: CoreShader | null;
63
+ shaderProps: Record<string, unknown> | null;
64
+ zIndexLocked: number;
65
+ scale: number;
66
+ mount: number;
67
+ mountX: number;
68
+ mountY: number;
69
+ pivot: number;
70
+ pivotX: number;
71
+ pivotY: number;
72
+ rotation: number;
73
+ worldX?: number;
74
+ worldY?: number;
75
+
76
+ // Internal properties that are resolved in CoreNode constructor (see below)
77
+ ta?: number;
78
+ tb?: number;
79
+ tc?: number;
80
+ td?: number;
81
+ }
82
+
83
+ type ICoreNode = Omit<
84
+ CoreNodeProps,
85
+ 'texture' | 'textureOptions' | 'shader' | 'shaderProps'
86
+ >;
87
+
88
+ export class CoreNode extends EventEmitter implements ICoreNode {
89
+ readonly children: CoreNode[] = [];
90
+ protected props: Required<CoreNodeProps>;
91
+
92
+ /**
93
+ * Recalculation type
94
+ * 0 - no recalculation
95
+ * 1 - alpha recalculation
96
+ * 2 - translate recalculation
97
+ * 4 - transform recalculation
98
+ */
99
+ public recalculationType = 6;
100
+ public hasUpdates = true;
101
+ public worldContext: Matrix2DContext = new Matrix2DContext();
102
+
103
+ // local translation / transform updates
104
+ // derived from x, y, w, h, scale, pivot, rotation
105
+ public localPx = 0;
106
+ public localPy = 0;
107
+
108
+ private isComplex = false;
109
+
110
+ constructor(protected stage: Stage, props: CoreNodeProps) {
111
+ super();
112
+ this.props = {
113
+ ...props,
114
+ parent: null,
115
+ ta: props.ta ?? 1,
116
+ tb: props.tb ?? 0,
117
+ tc: props.tc ?? 0,
118
+ td: props.td ?? 1,
119
+ worldX: props.worldX ?? 0,
120
+ worldY: props.worldY ?? 0,
121
+ };
122
+ // Allow for parent to be processed appropriately
123
+ this.parent = props.parent;
124
+ this.updateLocalTransform();
125
+ }
126
+
127
+ //#region Textures
128
+ loadTexture<Type extends keyof TextureMap>(
129
+ textureType: Type,
130
+ props: ExtractProps<TextureMap[Type]>,
131
+ options: TextureOptions | null = null,
132
+ ): void {
133
+ // First unload any existing texture
134
+ if (this.props.texture) {
135
+ this.unloadTexture();
136
+ }
137
+ const { txManager } = this.stage;
138
+ const texture = txManager.loadTexture(textureType, props, options);
139
+
140
+ this.props.texture = texture;
141
+ this.props.textureOptions = options;
142
+
143
+ // If texture is already loaded / failed, trigger loaded event manually
144
+ // so that users get a consistent event experience.
145
+ // We do this in a microtask to allow listeners to be attached in the same
146
+ // synchronous task after calling loadTexture()
147
+ queueMicrotask(() => {
148
+ if (texture.state === 'loaded') {
149
+ this.onTextureLoaded(texture, texture.dimensions!);
150
+ } else if (texture.state === 'failed') {
151
+ this.onTextureFailed(texture, texture.error!);
152
+ }
153
+ texture.on('loaded', this.onTextureLoaded);
154
+ texture.on('failed', this.onTextureFailed);
155
+ });
156
+ }
157
+
158
+ unloadTexture(): void {
159
+ if (this.props.texture) {
160
+ this.props.texture.off('loaded', this.onTextureLoaded);
161
+ this.props.texture.off('failed', this.onTextureFailed);
162
+ }
163
+ this.props.texture = null;
164
+ this.props.textureOptions = null;
165
+ }
166
+
167
+ private onTextureLoaded: TextureLoadedEventHandler = (target, dimensions) => {
168
+ this.emit('txLoaded', dimensions);
169
+ };
170
+
171
+ private onTextureFailed: TextureFailedEventHandler = (target, error) => {
172
+ this.emit('txFailed', error);
173
+ };
174
+ //#endregion Textures
175
+
176
+ loadShader<Type extends keyof ShaderMap>(
177
+ shaderType: Type,
178
+ props: ExtractProps<ShaderMap[Type]>,
179
+ ): void {
180
+ const shManager = this.stage.renderer.getShaderManager();
181
+ assertTruthy(shManager);
182
+ const { shader, props: p } = shManager.loadShader(shaderType, props);
183
+ this.props.shader = shader;
184
+ this.props.shaderProps = p;
185
+ }
186
+
187
+ setHasUpdates(): void {
188
+ if (!this.props.alpha) {
189
+ return;
190
+ }
191
+ this.hasUpdates = true;
192
+ let p = this?.props.parent;
193
+
194
+ while (p) {
195
+ p.hasUpdates = true;
196
+ p = p?.props.parent;
197
+ }
198
+ }
199
+
200
+ /**
201
+ * 1 - alpha recalculation
202
+ * 2 - translate recalculation
203
+ * 4 - transform recalculation
204
+ * @param type
205
+ */
206
+ setRecalculationType(type: number): void {
207
+ this.recalculationType |= type;
208
+ this.setHasUpdates();
209
+ }
210
+
211
+ updateLocalTransform() {
212
+ // if rotation is equal to previous render pass, we only need
213
+ // to use sin and cosine of rotation to calculate new position
214
+ if (this.props.rotation !== 0 && this.props.rotation % (Math.PI * 2)) {
215
+ const sineRotation = Math.sin(this.props.rotation);
216
+ const cosineRotation = Math.cos(this.props.rotation);
217
+
218
+ this.setLocalTransform(
219
+ cosineRotation * this.props.scale,
220
+ -sineRotation * this.props.scale,
221
+ sineRotation * this.props.scale,
222
+ cosineRotation * this.props.scale,
223
+ );
224
+ } else {
225
+ this.setLocalTransform(this.props.scale, 0, 0, this.props.scale);
226
+ }
227
+ // do transformations when matrix is implemented
228
+ this.updateLocalTranslate();
229
+ }
230
+
231
+ // update 2x2 matrix
232
+ setLocalTransform(a: number, b: number, c: number, d: number) {
233
+ this.setRecalculationType(4);
234
+ this.props.ta = a;
235
+ this.props.tb = b;
236
+ this.props.tc = c;
237
+ this.props.td = d;
238
+
239
+ // test if there is scaling or shearing in transformation ( b !== 0 || c !== 0 )
240
+ // test if there is flipping or reflection in transformation ( a < 0 || d < 0 )
241
+ this.isComplex = b !== 0 || c !== 0 || a < 0 || d < 0;
242
+ }
243
+
244
+ updateLocalTranslate() {
245
+ this.setRecalculationType(2);
246
+ const pivotXMultiplier = this.props.pivotX * this.props.width;
247
+ const pivotYMultiplier = this.props.pivotY * this.props.height;
248
+
249
+ let px =
250
+ this.props.x -
251
+ (pivotXMultiplier * this.props.ta + pivotYMultiplier * this.props.tb) +
252
+ pivotXMultiplier;
253
+ let py =
254
+ this.props.y -
255
+ (pivotXMultiplier * this.props.tc + pivotYMultiplier * this.props.td) +
256
+ pivotYMultiplier;
257
+
258
+ px -= this.props.mountX * this.props.width;
259
+ py -= this.props.mountY * this.props.height;
260
+
261
+ this.localPx = px;
262
+ this.localPy = py;
263
+ }
264
+
265
+ /**
266
+ * @todo: test for correct calculation flag
267
+ * @param delta
268
+ */
269
+ update(delta: number): void {
270
+ const parentWorldContext = this.props.parent?.worldContext;
271
+ const worldContext = this.worldContext;
272
+
273
+ worldContext.px =
274
+ (parentWorldContext?.px || 0) +
275
+ this.localPx * (parentWorldContext?.ta || 1);
276
+ worldContext.py =
277
+ (parentWorldContext?.py || 0) +
278
+ this.localPy * (parentWorldContext?.td || 1);
279
+
280
+ if (parentWorldContext?.tb !== 0) {
281
+ worldContext.px += this.localPy * (parentWorldContext?.tb || 0);
282
+ }
283
+
284
+ if (parentWorldContext?.tc !== 0) {
285
+ worldContext.py += this.localPx * (parentWorldContext?.tc || 0);
286
+ }
287
+
288
+ worldContext.ta = this.props.ta * (parentWorldContext?.ta || 1);
289
+ worldContext.tb = this.props.td * (parentWorldContext?.tb || 0);
290
+ worldContext.tc = this.props.ta * (parentWorldContext?.tc || 0);
291
+ worldContext.td = this.props.td * (parentWorldContext?.td || 1);
292
+
293
+ if (this.isComplex) {
294
+ worldContext.ta += this.props.tc * (parentWorldContext?.tb || 0);
295
+ worldContext.tb += this.props.tb * (parentWorldContext?.ta || 1);
296
+ worldContext.tc += this.props.tc * (parentWorldContext?.td || 1);
297
+ worldContext.td += this.props.tb * (parentWorldContext?.tc || 0);
298
+ }
299
+
300
+ this.worldX = worldContext.px;
301
+ this.worldY = worldContext.py;
302
+
303
+ if (this.children.length) {
304
+ this.children.forEach((child) => {
305
+ child.update(delta);
306
+ });
307
+ }
308
+
309
+ // reset update flag
310
+ this.hasUpdates = false;
311
+
312
+ // reset recalculation type
313
+ this.recalculationType = 0;
314
+ }
315
+
316
+ renderQuads(renderer: CoreRenderer, clippingRect: Rect | null): void {
317
+ const {
318
+ width,
319
+ height,
320
+ colorTl,
321
+ colorTr,
322
+ colorBl,
323
+ colorBr,
324
+ texture,
325
+ textureOptions,
326
+ shader,
327
+ shaderProps,
328
+ scale,
329
+ } = this.props;
330
+ const { zIndex, alpha, worldScale } = this;
331
+
332
+ // add to list of renderables to be sorted before rendering
333
+ renderer.addRenderable({
334
+ width,
335
+ height,
336
+ colorTl,
337
+ colorTr,
338
+ colorBl,
339
+ colorBr,
340
+ texture,
341
+ textureOptions,
342
+ zIndex,
343
+ shader,
344
+ shaderProps,
345
+ alpha,
346
+ scale,
347
+ clippingRect,
348
+ wpx: this.worldContext.px,
349
+ wpy: this.worldContext.py,
350
+ worldScale,
351
+ ta: this.worldContext.ta,
352
+ tb: this.worldContext.tb,
353
+ tc: this.worldContext.tc,
354
+ td: this.worldContext.td,
355
+ });
356
+
357
+ // Calculate absolute X and Y based on all ancestors
358
+ // renderer.addQuad(absX, absY, w, h, color, texture, textureOptions, zIndex);
359
+ }
360
+
361
+ //#region Properties
362
+ get id(): number {
363
+ return this.props.id;
364
+ }
365
+
366
+ get x(): number {
367
+ return this.props.x;
368
+ }
369
+
370
+ set x(value: number) {
371
+ if (this.props.x !== value) {
372
+ this.props.x = value;
373
+ this.updateLocalTranslate();
374
+ }
375
+ }
376
+
377
+ get worldX(): number {
378
+ return this.props.worldX || 0;
379
+ }
380
+
381
+ set worldX(value: number) {
382
+ this.props.worldX = value;
383
+ }
384
+
385
+ get worldY(): number {
386
+ return this.props.worldY || 0;
387
+ }
388
+
389
+ set worldY(value: number) {
390
+ this.props.worldY = value;
391
+ }
392
+
393
+ get absX(): number {
394
+ return (
395
+ this.props.x +
396
+ (this.props.parent?.absX || this.props.parent?.worldContext.px || 0)
397
+ );
398
+ }
399
+
400
+ get absY(): number {
401
+ return this.props.y + (this.props.parent?.absY ?? 0);
402
+ }
403
+
404
+ get y(): number {
405
+ return this.props.y;
406
+ }
407
+
408
+ set y(value: number) {
409
+ if (this.props.y !== value) {
410
+ this.props.y = value;
411
+ this.updateLocalTranslate();
412
+ }
413
+ }
414
+
415
+ get width(): number {
416
+ return this.props.width;
417
+ }
418
+
419
+ set width(value: number) {
420
+ if (this.props.width !== value) {
421
+ this.props.width = value;
422
+ this.updateLocalTransform();
423
+ }
424
+ }
425
+
426
+ get height(): number {
427
+ return this.props.height;
428
+ }
429
+
430
+ set height(value: number) {
431
+ if (this.props.height !== value) {
432
+ this.props.height = value;
433
+ this.updateLocalTransform();
434
+ }
435
+ }
436
+
437
+ get scale(): number {
438
+ return this.props.scale;
439
+ }
440
+
441
+ // @todo: implement scaleX and scaleY
442
+ set scale(value: number) {
443
+ if (this.props.scale !== value) {
444
+ this.props.scale = value;
445
+ this.updateLocalTransform();
446
+ }
447
+ }
448
+
449
+ get worldScale(): number {
450
+ return (
451
+ this.props.scale * (this.props.parent?.worldScale ?? 1) ||
452
+ this.props.scale
453
+ );
454
+ }
455
+
456
+ get mount(): number {
457
+ return this.props.mount;
458
+ }
459
+
460
+ set mount(value: number) {
461
+ // if (this.props.mountX !== value || this.props.mountY !== value) {
462
+ this.props.mountX = value;
463
+ this.props.mountY = value;
464
+ this.props.mount = value;
465
+ this.updateLocalTranslate();
466
+ // }
467
+ }
468
+
469
+ get mountX(): number {
470
+ return this.props.mountX;
471
+ }
472
+
473
+ set mountX(value: number) {
474
+ this.props.mountX = value;
475
+ this.updateLocalTranslate();
476
+ }
477
+
478
+ get mountY(): number {
479
+ return this.props.mountY;
480
+ }
481
+
482
+ set mountY(value: number) {
483
+ this.props.mountY = value;
484
+ this.updateLocalTranslate();
485
+ }
486
+
487
+ get pivot(): number {
488
+ return this.props.pivot;
489
+ }
490
+
491
+ set pivot(value: number) {
492
+ if (this.props.pivotX !== value || this.props.pivotY !== value) {
493
+ this.props.pivotX = value;
494
+ this.props.pivotY = value;
495
+ this.updateLocalTranslate();
496
+ }
497
+ }
498
+
499
+ get pivotX(): number {
500
+ return this.props.pivotX;
501
+ }
502
+
503
+ set pivotX(value: number) {
504
+ this.props.pivotX = value;
505
+ this.updateLocalTranslate();
506
+ }
507
+
508
+ get pivotY(): number {
509
+ return this.props.pivotY;
510
+ }
511
+
512
+ set pivotY(value: number) {
513
+ this.props.pivotY = value;
514
+ this.updateLocalTranslate();
515
+ }
516
+
517
+ get rotation(): number {
518
+ return this.props.rotation;
519
+ }
520
+
521
+ set rotation(value: number) {
522
+ if (this.props.rotation !== value) {
523
+ this.props.rotation = value;
524
+ this.updateLocalTransform();
525
+ }
526
+ }
527
+
528
+ get alpha(): number {
529
+ const props = this.props;
530
+ const parent = props.parent;
531
+
532
+ // root always visible
533
+ if (!parent) {
534
+ return 1;
535
+ }
536
+
537
+ return props.alpha * parent.alpha;
538
+ }
539
+
540
+ set alpha(value: number) {
541
+ this.props.alpha = value;
542
+ }
543
+
544
+ get clipping(): boolean {
545
+ return this.props.clipping;
546
+ }
547
+
548
+ set clipping(value: boolean) {
549
+ this.props.clipping = value;
550
+ }
551
+
552
+ get color(): number {
553
+ return this.props.color;
554
+ }
555
+
556
+ set color(value: number) {
557
+ if (
558
+ this.props.colorTl !== value ||
559
+ this.props.colorTr !== value ||
560
+ this.props.colorBl !== value ||
561
+ this.props.colorBr !== value
562
+ ) {
563
+ this.colorTl = value;
564
+ this.colorTr = value;
565
+ this.colorBl = value;
566
+ this.colorBr = value;
567
+ }
568
+ this.props.color = value;
569
+ }
570
+
571
+ get colorTop(): number {
572
+ return this.props.colorTop;
573
+ }
574
+
575
+ set colorTop(value: number) {
576
+ if (this.props.colorTl !== value || this.props.colorTr !== value) {
577
+ this.colorTl = value;
578
+ this.colorTr = value;
579
+ }
580
+ this.props.colorTop = value;
581
+ }
582
+
583
+ get colorBottom(): number {
584
+ return this.props.colorBottom;
585
+ }
586
+
587
+ set colorBottom(value: number) {
588
+ if (this.props.colorBl !== value || this.props.colorBr !== value) {
589
+ this.colorBl = value;
590
+ this.colorBr = value;
591
+ }
592
+ this.props.colorBottom = value;
593
+ }
594
+
595
+ get colorLeft(): number {
596
+ return this.props.colorLeft;
597
+ }
598
+
599
+ set colorLeft(value: number) {
600
+ if (this.props.colorTl !== value || this.props.colorBl !== value) {
601
+ this.colorTl = value;
602
+ this.colorBl = value;
603
+ }
604
+ this.props.colorLeft = value;
605
+ }
606
+
607
+ get colorRight(): number {
608
+ return this.props.colorRight;
609
+ }
610
+
611
+ set colorRight(value: number) {
612
+ if (this.props.colorTr !== value || this.props.colorBr !== value) {
613
+ this.colorTr = value;
614
+ this.colorBr = value;
615
+ }
616
+ this.props.colorRight = value;
617
+ }
618
+
619
+ get colorTl(): number {
620
+ return this.props.colorTl;
621
+ }
622
+
623
+ set colorTl(value: number) {
624
+ this.props.colorTl = value;
625
+ }
626
+
627
+ get colorTr(): number {
628
+ return this.props.colorTr;
629
+ }
630
+
631
+ set colorTr(value: number) {
632
+ this.props.colorTr = value;
633
+ }
634
+
635
+ get colorBl(): number {
636
+ return this.props.colorBl;
637
+ }
638
+
639
+ set colorBl(value: number) {
640
+ this.props.colorBl = value;
641
+ }
642
+
643
+ get colorBr(): number {
644
+ return this.props.colorBr;
645
+ }
646
+
647
+ set colorBr(value: number) {
648
+ this.props.colorBr = value;
649
+ }
650
+
651
+ // we're only interested in parent zIndex to test
652
+ // if we should use node zIndex is higher then parent zIndex
653
+ get zIndexLocked(): number {
654
+ return this.props.zIndexLocked || 0;
655
+ }
656
+
657
+ set zIndexLocked(value: number) {
658
+ this.props.zIndexLocked = value;
659
+ }
660
+
661
+ get zIndex(): number {
662
+ const props = this.props;
663
+ const z = props.zIndex || 0;
664
+ const p = props.parent?.zIndex || 0;
665
+
666
+ if (props.parent?.zIndexLocked) {
667
+ return z < p ? z : p;
668
+ }
669
+ return z;
670
+ }
671
+
672
+ set zIndex(value: number) {
673
+ this.props.zIndex = value;
674
+ }
675
+
676
+ get parent(): CoreNode | null {
677
+ return this.props.parent;
678
+ }
679
+
680
+ set parent(newParent: CoreNode | null) {
681
+ const oldParent = this.props.parent;
682
+ if (oldParent === newParent) {
683
+ return;
684
+ }
685
+ this.props.parent = newParent;
686
+ if (oldParent) {
687
+ const index = oldParent.children.indexOf(this);
688
+ assertTruthy(
689
+ index !== -1,
690
+ "CoreNode.parent: Node not found in old parent's children!",
691
+ );
692
+ oldParent.children.splice(index, 1);
693
+ }
694
+ if (newParent) {
695
+ newParent.children.push(this);
696
+ }
697
+ this.updateLocalTransform();
698
+ }
699
+ //#endregion Properties
700
+ }