@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,394 @@
1
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
2
+ import { Texture, TextureType, type TextureData } from './Texture.js';
3
+ import {
4
+ isCompressedTextureContainer,
5
+ loadCompressedTexture,
6
+ } from '../lib/textureCompression.js';
7
+ import {
8
+ convertUrlToAbsolute,
9
+ dataURIToBlob,
10
+ isBase64Image,
11
+ } from '../lib/utils.js';
12
+ import { isSvgImage, loadSvg } from '../lib/textureSvg.js';
13
+ import { fetchJson } from '../lib/utils.js';
14
+ import type { Platform } from '../platforms/Platform.js';
15
+ import {
16
+ ENABLE_COMPRESSED_TEXTURES,
17
+ isProductionEnvironment,
18
+ } from '../../utils.js';
19
+
20
+ /**
21
+ * Properties of the {@link ImageTexture}
22
+ */
23
+ export interface ImageTextureProps {
24
+ /**
25
+ * Source URL or ImageData for the image to be used as a texture.
26
+ *
27
+ * @remarks
28
+ * The ImageData type is currently only supported internally. End users should
29
+ * only set this property to a URL string.
30
+ *
31
+ * @default ''
32
+ */
33
+ src?: string | Blob | ImageData | (() => ImageData | null);
34
+ /**
35
+ * Whether to premultiply the alpha channel into the color channels of the
36
+ * image.
37
+ *
38
+ * @remarks
39
+ * Generally this should be set to `true` (the default). However, if the
40
+ * texture's associated Shader expects straight (non-premultiplied) colors,
41
+ * this should be set to `false`.
42
+ *
43
+ * @default true
44
+ */
45
+ premultiplyAlpha?: boolean | null;
46
+ /**
47
+ * `ImageData` textures are not cached unless a `key` is provided
48
+ */
49
+ key?: string | null;
50
+ /**
51
+ * Width of the image to be used as a texture. If not provided, the image's
52
+ * natural width will be used.
53
+ */
54
+ w?: number | null;
55
+ /**
56
+ * Height of the image to be used as a texture. If not provided, the image's
57
+ * natural height will be used.
58
+ */
59
+ h?: number | null;
60
+ /**
61
+ * Type, indicate an image type for overriding type detection
62
+ *
63
+ * @default null
64
+ */
65
+ type?: 'regular' | 'compressed' | 'svg' | null;
66
+ /**
67
+ * The width of the rectangle from which the ImageBitmap will be extracted. This value
68
+ * can be negative. Only works when createImageBitmap is supported on the browser.
69
+ *
70
+ * @default null
71
+ */
72
+ sw?: number | null;
73
+ /**
74
+ * The height of the rectangle from which the ImageBitmap will be extracted. This value
75
+ * can be negative. Only works when createImageBitmap is supported on the browser.
76
+ *
77
+ * @default null
78
+ */
79
+ sh?: number | null;
80
+ /**
81
+ * The y coordinate of the reference point of the rectangle from which the ImageBitmap
82
+ * will be extracted. Only used when `sw` and `sh` are provided. And only works when
83
+ * createImageBitmap is available.
84
+ *
85
+ * @default null
86
+ */
87
+ sx?: number | null;
88
+ /**
89
+ * The x coordinate of the reference point of the rectangle from which the
90
+ * ImageBitmap will be extracted. Only used when source `sw` width and `sh` height
91
+ * are provided. Only works when createImageBitmap is supported on the browser.
92
+ *
93
+ * @default null
94
+ */
95
+ sy?: number | null;
96
+ /**
97
+ * Maximum number of times to retry loading the image if it fails.
98
+ *
99
+ * @default 5
100
+ */
101
+ maxRetryCount?: number;
102
+ }
103
+
104
+ /**
105
+ * Texture consisting of an image loaded from a URL
106
+ *
107
+ * @remarks
108
+ * The ImageTexture's {@link ImageTextureProps.src} prop defines the image URL
109
+ * to be downloaded.
110
+ *
111
+ * By default, the texture's alpha values will be premultiplied into its color
112
+ * values which is generally the desired setting before they are sent to the
113
+ * texture's associated {@link Shader}. However, in special cases you may want
114
+ * the Shader to receive straight (non-premultiplied) values. In that case you
115
+ * can disable the default behavior by setting the
116
+ * {@link ImageTextureProps.premultiplyAlpha} prop to `false`.
117
+ */
118
+ export class ImageTexture extends Texture {
119
+ private platform: Platform;
120
+
121
+ public props: Required<ImageTextureProps>;
122
+ public override type: TextureType = TextureType.image;
123
+
124
+ constructor(
125
+ txManager: CoreTextureManager,
126
+ props: Required<ImageTextureProps>,
127
+ ) {
128
+ super(txManager);
129
+
130
+ this.platform = txManager.platform;
131
+ this.props = props;
132
+ this.maxRetryCount = props.maxRetryCount as number;
133
+ }
134
+
135
+ hasAlphaChannel(mimeType: string) {
136
+ return mimeType.indexOf('image/png') !== -1;
137
+ }
138
+
139
+ async loadImageFallback(src: string | Blob, hasAlpha: boolean) {
140
+ const img = new Image();
141
+
142
+ if (typeof src === 'string' && isBase64Image(src) === false) {
143
+ img.crossOrigin = 'anonymous';
144
+ }
145
+
146
+ return new Promise<{
147
+ data: HTMLImageElement | null;
148
+ premultiplyAlpha: boolean;
149
+ }>((resolve, reject) => {
150
+ img.onload = () => {
151
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
152
+ };
153
+
154
+ img.onerror = (err) => {
155
+ const errorMessage =
156
+ err instanceof Error
157
+ ? err.message
158
+ : err instanceof Event
159
+ ? `Image loading failed for ${img.src}`
160
+ : 'Unknown image loading error';
161
+ reject(new Error(`Image loading failed: ${errorMessage}`));
162
+ };
163
+
164
+ if (src instanceof Blob) {
165
+ img.src = URL.createObjectURL(src);
166
+ } else {
167
+ img.src = src;
168
+ }
169
+ });
170
+ }
171
+
172
+ async createImageBitmap(
173
+ blob: Blob,
174
+ premultiplyAlpha: boolean | null,
175
+ sx: number | null,
176
+ sy: number | null,
177
+ sw: number | null,
178
+ sh: number | null,
179
+ ): Promise<{
180
+ data: ImageBitmap | HTMLImageElement;
181
+ premultiplyAlpha: boolean;
182
+ }> {
183
+ const hasAlphaChannel = premultiplyAlpha ?? blob.type.includes('image/png');
184
+ const imageBitmapSupported = this.txManager.imageBitmapSupported;
185
+
186
+ if (imageBitmapSupported.full === true && sw !== null && sh !== null) {
187
+ // createImageBitmap with crop
188
+ const bitmap = await this.platform.createImageBitmap(
189
+ blob,
190
+ sx || 0,
191
+ sy || 0,
192
+ sw,
193
+ sh,
194
+ {
195
+ premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
196
+ colorSpaceConversion: 'none',
197
+ imageOrientation: 'none',
198
+ },
199
+ );
200
+ return { data: bitmap, premultiplyAlpha: hasAlphaChannel };
201
+ } else if (imageBitmapSupported.basic === true) {
202
+ // basic createImageBitmap without options or crop
203
+ // this is supported for Chrome v50 to v52/54 that doesn't support options
204
+ return {
205
+ data: await this.platform.createImageBitmap(blob),
206
+ premultiplyAlpha: hasAlphaChannel,
207
+ };
208
+ }
209
+
210
+ // default createImageBitmap without crop but with options
211
+ const bitmap = await this.platform.createImageBitmap(blob, {
212
+ premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
213
+ colorSpaceConversion: 'none',
214
+ imageOrientation: 'none',
215
+ });
216
+ return { data: bitmap, premultiplyAlpha: hasAlphaChannel };
217
+ }
218
+
219
+ async loadImage(src: string) {
220
+ const { premultiplyAlpha, sx, sy, sw, sh } = this.props;
221
+
222
+ if (this.txManager.hasCreateImageBitmap === true) {
223
+ if (
224
+ isBase64Image(src) === false &&
225
+ this.txManager.hasWorker === true &&
226
+ this.txManager.imageWorkerManager !== null
227
+ ) {
228
+ return this.txManager.imageWorkerManager.getImage(
229
+ src,
230
+ premultiplyAlpha,
231
+ sx,
232
+ sy,
233
+ sw,
234
+ sh,
235
+ );
236
+ }
237
+
238
+ let blob;
239
+
240
+ if (isBase64Image(src) === true) {
241
+ blob = dataURIToBlob(src);
242
+ } else {
243
+ blob = await fetchJson(src, 'blob').then(
244
+ (response) => response as Blob,
245
+ );
246
+ }
247
+
248
+ return this.createImageBitmap(blob, premultiplyAlpha, sx, sy, sw, sh);
249
+ }
250
+
251
+ return this.loadImageFallback(src, premultiplyAlpha ?? true);
252
+ }
253
+
254
+ override async getTextureSource(): Promise<TextureData> {
255
+ let resp: TextureData;
256
+ try {
257
+ resp = await this.determineImageTypeAndLoadImage();
258
+ } catch (e) {
259
+ this.setState('failed', e as Error);
260
+
261
+ return {
262
+ data: null,
263
+ };
264
+ }
265
+
266
+ if (resp.data === null) {
267
+ this.setState('failed', Error('ImageTexture: No image data'));
268
+ return {
269
+ data: null,
270
+ };
271
+ }
272
+
273
+ return {
274
+ data: resp.data,
275
+ premultiplyAlpha: this.props.premultiplyAlpha ?? true,
276
+ };
277
+ }
278
+
279
+ determineImageTypeAndLoadImage() {
280
+ const { src, premultiplyAlpha, type } = this.props;
281
+ if (src === null) {
282
+ return {
283
+ data: null,
284
+ };
285
+ }
286
+
287
+ if (typeof src !== 'string') {
288
+ if (src instanceof Blob) {
289
+ if (this.txManager.hasCreateImageBitmap === true) {
290
+ const { sx, sy, sw, sh } = this.props;
291
+ return this.createImageBitmap(src, premultiplyAlpha, sx, sy, sw, sh);
292
+ } else {
293
+ return this.loadImageFallback(src, premultiplyAlpha ?? true);
294
+ }
295
+ }
296
+ if (src instanceof ImageData) {
297
+ return {
298
+ data: src,
299
+ premultiplyAlpha,
300
+ };
301
+ }
302
+ return {
303
+ data: src(),
304
+ premultiplyAlpha,
305
+ };
306
+ }
307
+
308
+ const absoluteSrc = convertUrlToAbsolute(src);
309
+ if (type === 'regular') {
310
+ return this.loadImage(absoluteSrc);
311
+ }
312
+
313
+ if (type === 'svg') {
314
+ return loadSvg(
315
+ absoluteSrc,
316
+ this.props.w,
317
+ this.props.h,
318
+ this.props.sx,
319
+ this.props.sy,
320
+ this.props.sw,
321
+ this.props.sh,
322
+ );
323
+ }
324
+
325
+ if (isSvgImage(src) === true) {
326
+ return loadSvg(
327
+ absoluteSrc,
328
+ this.props.w,
329
+ this.props.h,
330
+ this.props.sx,
331
+ this.props.sy,
332
+ this.props.sw,
333
+ this.props.sh,
334
+ );
335
+ }
336
+
337
+ if (
338
+ ENABLE_COMPRESSED_TEXTURES &&
339
+ (type === 'compressed' || isCompressedTextureContainer(src) === true)
340
+ ) {
341
+ return loadCompressedTexture(absoluteSrc);
342
+ }
343
+
344
+ // default
345
+ return this.loadImage(absoluteSrc);
346
+ }
347
+
348
+ /**
349
+ * Generates a cache key for the ImageTexture based on the provided props.
350
+ * @param props - The props used to generate the cache key.
351
+ * @returns The cache key as a string, or `false` if the key cannot be generated.
352
+ */
353
+ static override makeCacheKey(props: ImageTextureProps): string | false {
354
+ // Only cache key-able textures; prioritise key
355
+ const key = props.key || props.src;
356
+ if (typeof key !== 'string') {
357
+ return false;
358
+ }
359
+
360
+ let cacheKey = `ImageTexture,${key},${props.premultiplyAlpha ?? 'true'},${
361
+ props.maxRetryCount
362
+ }`;
363
+
364
+ if (props.sh !== null && props.sw !== null) {
365
+ cacheKey += ',';
366
+ cacheKey += props.sx ?? '';
367
+ cacheKey += props.sy ?? '';
368
+ cacheKey += props.sw || '';
369
+ cacheKey += props.sh || '';
370
+ }
371
+
372
+ return cacheKey;
373
+ }
374
+
375
+ static override resolveDefaults(
376
+ props: ImageTextureProps,
377
+ ): Required<ImageTextureProps> {
378
+ return {
379
+ src: props.src ?? '',
380
+ premultiplyAlpha: props.premultiplyAlpha ?? true, // null,
381
+ key: props.key ?? null,
382
+ type: props.type ?? null,
383
+ w: props.w ?? null,
384
+ h: props.h ?? null,
385
+ sx: props.sx ?? null,
386
+ sy: props.sy ?? null,
387
+ sw: props.sw ?? null,
388
+ sh: props.sh ?? null,
389
+ maxRetryCount: props.maxRetryCount ?? 5,
390
+ };
391
+ }
392
+
393
+ static z$__type__Props: ImageTextureProps;
394
+ }
@@ -0,0 +1,87 @@
1
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
2
+ import { Texture, TextureType, type TextureData } from './Texture.js';
3
+
4
+ /**
5
+ * Properties of the {@link NoiseTexture}
6
+ */
7
+ export interface NoiseTextureProps {
8
+ /**
9
+ * Width of texture
10
+ *
11
+ * @default 128
12
+ */
13
+ w?: number;
14
+ /**
15
+ * Height of texture
16
+ *
17
+ * @default 128
18
+ */
19
+ h?: number;
20
+ /**
21
+ * A number value that can be varied to force new textures to be generated
22
+ *
23
+ * @default 0
24
+ */
25
+ cacheId?: number;
26
+ }
27
+
28
+ /**
29
+ * Texture consisting of a random grid of greyscale pixels
30
+ *
31
+ * @remarks
32
+ * The width and height of the NoiseTexture are defined by it's
33
+ * {@link NoiseTextureProps.width} and {@link NoiseTextureProps.height}
34
+ * properties. The {@link NoiseTextureProps.cacheId} prop can be varied in order
35
+ * to bypass cache and get newly randomized texture data.
36
+ */
37
+ export class NoiseTexture extends Texture {
38
+ props: Required<NoiseTextureProps>;
39
+
40
+ public override type: TextureType = TextureType.noise;
41
+
42
+ constructor(
43
+ txManager: CoreTextureManager,
44
+ props: Required<NoiseTextureProps>,
45
+ ) {
46
+ super(txManager);
47
+ this.props = props;
48
+ }
49
+
50
+ override async getTextureSource(): Promise<TextureData> {
51
+ const { w, h } = this.props;
52
+ const size = w * h * 4;
53
+ const pixelData8 = new Uint8ClampedArray(size);
54
+ for (let i = 0; i < size; i += 4) {
55
+ const v = Math.floor(Math.random() * 256);
56
+ pixelData8[i] = v;
57
+ pixelData8[i + 1] = v;
58
+ pixelData8[i + 2] = v;
59
+ pixelData8[i + 3] = 255;
60
+ }
61
+
62
+ // Noise Texture data ready - dimensions will be set during upload
63
+ return {
64
+ data: new ImageData(pixelData8, w, h),
65
+ };
66
+ }
67
+
68
+ static override makeCacheKey(props: NoiseTextureProps): string | false {
69
+ if (props.cacheId === undefined) {
70
+ return false;
71
+ }
72
+ const resolvedProps = NoiseTexture.resolveDefaults(props);
73
+ return `NoiseTexture,${resolvedProps.w},${resolvedProps.h},${resolvedProps.cacheId}`;
74
+ }
75
+
76
+ static override resolveDefaults(
77
+ props: NoiseTextureProps,
78
+ ): Required<NoiseTextureProps> {
79
+ return {
80
+ w: props.w ?? 128,
81
+ h: props.h ?? 128,
82
+ cacheId: props.cacheId ?? 0,
83
+ };
84
+ }
85
+
86
+ static z$__type__Props: NoiseTextureProps;
87
+ }
@@ -0,0 +1,68 @@
1
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
2
+ import { Texture, TextureType, type TextureData } from './Texture.js';
3
+
4
+ /**
5
+ * Properties of the {@link RenderTexture}
6
+ */
7
+ export interface RenderTextureProps {
8
+ /**
9
+ * WebGL Texture width
10
+ * @default 256
11
+ */
12
+ w?: number;
13
+
14
+ /**
15
+ * WebGL Texture height
16
+ * @default 256
17
+ */
18
+ h?: number;
19
+ }
20
+
21
+ export class RenderTexture extends Texture {
22
+ props: Required<RenderTextureProps>;
23
+
24
+ public override type: TextureType = TextureType.renderToTexture;
25
+
26
+ constructor(
27
+ txManager: CoreTextureManager,
28
+ props: Required<RenderTextureProps>,
29
+ ) {
30
+ super(txManager);
31
+ this.props = props;
32
+ }
33
+
34
+ get w() {
35
+ return this.props.w;
36
+ }
37
+
38
+ set w(value: number) {
39
+ this.props.w = value;
40
+ }
41
+
42
+ get h() {
43
+ return this.props.h;
44
+ }
45
+
46
+ set h(value: number) {
47
+ this.props.h = value;
48
+ }
49
+
50
+ override async getTextureSource(): Promise<TextureData> {
51
+ // Render texture data ready - dimensions will be set during upload
52
+ return {
53
+ data: null,
54
+ premultiplyAlpha: null,
55
+ };
56
+ }
57
+
58
+ static override resolveDefaults(
59
+ props: RenderTextureProps,
60
+ ): Required<RenderTextureProps> {
61
+ return {
62
+ w: props.w || 256,
63
+ h: props.h || 256,
64
+ };
65
+ }
66
+
67
+ static z$__type__Props: RenderTextureProps;
68
+ }
@@ -0,0 +1,165 @@
1
+ import type { Dimensions } from '../../common/CommonTypes.js';
2
+ import { assertTruthy } from '../../utils.js';
3
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
4
+ import { ImageTexture } from './ImageTexture.js';
5
+ import {
6
+ Texture,
7
+ TextureType,
8
+ type TextureData,
9
+ type TextureFailedEventHandler,
10
+ type TextureLoadedEventHandler,
11
+ type TextureState,
12
+ } from './Texture.js';
13
+
14
+ let subTextureId = 0;
15
+
16
+ /**
17
+ * Properties of the {@link SubTexture}
18
+ */
19
+ export interface SubTextureProps {
20
+ /**
21
+ * The texture that this sub-texture is a sub-region of.
22
+ */
23
+ texture: Texture;
24
+
25
+ /**
26
+ * The x pixel position of the top-left of the sub-texture within the parent
27
+ * texture.
28
+ *
29
+ * @default 0
30
+ */
31
+ x?: number;
32
+
33
+ /**
34
+ * The y pixel position of the top-left sub-texture within the parent
35
+ * texture.
36
+ *
37
+ * @default 0
38
+ **/
39
+ y?: number;
40
+
41
+ /**
42
+ * The width of the sub-texture in pixels.
43
+ *
44
+ * @default 0
45
+ */
46
+ w?: number;
47
+
48
+ /**
49
+ * The height of the sub-texture in pixels
50
+ **/
51
+ h?: number;
52
+ }
53
+
54
+ /**
55
+ * A Texture that is a sub-region of another Texture.
56
+ *
57
+ * @remarks
58
+ * The parent texture can be a Sprite Sheet/Texture Atlas and set using the
59
+ * {@link SubTextureProps.texture} prop. The sub-region relative to the parent
60
+ * texture is defined with the {@link SubTextureProps.x},
61
+ * {@link SubTextureProps.y}, {@link SubTextureProps.w}, and
62
+ * {@link SubTextureProps.h} pixel values.
63
+ */
64
+ export class SubTexture extends Texture {
65
+ props: Required<SubTextureProps>;
66
+ parentTexture: Texture;
67
+
68
+ public override type: TextureType = TextureType.subTexture;
69
+ public subtextureId = `subtexture-${subTextureId++}`;
70
+
71
+ constructor(txManager: CoreTextureManager, props: Required<SubTextureProps>) {
72
+ super(txManager);
73
+ this.props = props;
74
+
75
+ assertTruthy(this.props.texture, 'SubTexture requires a parent texture');
76
+ assertTruthy(
77
+ this.props.texture instanceof ImageTexture,
78
+ 'SubTexture requires an ImageTexture parent',
79
+ );
80
+
81
+ // Resolve parent texture from cache or fallback to provided texture
82
+ this.parentTexture = txManager.resolveParentTexture(this.props.texture);
83
+
84
+ if (this.renderableOwners.length > 0) {
85
+ this.parentTexture.setRenderableOwner(this.subtextureId, true);
86
+ }
87
+
88
+ // If parent texture is already loaded / failed, trigger loaded event manually
89
+ // so that users get a consistent event experience.
90
+ // We do this in a microtask to allow listeners to be attached in the same
91
+ // synchronous task after calling loadTexture()
92
+ queueMicrotask(() => {
93
+ const parentTx = this.parentTexture;
94
+ if (parentTx.state === 'loaded' && parentTx.dimensions !== null) {
95
+ this.onParentTxLoaded(parentTx, parentTx.dimensions);
96
+ } else if (parentTx.state === 'loading') {
97
+ this.onParentTxLoading();
98
+ } else if (parentTx.state === 'failed' && parentTx.error !== null) {
99
+ this.onParentTxFailed(parentTx, parentTx.error);
100
+ } else if (parentTx.state === 'freed') {
101
+ this.onParentTxFreed();
102
+ }
103
+
104
+ parentTx.on('loading', this.onParentTxLoading);
105
+ parentTx.on('loaded', this.onParentTxLoaded);
106
+ parentTx.on('failed', this.onParentTxFailed);
107
+ parentTx.on('freed', this.onParentTxFreed);
108
+ });
109
+ }
110
+
111
+ private onParentTxLoaded: TextureLoadedEventHandler = () => {
112
+ // We ignore the parent's passed dimensions, and simply use the SubTexture's
113
+ // configured dimensions (because that's all that matters here)
114
+ this.setState('loaded', {
115
+ w: this.props.w,
116
+ h: this.props.h,
117
+ });
118
+ };
119
+
120
+ private onParentTxFailed: TextureFailedEventHandler = (target, error) => {
121
+ this.retryCount = this.parentTexture.retryCount - 1;
122
+ this.setState('failed', error);
123
+ };
124
+
125
+ private onParentTxLoading = () => {
126
+ this.setState('loading');
127
+ };
128
+
129
+ private onParentTxFreed = () => {
130
+ this.setState('freed');
131
+ };
132
+
133
+ override onChangeIsRenderable(isRenderable: boolean): void {
134
+ // Propagate the renderable owner change to the parent texture
135
+ this.parentTexture.setRenderableOwner(this.subtextureId, isRenderable);
136
+ }
137
+
138
+ override async getTextureSource(): Promise<TextureData> {
139
+ // Check if parent texture is loaded
140
+ return new Promise((resolve, reject) => {
141
+ resolve({
142
+ data: this.props,
143
+ });
144
+ });
145
+ }
146
+
147
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
148
+ static override makeCacheKey(props: SubTextureProps): string | false {
149
+ return false;
150
+ }
151
+
152
+ static override resolveDefaults(
153
+ props: SubTextureProps,
154
+ ): Required<SubTextureProps> {
155
+ return {
156
+ texture: props.texture,
157
+ x: props.x || 0,
158
+ y: props.y || 0,
159
+ w: props.w || 0,
160
+ h: props.h || 0,
161
+ };
162
+ }
163
+
164
+ static z$__type__Props: SubTextureProps;
165
+ }