@solidtv/renderer 1.0.0

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 (424) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +137 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +11 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +26 -0
  8. package/dist/exports/canvas.js +27 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +50 -0
  11. package/dist/exports/index.js +40 -0
  12. package/dist/exports/index.js.map +1 -0
  13. package/dist/exports/inspector.d.ts +4 -0
  14. package/dist/exports/inspector.js +5 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +27 -0
  17. package/dist/exports/utils.js +28 -0
  18. package/dist/exports/utils.js.map +1 -0
  19. package/dist/exports/webgl-shaders.d.ts +11 -0
  20. package/dist/exports/webgl-shaders.js +12 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +28 -0
  23. package/dist/exports/webgl.js +29 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +110 -0
  26. package/dist/src/common/CommonTypes.js +2 -0
  27. package/dist/src/common/CommonTypes.js.map +1 -0
  28. package/dist/src/common/EventEmitter.d.ts +12 -0
  29. package/dist/src/common/EventEmitter.js +48 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +58 -0
  32. package/dist/src/common/IAnimationController.js +2 -0
  33. package/dist/src/common/IAnimationController.js.map +1 -0
  34. package/dist/src/common/IEventEmitter.d.ts +8 -0
  35. package/dist/src/common/IEventEmitter.js +2 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/Autosizer.d.ts +35 -0
  38. package/dist/src/core/Autosizer.js +178 -0
  39. package/dist/src/core/Autosizer.js.map +1 -0
  40. package/dist/src/core/CoreNode.d.ts +908 -0
  41. package/dist/src/core/CoreNode.js +1837 -0
  42. package/dist/src/core/CoreNode.js.map +1 -0
  43. package/dist/src/core/CoreShaderManager.d.ts +38 -0
  44. package/dist/src/core/CoreShaderManager.js +123 -0
  45. package/dist/src/core/CoreShaderManager.js.map +1 -0
  46. package/dist/src/core/CoreTextNode.d.ts +91 -0
  47. package/dist/src/core/CoreTextNode.js +440 -0
  48. package/dist/src/core/CoreTextNode.js.map +1 -0
  49. package/dist/src/core/CoreTextureManager.d.ts +264 -0
  50. package/dist/src/core/CoreTextureManager.js +318 -0
  51. package/dist/src/core/CoreTextureManager.js.map +1 -0
  52. package/dist/src/core/Stage.d.ts +238 -0
  53. package/dist/src/core/Stage.js +804 -0
  54. package/dist/src/core/Stage.js.map +1 -0
  55. package/dist/src/core/TextureError.d.ts +11 -0
  56. package/dist/src/core/TextureError.js +37 -0
  57. package/dist/src/core/TextureError.js.map +1 -0
  58. package/dist/src/core/TextureMemoryManager.d.ts +150 -0
  59. package/dist/src/core/TextureMemoryManager.js +239 -0
  60. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  61. package/dist/src/core/animations/AnimationManager.d.ts +33 -0
  62. package/dist/src/core/animations/AnimationManager.js +137 -0
  63. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  64. package/dist/src/core/animations/CoreAnimation.d.ts +12 -0
  65. package/dist/src/core/animations/CoreAnimation.js +107 -0
  66. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  67. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  68. package/dist/src/core/lib/ContextSpy.js +20 -0
  69. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  70. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  71. package/dist/src/core/lib/ImageWorker.js +202 -0
  72. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  73. package/dist/src/core/lib/Matrix3d.d.ts +74 -0
  74. package/dist/src/core/lib/Matrix3d.js +218 -0
  75. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  76. package/dist/src/core/lib/RenderCoords.d.ts +12 -0
  77. package/dist/src/core/lib/RenderCoords.js +35 -0
  78. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  79. package/dist/src/core/lib/WebGlContextWrapper.d.ts +782 -0
  80. package/dist/src/core/lib/WebGlContextWrapper.js +1143 -0
  81. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  82. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  83. package/dist/src/core/lib/collectionUtils.js +82 -0
  84. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  85. package/dist/src/core/lib/colorCache.d.ts +1 -0
  86. package/dist/src/core/lib/colorCache.js +19 -0
  87. package/dist/src/core/lib/colorCache.js.map +1 -0
  88. package/dist/src/core/lib/colorParser.d.ts +21 -0
  89. package/dist/src/core/lib/colorParser.js +54 -0
  90. package/dist/src/core/lib/colorParser.js.map +1 -0
  91. package/dist/src/core/lib/textureCompression.d.ts +28 -0
  92. package/dist/src/core/lib/textureCompression.js +363 -0
  93. package/dist/src/core/lib/textureCompression.js.map +1 -0
  94. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  95. package/dist/src/core/lib/textureSvg.js +45 -0
  96. package/dist/src/core/lib/textureSvg.js.map +1 -0
  97. package/dist/src/core/lib/utils.d.ts +66 -0
  98. package/dist/src/core/lib/utils.js +268 -0
  99. package/dist/src/core/lib/utils.js.map +1 -0
  100. package/dist/src/core/lib/validateImageBitmap.d.ts +7 -0
  101. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  102. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  103. package/dist/src/core/platforms/Platform.d.ts +42 -0
  104. package/dist/src/core/platforms/Platform.js +4 -0
  105. package/dist/src/core/platforms/Platform.js.map +1 -0
  106. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  107. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  108. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  109. package/dist/src/core/renderers/CoreContextTexture.d.ts +13 -0
  110. package/dist/src/core/renderers/CoreContextTexture.js +16 -0
  111. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  112. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  113. package/dist/src/core/renderers/CoreRenderOp.js +3 -0
  114. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  115. package/dist/src/core/renderers/CoreRenderer.d.ts +81 -0
  116. package/dist/src/core/renderers/CoreRenderer.js +14 -0
  117. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  118. package/dist/src/core/renderers/CoreShaderNode.d.ts +69 -0
  119. package/dist/src/core/renderers/CoreShaderNode.js +130 -0
  120. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  121. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  122. package/dist/src/core/renderers/CoreShaderProgram.js +2 -0
  123. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  124. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  125. package/dist/src/core/renderers/canvas/CanvasRenderer.js +221 -0
  126. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  127. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  128. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +42 -0
  129. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  130. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +17 -0
  131. package/dist/src/core/renderers/canvas/CanvasTexture.js +110 -0
  132. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  133. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +41 -0
  134. package/dist/src/core/renderers/webgl/SdfRenderOp.js +88 -0
  135. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  136. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +14 -0
  137. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +45 -0
  138. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  139. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  140. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +49 -0
  141. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  142. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +67 -0
  143. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +259 -0
  144. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +221 -0
  146. package/dist/src/core/renderers/webgl/WebGlRenderer.js +1015 -0
  147. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +213 -0
  149. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  150. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  152. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +240 -0
  153. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +28 -0
  155. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +39 -0
  156. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  157. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  158. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +88 -0
  159. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  160. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
  161. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +83 -0
  162. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  164. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +13 -0
  165. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  166. package/dist/src/core/shaders/canvas/Border.d.ts +15 -0
  167. package/dist/src/core/shaders/canvas/Border.js +83 -0
  168. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  169. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  170. package/dist/src/core/shaders/canvas/HolePunch.js +22 -0
  171. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  172. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  173. package/dist/src/core/shaders/canvas/LinearGradient.js +32 -0
  174. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  175. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  176. package/dist/src/core/shaders/canvas/RadialGradient.js +54 -0
  177. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  178. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  179. package/dist/src/core/shaders/canvas/Rounded.js +17 -0
  180. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  181. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +10 -0
  182. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +57 -0
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  184. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +7 -0
  185. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +61 -0
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  187. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  188. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +26 -0
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  190. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  191. package/dist/src/core/shaders/canvas/Shadow.js +15 -0
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  194. package/dist/src/core/shaders/canvas/utils/render.js +81 -0
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +47 -0
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +77 -0
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +19 -0
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  202. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  203. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +31 -0
  204. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  205. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +33 -0
  206. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +33 -0
  207. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  208. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  209. package/dist/src/core/shaders/templates/RoundedTemplate.js +51 -0
  210. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  211. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  212. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +8 -0
  213. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  214. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +8 -0
  215. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +9 -0
  216. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  217. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  218. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +7 -0
  219. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  220. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  221. package/dist/src/core/shaders/templates/ShadowTemplate.js +50 -0
  222. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  223. package/dist/src/core/shaders/utils.d.ts +5 -0
  224. package/dist/src/core/shaders/utils.js +25 -0
  225. package/dist/src/core/shaders/utils.js.map +1 -0
  226. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  227. package/dist/src/core/shaders/webgl/Border.js +153 -0
  228. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  229. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  230. package/dist/src/core/shaders/webgl/Default.js +51 -0
  231. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  232. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  233. package/dist/src/core/shaders/webgl/HolePunch.js +49 -0
  234. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  235. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  236. package/dist/src/core/shaders/webgl/LinearGradient.js +114 -0
  237. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  239. package/dist/src/core/shaders/webgl/RadialGradient.js +81 -0
  240. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  241. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  242. package/dist/src/core/shaders/webgl/Rounded.js +88 -0
  243. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  244. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  245. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +202 -0
  246. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  247. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  248. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +223 -0
  249. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  250. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  251. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +123 -0
  252. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  253. package/dist/src/core/shaders/webgl/SdfShader.d.ts +13 -0
  254. package/dist/src/core/shaders/webgl/SdfShader.js +72 -0
  255. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  256. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  257. package/dist/src/core/shaders/webgl/Shadow.js +115 -0
  258. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  259. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  260. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  261. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  262. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  263. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  264. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  265. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  266. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  267. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  268. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  269. package/dist/src/core/text-rendering/SdfTextRenderer.js +249 -0
  270. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  271. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  272. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  273. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  274. package/dist/src/core/text-rendering/TextRenderer.d.ts +406 -0
  275. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  276. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  277. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  278. package/dist/src/core/text-rendering/Utils.js +66 -0
  279. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  280. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  281. package/dist/src/core/textures/ColorTexture.js +57 -0
  282. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  283. package/dist/src/core/textures/ImageTexture.d.ts +131 -0
  284. package/dist/src/core/textures/ImageTexture.js +211 -0
  285. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  286. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  287. package/dist/src/core/textures/NoiseTexture.js +50 -0
  288. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  289. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  290. package/dist/src/core/textures/RenderTexture.js +36 -0
  291. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  292. package/dist/src/core/textures/SubTexture.d.ts +61 -0
  293. package/dist/src/core/textures/SubTexture.js +99 -0
  294. package/dist/src/core/textures/SubTexture.js.map +1 -0
  295. package/dist/src/core/textures/Texture.d.ts +275 -0
  296. package/dist/src/core/textures/Texture.js +326 -0
  297. package/dist/src/core/textures/Texture.js.map +1 -0
  298. package/dist/src/core/utils.d.ts +23 -0
  299. package/dist/src/core/utils.js +155 -0
  300. package/dist/src/core/utils.js.map +1 -0
  301. package/dist/src/main-api/INode.d.ts +65 -0
  302. package/dist/src/main-api/INode.js +2 -0
  303. package/dist/src/main-api/INode.js.map +1 -0
  304. package/dist/src/main-api/Inspector.d.ts +154 -0
  305. package/dist/src/main-api/Inspector.js +844 -0
  306. package/dist/src/main-api/Inspector.js.map +1 -0
  307. package/dist/src/main-api/Renderer.d.ts +629 -0
  308. package/dist/src/main-api/Renderer.js +471 -0
  309. package/dist/src/main-api/Renderer.js.map +1 -0
  310. package/dist/src/main-api/utils.d.ts +2 -0
  311. package/dist/src/main-api/utils.js +34 -0
  312. package/dist/src/main-api/utils.js.map +1 -0
  313. package/dist/src/utils.d.ts +123 -0
  314. package/dist/src/utils.js +234 -0
  315. package/dist/src/utils.js.map +1 -0
  316. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  317. package/exports/canvas-shaders.ts +11 -0
  318. package/exports/canvas.ts +27 -0
  319. package/exports/index.ts +69 -0
  320. package/exports/inspector.ts +5 -0
  321. package/exports/utils.ts +32 -0
  322. package/exports/webgl-shaders.ts +12 -0
  323. package/exports/webgl.ts +33 -0
  324. package/package.json +99 -0
  325. package/src/common/CommonTypes.ts +145 -0
  326. package/src/common/EventEmitter.ts +58 -0
  327. package/src/common/IAnimationController.ts +65 -0
  328. package/src/common/IEventEmitter.ts +11 -0
  329. package/src/core/Autosizer.ts +205 -0
  330. package/src/core/CoreNode.test.ts +535 -0
  331. package/src/core/CoreNode.ts +2883 -0
  332. package/src/core/CoreShaderManager.ts +170 -0
  333. package/src/core/CoreTextNode.ts +573 -0
  334. package/src/core/CoreTextureManager.ts +552 -0
  335. package/src/core/Stage.ts +1037 -0
  336. package/src/core/TextureError.ts +46 -0
  337. package/src/core/TextureMemoryManager.ts +378 -0
  338. package/src/core/animations/AnimationManager.ts +178 -0
  339. package/src/core/animations/CoreAnimation.ts +138 -0
  340. package/src/core/lib/ContextSpy.ts +22 -0
  341. package/src/core/lib/ImageWorker.ts +292 -0
  342. package/src/core/lib/Matrix3d.ts +231 -0
  343. package/src/core/lib/RenderCoords.ts +55 -0
  344. package/src/core/lib/WebGlContextWrapper.ts +1448 -0
  345. package/src/core/lib/collectionUtils.ts +99 -0
  346. package/src/core/lib/colorCache.ts +20 -0
  347. package/src/core/lib/colorParser.ts +66 -0
  348. package/src/core/lib/textureCompression.ts +492 -0
  349. package/src/core/lib/textureSvg.ts +59 -0
  350. package/src/core/lib/utils.ts +400 -0
  351. package/src/core/lib/validateImageBitmap.ts +87 -0
  352. package/src/core/platforms/Platform.ts +64 -0
  353. package/src/core/platforms/web/WebPlatform.ts +132 -0
  354. package/src/core/renderers/CoreContextTexture.ts +25 -0
  355. package/src/core/renderers/CoreRenderOp.ts +3 -0
  356. package/src/core/renderers/CoreRenderer.ts +101 -0
  357. package/src/core/renderers/CoreShaderNode.ts +202 -0
  358. package/src/core/renderers/CoreShaderProgram.ts +4 -0
  359. package/src/core/renderers/canvas/CanvasRenderer.ts +274 -0
  360. package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
  361. package/src/core/renderers/canvas/CanvasTexture.ts +141 -0
  362. package/src/core/renderers/webgl/SdfRenderOp.ts +103 -0
  363. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +70 -0
  364. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
  365. package/src/core/renderers/webgl/WebGlCtxTexture.ts +332 -0
  366. package/src/core/renderers/webgl/WebGlRenderer.ts +1323 -0
  367. package/src/core/renderers/webgl/WebGlShaderNode.ts +423 -0
  368. package/src/core/renderers/webgl/WebGlShaderProgram.ts +346 -0
  369. package/src/core/renderers/webgl/internal/BufferCollection.ts +46 -0
  370. package/src/core/renderers/webgl/internal/RendererUtils.ts +136 -0
  371. package/src/core/renderers/webgl/internal/ShaderUtils.ts +262 -0
  372. package/src/core/renderers/webgl/internal/WebGlUtils.ts +16 -0
  373. package/src/core/shaders/canvas/Border.ts +119 -0
  374. package/src/core/shaders/canvas/HolePunch.ts +38 -0
  375. package/src/core/shaders/canvas/LinearGradient.ts +54 -0
  376. package/src/core/shaders/canvas/RadialGradient.ts +82 -0
  377. package/src/core/shaders/canvas/Rounded.ts +38 -0
  378. package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
  379. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
  380. package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
  381. package/src/core/shaders/canvas/Shadow.ts +35 -0
  382. package/src/core/shaders/canvas/utils/render.ts +143 -0
  383. package/src/core/shaders/templates/BorderTemplate.ts +128 -0
  384. package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
  385. package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
  386. package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
  387. package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
  388. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
  389. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
  390. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
  391. package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
  392. package/src/core/shaders/utils.ts +30 -0
  393. package/src/core/shaders/webgl/Border.ts +158 -0
  394. package/src/core/shaders/webgl/Default.ts +52 -0
  395. package/src/core/shaders/webgl/HolePunch.ts +58 -0
  396. package/src/core/shaders/webgl/LinearGradient.ts +119 -0
  397. package/src/core/shaders/webgl/RadialGradient.ts +91 -0
  398. package/src/core/shaders/webgl/Rounded.ts +97 -0
  399. package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
  400. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +235 -0
  401. package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
  402. package/src/core/shaders/webgl/SdfShader.ts +73 -0
  403. package/src/core/shaders/webgl/Shadow.ts +119 -0
  404. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  405. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  406. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  407. package/src/core/text-rendering/SdfTextRenderer.ts +352 -0
  408. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  409. package/src/core/text-rendering/TextRenderer.ts +449 -0
  410. package/src/core/text-rendering/Utils.ts +80 -0
  411. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  412. package/src/core/textures/ColorTexture.ts +85 -0
  413. package/src/core/textures/ImageTexture.ts +394 -0
  414. package/src/core/textures/NoiseTexture.ts +87 -0
  415. package/src/core/textures/RenderTexture.ts +68 -0
  416. package/src/core/textures/SubTexture.ts +165 -0
  417. package/src/core/textures/Texture.ts +505 -0
  418. package/src/core/utils.ts +210 -0
  419. package/src/env.d.ts +7 -0
  420. package/src/main-api/INode.ts +92 -0
  421. package/src/main-api/Inspector.ts +1267 -0
  422. package/src/main-api/Renderer.ts +1011 -0
  423. package/src/main-api/utils.ts +45 -0
  424. package/src/utils.ts +302 -0
