@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,451 @@
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
+ /* eslint-disable @typescript-eslint/no-unused-vars */
21
+ import type { ShaderMap } from '../core/CoreShaderManager.js';
22
+ import type {
23
+ ExtractProps,
24
+ TextureMap,
25
+ TextureOptions,
26
+ } from '../core/CoreTextureManager.js';
27
+ import type {
28
+ INode,
29
+ INodeWritableProps,
30
+ ITextNode,
31
+ ITextNodeWritableProps,
32
+ } from './INode.js';
33
+ import type { IRenderDriver } from './IRenderDriver.js';
34
+
35
+ /**
36
+ * A description of a Texture
37
+ *
38
+ * @remarks
39
+ * This structure should only be created by the RendererMain's `makeTexture`
40
+ * method. The structure is immutable and should not be modified once created.
41
+ */
42
+ export interface TextureDesc<
43
+ TxType extends keyof TextureMap = keyof TextureMap,
44
+ > {
45
+ readonly descType: 'texture';
46
+ readonly txType: TxType;
47
+ readonly props: ExtractProps<TextureMap[TxType]>;
48
+ readonly options?: Readonly<TextureOptions>;
49
+ }
50
+
51
+ export interface ShaderDesc<ShType extends keyof ShaderMap = keyof ShaderMap> {
52
+ readonly descType: 'shader';
53
+ readonly shType: ShType;
54
+ readonly props: ExtractProps<ShaderMap[ShType]>;
55
+ }
56
+
57
+ /**
58
+ * Configuration settings for {@link RendererMain}
59
+ */
60
+ export interface RendererMainSettings {
61
+ /**
62
+ * Authored logical pixel width of the application
63
+ *
64
+ * @defaultValue `1920`
65
+ */
66
+ appWidth?: number;
67
+
68
+ /**
69
+ * Authored logical pixel height of the application
70
+ *
71
+ * @defaultValue `1080`
72
+ */
73
+ appHeight?: number;
74
+
75
+ /**
76
+ * Factor to convert app-authored logical coorindates to device logical coordinates
77
+ *
78
+ * @remarks
79
+ * This value allows auto-scaling to support larger/small resolutions than the
80
+ * app was authored for.
81
+ *
82
+ * If the app was authored for 1920x1080 and this value is 2, the app's canvas
83
+ * will be rendered at 3840x2160 logical pixels.
84
+ *
85
+ * Likewise, if the app was authored for 1920x1080 and this value is 0.66667,
86
+ * the app's canvas will be rendered at 1280x720 logical pixels.
87
+ *
88
+ * @defaultValue `1`
89
+ */
90
+ deviceLogicalPixelRatio?: number;
91
+
92
+ /**
93
+ * Factor to convert device logical coordinates to device physical coordinates
94
+ *
95
+ * @remarks
96
+ * This value allows auto-scaling to support devices with different pixel densities.
97
+ *
98
+ * This controls the number of physical pixels that are used to render each logical
99
+ * pixel. For example, if the device has a pixel density of 2, each logical pixel
100
+ * will be rendered using 2x2 physical pixels.
101
+ *
102
+ * By default, it will be set to `window.devicePixelRatio` which is the pixel
103
+ * density of the device the app is running on reported by the browser.
104
+ *
105
+ * @defaultValue `window.devicePixelRatio`
106
+ */
107
+ devicePhysicalPixelRatio?: number;
108
+
109
+ /**
110
+ * RGBA encoded number of the background to use
111
+ *
112
+ * @defaultValue `0x00000000`
113
+ */
114
+ clearColor?: number;
115
+
116
+ /**
117
+ * Path to a custom core module to use
118
+ */
119
+ coreExtensionModule?: string | null;
120
+ }
121
+
122
+ /**
123
+ * The Renderer Main API
124
+ *
125
+ * @remarks
126
+ * This is the primary class used to configure and operate the Renderer.
127
+ *
128
+ * It is used to create and destroy Nodes, as well as Texture and Shader
129
+ * references.
130
+ *
131
+ * Example:
132
+ * ```ts
133
+ * import { RendererMain, MainRenderDriver } from '@lightningjs/renderer';
134
+ *
135
+ * // Initialize the Renderer
136
+ * const renderer = new RendererMain(
137
+ * {
138
+ * appWidth: 1920,
139
+ * appHeight: 1080
140
+ * },
141
+ * 'app',
142
+ * new MainRenderDriver(),
143
+ * );
144
+ * ```
145
+ */
146
+ export class RendererMain {
147
+ readonly root: INode | null = null;
148
+ readonly driver: IRenderDriver;
149
+ private canvas: HTMLCanvasElement;
150
+ readonly settings: Readonly<Required<RendererMainSettings>>;
151
+ private nodes: Map<number, INode> = new Map();
152
+ private nextTextureId = 1;
153
+
154
+ private textureRegistry = new FinalizationRegistry(
155
+ (textureDescId: number) => {
156
+ this.driver.releaseTexture(textureDescId);
157
+ },
158
+ );
159
+
160
+ /**
161
+ * Constructs a new Renderer instance
162
+ *
163
+ * @param settings Renderer settings
164
+ * @param target Element ID or HTMLElement to insert the canvas into
165
+ * @param driver Core Driver to use
166
+ */
167
+ constructor(
168
+ settings: RendererMainSettings,
169
+ target: string | HTMLElement,
170
+ driver: IRenderDriver,
171
+ ) {
172
+ const resolvedSettings: Required<RendererMainSettings> = {
173
+ appWidth: settings.appWidth || 1920,
174
+ appHeight: settings.appHeight || 1080,
175
+ deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
176
+ devicePhysicalPixelRatio:
177
+ settings.devicePhysicalPixelRatio || window.devicePixelRatio,
178
+ clearColor: settings.clearColor ?? 0x00000000,
179
+ coreExtensionModule: settings.coreExtensionModule || null,
180
+ };
181
+ this.settings = resolvedSettings;
182
+
183
+ const {
184
+ appWidth,
185
+ appHeight,
186
+ deviceLogicalPixelRatio,
187
+ devicePhysicalPixelRatio,
188
+ } = resolvedSettings;
189
+
190
+ const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
191
+ const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
192
+
193
+ this.driver = driver;
194
+
195
+ const canvas = document.createElement('canvas');
196
+ this.canvas = canvas;
197
+ canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
198
+ canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
199
+
200
+ canvas.style.width = `${deviceLogicalWidth}px`;
201
+ canvas.style.height = `${deviceLogicalHeight}px`;
202
+
203
+ let targetEl: HTMLElement | null;
204
+ if (typeof target === 'string') {
205
+ targetEl = document.getElementById(target);
206
+ } else {
207
+ targetEl = target;
208
+ }
209
+
210
+ if (!targetEl) {
211
+ throw new Error('Could not find target element');
212
+ }
213
+
214
+ // Hook up the driver's callbacks
215
+ driver.onCreateNode = (node) => {
216
+ this.nodes.set(node.id, node);
217
+ };
218
+
219
+ driver.onBeforeDestroyNode = (node) => {
220
+ this.nodes.delete(node.id);
221
+ };
222
+
223
+ targetEl.appendChild(canvas);
224
+ }
225
+
226
+ /**
227
+ * Initialize the renderer
228
+ *
229
+ * @remarks
230
+ * This method must be called and resolved asyncronously before any other
231
+ * methods are called.
232
+ */
233
+ async init(): Promise<void> {
234
+ await this.driver.init(this, this.settings, this.canvas);
235
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
236
+ (this.root as INode) = this.driver.getRootNode();
237
+ }
238
+
239
+ /**
240
+ * Create a new scene graph node
241
+ *
242
+ * @remarks
243
+ * A node is the main graphical building block of the Renderer scene graph. It
244
+ * can be a container for other nodes, or it can be a leaf node that renders a
245
+ * solid color, gradient, image, or specific texture, using a specific shader.
246
+ *
247
+ * To create a text node, see {@link createTextNode}.
248
+ *
249
+ * See {@link INode} for more details.
250
+ *
251
+ * @param props
252
+ * @returns
253
+ */
254
+ createNode(props: Partial<INodeWritableProps>): INode {
255
+ return this.driver.createNode(this.resolveNodeDefaults(props));
256
+ }
257
+
258
+ /**
259
+ * Create a new scene graph text node
260
+ *
261
+ * @remarks
262
+ * A text node is the second graphical building block of the Renderer scene
263
+ * graph. It renders text using a specific text renderer that is automatically
264
+ * chosen based on the font requested and what type of fonts are installed
265
+ * into an app via a CoreExtension.
266
+ *
267
+ * See {@link ITextNode} for more details.
268
+ *
269
+ * @param props
270
+ * @returns
271
+ */
272
+ createTextNode(props: Partial<ITextNodeWritableProps>): ITextNode {
273
+ return this.driver.createTextNode({
274
+ ...this.resolveNodeDefaults(props),
275
+ text: props.text ?? '',
276
+ textRendererOverride: props.textRendererOverride ?? null,
277
+ fontSize: props.fontSize ?? 16,
278
+ fontFamily: props.fontFamily ?? 'sans-serif',
279
+ fontStyle: props.fontStyle ?? 'normal',
280
+ fontWeight: props.fontWeight ?? 'normal',
281
+ fontStretch: props.fontStretch ?? 'normal',
282
+ textAlign: props.textAlign ?? 'left',
283
+ contain: props.contain ?? 'none',
284
+ scrollable: props.scrollable ?? false,
285
+ scrollY: props.scrollY ?? 0,
286
+ offsetY: props.offsetY ?? 0,
287
+ letterSpacing: props.letterSpacing ?? 0,
288
+ debug: props.debug ?? {},
289
+ });
290
+ }
291
+
292
+ /**
293
+ * Resolves the default property values for a Node
294
+ *
295
+ * @remarks
296
+ * This method is used internally by the RendererMain to resolve the default
297
+ * property values for a Node. It is exposed publicly so that it can be used
298
+ * by Core Driver implementations.
299
+ *
300
+ * @param props
301
+ * @returns
302
+ */
303
+ resolveNodeDefaults(props: Partial<INodeWritableProps>): INodeWritableProps {
304
+ const color = props.color ?? 0xffffffff;
305
+ const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
306
+ const colorTr =
307
+ props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
308
+ const colorBl =
309
+ props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
310
+ const colorBr =
311
+ props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
312
+
313
+ return {
314
+ x: props.x ?? 0,
315
+ y: props.y ?? 0,
316
+ width: props.width ?? 0,
317
+ height: props.height ?? 0,
318
+ alpha: props.alpha ?? 1,
319
+ clipping: props.clipping ?? false,
320
+ color,
321
+ colorTop: props.colorTop ?? color,
322
+ colorBottom: props.colorBottom ?? color,
323
+ colorLeft: props.colorLeft ?? color,
324
+ colorRight: props.colorRight ?? color,
325
+ colorBl,
326
+ colorBr,
327
+ colorTl,
328
+ colorTr,
329
+ zIndex: props.zIndex ?? 0,
330
+ zIndexLocked: props.zIndexLocked ?? 0,
331
+ parent: props.parent ?? null,
332
+ texture: props.texture ?? null,
333
+ shader: props.shader ?? null,
334
+ // Since setting the `src` will trigger a texture load, we need to set it after
335
+ // we set the texture. Otherwise, problems happen.
336
+ src: props.src ?? '',
337
+ scale: props.scale ?? 1,
338
+ mount: props.mount ?? 0,
339
+ mountX: props.mountX ?? props.mount ?? 0,
340
+ mountY: props.mountY ?? props.mount ?? 0,
341
+ pivot: props.pivot ?? 0.5,
342
+ pivotX: props.pivotX ?? props.pivot ?? 0.5,
343
+ pivotY: props.pivotY ?? props.pivot ?? 0.5,
344
+ rotation: props.rotation ?? 0,
345
+ };
346
+ }
347
+
348
+ /**
349
+ * Destroy a node
350
+ *
351
+ * @remarks
352
+ * This method destroys a node but does not destroy its children.
353
+ *
354
+ * @param node
355
+ * @returns
356
+ */
357
+ destroyNode(node: INode) {
358
+ return this.driver.destroyNode(node);
359
+ }
360
+
361
+ /**
362
+ * Create a new texture reference
363
+ *
364
+ * @remarks
365
+ * This method creates a new reference to a texture. The texture is not
366
+ * loaded until it is used on a node.
367
+ *
368
+ * It can be assigned to a node's `texture` property, or it can be used
369
+ * when creating a SubTexture.
370
+ *
371
+ * @param textureType
372
+ * @param props
373
+ * @param options
374
+ * @returns
375
+ */
376
+ makeTexture<Type extends keyof TextureMap>(
377
+ textureType: Type,
378
+ props: TextureDesc<Type>['props'],
379
+ options?: TextureOptions,
380
+ ): TextureDesc<Type> {
381
+ const id = this.nextTextureId++;
382
+ const desc: TextureDesc<Type> = {
383
+ descType: 'texture',
384
+ txType: textureType,
385
+ props,
386
+ options: {
387
+ ...options,
388
+ // This ID is used to identify the texture in the CoreTextureManager's
389
+ // ID Texture Map cache.
390
+ id,
391
+ },
392
+ };
393
+ this.textureRegistry.register(desc, id);
394
+ return desc;
395
+ }
396
+
397
+ /**
398
+ * Create a new shader reference
399
+ *
400
+ * @remarks
401
+ * This method creates a new reference to a shader. The shader is not
402
+ * loaded until it is used on a Node.
403
+ *
404
+ * It can be assigned to a Node's `shader` property.
405
+ *
406
+ * @param shaderType
407
+ * @param props
408
+ * @returns
409
+ */
410
+ makeShader<ShType extends keyof ShaderMap>(
411
+ shaderType: ShType,
412
+ props?: ShaderDesc<ShType>['props'],
413
+ ): ShaderDesc<ShType> {
414
+ return {
415
+ descType: 'shader',
416
+ shType: shaderType,
417
+ props: props as ShaderDesc<ShType>['props'],
418
+ };
419
+ }
420
+
421
+ /**
422
+ * Get a Node by its ID
423
+ *
424
+ * @param id
425
+ * @returns
426
+ */
427
+ getNodeById(id: number): INode | null {
428
+ return this.nodes.get(id) || null;
429
+ }
430
+
431
+ toggleFreeze() {
432
+ throw new Error('Not implemented');
433
+ }
434
+
435
+ advanceFrame() {
436
+ throw new Error('Not implemented');
437
+ }
438
+
439
+ /**
440
+ * Re-render the current frame without advancing any running animations.
441
+ *
442
+ * @remarks
443
+ * Any state changes will be reflected in the re-rendered frame. Useful for
444
+ * debugging.
445
+ *
446
+ * May not do anything if the render loop is running on a separate worker.
447
+ */
448
+ rerender() {
449
+ throw new Error('Not implemented');
450
+ }
451
+ }