@lightningjs/renderer 2.12.1 → 3.0.0-beta1

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 (323) hide show
  1. package/dist/exports/canvas-shaders.d.ts +10 -0
  2. package/dist/exports/canvas-shaders.js +27 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -0
  4. package/dist/exports/canvas.d.ts +7 -1
  5. package/dist/exports/canvas.js +7 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +15 -8
  8. package/dist/exports/index.js +7 -4
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/webgl-shaders.d.ts +11 -0
  11. package/dist/exports/webgl-shaders.js +28 -0
  12. package/dist/exports/webgl-shaders.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +9 -1
  14. package/dist/exports/webgl.js +9 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/core/CoreNode.d.ts +19 -5
  17. package/dist/src/core/CoreNode.js +117 -24
  18. package/dist/src/core/CoreNode.js.map +1 -1
  19. package/dist/src/core/CoreShaderManager.d.ts +29 -71
  20. package/dist/src/core/CoreShaderManager.js +110 -97
  21. package/dist/src/core/CoreShaderManager.js.map +1 -1
  22. package/dist/src/core/CoreTextNode.js +1 -1
  23. package/dist/src/core/CoreTextNode.js.map +1 -1
  24. package/dist/src/core/CoreTextureManager.d.ts +13 -7
  25. package/dist/src/core/CoreTextureManager.js +92 -105
  26. package/dist/src/core/CoreTextureManager.js.map +1 -1
  27. package/dist/src/core/Stage.d.ts +15 -16
  28. package/dist/src/core/Stage.js +45 -32
  29. package/dist/src/core/Stage.js.map +1 -1
  30. package/dist/src/core/TextureMemoryManager.d.ts +16 -6
  31. package/dist/src/core/TextureMemoryManager.js +75 -17
  32. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
  34. package/dist/src/core/animations/CoreAnimation.js +6 -52
  35. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.d.ts +1 -1
  37. package/dist/src/core/lib/ImageWorker.js +13 -11
  38. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  39. package/dist/src/core/lib/WebGlContextWrapper.d.ts +67 -54
  40. package/dist/src/core/lib/WebGlContextWrapper.js +126 -157
  41. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  42. package/dist/src/core/lib/textureCompression.js +0 -1
  43. package/dist/src/core/lib/textureCompression.js.map +1 -1
  44. package/dist/src/core/lib/utils.d.ts +4 -0
  45. package/dist/src/core/lib/utils.js +26 -0
  46. package/dist/src/core/lib/utils.js.map +1 -1
  47. package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
  48. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  49. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  50. package/dist/src/core/platform.js +4 -3
  51. package/dist/src/core/platform.js.map +1 -1
  52. package/dist/src/core/renderers/CoreRenderer.d.ts +11 -21
  53. package/dist/src/core/renderers/CoreRenderer.js +0 -6
  54. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  55. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  56. package/dist/src/core/renderers/CoreShaderNode.js +107 -0
  57. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  58. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  59. package/{src/core/renderers/CoreShader.ts → dist/src/core/renderers/CoreShaderProgram.js} +2 -23
  60. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  61. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  62. package/dist/src/core/renderers/canvas/CanvasRenderer.js +212 -0
  63. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  64. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  65. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +60 -0
  66. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  67. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  68. package/dist/src/core/renderers/canvas/CanvasTexture.js +123 -0
  69. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  70. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -13
  71. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +192 -113
  72. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +2 -0
  74. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +14 -0
  75. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  76. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -12
  77. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  78. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  79. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  80. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  81. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  82. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  83. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  84. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  85. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +227 -0
  86. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  87. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +36 -0
  88. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +107 -0
  89. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  90. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +134 -0
  91. package/dist/src/core/renderers/webgl/WebGlRenderer.js +546 -0
  92. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  93. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +221 -0
  94. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +334 -0
  95. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  96. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +35 -0
  97. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +195 -0
  98. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  99. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
  100. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -0
  101. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  102. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  103. package/dist/src/core/shaders/canvas/Border.js +57 -0
  104. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  105. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  106. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  107. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  108. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  109. package/dist/src/core/shaders/canvas/LinearGradient.js +46 -0
  110. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  111. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  112. package/dist/src/core/shaders/canvas/RadialGradient.js +68 -0
  113. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  114. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  115. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  116. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  117. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  118. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +35 -0
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  120. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +39 -0
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +38 -0
  125. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  126. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  127. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  128. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  129. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  130. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  131. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  132. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  133. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  134. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  135. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  136. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  137. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  138. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  139. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  140. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  141. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  142. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  143. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  144. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  145. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  146. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  147. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  148. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  149. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  150. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  151. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  152. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  153. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  154. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  155. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  156. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  157. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  158. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  159. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  160. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  161. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  162. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  163. package/dist/src/core/shaders/webgl/Border.js +87 -0
  164. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  165. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  166. package/dist/src/core/shaders/webgl/Default.js +86 -0
  167. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  168. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  169. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  170. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  171. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  172. package/dist/src/core/shaders/webgl/HolePunch.js +64 -0
  173. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  174. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  175. package/dist/src/core/shaders/webgl/LinearGradient.js +75 -0
  176. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  177. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  178. package/dist/src/core/shaders/webgl/RadialGradient.js +73 -0
  179. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  180. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  181. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  182. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  183. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  184. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +97 -0
  185. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  186. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  187. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +112 -0
  188. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  189. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  190. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  191. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  192. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  193. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  194. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  195. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  196. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  197. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  198. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  199. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  200. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  201. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +6 -0
  202. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -3
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +34 -30
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  206. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -4
  207. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  208. package/dist/src/core/textures/ImageTexture.js +10 -16
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +1 -1
  211. package/dist/src/main-api/INode.d.ts +9 -9
  212. package/dist/src/main-api/Inspector.js +16 -2
  213. package/dist/src/main-api/Inspector.js.map +1 -1
  214. package/dist/src/main-api/Renderer.d.ts +35 -92
  215. package/dist/src/main-api/Renderer.js +11 -57
  216. package/dist/src/main-api/Renderer.js.map +1 -1
  217. package/dist/src/utils.d.ts +6 -0
  218. package/dist/src/utils.js +18 -0
  219. package/dist/src/utils.js.map +1 -1
  220. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  221. package/exports/canvas-shaders.ts +28 -0
  222. package/exports/canvas.ts +7 -1
  223. package/exports/index.ts +17 -17
  224. package/exports/webgl-shaders.ts +28 -0
  225. package/exports/webgl.ts +13 -1
  226. package/package.json +3 -1
  227. package/src/core/CoreNode.test.ts +157 -153
  228. package/src/core/CoreNode.ts +173 -38
  229. package/src/core/CoreShaderManager.ts +127 -226
  230. package/src/core/CoreTextNode.ts +1 -8
  231. package/src/core/CoreTextureManager.ts +127 -126
  232. package/src/core/Stage.ts +62 -44
  233. package/src/core/TextureMemoryManager.ts +108 -27
  234. package/src/core/animations/CoreAnimation.ts +8 -64
  235. package/src/core/lib/ImageWorker.ts +20 -12
  236. package/src/core/lib/WebGlContextWrapper.ts +228 -236
  237. package/src/core/lib/textureCompression.ts +3 -3
  238. package/src/core/lib/utils.ts +51 -0
  239. package/src/core/lib/validateImageBitmap.ts +76 -0
  240. package/src/core/platform.ts +6 -3
  241. package/src/core/renderers/CoreRenderer.ts +19 -27
  242. package/src/core/renderers/CoreShaderNode.ts +171 -0
  243. package/src/core/renderers/{canvas/shaders/UnsupportedShader.ts → CoreShaderProgram.ts} +3 -28
  244. package/src/core/renderers/canvas/CanvasRenderer.ts +299 -0
  245. package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -0
  246. package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +1 -1
  247. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +2 -13
  248. package/src/core/renderers/canvas/internal/ColorUtils.ts +16 -0
  249. package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +2 -2
  250. package/src/core/renderers/webgl/{WebGlCoreCtxSubTexture.ts → WebGlCtxSubTexture.ts} +2 -2
  251. package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +12 -14
  252. package/src/core/renderers/webgl/{WebGlCoreRenderOp.ts → WebGlRenderOp.ts} +56 -36
  253. package/src/core/renderers/webgl/{WebGlCoreRenderer.ts → WebGlRenderer.ts} +143 -243
  254. package/src/core/renderers/webgl/WebGlShaderNode.ts +433 -0
  255. package/src/core/renderers/webgl/WebGlShaderProgram.ts +310 -0
  256. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -5
  257. package/src/core/shaders/canvas/Border.ts +78 -0
  258. package/src/core/shaders/canvas/HolePunch.ts +62 -0
  259. package/src/core/shaders/canvas/LinearGradient.ts +69 -0
  260. package/src/core/shaders/canvas/RadialGradient.ts +113 -0
  261. package/src/core/shaders/canvas/Rounded.ts +55 -0
  262. package/src/core/shaders/canvas/RoundedWithBorder.ts +68 -0
  263. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -0
  264. package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -0
  265. package/src/core/shaders/canvas/Shadow.ts +52 -0
  266. package/src/core/shaders/canvas/utils/render.ts +151 -0
  267. package/src/core/shaders/templates/BorderTemplate.ts +115 -0
  268. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -0
  269. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -0
  270. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -0
  271. package/src/core/shaders/templates/RoundedTemplate.ts +98 -0
  272. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -0
  273. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -0
  274. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -0
  275. package/src/core/shaders/templates/ShadowTemplate.ts +106 -0
  276. package/src/core/shaders/templates/shaderUtils.ts +47 -0
  277. package/src/core/shaders/webgl/Border.ts +96 -0
  278. package/src/core/shaders/webgl/Default.ts +89 -0
  279. package/src/core/shaders/webgl/DefaultBatched.ts +129 -0
  280. package/src/core/shaders/webgl/HolePunch.ts +78 -0
  281. package/src/core/shaders/webgl/LinearGradient.ts +81 -0
  282. package/src/core/shaders/webgl/RadialGradient.ts +84 -0
  283. package/src/core/shaders/webgl/Rounded.ts +117 -0
  284. package/src/core/shaders/webgl/RoundedWithBorder.ts +114 -0
  285. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +133 -0
  286. package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -0
  287. package/src/core/shaders/webgl/SdfShader.ts +137 -0
  288. package/src/core/shaders/webgl/Shadow.ts +115 -0
  289. package/src/core/text-rendering/TextTextureRendererUtils.ts +1 -1
  290. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +2 -2
  291. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +12 -5
  292. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +44 -56
  293. package/src/core/text-rendering/renderers/TextRenderer.ts +2 -9
  294. package/src/core/textures/ImageTexture.ts +11 -17
  295. package/src/core/textures/Texture.ts +1 -1
  296. package/src/main-api/INode.ts +11 -13
  297. package/src/main-api/Inspector.ts +19 -2
  298. package/src/main-api/Renderer.ts +59 -130
  299. package/src/utils.ts +19 -0
  300. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
  301. package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -362
  302. package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
  303. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
  304. package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
  305. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
  306. package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
  307. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
  308. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
  309. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
  310. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
  311. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
  312. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
  313. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
  314. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
  315. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
  316. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
  317. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
  318. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
  319. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
  320. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
  321. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
  322. package/src/main-api/DynamicShaderController.ts +0 -104
  323. package/src/main-api/ShaderController.ts +0 -80