@@ -0,0 +1,138 @@
1
+ import type { CoreNode, CoreNodeAnimateProps } from '../CoreNode.js';
2
+ import { getTimingFunction, type TimingFunction } from '../utils.js';
3
+ import type {
4
+ AnimationConfig,
5
+ AnimationManager,
6
+ PropValues,
7
+ } from './AnimationManager.js';
8
+
9
+ export interface AnimationSettings {
10
+ duration: number;
11
+ delay: number;
12
+ easing: string | TimingFunction;
13
+ loop: boolean;
14
+ repeat: number;
15
+ stopMethod: 'reverse' | 'reset' | false;
16
+ }
17
+
18
+ export function createAnimation(
19
+ manager: AnimationManager,
20
+ node: CoreNode,
21
+ props: Partial<CoreNodeAnimateProps>,
22
+ settings: Partial<AnimationSettings>,
23
+ ): AnimationConfig {
24
+ const easing = settings.easing || 'linear';
25
+ const delay = settings.delay ?? 0;
26
+
27
+ let propValues: Record<string, PropValues> | null = null;
28
+ let shaderPropValues: Record<string, PropValues> | null = null;
29
+
30
+ for (const key in props) {
31
+ if (key !== 'shaderProps') {
32
+ if (!propValues) propValues = {};
33
+ propValues[key] = {
34
+ start:
35
+ node[key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>] || 0,
36
+ target: props[
37
+ key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>
38
+ ] as number,
39
+ isColor: key.indexOf('color') !== -1,
40
+ };
41
+ } else if (key === 'shaderProps' && node.shader !== null) {
42
+ if (!shaderPropValues) shaderPropValues = {};
43
+ for (const shaderKey in props.shaderProps) {
44
+ let start = node.shader.props![shaderKey];
45
+ if (Array.isArray(start)) {
46
+ start = start[0];
47
+ }
48
+ shaderPropValues[shaderKey] = {
49
+ start: start as number,
50
+ target: props.shaderProps[shaderKey] as number,
51
+ isColor: shaderKey.indexOf('color') !== -1,
52
+ };
53
+ }
54
+ }
55
+ }
56
+
57
+ const timingFunction =
58
+ typeof easing === 'string' ? getTimingFunction(easing) : easing;
59
+
60
+ const config: AnimationConfig = {
61
+ manager,
62
+ node,
63
+ duration: settings.duration ?? 0,
64
+ delay,
65
+ delayFor: delay,
66
+ progress: 0,
67
+ loop: settings.loop ?? false,
68
+ repeat: settings.repeat ?? 0,
69
+ stopMethod: settings.stopMethod ?? false,
70
+ timingFunction,
71
+ state: 'stopped',
72
+ props: propValues,
73
+ shaderProps: shaderPropValues,
74
+ stoppedResolve: null,
75
+ stoppedPromise: null,
76
+
77
+ start() {
78
+ if (this.state !== 'running' && this.state !== 'scheduled') {
79
+ if (!this.stoppedPromise) {
80
+ this.stoppedPromise = new Promise((resolve) => {
81
+ this.stoppedResolve = resolve;
82
+ });
83
+ }
84
+ this.manager.registerAnimation(this);
85
+ this.state = 'scheduled';
86
+ }
87
+ return this;
88
+ },
89
+
90
+ stop() {
91
+ this.manager.unregisterAnimation(this);
92
+ if (this.stoppedResolve) {
93
+ this.stoppedResolve();
94
+ this.stoppedResolve = null;
95
+ }
96
+ // Reset values
97
+ this.progress = 0;
98
+ this.delayFor = this.delay;
99
+ this.state = 'stopped';
100
+ return this;
101
+ },
102
+
103
+ pause() {
104
+ this.manager.unregisterAnimation(this);
105
+ this.state = 'paused';
106
+ return this;
107
+ },
108
+
109
+ restore() {
110
+ this.stoppedResolve = null;
111
+ this.stop();
112
+ if (this.props) {
113
+ const entries = Object.entries(this.props);
114
+ for (let i = 0; i < entries.length; i++) {
115
+ const [k, v] = entries[i]!;
116
+ (this.node as unknown as Record<string, number>)[k] = v.start;
117
+ }
118
+ }
119
+ if (this.shaderProps && this.node.shader) {
120
+ const entries = Object.entries(this.shaderProps);
121
+ for (let i = 0; i < entries.length; i++) {
122
+ const [k, v] = entries[i]!;
123
+ (this.node.shader.props as Record<string, number>)[k] = v.start;
124
+ }
125
+ }
126
+ return this;
127
+ },
128
+
129
+ waitUntilStopped() {
130
+ if (!this.stoppedPromise) {
131
+ this.stoppedPromise = Promise.resolve();
132
+ }
133
+ return this.stoppedPromise;
134
+ },
135
+ };
136
+
137
+ return config;
138
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Class that keeps track of the invocations of Context methods when
3
+ * the `enableContextSpy` renderer option is enabled.
4
+ */
5
+ export class ContextSpy {
6
+ private data: Record<string, number> = {};
7
+
8
+ reset() {
9
+ this.data = {};
10
+ }
11
+
12
+ increment(name: string) {
13
+ if (!this.data[name]) {
14
+ this.data[name] = 0;
15
+ }
16
+ this.data[name]++;
17
+ }
18
+
19
+ getData() {
20
+ return { ...this.data };
21
+ }
22
+ }
@@ -0,0 +1,292 @@
1
+ import type { CreateImageBitmapSupport } from '../lib/validateImageBitmap.js';
2
+ import { type TextureData } from '../textures/Texture.js';
3
+
4
+ type MessageCallback = [(value: any) => void, (reason: any) => void];
5
+ interface getImageReturn {
6
+ data: ImageBitmap;
7
+ premultiplyAlpha: boolean | null;
8
+ }
9
+
10
+ interface ImageWorkerMessage {
11
+ id: number;
12
+ src: string;
13
+ data: getImageReturn;
14
+ error: string;
15
+ sx: number | null;
16
+ sy: number | null;
17
+ sw: number | null;
18
+ sh: number | null;
19
+ }
20
+
21
+ /**
22
+ * Note that, within the createImageWorker function, we must only use ES5 code to keep it ES5-valid after babelifying, as
23
+ * the converted code of this section is converted to a blob and used as the js of the web worker thread.
24
+ *
25
+ * The createImageWorker function is a web worker that fetches an image from a URL and returns an ImageBitmap object.
26
+ * The eslint @typescript rule is disabled for the entire function because the function is converted to a blob and used as the
27
+ * js of the web worker thread, so the typescript syntax is not valid in this context.
28
+ */
29
+
30
+ /* eslint-disable */
31
+ function createImageWorker() {
32
+ function hasAlphaChannel(mimeType: string) {
33
+ return mimeType.indexOf('image/png') !== -1;
34
+ }
35
+
36
+ function getImage(
37
+ src: string,
38
+ premultiplyAlpha: boolean | null,
39
+ x: number | null,
40
+ y: number | null,
41
+ width: number | null,
42
+ height: number | null,
43
+ options: {
44
+ supportsOptionsCreateImageBitmap: boolean;
45
+ supportsFullCreateImageBitmap: boolean;
46
+ },
47
+ ): Promise<getImageReturn> {
48
+ return new Promise(function (resolve, reject) {
49
+ var supportsOptionsCreateImageBitmap =
50
+ options.supportsOptionsCreateImageBitmap;
51
+ var supportsFullCreateImageBitmap = options.supportsFullCreateImageBitmap;
52
+ var xhr = new XMLHttpRequest();
53
+ xhr.open('GET', src, true);
54
+ xhr.responseType = 'blob';
55
+
56
+ xhr.onload = function () {
57
+ // On most devices like WebOS and Tizen, the file protocol returns 0 while http(s) protocol returns 200
58
+ if (xhr.status !== 200 && xhr.status !== 0) {
59
+ return reject(
60
+ new Error(
61
+ `Image loading failed. HTTP status code: ${
62
+ xhr.status || 'N/A'
63
+ }. URL: ${src}`,
64
+ ),
65
+ );
66
+ }
67
+
68
+ var blob = xhr.response;
69
+ var withAlphaChannel =
70
+ premultiplyAlpha !== undefined
71
+ ? premultiplyAlpha
72
+ : hasAlphaChannel(blob.type);
73
+
74
+ // createImageBitmap with crop and options
75
+ if (
76
+ supportsFullCreateImageBitmap === true &&
77
+ width !== null &&
78
+ height !== null
79
+ ) {
80
+ createImageBitmap(blob, x || 0, y || 0, width, height, {
81
+ premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
82
+ colorSpaceConversion: 'none',
83
+ imageOrientation: 'none',
84
+ })
85
+ .then(function (data) {
86
+ resolve({ data, premultiplyAlpha: premultiplyAlpha });
87
+ })
88
+ .catch(function (error) {
89
+ reject(error);
90
+ });
91
+ return;
92
+ } else if (
93
+ supportsOptionsCreateImageBitmap === false &&
94
+ supportsOptionsCreateImageBitmap === false
95
+ ) {
96
+ // Fallback for browsers that do not support createImageBitmap with options
97
+ // this is supported for Chrome v50 to v52/54 that doesn't support options
98
+ createImageBitmap(blob)
99
+ .then(function (data) {
100
+ resolve({ data, premultiplyAlpha: premultiplyAlpha });
101
+ })
102
+ .catch(function (error) {
103
+ reject(error);
104
+ });
105
+ } else {
106
+ createImageBitmap(blob, {
107
+ premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
108
+ colorSpaceConversion: 'none',
109
+ imageOrientation: 'none',
110
+ })
111
+ .then(function (data) {
112
+ resolve({ data, premultiplyAlpha: premultiplyAlpha });
113
+ })
114
+ .catch(function (error) {
115
+ reject(error);
116
+ });
117
+ }
118
+ };
119
+
120
+ xhr.onerror = function () {
121
+ reject(
122
+ new Error('Network error occurred while trying to fetch the image.'),
123
+ );
124
+ };
125
+
126
+ xhr.send();
127
+ });
128
+ }
129
+
130
+ self.onmessage = (event) => {
131
+ var src = event.data.src;
132
+ var id = event.data.id;
133
+ var premultiplyAlpha = event.data.premultiplyAlpha;
134
+ var x = event.data.sx;
135
+ var y = event.data.sy;
136
+ var width = event.data.sw;
137
+ var height = event.data.sh;
138
+
139
+ // these will be set to true if the browser supports the createImageBitmap options or full
140
+ var supportsOptionsCreateImageBitmap = false;
141
+ var supportsFullCreateImageBitmap = false;
142
+
143
+ getImage(src, premultiplyAlpha, x, y, width, height, {
144
+ supportsOptionsCreateImageBitmap,
145
+ supportsFullCreateImageBitmap,
146
+ })
147
+ .then(function (data) {
148
+ // @ts-ignore ts has wrong postMessage signature
149
+ self.postMessage({ id: id, src: src, data: data }, [data.data]);
150
+ })
151
+ .catch(function (error) {
152
+ self.postMessage({ id: id, src: src, error: error.message });
153
+ });
154
+ };
155
+ }
156
+ /* eslint-enable */
157
+
158
+ export class ImageWorkerManager {
159
+ imageWorkersEnabled = true;
160
+ messageManager: Record<number, MessageCallback> = {};
161
+ workers: Worker[] = [];
162
+ workerLoad: number[] = [];
163
+ nextId = 0;
164
+
165
+ constructor(
166
+ numImageWorkers: number,
167
+ createImageBitmapSupport: CreateImageBitmapSupport,
168
+ ) {
169
+ this.workers = this.createWorkers(
170
+ numImageWorkers,
171
+ createImageBitmapSupport,
172
+ );
173
+ this.workers.forEach((worker, index) => {
174
+ worker.onmessage = (event) => this.handleMessage(event, index);
175
+ });
176
+ }
177
+
178
+ private handleMessage(event: MessageEvent, workerIndex: number) {
179
+ const { id, data, error } = event.data as ImageWorkerMessage;
180
+ const msg = this.messageManager[id];
181
+
182
+ if (this.workerLoad[workerIndex]) {
183
+ this.workerLoad[workerIndex]--;
184
+ }
185
+
186
+ if (msg) {
187
+ const [resolve, reject] = msg;
188
+ delete this.messageManager[id];
189
+ if (error) {
190
+ reject(new Error(error));
191
+ } else {
192
+ resolve(data);
193
+ }
194
+ }
195
+ }
196
+
197
+ private createWorkers(
198
+ numWorkers = 1,
199
+ createImageBitmapSupport: CreateImageBitmapSupport,
200
+ ): Worker[] {
201
+ let workerCode = `(${createImageWorker.toString()})()`;
202
+
203
+ // Replace placeholders with actual initialization values
204
+ if (createImageBitmapSupport.options === true) {
205
+ workerCode = workerCode.replace(
206
+ 'var supportsOptionsCreateImageBitmap = false;',
207
+ 'var supportsOptionsCreateImageBitmap = true;',
208
+ );
209
+ }
210
+
211
+ if (createImageBitmapSupport.full === true) {
212
+ workerCode = workerCode.replace(
213
+ 'var supportsOptionsCreateImageBitmap = false;',
214
+ 'var supportsOptionsCreateImageBitmap = true;',
215
+ );
216
+
217
+ workerCode = workerCode.replace(
218
+ 'var supportsFullCreateImageBitmap = false;',
219
+ 'var supportsFullCreateImageBitmap = true;',
220
+ );
221
+ }
222
+
223
+ workerCode = workerCode.replace('"use strict";', '');
224
+ const blob: Blob = new Blob([workerCode], {
225
+ type: 'application/javascript',
226
+ });
227
+ const blobURL: string = (self.URL ? URL : webkitURL).createObjectURL(blob);
228
+ const workers: Worker[] = [];
229
+ for (let i = 0; i < numWorkers; i++) {
230
+ workers.push(new Worker(blobURL));
231
+ this.workerLoad.push(0);
232
+ }
233
+ return workers;
234
+ }
235
+
236
+ private getNextWorkerIndex(): number {
237
+ if (this.workers.length === 0) return -1;
238
+
239
+ let minLoad = 99;
240
+ let workerIndex = 0;
241
+
242
+ for (let i = 0; i < this.workers.length; i++) {
243
+ const load = this.workerLoad[i] || 0;
244
+
245
+ if (load === 0) {
246
+ return i;
247
+ }
248
+
249
+ if (load < minLoad) {
250
+ minLoad = load;
251
+ workerIndex = i;
252
+ }
253
+ }
254
+ return workerIndex;
255
+ }
256
+
257
+ getImage(
258
+ src: string,
259
+ premultiplyAlpha: boolean | null,
260
+ sx: number | null,
261
+ sy: number | null,
262
+ sw: number | null,
263
+ sh: number | null,
264
+ ): Promise<TextureData> {
265
+ return new Promise((resolve, reject) => {
266
+ try {
267
+ if (this.workers) {
268
+ const id = this.nextId++;
269
+ this.messageManager[id] = [resolve, reject];
270
+ const nextWorkerIndex = this.getNextWorkerIndex();
271
+
272
+ if (nextWorkerIndex !== -1) {
273
+ const worker = this.workers[nextWorkerIndex];
274
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
275
+ this.workerLoad[nextWorkerIndex]!++;
276
+ worker!.postMessage({
277
+ id,
278
+ src: src,
279
+ premultiplyAlpha,
280
+ sx,
281
+ sy,
282
+ sw,
283
+ sh,
284
+ });
285
+ }
286
+ }
287
+ } catch (error) {
288
+ reject(error);
289
+ }
290
+ });
291
+ }
292
+ }
@@ -0,0 +1,231 @@
1
+ /**
2
+ * A 3D matrix representing a 2D graphics transformation
3
+ *
4
+ * @remarks
5
+ * For convenience, entries in the first two rows can be accessed by the following
6
+ * properties:
7
+ * | ta tb tx |
8
+ * | tc td ty |
9
+ * | 0 0 1 |
10
+ *
11
+ * This matrix is optimized for 2D transformations and hence the last row will
12
+ * always be considered [0, 0 ,1].
13
+ *
14
+ * To access a column major array for WebGL, use the {@link getFloatArr} method.
15
+ */
16
+ export class Matrix3d {
17
+ public ta: number;
18
+ public tb: number;
19
+ public tx: number;
20
+ public tc: number;
21
+ public td: number;
22
+ public ty: number;
23
+ private _floatArr: Float32Array | null = null;
24
+ /**
25
+ * Potential Mutation Flag
26
+ *
27
+ * @remarks
28
+ * This flag is set to true whenever the matrix is potentially modified.
29
+ * We don't waste CPU trying to identify if each operation actually modifies
30
+ * the matrix. Instead, we set this flag to true whenever we think the matrix
31
+ * is modified. This signals that the `floatArr` should to be updated.
32
+ */
33
+ private mutation: boolean;
34
+
35
+ /**
36
+ * Creates a new 3x3 matrix.
37
+ *
38
+ * @param entries Row-major 3x3 matrix
39
+ */
40
+ public constructor() {
41
+ this.ta = 0;
42
+ this.tb = 0;
43
+ this.tx = 0;
44
+ this.tc = 0;
45
+ this.td = 0;
46
+ this.ty = 0;
47
+ this.mutation = true;
48
+ }
49
+
50
+ /**
51
+ * Returns a temporary matrix that can be used for calculations.
52
+ *
53
+ * @remarks
54
+ * This is useful for avoiding allocations in tight loops.
55
+ *
56
+ * The matrix is not guaranteed to be the same between calls.
57
+ *
58
+ * @returns
59
+ */
60
+ public static get temp(): Matrix3d {
61
+ return tempMatrix;
62
+ }
63
+
64
+ public static multiply(a: Matrix3d, b: Matrix3d, out?: Matrix3d): Matrix3d {
65
+ const e0 = a.ta * b.ta + a.tb * b.tc;
66
+ const e1 = a.ta * b.tb + a.tb * b.td;
67
+ const e2 = a.ta * b.tx + a.tb * b.ty + a.tx;
68
+ const e3 = a.tc * b.ta + a.td * b.tc;
69
+ const e4 = a.tc * b.tb + a.td * b.td;
70
+ const e5 = a.tc * b.tx + a.td * b.ty + a.ty;
71
+ if (!out) {
72
+ out = new Matrix3d();
73
+ }
74
+ out.ta = e0;
75
+ out.tb = e1;
76
+ out.tx = e2;
77
+ out.tc = e3;
78
+ out.td = e4;
79
+ out.ty = e5;
80
+ out.mutation = true;
81
+ return out;
82
+ }
83
+
84
+ public static identity(out?: Matrix3d): Matrix3d {
85
+ if (!out) {
86
+ out = new Matrix3d();
87
+ }
88
+ out.ta = 1;
89
+ out.tb = 0;
90
+ out.tx = 0;
91
+ out.tc = 0;
92
+ out.td = 1;
93
+ out.ty = 0;
94
+ out.mutation = true;
95
+ return out;
96
+ }
97
+
98
+ public static translate(x: number, y: number, out?: Matrix3d): Matrix3d {
99
+ if (!out) {
100
+ out = new Matrix3d();
101
+ }
102
+ out.ta = 1;
103
+ out.tb = 0;
104
+ out.tx = x;
105
+ out.tc = 0;
106
+ out.td = 1;
107
+ out.ty = y;
108
+ out.mutation = true;
109
+ return out;
110
+ }
111
+
112
+ public static scale(sx: number, sy: number, out?: Matrix3d): Matrix3d {
113
+ if (!out) {
114
+ out = new Matrix3d();
115
+ }
116
+ out.ta = sx;
117
+ out.tb = 0;
118
+ out.tx = 0;
119
+ out.tc = 0;
120
+ out.td = sy;
121
+ out.ty = 0;
122
+ out.mutation = true;
123
+ return out;
124
+ }
125
+
126
+ public static rotate(angle: number, out?: Matrix3d): Matrix3d {
127
+ const cos = Math.cos(angle);
128
+ const sin = Math.sin(angle);
129
+ if (!out) {
130
+ out = new Matrix3d();
131
+ }
132
+ out.ta = cos;
133
+ out.tb = -sin;
134
+ out.tx = 0;
135
+ out.tc = sin;
136
+ out.td = cos;
137
+ out.ty = 0;
138
+ out.mutation = true;
139
+ return out;
140
+ }
141
+
142
+ public static copy(src: Matrix3d, dst?: Matrix3d): Matrix3d {
143
+ if (!dst) {
144
+ dst = new Matrix3d();
145
+ }
146
+ dst.ta = src.ta;
147
+ dst.tc = src.tc;
148
+ dst.tb = src.tb;
149
+ dst.td = src.td;
150
+ dst.tx = src.tx;
151
+ dst.ty = src.ty;
152
+ dst.mutation = true;
153
+ return dst;
154
+ }
155
+
156
+ public translate(x: number, y: number): Matrix3d {
157
+ this.tx = this.ta * x + this.tb * y + this.tx;
158
+ this.ty = this.tc * x + this.td * y + this.ty;
159
+ this.mutation = true;
160
+ return this;
161
+ }
162
+
163
+ public scale(sx: number, sy: number): Matrix3d {
164
+ this.ta = this.ta * sx;
165
+ this.tb = this.tb * sy;
166
+ this.tc = this.tc * sx;
167
+ this.td = this.td * sy;
168
+ this.mutation = true;
169
+ return this;
170
+ }
171
+
172
+ public rotate(angle: number): Matrix3d {
173
+ if (angle === 0) {
174
+ return this;
175
+ }
176
+ const cos = Math.cos(angle);
177
+ const sin = Math.sin(angle);
178
+ const e0 = this.ta * cos + this.tb * sin;
179
+ const e1 = this.tb * cos - this.ta * sin;
180
+ const e3 = this.tc * cos + this.td * sin;
181
+ const e4 = this.td * cos - this.tc * sin;
182
+ this.ta = e0;
183
+ this.tb = e1;
184
+ this.tc = e3;
185
+ this.td = e4;
186
+ this.mutation = true;
187
+ return this;
188
+ }
189
+
190
+ public multiply(other: Matrix3d): Matrix3d {
191
+ return Matrix3d.multiply(this, other, this);
192
+ }
193
+
194
+ /**
195
+ * Returns the matrix as a Float32Array in column-major order.
196
+ *
197
+ * @remarks
198
+ * This method is optimized to avoid unnecessary allocations. The same array
199
+ * is returned every time this method is called, and is updated in place.
200
+ *
201
+ * WARNING: Use the array only for passing directly to a WebGL shader uniform
202
+ * during a frame render. Do not modify or hold onto the array for longer than
203
+ * a frame.
204
+ */
205
+ getFloatArr(): Float32Array {
206
+ if (!this._floatArr) {
207
+ this._floatArr = new Float32Array(9);
208
+ }
209
+ if (this.mutation) {
210
+ this._floatArr[0] = this.ta;
211
+ this._floatArr[1] = this.tc;
212
+ this._floatArr[2] = 0;
213
+ this._floatArr[3] = this.tb;
214
+ this._floatArr[4] = this.td;
215
+ this._floatArr[5] = 0;
216
+ this._floatArr[6] = this.tx;
217
+ this._floatArr[7] = this.ty;
218
+ this._floatArr[8] = 1;
219
+ this.mutation = false;
220
+ }
221
+ return this._floatArr;
222
+ }
223
+ public translateOrMultiply(other: Matrix3d): Matrix3d {
224
+ if (other.ta === 1 && other.td === 1 && other.tb === 0 && other.tc === 0) {
225
+ return this.translate(other.tx, other.ty);
226
+ }
227
+ return this.multiply(other);
228
+ }
229
+ }
230
+
231
+ const tempMatrix = new Matrix3d();