@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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 (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -0,0 +1,83 @@
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 { type Stage } from '../Stage.js';
21
+
22
+ export abstract class Platform {
23
+ /**
24
+ * Creates a new canvas element.
25
+ * @returns The created HTMLCanvasElement.
26
+ */
27
+ abstract createCanvas(): HTMLCanvasElement;
28
+
29
+ /**
30
+ * Get a DOM element by ID
31
+ * @returns The DOM element (or null)
32
+ */
33
+ abstract getElementById(id: string): HTMLElement | null;
34
+
35
+ /**
36
+ * Starts the main rendering loop, calling the provided update function every frame.
37
+ * @param Stage - The stage for rendering
38
+ */
39
+ abstract startLoop(stage: Stage): void;
40
+
41
+ /**
42
+ * Abstracted createImageBitmap method.
43
+ * @param blob - The image source to create the ImageBitmap from.
44
+ * @param sxOrOptions - The source rectangle x coordinate or ImageBitmapOptions.
45
+ * @param sy - The source rectangle y coordinate.
46
+ * @param sw - The source rectangle width.
47
+ * @param sh - The source rectangle height.
48
+ * @param options - The ImageBitmapOptions.
49
+ * @returns A promise that resolves with the created ImageBitmap.
50
+ */
51
+ abstract createImageBitmap(blob: ImageBitmapSource): Promise<ImageBitmap>;
52
+ abstract createImageBitmap(
53
+ blob: ImageBitmapSource,
54
+ options: ImageBitmapOptions,
55
+ ): Promise<ImageBitmap>;
56
+ abstract createImageBitmap(
57
+ blob: ImageBitmapSource,
58
+ sx: number,
59
+ sy: number,
60
+ sw: number,
61
+ sh: number,
62
+ ): Promise<ImageBitmap>;
63
+ abstract createImageBitmap(
64
+ blob: ImageBitmapSource,
65
+ sx: number,
66
+ sy: number,
67
+ sw: number,
68
+ sh: number,
69
+ options: ImageBitmapOptions,
70
+ ): Promise<ImageBitmap>;
71
+
72
+ /**
73
+ * Retrieves the current timestamp.
74
+ * @returns The current timestamp.
75
+ */
76
+ abstract getTimeStamp(): number;
77
+
78
+ /**
79
+ * Adds a FontFace to the platforms FontFaceSet
80
+ * @param font - The FontFace to add
81
+ */
82
+ abstract addFont(font: FontFace): void;
83
+ }
@@ -0,0 +1,132 @@
1
+ import { Platform } from '../Platform.js';
2
+ import type { Stage } from '../../Stage.js';
3
+
4
+ /**
5
+ * make fontface add not show errors
6
+ */
7
+ interface FontFaceSetWithAdd extends FontFaceSet {
8
+ add(font: FontFace): void;
9
+ }
10
+
11
+ export class WebPlatform extends Platform {
12
+ ////////////////////////
13
+ // Platform-specific methods
14
+ ////////////////////////
15
+
16
+ override createCanvas(): HTMLCanvasElement {
17
+ const canvas = document.createElement('canvas');
18
+ return canvas;
19
+ }
20
+
21
+ override getElementById(id: string): HTMLElement | null {
22
+ return document.getElementById(id);
23
+ }
24
+
25
+ ////////////////////////
26
+ // Update loop
27
+ ////////////////////////
28
+
29
+ override startLoop(stage: Stage): void {
30
+ let isIdle = false;
31
+ let lastFrameTime = 0;
32
+
33
+ const runLoop = (currentTime: number = 0) => {
34
+ const targetFrameTime = stage.targetFrameTime;
35
+
36
+ // Check if we should throttle this frame
37
+ if (
38
+ targetFrameTime > 0 &&
39
+ currentTime - lastFrameTime < targetFrameTime
40
+ ) {
41
+ // Too early for next frame, schedule with setTimeout for precise timing
42
+ const delay = targetFrameTime - (currentTime - lastFrameTime);
43
+ setTimeout(() => requestAnimationFrame(runLoop), delay);
44
+ return;
45
+ }
46
+
47
+ stage.updateFrameTime();
48
+ stage.updateAnimations();
49
+
50
+ if (!stage.hasSceneUpdates()) {
51
+ // We still need to calculate the fps else it looks like the app is frozen
52
+ stage.calculateFps();
53
+
54
+ if (targetFrameTime > 0) {
55
+ // Use setTimeout for throttled idle frames
56
+ setTimeout(
57
+ () => requestAnimationFrame(runLoop),
58
+ Math.max(targetFrameTime, 16.666666666666668),
59
+ );
60
+ } else {
61
+ // Use standard idle timeout when not throttling
62
+ setTimeout(() => requestAnimationFrame(runLoop), 16.666666666666668);
63
+ }
64
+
65
+ if (isIdle === false) {
66
+ stage.shManager.cleanup();
67
+ stage.eventBus.emit('idle');
68
+ isIdle = true;
69
+ }
70
+
71
+ if (stage.txMemManager.checkCleanup() === true) {
72
+ stage.txMemManager.cleanup();
73
+ }
74
+
75
+ stage.flushFrameEvents();
76
+ return;
77
+ }
78
+
79
+ isIdle = false;
80
+ stage.drawFrame();
81
+ stage.flushFrameEvents();
82
+
83
+ // Schedule next frame
84
+ if (targetFrameTime > 0) {
85
+ // Use setTimeout + rAF combination for precise FPS control
86
+ const nextFrameDelay = Math.max(
87
+ 0,
88
+ targetFrameTime - (performance.now() - currentTime),
89
+ );
90
+ setTimeout(() => requestAnimationFrame(runLoop), nextFrameDelay);
91
+ } else {
92
+ // Use standard rAF when not throttling
93
+ requestAnimationFrame(runLoop);
94
+ }
95
+ };
96
+ requestAnimationFrame(runLoop);
97
+ }
98
+
99
+ ////////////////////////
100
+ // ImageBitmap
101
+ ////////////////////////
102
+
103
+ override createImageBitmap(
104
+ blob: ImageBitmapSource,
105
+ sxOrOptions?: number | ImageBitmapOptions,
106
+ sy?: number,
107
+ sw?: number,
108
+ sh?: number,
109
+ options?: ImageBitmapOptions,
110
+ ): Promise<ImageBitmap> {
111
+ if (typeof sxOrOptions === 'number') {
112
+ return createImageBitmap(
113
+ blob,
114
+ sxOrOptions,
115
+ sy ?? 0,
116
+ sw ?? 0,
117
+ sh ?? 0,
118
+ options,
119
+ );
120
+ } else {
121
+ return createImageBitmap(blob, sxOrOptions);
122
+ }
123
+ }
124
+
125
+ getTimeStamp(): number {
126
+ return performance ? performance.now() : Date.now();
127
+ }
128
+
129
+ override addFont(font: FontFace): void {
130
+ (document.fonts as FontFaceSetWithAdd).add(font);
131
+ }
132
+ }
@@ -34,7 +34,8 @@ export abstract class CoreContextTexture {
34
34
  this.memManager.setTextureMemUse(this.textureSource, byteSize);
35
35
  }
36
36
 
37
- abstract load(): void;
37
+ abstract load(): Promise<void>;
38
+ abstract release(): void;
38
39
  abstract free(): void;
39
40
 
40
41
  get renderable(): boolean {
@@ -25,7 +25,7 @@ import type { ContextSpy } from '../lib/ContextSpy.js';
25
25
  import type { RenderCoords } from '../lib/RenderCoords.js';
26
26
  import type { RectWithValid } from '../lib/utils.js';
27
27
  import type { CoreShaderProgram } from './CoreShaderProgram.js';
28
- import type { Texture } from '../textures/Texture.js';
28
+ import type { Texture, TextureCoords } from '../textures/Texture.js';
29
29
  import { CoreContextTexture } from './CoreContextTexture.js';
30
30
  import type { CoreShaderType, CoreShaderNode } from './CoreShaderNode.js';
31
31
 
@@ -38,6 +38,7 @@ export interface QuadOptions {
38
38
  colorBr: number;
39
39
  texture: Texture | null;
40
40
  textureOptions: TextureOptions | null;
41
+ textureCoords: TextureCoords | undefined;
41
42
  zIndex: number;
42
43
  shader: CoreShaderNode | null;
43
44
  alpha: number;
@@ -51,7 +52,8 @@ export interface QuadOptions {
51
52
  renderCoords?: RenderCoords;
52
53
  rtt: boolean;
53
54
  parentHasRenderTexture: boolean;
54
- framebufferDimensions: Dimensions;
55
+ framebufferDimensions: Dimensions | null;
56
+ time?: number | null;
55
57
  }
56
58
 
57
59
  export interface CoreRendererOptions {
@@ -69,7 +71,7 @@ export interface BufferInfo {
69
71
  export abstract class CoreRenderer {
70
72
  public options: CoreRendererOptions;
71
73
  public mode: 'webgl' | 'canvas' | undefined;
72
-
74
+ defaultTextureCoords: TextureCoords | undefined = undefined;
73
75
  readonly stage: Stage;
74
76
 
75
77
  //// Core Managers
@@ -103,5 +105,7 @@ export abstract class CoreRenderer {
103
105
  abstract renderToTexture(node: CoreNode): void;
104
106
  abstract getBufferInfo(): BufferInfo | null;
105
107
  abstract getQuadCount(): number | null;
108
+ abstract updateViewport(): void;
106
109
  abstract updateClearColor(color: number): void;
110
+ getTextureCoords?(node: CoreNode): TextureCoords | undefined;
107
111
  }
@@ -66,9 +66,7 @@ export function resolveShaderProps(
66
66
  * You could view a ShaderType as a configuration object that contains methods,
67
67
  * and values that you can use to alter the way a node is drawn by the Renderer.
68
68
  */
69
- export interface CoreShaderType<
70
- Props extends object = Record<string, unknown>,
71
- > {
69
+ export interface CoreShaderType<Props extends object = any> {
72
70
  /**
73
71
  * Values you use to draw the Shader
74
72
  */
@@ -77,6 +75,11 @@ export interface CoreShaderType<
77
75
  * used for making a cache key to check for reusability, currently only used for webgl ShaderTypes but might be needed for other types of renderer
78
76
  */
79
77
  getCacheMarkers?: (props: Props) => string;
78
+ /**
79
+ * timer that updates every loop, by default uses the stage elapsed time If you want to do a special calculation you can define a function.
80
+ * When you calculate your own value you can use the Stage timing values deltaTime, lastFrameTime, and currentFrameTime;
81
+ */
82
+ time?: boolean | ((stage: Stage) => number);
80
83
  }
81
84
 
82
85
  /**
@@ -91,6 +94,7 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
91
94
  readonly resolvedProps: Props | undefined = undefined;
92
95
  protected definedProps: Props | undefined = undefined;
93
96
  protected node: CoreNode | null = null;
97
+ readonly time: CoreShaderType['time'] = undefined;
94
98
  update: (() => void) | undefined = undefined;
95
99
 
96
100
  constructor(
@@ -101,6 +105,7 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
101
105
  ) {
102
106
  this.stage = stage;
103
107
  this.shaderType = type;
108
+ this.time = type.time;
104
109
 
105
110
  if (props !== undefined) {
106
111
  /**
@@ -152,6 +157,16 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
152
157
  this.node = node;
153
158
  }
154
159
 
160
+ createValueKey() {
161
+ let valueKey = '';
162
+ for (const key in this.resolvedProps) {
163
+ valueKey += `${key}:${this.resolvedProps[key]!};`;
164
+ }
165
+ valueKey += `node-width:${this.node!.w}`;
166
+ valueKey += `node-height:${this.node!.h}`;
167
+ return valueKey;
168
+ }
169
+
155
170
  get props(): Props | undefined {
156
171
  return this.definedProps;
157
172
  }
@@ -26,13 +26,9 @@ import {
26
26
  type QuadOptions,
27
27
  } from '../CoreRenderer.js';
28
28
  import { CanvasTexture } from './CanvasTexture.js';
29
- import {
30
- parseColor,
31
- parseToAbgrString,
32
- parseToRgbaString,
33
- } from './internal/ColorUtils.js';
34
- import { assertTruthy } from '../../../utils.js';
29
+ import { parseColor } from '../../lib/colorParser.js';
35
30
  import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
31
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
36
32
 
37
33
  export class CanvasRenderer extends CoreRenderer {
38
34
  private context: CanvasRenderingContext2D;
@@ -42,18 +38,15 @@ export class CanvasRenderer extends CoreRenderer {
42
38
  public renderToTextureActive = false;
43
39
  activeRttNode: CoreNode | null = null;
44
40
 
45
- private parsedColorCache: Map<number, string> = new Map();
46
-
47
41
  constructor(options: CoreRendererOptions) {
48
42
  super(options);
49
43
 
50
44
  this.mode = 'canvas';
51
-
52
45
  const { canvas } = options;
53
46
  this.canvas = canvas as HTMLCanvasElement;
54
47
  this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
55
48
  this.pixelRatio = this.stage.pixelRatio;
56
- this.clearColor = this.getParsedColor(this.stage.clearColor);
49
+ this.clearColor = normalizeCanvasColor(this.stage.clearColor);
57
50
  }
58
51
 
59
52
  reset(): void {
@@ -77,28 +70,15 @@ export class CanvasRenderer extends CoreRenderer {
77
70
  const ctx = this.context;
78
71
  const { tx, ty, ta, tb, tc, td, clippingRect } = quad;
79
72
  let texture = quad.texture;
80
- const textureType = texture?.type;
81
- assertTruthy(textureType, 'Texture type is not defined');
82
-
83
- // The Canvas2D renderer only supports image and color textures
84
- if (
85
- textureType !== TextureType.image &&
86
- textureType !== TextureType.color &&
87
- textureType !== TextureType.subTexture &&
88
- textureType !== TextureType.noise
89
- ) {
90
- return;
91
- }
92
-
93
- if (texture) {
94
- if (texture instanceof SubTexture) {
95
- texture = texture.parentTexture;
96
- }
97
-
98
- if (texture.state === 'freed') {
99
- return;
100
- }
101
- if (texture.state !== 'loaded') {
73
+ // The Canvas2D renderer only supports image textures, no textures are used for color blocks
74
+ if (texture !== null) {
75
+ const textureType = texture.type;
76
+ if (
77
+ textureType !== TextureType.image &&
78
+ textureType !== TextureType.subTexture &&
79
+ textureType !== TextureType.color &&
80
+ textureType !== TextureType.noise
81
+ ) {
102
82
  return;
103
83
  }
104
84
  }
@@ -156,50 +136,46 @@ export class CanvasRenderer extends CoreRenderer {
156
136
 
157
137
  renderContext(quad: QuadOptions) {
158
138
  const color = quad.colorTl;
159
- const textureType = quad.texture?.type;
160
- if (
161
- (textureType === TextureType.image ||
162
- textureType === TextureType.subTexture ||
163
- textureType === TextureType.noise) &&
164
- quad.texture?.ctxTexture
165
- ) {
139
+ const texture = quad.texture!;
140
+ const textureType = texture.type;
141
+ if (textureType !== TextureType.color) {
166
142
  const tintColor = parseColor(color);
167
- const image = (quad.texture.ctxTexture as CanvasTexture).getImage(
168
- tintColor,
169
- );
170
- this.context.globalAlpha = tintColor.a ?? quad.alpha;
171
- if (textureType === TextureType.subTexture) {
143
+ if (textureType !== TextureType.subTexture) {
144
+ const image = (texture.ctxTexture as CanvasTexture).getImage(tintColor);
145
+ this.context.globalAlpha = tintColor.a ?? quad.alpha;
172
146
  this.context.drawImage(
173
147
  image,
174
- (quad.texture as SubTexture).props.x,
175
- (quad.texture as SubTexture).props.y,
176
- (quad.texture as SubTexture).props.width,
177
- (quad.texture as SubTexture).props.height,
178
148
  quad.tx,
179
149
  quad.ty,
180
150
  quad.width,
181
151
  quad.height,
182
152
  );
183
- } else {
184
- try {
185
- this.context.drawImage(
186
- image,
187
- quad.tx,
188
- quad.ty,
189
- quad.width,
190
- quad.height,
191
- );
192
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
193
- } catch (error) {
194
- // noop
195
- }
153
+ this.context.globalAlpha = 1;
154
+ return;
196
155
  }
156
+ const image = (
157
+ (texture as SubTexture).parentTexture.ctxTexture as CanvasTexture
158
+ ).getImage(tintColor);
159
+ const props = (texture as SubTexture).props;
160
+
161
+ this.context.globalAlpha = tintColor.a ?? quad.alpha;
162
+ this.context.drawImage(
163
+ image,
164
+ props.x,
165
+ props.y,
166
+ props.w,
167
+ props.h,
168
+ quad.tx,
169
+ quad.ty,
170
+ quad.width,
171
+ quad.height,
172
+ );
197
173
  this.context.globalAlpha = 1;
198
174
  return;
199
175
  }
200
176
  const hasGradient =
201
177
  quad.colorTl !== quad.colorTr || quad.colorTl !== quad.colorBr;
202
- if (textureType === TextureType.color && hasGradient) {
178
+ if (hasGradient === true) {
203
179
  let endX: number = quad.tx;
204
180
  let endY: number = quad.ty;
205
181
  let endColor: number;
@@ -220,12 +196,12 @@ export class CanvasRenderer extends CoreRenderer {
220
196
  endX,
221
197
  endY,
222
198
  );
223
- gradient.addColorStop(0, this.getParsedColor(color));
224
- gradient.addColorStop(1, this.getParsedColor(endColor));
199
+ gradient.addColorStop(0, normalizeCanvasColor(color));
200
+ gradient.addColorStop(1, normalizeCanvasColor(endColor));
225
201
  this.context.fillStyle = gradient;
226
202
  this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
227
- } else if (textureType === TextureType.color) {
228
- this.context.fillStyle = this.getParsedColor(color);
203
+ } else {
204
+ this.context.fillStyle = normalizeCanvasColor(color);
229
205
  this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
230
206
  }
231
207
  }
@@ -269,30 +245,20 @@ export class CanvasRenderer extends CoreRenderer {
269
245
  return null;
270
246
  }
271
247
 
272
- getParsedColor(color: number, isRGBA: boolean = false) {
273
- let out = this.parsedColorCache.get(color);
274
- if (out !== undefined) {
275
- return out;
276
- }
277
- if (isRGBA) {
278
- out = parseToRgbaString(color);
279
- } else {
280
- out = parseToAbgrString(color);
281
- }
282
- this.parsedColorCache.set(color, out);
283
- return out;
284
- }
285
-
286
248
  /**
287
249
  * Updates the clear color of the canvas renderer.
288
250
  *
289
251
  * @param color - The color to set as the clear color.
290
252
  */
291
253
  updateClearColor(color: number) {
292
- this.clearColor = this.getParsedColor(color);
254
+ this.clearColor = normalizeCanvasColor(color);
255
+ }
256
+
257
+ override updateViewport(): void {
258
+ // noop
293
259
  }
294
260
 
295
- override getDefaultShaderNode() {
261
+ getDefaultShaderNode() {
296
262
  return null;
297
263
  }
298
264
  }
@@ -16,10 +16,10 @@
16
16
  */
17
17
 
18
18
  import type { CoreNode } from '../../CoreNode.js';
19
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
19
20
  import type { Stage } from '../../Stage.js';
20
21
  import type { QuadOptions } from '../CoreRenderer.js';
21
22
  import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
22
- import type { CanvasRenderer } from './CanvasRenderer.js';
23
23
 
24
24
  export type CanvasShaderType<
25
25
  T extends object = Record<string, unknown>,
@@ -67,10 +67,7 @@ export class CanvasShaderNode<
67
67
 
68
68
  this.update = () => {
69
69
  const prevKey = this.valueKey;
70
- this.valueKey = '';
71
- for (const key in this.resolvedProps) {
72
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
- }
70
+ this.valueKey = this.createValueKey();
74
71
 
75
72
  if (prevKey === this.valueKey) {
76
73
  return;
@@ -94,6 +91,6 @@ export class CanvasShaderNode<
94
91
  }
95
92
 
96
93
  toColorString(rgba: number) {
97
- return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
94
+ return normalizeCanvasColor(rgba, true);
98
95
  }
99
96
  }
@@ -19,8 +19,8 @@
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
21
  import { assertTruthy } from '../../../utils.js';
22
+ import { formatRgba, type IParsedColor } from '../../lib/colorParser.js';
22
23
  import { CoreContextTexture } from '../CoreContextTexture.js';
23
- import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
24
 
25
25
  export class CanvasTexture extends CoreContextTexture {
26
26
  protected image:
@@ -35,24 +35,28 @@ export class CanvasTexture extends CoreContextTexture {
35
35
  }
36
36
  | undefined;
37
37
 
38
- load(): void {
38
+ async load(): Promise<void> {
39
39
  this.textureSource.setState('loading');
40
40
 
41
- this.onLoadRequest()
42
- .then((size) => {
43
- this.textureSource.setState('loaded', size);
44
- this.textureSource.freeTextureData();
45
- this.updateMemSize();
46
- })
47
- .catch((err) => {
48
- this.textureSource.setState('failed', err as Error);
49
- this.textureSource.freeTextureData();
50
- });
41
+ try {
42
+ const size = await this.onLoadRequest();
43
+ this.textureSource.setState('loaded', size);
44
+ this.textureSource.freeTextureData();
45
+ this.updateMemSize();
46
+ } catch (err) {
47
+ this.textureSource.setState('failed', err as Error);
48
+ this.textureSource.freeTextureData();
49
+ throw err;
50
+ }
51
51
  }
52
52
 
53
- free(): void {
53
+ release(): void {
54
54
  this.image = undefined;
55
55
  this.tintCache = undefined;
56
+ }
57
+
58
+ free(): void {
59
+ this.release();
56
60
  this.textureSource.setState('freed');
57
61
  this.setTextureMemUse(0);
58
62
  this.textureSource.freeTextureData();
@@ -65,8 +69,8 @@ export class CanvasTexture extends CoreContextTexture {
65
69
  const mult = this.tintCache ? 8 : 4;
66
70
  if (this.textureSource.dimensions) {
67
71
  this.setTextureMemUse(
68
- this.textureSource.dimensions.width *
69
- this.textureSource.dimensions.height *
72
+ this.textureSource.dimensions.w *
73
+ this.textureSource.dimensions.h *
70
74
  mult,
71
75
  );
72
76
  }
@@ -142,15 +146,15 @@ export class CanvasTexture extends CoreContextTexture {
142
146
  const ctx = canvas.getContext('2d');
143
147
  if (ctx) ctx.putImageData(data, 0, 0);
144
148
  this.image = canvas;
145
- return { width: data.width, height: data.height };
149
+ return { w: data.width, h: data.height };
146
150
  } else if (
147
151
  (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
148
152
  data instanceof HTMLImageElement
149
153
  ) {
150
154
  this.image = data;
151
- return { width: data.width, height: data.height };
155
+ return { w: data.width, h: data.height };
152
156
  }
153
157
 
154
- return { width: 0, height: 0 };
158
+ return { w: 0, h: 0 };
155
159
  }
156
160
  }