@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,567 @@
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 {
21
+ assertTruthy,
22
+ createWebGLContext,
23
+ hasOwn,
24
+ mergeColorAlphaPremultiplied,
25
+ } from '../../../utils.js';
26
+ import {
27
+ CoreRenderer,
28
+ type QuadOptions as QuadOptions,
29
+ } from '../CoreRenderer.js';
30
+ import { WebGlCoreRenderOp } from './WebGlCoreRenderOp.js';
31
+ import type { CoreContextTexture } from '../CoreContextTexture.js';
32
+ import {
33
+ createIndexBuffer,
34
+ type CoreWebGlParameters,
35
+ type CoreWebGlExtensions,
36
+ getWebGlParameters,
37
+ getWebGlExtensions,
38
+ } from './internal/RendererUtils.js';
39
+ import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
40
+ import { Texture } from '../../textures/Texture.js';
41
+ import { ColorTexture } from '../../textures/ColorTexture.js';
42
+ import type { Stage } from '../../Stage.js';
43
+ import { SubTexture } from '../../textures/SubTexture.js';
44
+ import { WebGlCoreCtxSubTexture } from './WebGlCoreCtxSubTexture.js';
45
+ import type {
46
+ CoreTextureManager,
47
+ TextureOptions,
48
+ } from '../../CoreTextureManager.js';
49
+ import { CoreShaderManager } from '../../CoreShaderManager.js';
50
+ import type { CoreShader } from '../CoreShader.js';
51
+ import { BufferCollection } from './internal/BufferCollection.js';
52
+ import {
53
+ compareRect,
54
+ getNormalizedRgbaComponents,
55
+ type Rect,
56
+ } from '../../lib/utils.js';
57
+ import type { Dimensions } from '../../../common/CommonTypes.js';
58
+ import { WebGlCoreShader } from './WebGlCoreShader.js';
59
+ import { RoundedRectangle } from './shaders/RoundedRectangle.js';
60
+
61
+ const WORDS_PER_QUAD = 24;
62
+ const BYTES_PER_QUAD = WORDS_PER_QUAD * 4;
63
+
64
+ export interface WebGlCoreRendererOptions {
65
+ stage: Stage;
66
+ canvas: HTMLCanvasElement | OffscreenCanvas;
67
+ pixelRatio: number;
68
+ txManager: CoreTextureManager;
69
+ shManager: CoreShaderManager;
70
+ clearColor: number;
71
+ bufferMemory: number;
72
+ }
73
+
74
+ interface CoreWebGlSystem {
75
+ parameters: CoreWebGlParameters;
76
+ extensions: CoreWebGlExtensions;
77
+ }
78
+
79
+ export class WebGlCoreRenderer extends CoreRenderer {
80
+ //// WebGL Native Context and Data
81
+ gl: WebGLRenderingContext;
82
+ system: CoreWebGlSystem;
83
+
84
+ //// Core Managers
85
+ txManager: CoreTextureManager;
86
+ shManager: CoreShaderManager;
87
+
88
+ //// Options
89
+ options: Required<WebGlCoreRendererOptions>;
90
+
91
+ //// Persistent data
92
+ quadBuffer: ArrayBuffer = new ArrayBuffer(1024 * 1024 * 4);
93
+ fQuadBuffer: Float32Array = new Float32Array(this.quadBuffer);
94
+ uiQuadBuffer: Uint32Array = new Uint32Array(this.quadBuffer);
95
+ renderOps: WebGlCoreRenderOp[] = [];
96
+
97
+ //// Render Op / Buffer Filling State
98
+ curBufferIdx = 0;
99
+ curRenderOp: WebGlCoreRenderOp | null = null;
100
+ renderables: Array<QuadOptions | WebGlCoreRenderOp> = [];
101
+
102
+ //// Default Shader
103
+ defaultShader: WebGlCoreShader;
104
+ quadBufferCollection: BufferCollection;
105
+
106
+ /**
107
+ * White pixel texture used by default when no texture is specified.
108
+ */
109
+ defaultTexture: Texture;
110
+
111
+ constructor(options: WebGlCoreRendererOptions) {
112
+ super(options.stage);
113
+ const { canvas, clearColor, bufferMemory } = options;
114
+ this.options = options;
115
+ this.txManager = options.txManager;
116
+ this.shManager = options.shManager;
117
+ this.defaultTexture = new ColorTexture(this.txManager);
118
+
119
+ const gl = createWebGLContext(canvas);
120
+ if (!gl) {
121
+ throw new Error('Unable to create WebGL context');
122
+ }
123
+ this.gl = gl;
124
+
125
+ const color = getNormalizedRgbaComponents(clearColor);
126
+ gl.viewport(0, 0, canvas.width, canvas.height);
127
+ gl.clearColor(color[0]!, color[1]!, color[2]!, color[3]!);
128
+
129
+ createIndexBuffer(gl, bufferMemory);
130
+
131
+ this.system = {
132
+ parameters: getWebGlParameters(gl),
133
+ extensions: getWebGlExtensions(gl),
134
+ };
135
+ this.shManager.renderer = this;
136
+ this.defaultShader = this.shManager.loadShader(
137
+ 'DefaultShaderBatched',
138
+ ).shader;
139
+ const quadBuffer = gl.createBuffer();
140
+ assertTruthy(quadBuffer);
141
+ const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
142
+ this.quadBufferCollection = new BufferCollection([
143
+ {
144
+ buffer: quadBuffer,
145
+ attributes: {
146
+ a_position: {
147
+ name: 'a_position',
148
+ size: 2, // 2 components per iteration
149
+ type: gl.FLOAT, // the data is 32bit floats
150
+ normalized: false, // don't normalize the data
151
+ stride, // 0 = move forward size * sizeof(type) each iteration to get the next position
152
+ offset: 0, // start at the beginning of the buffer
153
+ },
154
+ a_textureCoordinate: {
155
+ name: 'a_textureCoordinate',
156
+ size: 2,
157
+ type: gl.FLOAT,
158
+ normalized: false,
159
+ stride,
160
+ offset: 2 * Float32Array.BYTES_PER_ELEMENT,
161
+ },
162
+ a_color: {
163
+ name: 'a_color',
164
+ size: 4,
165
+ type: gl.UNSIGNED_BYTE,
166
+ normalized: true,
167
+ stride,
168
+ offset: 4 * Float32Array.BYTES_PER_ELEMENT,
169
+ },
170
+ a_textureIndex: {
171
+ name: 'a_textureIndex',
172
+ size: 1,
173
+ type: gl.FLOAT,
174
+ normalized: false,
175
+ stride,
176
+ offset: 5 * Float32Array.BYTES_PER_ELEMENT,
177
+ },
178
+ },
179
+ },
180
+ ]);
181
+ }
182
+
183
+ reset() {
184
+ this.curBufferIdx = 0;
185
+ this.curRenderOp = null;
186
+ this.renderOps.length = 0;
187
+ this.gl.clear(this.gl.COLOR_BUFFER_BIT);
188
+ }
189
+
190
+ override getShaderManager(): CoreShaderManager {
191
+ return this.shManager;
192
+ }
193
+
194
+ override createCtxTexture(textureSource: Texture): CoreContextTexture {
195
+ if (textureSource instanceof SubTexture) {
196
+ return new WebGlCoreCtxSubTexture(this.gl, textureSource);
197
+ }
198
+ return new WebGlCoreCtxTexture(this.gl, textureSource);
199
+ }
200
+
201
+ /**
202
+ * Add a renderable to the current set of renderables.
203
+ *
204
+ * @remarks
205
+ * If a {@link QuadOptions} structure is provided, this will ultimately result
206
+ * in a render ops being created, merged and added to the render ops list.
207
+ *
208
+ * If a direct {@link WebGlCoreRenderOp} instance is provided, it will be
209
+ * added to the render ops list as-is. Be sure to set the zIndex correctly of
210
+ * the render op to ensure proper rendering order.
211
+ *
212
+ * @param renderable
213
+ */
214
+ override addRenderable(renderable: QuadOptions | WebGlCoreRenderOp) {
215
+ this.renderables?.push(renderable);
216
+ }
217
+
218
+ private addQuad(params: QuadOptions) {
219
+ const { fQuadBuffer, uiQuadBuffer } = this;
220
+ const {
221
+ width,
222
+ height,
223
+ clippingRect,
224
+ colorTl,
225
+ colorTr,
226
+ colorBl,
227
+ colorBr,
228
+ textureOptions,
229
+ shader,
230
+ shaderProps,
231
+ alpha,
232
+ wpx,
233
+ wpy,
234
+ ta,
235
+ tb,
236
+ tc,
237
+ td,
238
+ } = params;
239
+ let { texture } = params;
240
+
241
+ /**
242
+ * If the shader props contain any automatic properties, update it with the
243
+ * current dimensions that will be used to render the quad.
244
+ */
245
+ if (shaderProps && hasOwn(shaderProps, '$dimensions')) {
246
+ const dimensions = shaderProps.$dimensions as Dimensions;
247
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
248
+ dimensions.width = width;
249
+ dimensions.height = height;
250
+ }
251
+
252
+ texture = texture ?? this.defaultTexture;
253
+ assertTruthy(texture instanceof Texture, 'Invalid texture type');
254
+
255
+ let { curBufferIdx: bufferIdx, curRenderOp } = this;
256
+ const targetDims = {
257
+ width,
258
+ height,
259
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
260
+ };
261
+ const targetShader = shader || this.defaultShader;
262
+ assertTruthy(targetShader instanceof WebGlCoreShader);
263
+ if (curRenderOp) {
264
+ // If the current render op is not the same shader, create a new one
265
+ // If the current render op's shader props are not compatible with the
266
+ // the new shader props, create a new one render op.
267
+ if (
268
+ curRenderOp.shader !== targetShader ||
269
+ !compareRect(curRenderOp.clippingRect, clippingRect) ||
270
+ (curRenderOp.shader !== this.defaultShader &&
271
+ (!shaderProps ||
272
+ !curRenderOp.shader.canBatchShaderProps(
273
+ curRenderOp.shaderProps,
274
+ shaderProps,
275
+ )))
276
+ ) {
277
+ curRenderOp = null;
278
+ }
279
+ }
280
+ assertTruthy(targetShader instanceof WebGlCoreShader);
281
+
282
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
283
+ if (!curRenderOp) {
284
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
285
+ this.newRenderOp(
286
+ targetShader,
287
+ shaderProps as any,
288
+ alpha,
289
+ targetDims,
290
+ clippingRect,
291
+ bufferIdx,
292
+ );
293
+ curRenderOp = this.curRenderOp;
294
+ assertTruthy(curRenderOp);
295
+ }
296
+
297
+ const flipX = textureOptions?.flipX ?? false;
298
+ const flipY = textureOptions?.flipY ?? false;
299
+
300
+ let texCoordX1 = 0;
301
+ let texCoordY1 = 0;
302
+ let texCoordX2 = 1;
303
+ let texCoordY2 = 1;
304
+
305
+ if (texture instanceof SubTexture) {
306
+ const { x: tx, y: ty, width: tw, height: th } = texture.props;
307
+ const { width: parentW = 0, height: parentH = 0 } = texture.parentTexture
308
+ .dimensions || { width: 0, height: 0 };
309
+ texCoordX1 = tx / parentW;
310
+ texCoordX2 = texCoordX1 + tw / parentW;
311
+ texCoordY1 = ty / parentH;
312
+ texCoordY2 = texCoordY1 + th / parentH;
313
+ texture = texture.parentTexture;
314
+ }
315
+
316
+ // Flip texture coordinates if dictated by texture options
317
+ if (flipX) {
318
+ [texCoordX1, texCoordX2] = [texCoordX2, texCoordX1];
319
+ }
320
+ if (flipY) {
321
+ [texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
322
+ }
323
+
324
+ const { txManager } = this.stage;
325
+ const ctxTexture = txManager.getCtxTexture(texture);
326
+ assertTruthy(ctxTexture instanceof WebGlCoreCtxTexture);
327
+ const textureIdx = this.addTexture(ctxTexture, bufferIdx);
328
+ curRenderOp = this.curRenderOp;
329
+ assertTruthy(curRenderOp);
330
+
331
+ // render quad advanced
332
+ if (tb !== 0 || tc !== 0) {
333
+ // Upper-Left
334
+ fQuadBuffer[bufferIdx++] = wpx; // vertexX
335
+ fQuadBuffer[bufferIdx++] = wpy; // vertexY
336
+ fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
337
+ fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
338
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
339
+ colorTl,
340
+ alpha,
341
+ true,
342
+ ); // color
343
+ fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
344
+
345
+ // Upper-Right
346
+ fQuadBuffer[bufferIdx++] = wpx + width * ta;
347
+ fQuadBuffer[bufferIdx++] = wpy + width * tc;
348
+ fQuadBuffer[bufferIdx++] = texCoordX2;
349
+ fQuadBuffer[bufferIdx++] = texCoordY1;
350
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
351
+ colorTr,
352
+ alpha,
353
+ true,
354
+ );
355
+ fQuadBuffer[bufferIdx++] = textureIdx;
356
+
357
+ // Lower-Left
358
+ fQuadBuffer[bufferIdx++] = wpx + height * tb;
359
+ fQuadBuffer[bufferIdx++] = wpy + height * td;
360
+ fQuadBuffer[bufferIdx++] = texCoordX1;
361
+ fQuadBuffer[bufferIdx++] = texCoordY2;
362
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
363
+ colorBl,
364
+ alpha,
365
+ true,
366
+ );
367
+ fQuadBuffer[bufferIdx++] = textureIdx;
368
+
369
+ // Lower-Right
370
+ fQuadBuffer[bufferIdx++] = wpx + width * ta + height * tb;
371
+ fQuadBuffer[bufferIdx++] = wpy + width * tc + height * td;
372
+ fQuadBuffer[bufferIdx++] = texCoordX2;
373
+ fQuadBuffer[bufferIdx++] = texCoordY2;
374
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
375
+ colorBr,
376
+ alpha,
377
+ true,
378
+ );
379
+ fQuadBuffer[bufferIdx++] = textureIdx;
380
+ } else {
381
+ // Calculate the right corner of the quad
382
+ // multiplied by the scale
383
+ const rightCornerX = wpx + width * ta;
384
+ const rightCornerY = wpy + height * td;
385
+
386
+ // Upper-Left
387
+ fQuadBuffer[bufferIdx++] = wpx; // vertexX
388
+ fQuadBuffer[bufferIdx++] = wpy; // vertexY
389
+ fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
390
+ fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
391
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
392
+ colorTl,
393
+ alpha,
394
+ true,
395
+ ); // color
396
+ fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
397
+
398
+ // Upper-Right
399
+ fQuadBuffer[bufferIdx++] = rightCornerX;
400
+ fQuadBuffer[bufferIdx++] = wpy;
401
+ fQuadBuffer[bufferIdx++] = texCoordX2;
402
+ fQuadBuffer[bufferIdx++] = texCoordY1;
403
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
404
+ colorTr,
405
+ alpha,
406
+ true,
407
+ );
408
+ fQuadBuffer[bufferIdx++] = textureIdx;
409
+
410
+ // Lower-Left
411
+ fQuadBuffer[bufferIdx++] = wpx;
412
+ fQuadBuffer[bufferIdx++] = rightCornerY;
413
+ fQuadBuffer[bufferIdx++] = texCoordX1;
414
+ fQuadBuffer[bufferIdx++] = texCoordY2;
415
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
416
+ colorBl,
417
+ alpha,
418
+ true,
419
+ );
420
+ fQuadBuffer[bufferIdx++] = textureIdx;
421
+
422
+ // Lower-Right
423
+ fQuadBuffer[bufferIdx++] = rightCornerX;
424
+ fQuadBuffer[bufferIdx++] = rightCornerY;
425
+ fQuadBuffer[bufferIdx++] = texCoordX2;
426
+ fQuadBuffer[bufferIdx++] = texCoordY2;
427
+ uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
428
+ colorBr,
429
+ alpha,
430
+ true,
431
+ );
432
+ fQuadBuffer[bufferIdx++] = textureIdx;
433
+ }
434
+
435
+ // Update the length of the current render op
436
+ curRenderOp.length += WORDS_PER_QUAD;
437
+ curRenderOp.numQuads++;
438
+ this.curBufferIdx = bufferIdx;
439
+ }
440
+
441
+ /**
442
+ * Replace the existing RenderOp with a new one that uses the specified Shader
443
+ * and starts at the specified buffer index.
444
+ *
445
+ * @param shader
446
+ * @param bufferIdx
447
+ */
448
+ private newRenderOp(
449
+ shader: WebGlCoreShader,
450
+ shaderProps: Record<string, unknown>,
451
+ alpha: number,
452
+ dimensions: Dimensions,
453
+ clippingRect: Rect | null,
454
+ bufferIdx: number,
455
+ ) {
456
+ const curRenderOp = new WebGlCoreRenderOp(
457
+ this.gl,
458
+ this.options,
459
+ this.quadBufferCollection,
460
+ shader,
461
+ shaderProps,
462
+ alpha,
463
+ clippingRect,
464
+ dimensions,
465
+ bufferIdx,
466
+ 0, // Z-Index is only used for explictly added Render Ops
467
+ );
468
+ this.curRenderOp = curRenderOp;
469
+ this.renderOps.push(curRenderOp);
470
+ }
471
+
472
+ /**
473
+ * Add a texture to the current RenderOp. If the texture cannot be added to the
474
+ * current RenderOp, a new RenderOp will be created and the texture will be added
475
+ * to that one.
476
+ *
477
+ * If the texture cannot be added to the new RenderOp, an error will be thrown.
478
+ *
479
+ * @param texture
480
+ * @param bufferIdx
481
+ * @param recursive
482
+ * @returns Assigned Texture Index of the texture in the render op
483
+ */
484
+ private addTexture(
485
+ texture: WebGlCoreCtxTexture,
486
+ bufferIdx: number,
487
+ recursive?: boolean,
488
+ ): number {
489
+ const { curRenderOp } = this;
490
+ assertTruthy(curRenderOp);
491
+ const textureIdx = curRenderOp.addTexture(texture);
492
+ // TODO: Refactor to be more DRY
493
+ if (textureIdx === 0xffffffff) {
494
+ if (recursive) {
495
+ throw new Error('Unable to add texture to render op');
496
+ }
497
+
498
+ const { shader, shaderProps, dimensions, clippingRect, alpha } =
499
+ curRenderOp;
500
+ this.newRenderOp(
501
+ shader,
502
+ shaderProps,
503
+ alpha,
504
+ dimensions,
505
+ clippingRect,
506
+ bufferIdx,
507
+ );
508
+ return this.addTexture(texture, bufferIdx, true);
509
+ }
510
+ return textureIdx;
511
+ }
512
+
513
+ /**
514
+ * Sort renderable children and add them to the render ops.
515
+ * @todo:
516
+ * - move to merge sort to keep relative order
517
+ * - support z-index parent locking
518
+ *
519
+ */
520
+
521
+ sortRenderables() {
522
+ const { renderables } = this;
523
+ renderables.sort((a, b) => a.zIndex - b.zIndex);
524
+
525
+ renderables.forEach((renderable) => {
526
+ if (renderable instanceof WebGlCoreRenderOp) {
527
+ this.renderOps.push(renderable);
528
+ this.curRenderOp = null;
529
+ } else {
530
+ this.addQuad(renderable);
531
+ }
532
+ });
533
+ }
534
+
535
+ /**
536
+ * Render the current set of RenderOps to render to the specified surface.
537
+ *
538
+ * TODO: 'screen' is the only supported surface at the moment.
539
+ *
540
+ * @param surface
541
+ */
542
+ render(surface: 'screen' | CoreContextTexture = 'screen'): void {
543
+ const { gl, quadBuffer } = this;
544
+
545
+ const arr = new Float32Array(quadBuffer, 0, this.curBufferIdx);
546
+
547
+ const buffer = this.quadBufferCollection.getBuffer('a_position') ?? null;
548
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
549
+ gl.bufferData(gl.ARRAY_BUFFER, arr, gl.DYNAMIC_DRAW);
550
+
551
+ const doLog = false; // idx++ % 100 === 0;
552
+ if (doLog) {
553
+ console.log('renderOps', this.renderOps.length);
554
+ }
555
+ this.renderOps.forEach((renderOp, i) => {
556
+ if (doLog) {
557
+ console.log('renderOp', i, renderOp.numQuads);
558
+ }
559
+ renderOp.draw();
560
+ });
561
+
562
+ // clean up
563
+ this.renderables = [];
564
+ }
565
+ }
566
+
567
+ const idx = 0;