@@ -28,6 +28,10 @@ import { TextureType, type Texture } from './textures/Texture.js';
28
28
  import { EventEmitter } from '../common/EventEmitter.js';
29
29
  import { getTimeStamp } from './platform.js';
30
30
  import type { Stage } from './Stage.js';
31
+ import {
32
+ validateCreateImageBitmap,
33
+ type CreateImageBitmapSupport,
34
+ } from './lib/validateImageBitmap.js';
31
35
 
32
36
  /**
33
37
  * Augmentable map of texture class types
@@ -45,12 +49,6 @@ export interface TextureMap {
45
49
  RenderTexture: typeof RenderTexture;
46
50
  }
47
51
 
48
- export interface CreateImageBitmapSupport {
49
- basic: boolean; // Supports createImageBitmap(image)
50
- options: boolean; // Supports createImageBitmap(image, options)
51
- full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
52
- }
53
-
54
52
  export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
55
53
  ? Props
56
54
  : never;
@@ -63,6 +61,11 @@ export interface TextureManagerDebugInfo {
63
61
  keyCacheSize: number;
64
62
  }
65
63
 
64
+ export interface TextureManagerSettings {
65
+ numImageWorkers: number;
66
+ createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
67
+ }
68
+
66
69
  export type ResizeModeOptions =
67
70
  | {
68
71
  /**
@@ -180,6 +183,7 @@ export class CoreTextureManager extends EventEmitter {
180
183
  private uploadTextureQueue: Array<Texture> = [];
181
184
  private initialized = false;
182
185
  private stage: Stage;
186
+ private numImageWorkers: number;
183
187
 
184
188
  imageWorkerManager: ImageWorkerManager | null = null;
185
189
  hasCreateImageBitmap = !!self.createImageBitmap;
@@ -210,48 +214,34 @@ export class CoreTextureManager extends EventEmitter {
210
214
  */
211
215
  frameTime = 0;
212
216
 
213
- constructor(stage: Stage, numImageWorkers: number) {
217
+ constructor(stage: Stage, settings: TextureManagerSettings) {
214
218
  super();
219
+
220
+ const { numImageWorkers, createImageBitmapSupport } = settings;
215
221
  this.stage = stage;
216
- this.validateCreateImageBitmap()
217
- .then((result) => {
218
- this.hasCreateImageBitmap =
219
- result.basic || result.options || result.full;
220
- this.imageBitmapSupported = result;
222
+ this.numImageWorkers = numImageWorkers;
221
223
 
222
- if (!this.hasCreateImageBitmap) {
224
+ if (createImageBitmapSupport === 'auto') {
225
+ validateCreateImageBitmap()
226
+ .then((result) => {
227
+ this.initialize(result);
228
+ })
229
+ .catch((e) => {
223
230
  console.warn(
224
231
  '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
225
232
  );
226
- }
227
233
 
228
- if (
229
- this.hasCreateImageBitmap &&
230
- this.hasWorker &&
231
- numImageWorkers > 0
232
- ) {
233
- this.imageWorkerManager = new ImageWorkerManager(
234
- numImageWorkers,
235
- result,
236
- );
237
- } else {
238
- console.warn(
239
- '[Lightning] Imageworker is 0 or not supported on this browser. Image loading will be slower.',
240
- );
241
- }
242
-
243
- this.initialized = true;
244
- this.emit('initialized');
245
- })
246
- .catch((e) => {
247
- console.warn(
248
- '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
249
- );
250
-
251
- // initialized without image worker manager and createImageBitmap
252
- this.initialized = true;
253
- this.emit('initialized');
234
+ // initialized without image worker manager and createImageBitmap
235
+ this.initialized = true;
236
+ this.emit('initialized');
237
+ });
238
+ } else {
239
+ this.initialize({
240
+ basic: createImageBitmapSupport === 'basic',
241
+ options: createImageBitmapSupport === 'options',
242
+ full: createImageBitmapSupport === 'full',
254
243
  });
244
+ }
255
245
 
256
246
  this.registerTextureType('ImageTexture', ImageTexture);
257
247
  this.registerTextureType('ColorTexture', ColorTexture);
@@ -260,77 +250,6 @@ export class CoreTextureManager extends EventEmitter {
260
250
  this.registerTextureType('RenderTexture', RenderTexture);
261
251
  }
262
252
 
263
- private async validateCreateImageBitmap(): Promise<CreateImageBitmapSupport> {
264
- // Test if createImageBitmap is supported using a simple 1x1 PNG image
265
- // prettier-ignore
266
- const pngBinaryData = new Uint8Array([
267
- 0x89, 0x50, 0x4e, 0x47,
268
- 0x0d, 0x0a, 0x1a, 0x0a, // PNG signature
269
- 0x00, 0x00, 0x00, 0x0d, // IHDR chunk length
270
- 0x49, 0x48, 0x44, 0x52, // "IHDR" chunk type
271
- 0x00, 0x00, 0x00, 0x01, // Width: 1
272
- 0x00, 0x00, 0x00, 0x01, // Height: 1
273
- 0x01, // Bit depth: 1
274
- 0x03, // Color type: Indexed
275
- 0x00, // Compression method: Deflate
276
- 0x00, // Filter method: None
277
- 0x00, // Interlace method: None
278
- 0x25, 0xdb, 0x56, 0xca, // CRC for IHDR
279
- 0x00, 0x00, 0x00, 0x03, // PLTE chunk length
280
- 0x50, 0x4c, 0x54, 0x45, // "PLTE" chunk type
281
- 0x00, 0x00, 0x00, // Palette entry: Black
282
- 0xa7, 0x7a, 0x3d, 0xda, // CRC for PLTE
283
- 0x00, 0x00, 0x00, 0x01, // tRNS chunk length
284
- 0x74, 0x52, 0x4e, 0x53, // "tRNS" chunk type
285
- 0x00, // Transparency for black: Fully transparent
286
- 0x40, 0xe6, 0xd8, 0x66, // CRC for tRNS
287
- 0x00, 0x00, 0x00, 0x0a, // IDAT chunk length
288
- 0x49, 0x44, 0x41, 0x54, // "IDAT" chunk type
289
- 0x08, 0xd7, // Deflate header
290
- 0x63, 0x60, 0x00, 0x00,
291
- 0x00, 0x02, 0x00, 0x01, // Zlib-compressed data
292
- 0xe2, 0x21, 0xbc, 0x33, // CRC for IDAT
293
- 0x00, 0x00, 0x00, 0x00, // IEND chunk length
294
- 0x49, 0x45, 0x4e, 0x44, // "IEND" chunk type
295
- 0xae, 0x42, 0x60, 0x82, // CRC for IEND
296
- ]);
297
-
298
- const support: CreateImageBitmapSupport = {
299
- basic: false,
300
- options: false,
301
- full: false,
302
- };
303
-
304
- // Test basic createImageBitmap support
305
- const blob = new Blob([pngBinaryData], { type: 'image/png' });
306
- const bitmap = await createImageBitmap(blob);
307
- bitmap.close?.();
308
- support.basic = true;
309
-
310
- // Test createImageBitmap with options support
311
- try {
312
- const options = { premultiplyAlpha: 'none' as const };
313
- const bitmapWithOptions = await createImageBitmap(blob, options);
314
- bitmapWithOptions.close?.();
315
- support.options = true;
316
- } catch (e) {
317
- /* ignore */
318
- }
319
-
320
- // Test createImageBitmap with full options support
321
- try {
322
- const bitmapWithFullOptions = await createImageBitmap(blob, 0, 0, 1, 1, {
323
- premultiplyAlpha: 'none',
324
- });
325
- bitmapWithFullOptions.close?.();
326
- support.full = true;
327
- } catch (e) {
328
- /* ignore */
329
- }
330
-
331
- return support;
332
- }
333
-
334
253
  registerTextureType<Type extends keyof TextureMap>(
335
254
  textureType: Type,
336
255
  textureClass: TextureMap[Type],
@@ -338,6 +257,36 @@ export class CoreTextureManager extends EventEmitter {
338
257
  this.txConstructors[textureType] = textureClass;
339
258
  }
340
259
 
260
+ private initialize(support: CreateImageBitmapSupport) {
261
+ this.hasCreateImageBitmap =
262
+ support.basic || support.options || support.full;
263
+ this.imageBitmapSupported = support;
264
+
265
+ if (!this.hasCreateImageBitmap) {
266
+ console.warn(
267
+ '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
268
+ );
269
+ }
270
+
271
+ if (
272
+ this.hasCreateImageBitmap &&
273
+ this.hasWorker &&
274
+ this.numImageWorkers > 0
275
+ ) {
276
+ this.imageWorkerManager = new ImageWorkerManager(
277
+ this.numImageWorkers,
278
+ support,
279
+ );
280
+ } else {
281
+ console.warn(
282
+ '[Lightning] Imageworker is 0 or not supported on this browser. Image loading will be slower.',
283
+ );
284
+ }
285
+
286
+ this.initialized = true;
287
+ this.emit('initialized');
288
+ }
289
+
341
290
  /**
342
291
  * Enqueue a texture for downloading its source image.
343
292
  */
@@ -392,15 +341,7 @@ export class CoreTextureManager extends EventEmitter {
392
341
 
393
342
  orphanTexture(texture: Texture): void {
394
343
  // if it is part of the download or upload queue, remove it
395
- const downloadIndex = this.downloadTextureSourceQueue.indexOf(texture);
396
- if (downloadIndex !== -1) {
397
- this.downloadTextureSourceQueue.splice(downloadIndex, 1);
398
- }
399
-
400
- const uploadIndex = this.uploadTextureQueue.indexOf(texture);
401
- if (uploadIndex !== -1) {
402
- this.uploadTextureQueue.splice(uploadIndex, 1);
403
- }
344
+ this.removeTextureFromQueue(texture);
404
345
 
405
346
  if (texture.type === TextureType.subTexture) {
406
347
  // ignore subtextures
@@ -419,11 +360,42 @@ export class CoreTextureManager extends EventEmitter {
419
360
  loadTexture(texture: Texture, priority?: boolean): void {
420
361
  this.stage.txMemManager.removeFromOrphanedTextures(texture);
421
362
 
422
- if (texture.state !== 'initial' && texture.state !== 'freed') {
363
+ if (texture.type === TextureType.subTexture) {
364
+ // ignore subtextures - they get loaded through their parent
423
365
  return;
424
366
  }
425
367
 
426
- texture.setState('loading');
368
+ // if the texture is already loaded, don't load it again
369
+ if (
370
+ texture.ctxTexture !== undefined &&
371
+ texture.ctxTexture.state === 'loaded'
372
+ ) {
373
+ texture.setState('loaded');
374
+ return;
375
+ }
376
+
377
+ // if the texture is already being processed, don't load it again
378
+ if (
379
+ this.downloadTextureSourceQueue.includes(texture) === true ||
380
+ this.uploadTextureQueue.includes(texture) === true
381
+ ) {
382
+ return;
383
+ }
384
+
385
+ // if the texture is already loading, free it, this can happen if the texture is
386
+ // orphaned and then reloaded
387
+ if (
388
+ texture.ctxTexture !== undefined &&
389
+ texture.ctxTexture.state === 'loading'
390
+ ) {
391
+ // if the texture has texture data, queue it for upload
392
+ if (texture.textureData !== null) {
393
+ this.enqueueUploadTexture(texture);
394
+ }
395
+
396
+ // else we will have to re-download the texture
397
+ texture.free();
398
+ }
427
399
 
428
400
  // if we're not initialized, just queue the texture into the priority queue
429
401
  if (this.initialized === false) {
@@ -435,15 +407,17 @@ export class CoreTextureManager extends EventEmitter {
435
407
  // Technically the noise texture shouldn't either, but it's a special case
436
408
  // and not really used in production so who cares ¯\_(ツ)_/¯
437
409
  if (
438
- texture.type === TextureType.subTexture ||
439
- texture.type === TextureType.color ||
440
- texture.type === TextureType.renderToTexture
410
+ (texture.type === TextureType.color ||
411
+ texture.type === TextureType.renderToTexture) &&
412
+ texture.state !== 'initial'
441
413
  ) {
442
414
  texture.setState('fetched');
443
415
  this.enqueueUploadTexture(texture);
444
416
  return;
445
417
  }
446
418
 
419
+ texture.setState('loading');
420
+
447
421
  // prioritize the texture for immediate loading
448
422
  if (priority === true) {
449
423
  texture
@@ -466,11 +440,21 @@ export class CoreTextureManager extends EventEmitter {
466
440
  * @param texture Texture to upload
467
441
  */
468
442
  uploadTexture(texture: Texture): void {
469
- if (texture.state !== 'fetched') {
443
+ if (
444
+ this.stage.txMemManager.doNotExceedCriticalThreshold === true &&
445
+ this.stage.txMemManager.criticalCleanupRequested === true
446
+ ) {
447
+ // we're at a critical memory threshold, don't upload textures
448
+ this.enqueueUploadTexture(texture);
470
449
  return;
471
450
  }
472
451
 
473
452
  const coreContext = texture.loadCtxTexture();
453
+ if (coreContext !== null && coreContext.state === 'loaded') {
454
+ texture.setState('loaded');
455
+ return;
456
+ }
457
+
474
458
  coreContext.load();
475
459
  }
476
460
 
@@ -576,6 +560,23 @@ export class CoreTextureManager extends EventEmitter {
576
560
  }
577
561
  }
578
562
 
563
+ /**
564
+ * Remove texture from the queue's
565
+ *
566
+ * @param texture - The texture to remove
567
+ */
568
+ removeTextureFromQueue(texture: Texture): void {
569
+ const downloadIndex = this.downloadTextureSourceQueue.indexOf(texture);
570
+ if (downloadIndex !== -1) {
571
+ this.downloadTextureSourceQueue.splice(downloadIndex, 1);
572
+ }
573
+
574
+ const uploadIndex = this.uploadTextureQueue.indexOf(texture);
575
+ if (uploadIndex !== -1) {
576
+ this.uploadTextureQueue.splice(uploadIndex, 1);
577
+ }
578
+ }
579
+
579
580
  /**
580
581
  * Resolve a parent texture from the cache or fallback to the provided texture.
581
582
  *
package/src/core/Stage.ts CHANGED
@@ -20,13 +20,14 @@ import { startLoop, getTimeStamp } from './platform.js';
20
20
  import { assertTruthy, setPremultiplyMode } from '../utils.js';
21
21
  import { AnimationManager } from './animations/AnimationManager.js';
22
22
  import {
23
+ UpdateType,
23
24
  CoreNode,
24
25
  CoreNodeRenderState,
25
26
  type CoreNodeProps,
26
27
  } from './CoreNode.js';
27
28
  import { CoreTextureManager } from './CoreTextureManager.js';
28
29
  import { TrFontManager } from './text-rendering/TrFontManager.js';
29
- import { CoreShaderManager, type ShaderMap } from './CoreShaderManager.js';
30
+ import { CoreShaderManager } from './CoreShaderManager.js';
30
31
  import {
31
32
  TextRenderer,
32
33
  type TextRendererMap,
@@ -44,15 +45,14 @@ import {
44
45
  TextureMemoryManager,
45
46
  type TextureMemoryManagerSettings,
46
47
  } from './TextureMemoryManager.js';
47
- import type { CoreRendererOptions } from './renderers/CoreRenderer.js';
48
48
  import { CoreRenderer } from './renderers/CoreRenderer.js';
49
- import type { WebGlCoreRenderer } from './renderers/webgl/WebGlCoreRenderer.js';
50
- import type { CanvasCoreRenderer } from './renderers/canvas/CanvasCoreRenderer.js';
51
- import type { BaseShaderController } from '../main-api/ShaderController.js';
49
+ import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
50
+ import type { CanvasRenderer } from './renderers/canvas/CanvasRenderer.js';
52
51
  import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
53
52
  import { santizeCustomDataMap } from '../main-api/utils.js';
54
53
  import type { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
55
54
  import type { CanvasTextRenderer } from './text-rendering/renderers/CanvasTextRenderer.js';
55
+ import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
56
56
  import { createBound, createPreloadBounds, type Bound } from './lib/utils.js';
57
57
  import type { Texture } from './textures/Texture.js';
58
58
  import { ColorTexture } from './textures/ColorTexture.js';
@@ -70,13 +70,14 @@ export interface StageOptions {
70
70
  enableContextSpy: boolean;
71
71
  forceWebGL2: boolean;
72
72
  numImageWorkers: number;
73
- renderEngine: typeof WebGlCoreRenderer | typeof CanvasCoreRenderer;
73
+ renderEngine: typeof WebGlRenderer | typeof CanvasRenderer;
74
74
  eventBus: EventEmitter;
75
75
  quadBufferSize: number;
76
76
  fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
77
77
  inspector: boolean;
78
78
  strictBounds: boolean;
79
79
  textureProcessingTimeLimit: number;
80
+ createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
80
81
  }
81
82
 
82
83
  export type StageFpsUpdateHandler = (
@@ -89,7 +90,6 @@ export type StageFrameTickHandler = (
89
90
  frameTickData: FrameTickPayload,
90
91
  ) => void;
91
92
 
92
- const bufferMemory = 2e6;
93
93
  const autoStart = true;
94
94
 
95
95
  export class Stage {
@@ -102,13 +102,14 @@ export class Stage {
102
102
  public readonly shManager: CoreShaderManager;
103
103
  public readonly renderer: CoreRenderer;
104
104
  public readonly root: CoreNode;
105
- public readonly boundsMargin: [number, number, number, number];
106
- public readonly defShaderCtr: BaseShaderController;
105
+ public boundsMargin: [number, number, number, number];
106
+ public readonly defShaderNode: CoreShaderNode | null = null;
107
107
  public readonly strictBound: Bound;
108
108
  public readonly preloadBound: Bound;
109
109
  public readonly strictBounds: boolean;
110
110
  public readonly defaultTexture: Texture | null = null;
111
-
111
+ public readonly pixelRatio: number;
112
+ public readonly bufferMemory: number = 2e6;
112
113
  /**
113
114
  * Renderer Event Bus for the Stage to emit events onto
114
115
  *
@@ -123,6 +124,7 @@ export class Stage {
123
124
  deltaTime = 0;
124
125
  lastFrameTime = 0;
125
126
  currentFrameTime = 0;
127
+ private clrColor = 0x00000000;
126
128
  private fpsNumFrames = 0;
127
129
  private fpsElapsedTime = 0;
128
130
  private numQuadsRendered = 0;
@@ -150,10 +152,14 @@ export class Stage {
150
152
  textureMemory,
151
153
  renderEngine,
152
154
  fontEngines,
155
+ createImageBitmapSupport,
153
156
  } = options;
154
157
 
155
158
  this.eventBus = options.eventBus;
156
- this.txManager = new CoreTextureManager(this, numImageWorkers);
159
+ this.txManager = new CoreTextureManager(this, {
160
+ numImageWorkers,
161
+ createImageBitmapSupport,
162
+ });
157
163
 
158
164
  // Wait for the Texture Manager to initialize
159
165
  // once it does, request a render
@@ -162,7 +168,7 @@ export class Stage {
162
168
  });
163
169
 
164
170
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
165
- this.shManager = new CoreShaderManager();
171
+
166
172
  this.animationManager = new AnimationManager();
167
173
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
168
174
  this.strictBounds = options.strictBounds;
@@ -179,25 +185,25 @@ export class Stage {
179
185
  this.strictBound = createBound(0, 0, appWidth, appHeight);
180
186
  this.preloadBound = createPreloadBounds(this.strictBound, bm);
181
187
 
182
- const rendererOptions: CoreRendererOptions = {
188
+ this.clrColor = clearColor;
189
+
190
+ this.pixelRatio =
191
+ options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio;
192
+
193
+ this.renderer = new renderEngine({
183
194
  stage: this,
184
195
  canvas,
185
- pixelRatio:
186
- options.devicePhysicalPixelRatio * options.deviceLogicalPixelRatio,
187
- clearColor: clearColor ?? 0xff000000,
188
- bufferMemory,
189
- txManager: this.txManager,
190
- txMemManager: this.txMemManager,
191
- shManager: this.shManager,
192
196
  contextSpy: this.contextSpy,
193
197
  forceWebGL2,
194
- };
198
+ });
199
+
200
+ this.shManager = new CoreShaderManager(this);
201
+
202
+ this.defShaderNode = this.renderer.getDefaultShaderNode();
195
203
 
196
- this.renderer = new renderEngine(rendererOptions);
197
204
  const renderMode = this.renderer.mode || 'webgl';
198
205
 
199
206
  this.createDefaultTexture();
200
- this.defShaderCtr = this.renderer.getDefShaderCtr();
201
207
  setPremultiplyMode(renderMode);
202
208
 
203
209
  // Must do this after renderer is created
@@ -240,6 +246,7 @@ export class Stage {
240
246
  height: appHeight,
241
247
  alpha: 1,
242
248
  autosize: false,
249
+ boundsMargin: null,
243
250
  clipping: false,
244
251
  color: 0x00000000,
245
252
  colorTop: 0x00000000,
@@ -264,7 +271,7 @@ export class Stage {
264
271
  parent: null,
265
272
  texture: null,
266
273
  textureOptions: {},
267
- shader: this.defShaderCtr,
274
+ shader: this.defShaderNode,
268
275
  rtt: false,
269
276
  src: null,
270
277
  scale: 1,
@@ -281,6 +288,7 @@ export class Stage {
281
288
  }
282
289
 
283
290
  setClearColor(color: number) {
291
+ this.clearColor = color;
284
292
  this.renderer.updateClearColor(color);
285
293
  this.renderRequested = true;
286
294
  }
@@ -307,6 +315,7 @@ export class Stage {
307
315
  * Create default PixelTexture
308
316
  */
309
317
  createDefaultTexture() {
318
+ console.log('Creating default texture');
310
319
  (this.defaultTexture as ColorTexture) = this.txManager.createTexture(
311
320
  'ColorTexture',
312
321
  {
@@ -315,7 +324,6 @@ export class Stage {
315
324
  );
316
325
 
317
326
  assertTruthy(this.defaultTexture instanceof ColorTexture);
318
-
319
327
  this.txManager.loadTexture(this.defaultTexture, true);
320
328
 
321
329
  // Mark the default texture as ALWAYS renderable
@@ -372,8 +380,13 @@ export class Stage {
372
380
  renderer.reset();
373
381
 
374
382
  // Check if we need to cleanup textures
375
- if (this.txMemManager.criticalCleanupRequested) {
376
- this.txMemManager.cleanup();
383
+ if (this.txMemManager.criticalCleanupRequested === true) {
384
+ this.txMemManager.cleanup(false);
385
+
386
+ if (this.txMemManager.criticalCleanupRequested === true) {
387
+ // If we still need to cleanup, request another but aggressive cleanup
388
+ this.txMemManager.cleanup(true);
389
+ }
377
390
  }
378
391
 
379
392
  // If we have RTT nodes draw them first
@@ -577,20 +590,6 @@ export class Stage {
577
590
  return resolvedTextRenderer as unknown as TextRenderer;
578
591
  }
579
592
 
580
- /**
581
- * Create a shader controller instance
582
- *
583
- * @param type
584
- * @param props
585
- * @returns
586
- */
587
- createShaderCtr(
588
- type: keyof ShaderMap,
589
- props: Record<string, unknown>,
590
- ): BaseShaderController {
591
- return this.shManager.loadShader(type, props);
592
- }
593
-
594
593
  createNode(props: Partial<CoreNodeProps>) {
595
594
  const resolvedProps = this.resolveNodeDefaults(props);
596
595
  return new CoreNode(this, resolvedProps);
@@ -636,6 +635,14 @@ export class Stage {
636
635
  return new CoreTextNode(this, resolvedProps, resolvedTextRenderer);
637
636
  }
638
637
 
638
+ setBoundsMargin(value: number | [number, number, number, number]) {
639
+ this.boundsMargin = Array.isArray(value)
640
+ ? value
641
+ : [value, value, value, value];
642
+
643
+ this.root.setUpdateType(UpdateType.RenderBounds);
644
+ }
645
+
639
646
  /**
640
647
  * Resolves the default property values for a Node
641
648
  *
@@ -669,6 +676,7 @@ export class Stage {
669
676
  height: props.height ?? 0,
670
677
  alpha: props.alpha ?? 1,
671
678
  autosize: props.autosize ?? false,
679
+ boundsMargin: props.boundsMargin ?? null,
672
680
  clipping: props.clipping ?? false,
673
681
  color,
674
682
  colorTop: props.colorTop ?? color,
@@ -684,7 +692,7 @@ export class Stage {
684
692
  parent: props.parent ?? null,
685
693
  texture: props.texture ?? null,
686
694
  textureOptions: props.textureOptions ?? {},
687
- shader: props.shader ?? this.defShaderCtr,
695
+ shader: props.shader ?? this.defShaderNode,
688
696
  // Since setting the `src` will trigger a texture load, we need to set it after
689
697
  // we set the texture. Otherwise, problems happen.
690
698
  src: props.src ?? null,
@@ -716,7 +724,17 @@ export class Stage {
716
724
  * @remarks
717
725
  * This method is used to cleanup orphaned textures that are no longer in use.
718
726
  */
719
- cleanup() {
720
- this.txMemManager.cleanup();
727
+ cleanup(aggressive: boolean) {
728
+ this.txMemManager.cleanup(aggressive);
729
+ }
730
+
731
+ set clearColor(value: number) {
732
+ this.renderer.updateClearColor(value);
733
+ this.renderRequested = true;
734
+ this.clrColor = value;
735
+ }
736
+
737
+ get clearColor() {
738
+ return this.clrColor;
721
739
  }
722
740
  }