@lightningjs/renderer 3.0.0-beta9 → 3.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 (566) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/AutosizeManager.d.ts +29 -0
  18. package/dist/src/core/AutosizeManager.js +169 -0
  19. package/dist/src/core/AutosizeManager.js.map +1 -0
  20. package/dist/src/core/Autosizer.d.ts +35 -0
  21. package/dist/src/core/Autosizer.js +196 -0
  22. package/dist/src/core/Autosizer.js.map +1 -0
  23. package/dist/src/core/CoreNode.d.ts +106 -58
  24. package/dist/src/core/CoreNode.js +524 -282
  25. package/dist/src/core/CoreNode.js.map +1 -1
  26. package/dist/src/core/CoreTextNode.d.ts +73 -88
  27. package/dist/src/core/CoreTextNode.js +375 -236
  28. package/dist/src/core/CoreTextNode.js.map +1 -1
  29. package/dist/src/core/CoreTextureManager.d.ts +19 -17
  30. package/dist/src/core/CoreTextureManager.js +52 -120
  31. package/dist/src/core/CoreTextureManager.js.map +1 -1
  32. package/dist/src/core/Stage.d.ts +63 -9
  33. package/dist/src/core/Stage.js +233 -133
  34. package/dist/src/core/Stage.js.map +1 -1
  35. package/dist/src/core/TextureError.d.ts +11 -0
  36. package/dist/src/core/TextureError.js +37 -0
  37. package/dist/src/core/TextureError.js.map +1 -0
  38. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  39. package/dist/src/core/TextureMemoryManager.js +80 -113
  40. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  41. package/dist/src/core/animations/Animation.d.ts +21 -0
  42. package/dist/src/core/animations/Animation.js +194 -0
  43. package/dist/src/core/animations/Animation.js.map +1 -0
  44. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  45. package/dist/src/core/animations/CoreAnimation.js +3 -3
  46. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  47. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  48. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  49. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  50. package/dist/src/core/animations/Playback.d.ts +64 -0
  51. package/dist/src/core/animations/Playback.js +169 -0
  52. package/dist/src/core/animations/Playback.js.map +1 -0
  53. package/dist/src/core/animations/Transition.d.ts +27 -0
  54. package/dist/src/core/animations/Transition.js +52 -0
  55. package/dist/src/core/animations/Transition.js.map +1 -0
  56. package/dist/src/core/animations/utils.d.ts +2 -0
  57. package/dist/src/core/animations/utils.js +136 -0
  58. package/dist/src/core/animations/utils.js.map +1 -0
  59. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  60. package/dist/src/core/lib/ImageWorker.js +30 -11
  61. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  62. package/dist/src/core/lib/WebGlContextWrapper.d.ts +22 -1
  63. package/dist/src/core/lib/WebGlContextWrapper.js +49 -3
  64. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  65. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  66. package/dist/src/core/lib/collectionUtils.js +72 -0
  67. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  68. package/dist/src/core/lib/colorCache.d.ts +1 -0
  69. package/dist/src/core/lib/colorCache.js +19 -0
  70. package/dist/src/core/lib/colorCache.js.map +1 -0
  71. package/dist/src/core/lib/colorParser.d.ts +21 -0
  72. package/dist/src/core/lib/colorParser.js +72 -0
  73. package/dist/src/core/lib/colorParser.js.map +1 -0
  74. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  75. package/dist/src/core/lib/textureCompression.js +320 -67
  76. package/dist/src/core/lib/textureCompression.js.map +1 -1
  77. package/dist/src/core/lib/utils.d.ts +6 -6
  78. package/dist/src/core/lib/utils.js +21 -65
  79. package/dist/src/core/lib/utils.js.map +1 -1
  80. package/dist/src/core/platform.d.ts +10 -0
  81. package/dist/src/core/platform.js +81 -0
  82. package/dist/src/core/platform.js.map +1 -0
  83. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  84. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  85. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  86. package/dist/src/core/platforms/Platform.d.ts +78 -12
  87. package/dist/src/core/platforms/Platform.js +18 -0
  88. package/dist/src/core/platforms/Platform.js.map +1 -1
  89. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  90. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  91. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  92. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  93. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  94. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  95. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  96. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  97. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  98. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  99. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  100. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  101. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  102. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  103. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  104. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  105. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  106. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  107. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  108. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  109. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  110. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  111. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  112. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  113. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  114. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  115. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  116. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  117. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  118. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  119. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  120. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  121. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  122. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  123. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  124. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  125. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  126. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  127. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  128. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  129. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  130. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  131. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  132. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  133. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  134. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  135. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  136. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  137. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  138. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  139. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  140. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  141. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  143. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  144. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  145. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  146. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  147. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  148. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  149. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  150. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  151. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  152. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  153. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  154. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  155. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  156. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  157. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  158. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  159. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  160. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  161. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  162. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  164. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  165. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  174. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  176. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  177. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  179. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  180. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  182. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  183. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  185. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  186. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  187. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  188. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  189. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  190. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  191. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  192. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  193. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  194. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  195. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  196. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  197. package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
  198. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  199. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  200. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  201. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  202. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +7 -7
  203. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +56 -37
  204. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  205. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  206. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  207. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  208. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  209. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  210. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  211. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  212. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  214. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  215. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  217. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  218. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  220. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  221. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  223. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  224. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  258. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  259. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
  260. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  261. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  262. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  263. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  264. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  265. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  266. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  267. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  268. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  269. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  270. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  271. package/dist/src/core/shaders/canvas/Border.js +64 -25
  272. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  273. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  274. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  276. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  278. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  280. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  281. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  282. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  283. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  284. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  285. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  286. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  287. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  288. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  289. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  290. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  291. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  292. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  293. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  294. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  295. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  296. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  297. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  298. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  299. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  300. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  301. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  302. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  303. package/dist/src/core/shaders/webgl/Border.js +138 -84
  304. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  305. package/dist/src/core/shaders/webgl/Default.js +46 -47
  306. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  307. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  308. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  309. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  311. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  312. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  313. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  314. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  315. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  316. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  317. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  318. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  319. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  320. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  321. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  322. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  323. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  324. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  325. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  326. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  327. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  329. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  330. package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
  331. package/dist/src/core/text-rendering/CanvasFont.js +111 -0
  332. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
  333. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  334. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  335. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  336. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  337. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  338. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  339. package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
  340. package/dist/src/core/text-rendering/CoreFont.js +48 -0
  341. package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
  342. package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
  343. package/dist/src/core/text-rendering/FontManager.js +42 -0
  344. package/dist/src/core/text-rendering/FontManager.js.map +1 -0
  345. package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
  346. package/dist/src/core/text-rendering/SdfFont.js +142 -0
  347. package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
  348. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  349. package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
  350. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  351. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  352. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  353. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  354. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  355. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  356. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  357. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  358. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  359. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  360. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  361. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  362. package/dist/src/core/text-rendering/Utils.js +84 -0
  363. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  364. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  365. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  366. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  367. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  368. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  369. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  370. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  371. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  372. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  373. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  377. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  378. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  379. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  380. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  381. package/dist/src/core/textures/ColorTexture.js +3 -4
  382. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  383. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  384. package/dist/src/core/textures/ImageTexture.js +46 -125
  385. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  386. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  387. package/dist/src/core/textures/NoiseTexture.js +8 -8
  388. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  389. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  390. package/dist/src/core/textures/RenderTexture.js +12 -12
  391. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  392. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  393. package/dist/src/core/textures/SubTexture.js +22 -40
  394. package/dist/src/core/textures/SubTexture.js.map +1 -1
  395. package/dist/src/core/textures/Texture.d.ts +74 -15
  396. package/dist/src/core/textures/Texture.js +131 -19
  397. package/dist/src/core/textures/Texture.js.map +1 -1
  398. package/dist/src/core/utils.d.ts +2 -1
  399. package/dist/src/core/utils.js +1 -1
  400. package/dist/src/core/utils.js.map +1 -1
  401. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  402. package/dist/src/main-api/DynamicShaderController.js +58 -0
  403. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  404. package/dist/src/main-api/Inspector.d.ts +129 -1
  405. package/dist/src/main-api/Inspector.js +462 -23
  406. package/dist/src/main-api/Inspector.js.map +1 -1
  407. package/dist/src/main-api/Renderer.d.ts +223 -41
  408. package/dist/src/main-api/Renderer.js +107 -62
  409. package/dist/src/main-api/Renderer.js.map +1 -1
  410. package/dist/src/main-api/ShaderController.d.ts +31 -0
  411. package/dist/src/main-api/ShaderController.js +37 -0
  412. package/dist/src/main-api/ShaderController.js.map +1 -0
  413. package/dist/src/utils.d.ts +0 -2
  414. package/dist/src/utils.js +0 -36
  415. package/dist/src/utils.js.map +1 -1
  416. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  417. package/dist/tsconfig.tsbuildinfo +1 -0
  418. package/exports/canvas-shaders.ts +28 -28
  419. package/exports/canvas.ts +45 -45
  420. package/exports/index.ts +90 -90
  421. package/exports/inspector.ts +24 -24
  422. package/exports/platform.ts +31 -0
  423. package/exports/utils.ts +50 -50
  424. package/exports/webgl-shaders.ts +28 -28
  425. package/exports/webgl.ts +52 -50
  426. package/package.json +16 -15
  427. package/src/common/CommonTypes.ts +163 -146
  428. package/src/common/EventEmitter.ts +77 -77
  429. package/src/common/IAnimationController.ts +92 -92
  430. package/src/common/IEventEmitter.ts +28 -28
  431. package/src/core/Autosizer.ts +224 -0
  432. package/src/core/CoreNode.test.ts +365 -202
  433. package/src/core/CoreNode.ts +2785 -2489
  434. package/src/core/CoreShaderManager.ts +188 -188
  435. package/src/core/CoreTextNode.test.ts +311 -0
  436. package/src/core/CoreTextNode.ts +598 -451
  437. package/src/core/CoreTextureManager.ts +484 -548
  438. package/src/core/Stage.ts +927 -800
  439. package/src/core/TextureError.ts +46 -0
  440. package/src/core/TextureMemoryManager.ts +418 -462
  441. package/src/core/animations/AnimationManager.ts +38 -38
  442. package/src/core/animations/CoreAnimation.ts +290 -291
  443. package/src/core/animations/CoreAnimationController.ts +169 -166
  444. package/src/core/lib/ContextSpy.ts +41 -41
  445. package/src/core/lib/Matrix3d.ts +244 -244
  446. package/src/core/lib/RenderCoords.ts +71 -71
  447. package/src/core/lib/collectionUtils.ts +83 -0
  448. package/src/core/lib/colorCache.ts +20 -0
  449. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  450. package/src/core/lib/utils.ts +337 -390
  451. package/src/core/platforms/GlContextWrapper.ts +291 -0
  452. package/src/core/platforms/Platform.ts +176 -77
  453. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1368
  454. package/src/core/platforms/web/WebPlatform.ts +306 -84
  455. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  456. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  457. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  458. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  459. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  460. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  461. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  462. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  463. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  464. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  465. package/src/core/platforms/web/lib/utils.ts +105 -0
  466. package/src/core/renderers/CoreContextTexture.ts +44 -43
  467. package/src/core/renderers/CoreRenderOp.ts +22 -22
  468. package/src/core/renderers/CoreRenderer.ts +71 -110
  469. package/src/core/renderers/CoreShaderNode.ts +202 -175
  470. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  471. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  472. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  473. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  474. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  475. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  476. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  477. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  478. package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
  479. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  480. package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -341
  481. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  482. package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
  483. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  484. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  485. package/src/core/shaders/canvas/Border.ts +132 -78
  486. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  487. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  488. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  489. package/src/core/shaders/canvas/Rounded.ts +55 -55
  490. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  491. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  492. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  493. package/src/core/shaders/canvas/Shadow.ts +54 -52
  494. package/src/core/shaders/canvas/utils/render.ts +160 -151
  495. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  496. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  497. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  498. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  499. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  500. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  501. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  502. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  503. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  504. package/src/core/shaders/utils.ts +46 -46
  505. package/src/core/shaders/webgl/Border.ts +169 -116
  506. package/src/core/shaders/webgl/Default.ts +88 -89
  507. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  508. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  509. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  510. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  511. package/src/core/shaders/webgl/Rounded.ts +115 -117
  512. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  513. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  514. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  515. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  516. package/src/core/shaders/webgl/Shadow.ts +121 -115
  517. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  518. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  519. package/src/core/text-rendering/SdfFontHandler.ts +584 -0
  520. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  521. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  522. package/src/core/text-rendering/TextRenderer.ts +444 -0
  523. package/src/core/text-rendering/Utils.ts +99 -0
  524. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  525. package/src/core/textures/ColorTexture.ts +104 -102
  526. package/src/core/textures/ImageTexture.ts +292 -418
  527. package/src/core/textures/NoiseTexture.ts +106 -104
  528. package/src/core/textures/RenderTexture.ts +87 -85
  529. package/src/core/textures/SubTexture.ts +184 -205
  530. package/src/core/textures/Texture.ts +524 -381
  531. package/src/core/utils.ts +229 -227
  532. package/src/env.d.ts +7 -7
  533. package/src/main-api/INode.ts +100 -100
  534. package/src/main-api/Inspector.ts +1278 -569
  535. package/src/main-api/Renderer.ts +1030 -818
  536. package/src/main-api/utils.ts +45 -45
  537. package/src/utils.ts +220 -267
  538. package/COPYING +0 -1
  539. package/src/core/lib/ImageWorker.ts +0 -286
  540. package/src/core/lib/textureCompression.ts +0 -152
  541. package/src/core/lib/validateImageBitmap.ts +0 -87
  542. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  543. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  544. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  545. package/src/core/text-rendering/TrFontManager.ts +0 -183
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  548. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  549. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  550. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  551. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  552. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  553. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  554. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  566. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -24,6 +24,8 @@ import { Matrix3d } from './lib/Matrix3d.js';
24
24
  import { RenderCoords } from './lib/RenderCoords.js';
25
25
  import { CoreAnimation } from './animations/CoreAnimation.js';
26
26
  import { CoreAnimationController } from './animations/CoreAnimationController.js';
27
+ import { AutosizeMode, Autosizer } from './Autosizer.js';
28
+ import { bucketSortByZIndex, removeChild } from './lib/collectionUtils.js';
27
29
  export var CoreNodeRenderState;
28
30
  (function (CoreNodeRenderState) {
29
31
  CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
@@ -31,6 +33,13 @@ export var CoreNodeRenderState;
31
33
  CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
32
34
  CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
33
35
  })(CoreNodeRenderState || (CoreNodeRenderState = {}));
36
+ const NO_CLIPPING_RECT = {
37
+ x: 0,
38
+ y: 0,
39
+ w: 0,
40
+ h: 0,
41
+ valid: false,
42
+ };
34
43
  const CoreNodeRenderStateMap = new Map();
35
44
  CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
36
45
  CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
@@ -69,21 +78,13 @@ export var UpdateType;
69
78
  */
70
79
  UpdateType[UpdateType["Clipping"] = 8] = "Clipping";
71
80
  /**
72
- * Calculated ZIndex update
73
- *
74
- * @remarks
75
- * CoreNode Properties Updated:
76
- * - `calcZIndex`
77
- */
78
- UpdateType[UpdateType["CalculatedZIndex"] = 16] = "CalculatedZIndex";
79
- /**
80
- * Z-Index Sorted Children update
81
+ * Sort Z-Index Children update
81
82
  *
82
83
  * @remarks
83
84
  * CoreNode Properties Updated:
84
85
  * - `children` (sorts children by their `calcZIndex`)
85
86
  */
86
- UpdateType[UpdateType["ZIndexSortedChildren"] = 32] = "ZIndexSortedChildren";
87
+ UpdateType[UpdateType["SortZIndexChildren"] = 16] = "SortZIndexChildren";
87
88
  /**
88
89
  * Premultiplied Colors update
89
90
  *
@@ -94,7 +95,7 @@ export var UpdateType;
94
95
  * - `premultipliedColorBl`
95
96
  * - `premultipliedColorBr`
96
97
  */
97
- UpdateType[UpdateType["PremultipliedColors"] = 64] = "PremultipliedColors";
98
+ UpdateType[UpdateType["PremultipliedColors"] = 32] = "PremultipliedColors";
98
99
  /**
99
100
  * World Alpha update
100
101
  *
@@ -102,7 +103,7 @@ export var UpdateType;
102
103
  * CoreNode Properties Updated:
103
104
  * - `worldAlpha` = `parent.worldAlpha` * `alpha`
104
105
  */
105
- UpdateType[UpdateType["WorldAlpha"] = 128] = "WorldAlpha";
106
+ UpdateType[UpdateType["WorldAlpha"] = 64] = "WorldAlpha";
106
107
  /**
107
108
  * Render State update
108
109
  *
@@ -110,7 +111,7 @@ export var UpdateType;
110
111
  * CoreNode Properties Updated:
111
112
  * - `renderState`
112
113
  */
113
- UpdateType[UpdateType["RenderState"] = 256] = "RenderState";
114
+ UpdateType[UpdateType["RenderState"] = 128] = "RenderState";
114
115
  /**
115
116
  * Is Renderable update
116
117
  *
@@ -118,23 +119,27 @@ export var UpdateType;
118
119
  * CoreNode Properties Updated:
119
120
  * - `isRenderable`
120
121
  */
121
- UpdateType[UpdateType["IsRenderable"] = 512] = "IsRenderable";
122
+ UpdateType[UpdateType["IsRenderable"] = 256] = "IsRenderable";
122
123
  /**
123
124
  * Render Texture update
124
125
  */
125
- UpdateType[UpdateType["RenderTexture"] = 1024] = "RenderTexture";
126
+ UpdateType[UpdateType["RenderTexture"] = 512] = "RenderTexture";
126
127
  /**
127
128
  * Track if parent has render texture
128
129
  */
129
- UpdateType[UpdateType["ParentRenderTexture"] = 2048] = "ParentRenderTexture";
130
+ UpdateType[UpdateType["ParentRenderTexture"] = 1024] = "ParentRenderTexture";
130
131
  /**
131
132
  * Render Bounds update
132
133
  */
133
- UpdateType[UpdateType["RenderBounds"] = 4096] = "RenderBounds";
134
+ UpdateType[UpdateType["RenderBounds"] = 2048] = "RenderBounds";
134
135
  /**
135
136
  * RecalcUniforms
136
137
  */
137
- UpdateType[UpdateType["RecalcUniforms"] = 8192] = "RecalcUniforms";
138
+ UpdateType[UpdateType["RecalcUniforms"] = 4096] = "RecalcUniforms";
139
+ /**
140
+ * Autosize update
141
+ */
142
+ UpdateType[UpdateType["Autosize"] = 8192] = "Autosize";
138
143
  /**
139
144
  * None
140
145
  */
@@ -157,8 +162,17 @@ export class CoreNode extends EventEmitter {
157
162
  children = [];
158
163
  _id = getNewId();
159
164
  props;
165
+ isCoreNode = true;
166
+ // WebGL Render Op State
167
+ renderOpBufferIdx = 0;
168
+ numQuads = 0;
169
+ renderOpTextures = [];
160
170
  hasShaderUpdater = false;
171
+ hasShaderTimeFn = false;
161
172
  hasColorProps = false;
173
+ zIndexMin = 0;
174
+ zIndexMax = 0;
175
+ previousZIndex = -1;
162
176
  updateType = UpdateType.All;
163
177
  childUpdateType = UpdateType.None;
164
178
  globalTransform;
@@ -172,12 +186,12 @@ export class CoreNode extends EventEmitter {
172
186
  clippingRect = {
173
187
  x: 0,
174
188
  y: 0,
175
- width: 0,
176
- height: 0,
189
+ w: 0,
190
+ h: 0,
177
191
  valid: false,
178
192
  };
179
193
  textureCoords;
180
- updateTextureCoords = false;
194
+ updateShaderUniforms = false;
181
195
  isRenderable = false;
182
196
  renderState = CoreNodeRenderState.Init;
183
197
  worldAlpha = 1;
@@ -193,16 +207,23 @@ export class CoreNode extends EventEmitter {
193
207
  * only used when rtt = true
194
208
  */
195
209
  framebufferDimensions = null;
210
+ /**Autosize properties */
211
+ autosizer = null;
212
+ parentAutosizer = null;
196
213
  destroyed = false;
197
214
  constructor(stage, props) {
198
215
  super();
199
216
  this.stage = stage;
200
217
  const p = (this.props = {});
218
+ // Initialize the renderOpTextures array with a capacity of 16 (typical max textures)
219
+ this.renderOpTextures = [];
220
+ //inital update type
221
+ let initialUpdateType = UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState;
201
222
  // Fast-path assign only known keys
202
223
  p.x = props.x;
203
224
  p.y = props.y;
204
- p.width = props.width;
205
- p.height = props.height;
225
+ p.w = props.w;
226
+ p.h = props.h;
206
227
  p.alpha = props.alpha;
207
228
  p.autosize = props.autosize;
208
229
  p.clipping = props.clipping;
@@ -215,6 +236,19 @@ export class CoreNode extends EventEmitter {
215
236
  p.colorTr = props.colorTr;
216
237
  p.colorBl = props.colorBl;
217
238
  p.colorBr = props.colorBr;
239
+ //check if any color props are set for premultiplied color updates
240
+ if (props.color > 0 ||
241
+ props.colorTop > 0 ||
242
+ props.colorBottom > 0 ||
243
+ props.colorLeft > 0 ||
244
+ props.colorRight > 0 ||
245
+ props.colorTl > 0 ||
246
+ props.colorTr > 0 ||
247
+ props.colorBl > 0 ||
248
+ props.colorBr > 0) {
249
+ this.hasColorProps = true;
250
+ initialUpdateType |= UpdateType.PremultipliedColors;
251
+ }
218
252
  p.scaleX = props.scaleX;
219
253
  p.scaleY = props.scaleY;
220
254
  p.rotation = props.rotation;
@@ -224,9 +258,7 @@ export class CoreNode extends EventEmitter {
224
258
  p.mountY = props.mountY;
225
259
  p.mount = props.mount;
226
260
  p.pivot = props.pivot;
227
- p.strictBounds = props.strictBounds;
228
261
  p.zIndex = props.zIndex;
229
- p.zIndexLocked = props.zIndexLocked;
230
262
  p.textureOptions = props.textureOptions;
231
263
  p.data = props.data;
232
264
  p.imageType = props.imageType;
@@ -234,67 +266,79 @@ export class CoreNode extends EventEmitter {
234
266
  p.srcY = props.srcY;
235
267
  p.srcWidth = props.srcWidth;
236
268
  p.srcHeight = props.srcHeight;
237
- p.parent = null;
269
+ p.autosize = props.autosize;
270
+ p.parent = props.parent;
238
271
  p.texture = null;
239
272
  p.shader = null;
240
273
  p.src = null;
241
274
  p.rtt = false;
242
275
  p.boundsMargin = null;
276
+ // Only set non-default values
277
+ if (props.zIndex !== 0) {
278
+ this.zIndex = props.zIndex;
279
+ }
280
+ if (props.parent !== null) {
281
+ props.parent.addChild(this);
282
+ }
243
283
  // Assign props to instances
244
- this.parent = props.parent;
245
284
  this.texture = props.texture;
246
285
  this.shader = props.shader;
247
286
  this.src = props.src;
248
287
  this.rtt = props.rtt;
249
288
  this.boundsMargin = props.boundsMargin;
250
289
  this.interactive = props.interactive;
251
- this.setUpdateType(UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState);
290
+ // Initialize autosize if enabled
291
+ if (p.autosize === true) {
292
+ this.autosizer = new Autosizer(this);
293
+ }
294
+ this.setUpdateType(initialUpdateType);
252
295
  // if the default texture isn't loaded yet, wait for it to load
253
296
  // this only happens when the node is created before the stage is ready
254
- const dt = this.stage.defaultTexture;
297
+ const dt = stage.defaultTexture;
255
298
  if (dt !== null && dt.state !== 'loaded') {
256
299
  dt.once('loaded', () => this.setUpdateType(UpdateType.IsRenderable));
257
300
  }
258
301
  }
259
302
  //#region Textures
260
303
  loadTexture() {
261
- const { texture } = this.props;
262
- if (!texture) {
304
+ if (this.props.texture === null) {
263
305
  return;
264
306
  }
265
307
  // If texture is already loaded / failed, trigger loaded event manually
266
308
  // so that users get a consistent event experience.
267
309
  // We do this in a microtask to allow listeners to be attached in the same
268
310
  // synchronous task after calling loadTexture()
269
- queueMicrotask(() => {
270
- if (this.textureOptions.preload === true) {
271
- this.stage.txManager.loadTexture(texture);
272
- }
273
- texture.preventCleanup =
274
- this.props.textureOptions?.preventCleanup ?? false;
275
- texture.on('loaded', this.onTextureLoaded);
276
- texture.on('failed', this.onTextureFailed);
277
- texture.on('freed', this.onTextureFreed);
278
- // If the parent is a render texture, the initial texture status
279
- // will be set to freed until the texture is processed by the
280
- // Render RTT nodes. So we only need to listen fo changes and
281
- // no need to check the texture.state until we restructure how
282
- // textures are being processed.
283
- if (this.parentHasRenderTexture) {
284
- this.notifyParentRTTOfUpdate();
285
- return;
286
- }
287
- if (texture.state === 'loaded') {
288
- this.onTextureLoaded(texture, texture.dimensions);
289
- }
290
- else if (texture.state === 'failed') {
291
- this.onTextureFailed(texture, texture.error);
292
- }
293
- else if (texture.state === 'freed') {
294
- this.onTextureFreed(texture);
295
- }
296
- });
311
+ queueMicrotask(this.loadTextureTask);
297
312
  }
313
+ /**
314
+ * Task for queueMicrotask to loadTexture
315
+ *
316
+ * @remarks
317
+ * This method is called in a microtask to release the texture.
318
+ */
319
+ loadTextureTask = () => {
320
+ const texture = this.props.texture;
321
+ //it is possible that texture is null here if user sets the texture to null right after loadTexture call
322
+ if (texture === null) {
323
+ return;
324
+ }
325
+ if (this.textureOptions.preload === true) {
326
+ this.stage.txManager.loadTexture(texture);
327
+ }
328
+ texture.preventCleanup = this.props.textureOptions?.preventCleanup ?? false;
329
+ texture.on('loaded', this.onTextureLoaded);
330
+ texture.on('failed', this.onTextureFailed);
331
+ texture.on('freed', this.onTextureFreed);
332
+ if (texture.state === 'loaded') {
333
+ this.onTextureLoaded(texture, texture.dimensions);
334
+ }
335
+ else if (texture.state === 'failed') {
336
+ this.onTextureFailed(texture, texture.error);
337
+ }
338
+ else if (texture.state === 'freed') {
339
+ this.onTextureFreed(texture);
340
+ }
341
+ };
298
342
  unloadTexture() {
299
343
  if (this.texture === null) {
300
344
  return;
@@ -303,16 +347,12 @@ export class CoreNode extends EventEmitter {
303
347
  texture.off('loaded', this.onTextureLoaded);
304
348
  texture.off('failed', this.onTextureFailed);
305
349
  texture.off('freed', this.onTextureFreed);
306
- texture.setRenderableOwner(this, false);
307
- }
308
- autosizeNode(dimensions) {
309
- if (this.autosize) {
310
- this.width = dimensions.width;
311
- this.height = dimensions.height;
312
- }
350
+ texture.setRenderableOwner(this._id, false);
313
351
  }
314
352
  onTextureLoaded = (_, dimensions) => {
315
- this.autosizeNode(dimensions);
353
+ if (this.autosizer !== null) {
354
+ this.autosizer.update();
355
+ }
316
356
  this.setUpdateType(UpdateType.IsRenderable);
317
357
  // Texture was loaded. In case the RAF loop has already stopped, we request
318
358
  // a render to ensure the texture is rendered.
@@ -322,12 +362,16 @@ export class CoreNode extends EventEmitter {
322
362
  this.notifyParentRTTOfUpdate();
323
363
  }
324
364
  // ignore 1x1 pixel textures
325
- if (dimensions.width > 1 && dimensions.height > 1) {
365
+ if (dimensions.w > 1 && dimensions.h > 1) {
326
366
  this.emit('loaded', {
327
367
  type: 'texture',
328
368
  dimensions,
329
369
  });
330
370
  }
371
+ if (this.stage.calculateTextureCoord === true &&
372
+ this.props.textureOptions !== null) {
373
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
374
+ }
331
375
  // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
332
376
  if (this.props.textureOptions?.resizeMode?.type === 'contain') {
333
377
  this.setUpdateType(UpdateType.Local);
@@ -337,20 +381,25 @@ export class CoreNode extends EventEmitter {
337
381
  // immediately set isRenderable to false, so that we handle the error
338
382
  // without waiting for the next frame loop
339
383
  this.isRenderable = false;
384
+ this.updateTextureOwnership(false);
340
385
  this.setUpdateType(UpdateType.IsRenderable);
341
386
  // If parent has a render texture, flag that we need to update
342
387
  if (this.parentHasRenderTexture) {
343
388
  this.notifyParentRTTOfUpdate();
344
389
  }
345
- this.emit('failed', {
346
- type: 'texture',
347
- error,
348
- });
390
+ if (this.texture !== null &&
391
+ this.texture.retryCount > this.texture.maxRetryCount) {
392
+ this.emit('failed', {
393
+ type: 'texture',
394
+ error,
395
+ });
396
+ }
349
397
  };
350
398
  onTextureFreed = () => {
351
399
  // immediately set isRenderable to false, so that we handle the error
352
400
  // without waiting for the next frame loop
353
401
  this.isRenderable = false;
402
+ this.updateTextureOwnership(false);
354
403
  this.setUpdateType(UpdateType.IsRenderable);
355
404
  // If parent has a render texture, flag that we need to update
356
405
  if (this.parentHasRenderTexture) {
@@ -376,20 +425,17 @@ export class CoreNode extends EventEmitter {
376
425
  return;
377
426
  parent.setUpdateType(UpdateType.Children);
378
427
  }
379
- sortChildren() {
380
- this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
381
- }
382
428
  updateLocalTransform() {
383
429
  const p = this.props;
384
- const { x, y, width, height } = p;
385
- const mountTranslateX = p.mountX * width;
386
- const mountTranslateY = p.mountY * height;
430
+ const { x, y, w, h } = p;
431
+ const mountTranslateX = p.mountX * w;
432
+ const mountTranslateY = p.mountY * h;
387
433
  if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
388
- const pivotTranslateX = p.pivotX * width;
389
- const pivotTranslateY = p.pivotY * height;
434
+ const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
435
+ const pivotTranslateX = p.pivotX * w;
436
+ const pivotTranslateY = p.pivotY * h;
390
437
  this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
391
- .rotate(p.rotation)
392
- .scale(p.scaleX, p.scaleY)
438
+ .multiply(scaleRotate)
393
439
  .translate(-pivotTranslateX, -pivotTranslateY);
394
440
  }
395
441
  else {
@@ -404,26 +450,26 @@ export class CoreNode extends EventEmitter {
404
450
  let resizeModeScaleY = 1;
405
451
  let extraX = 0;
406
452
  let extraY = 0;
407
- const { width: tw, height: th } = texture.dimensions;
453
+ const { w: tw, h: th } = texture.dimensions;
408
454
  const txAspectRatio = tw / th;
409
- const nodeAspectRatio = width / height;
455
+ const nodeAspectRatio = w / h;
410
456
  if (txAspectRatio > nodeAspectRatio) {
411
457
  // Texture is wider than node
412
458
  // Center the node vertically (shift down by extraY)
413
459
  // Scale the node vertically to maintain original aspect ratio
414
- const scaleX = width / tw;
460
+ const scaleX = w / tw;
415
461
  const scaledTxHeight = th * scaleX;
416
- extraY = (height - scaledTxHeight) / 2;
417
- resizeModeScaleY = scaledTxHeight / height;
462
+ extraY = (h - scaledTxHeight) / 2;
463
+ resizeModeScaleY = scaledTxHeight / h;
418
464
  }
419
465
  else {
420
466
  // Texture is taller than node (or equal)
421
467
  // Center the node horizontally (shift right by extraX)
422
468
  // Scale the node horizontally to maintain original aspect ratio
423
- const scaleY = height / th;
469
+ const scaleY = h / th;
424
470
  const scaledTxWidth = tw * scaleY;
425
- extraX = (width - scaledTxWidth) / 2;
426
- resizeModeScaleX = scaledTxWidth / width;
471
+ extraX = (w - scaledTxWidth) / 2;
472
+ resizeModeScaleX = scaledTxWidth / w;
427
473
  }
428
474
  // Apply the extra translation and scale to the local transform
429
475
  this.localTransform
@@ -436,17 +482,21 @@ export class CoreNode extends EventEmitter {
436
482
  * @param delta
437
483
  */
438
484
  update(delta, parentClippingRect) {
439
- if (this.updateType === UpdateType.None) {
440
- return;
441
- }
442
485
  const props = this.props;
443
486
  const parent = props.parent;
444
487
  const parentHasRenderTexture = this.parentHasRenderTexture;
445
488
  const hasParent = props.parent !== null;
446
- let renderState = null;
489
+ let newRenderState = null;
447
490
  let updateType = this.updateType;
448
491
  let childUpdateType = this.childUpdateType;
449
492
  let updateParent = false;
493
+ //this needs to be handled before setting updateTypes are reset
494
+ if (updateType & UpdateType.Autosize && this.autosizer !== null) {
495
+ this.autosizer.update();
496
+ }
497
+ // reset update type
498
+ this.updateType = 0;
499
+ this.childUpdateType = 0;
450
500
  if (updateType & UpdateType.Local) {
451
501
  this.updateLocalTransform();
452
502
  updateType |= UpdateType.Global;
@@ -480,12 +530,13 @@ export class CoreNode extends EventEmitter {
480
530
  }
481
531
  this.calculateRenderCoords();
482
532
  this.updateBoundingRect();
483
- updateType |=
484
- UpdateType.RenderState |
485
- UpdateType.Children |
486
- UpdateType.RecalcUniforms;
533
+ updateType |= UpdateType.RenderState | UpdateType.RecalcUniforms;
487
534
  updateParent = hasParent;
488
- childUpdateType |= UpdateType.Global;
535
+ //only propagate children updates if not autosizing
536
+ if ((updateType & UpdateType.Autosize) === 0) {
537
+ updateType |= UpdateType.Children;
538
+ childUpdateType |= UpdateType.Global;
539
+ }
489
540
  if (this.clipping === true) {
490
541
  updateType |= UpdateType.Clipping | UpdateType.RenderBounds;
491
542
  updateParent = hasParent;
@@ -499,18 +550,18 @@ export class CoreNode extends EventEmitter {
499
550
  childUpdateType |= UpdateType.RenderBounds;
500
551
  }
501
552
  if (updateType & UpdateType.RenderState) {
502
- renderState = this.checkRenderBounds();
553
+ newRenderState = this.checkRenderBounds();
503
554
  updateType |= UpdateType.IsRenderable;
504
555
  updateParent = hasParent;
505
556
  // if we're not going out of bounds, update the render state
506
557
  // this is done so the update loop can finish before we mark a node
507
558
  // as out of bounds
508
- if (renderState !== CoreNodeRenderState.OutOfBounds) {
509
- this.updateRenderState(renderState);
559
+ if (newRenderState !== CoreNodeRenderState.OutOfBounds) {
560
+ this.updateRenderState(newRenderState);
510
561
  }
511
562
  }
512
563
  if (updateType & UpdateType.WorldAlpha) {
513
- this.worldAlpha = ((parent && parent.worldAlpha) || 1) * props.alpha;
564
+ this.worldAlpha = (parent?.worldAlpha ?? 1) * this.props.alpha;
514
565
  updateType |=
515
566
  UpdateType.PremultipliedColors |
516
567
  UpdateType.Children |
@@ -521,6 +572,12 @@ export class CoreNode extends EventEmitter {
521
572
  if (updateType & UpdateType.IsRenderable) {
522
573
  this.updateIsRenderable();
523
574
  }
575
+ // Handle autosize updates when children transforms change
576
+ if (updateType & UpdateType.Global &&
577
+ this.isRenderable === true &&
578
+ this.parentAutosizer !== null) {
579
+ this.parentAutosizer.patch(this.id);
580
+ }
524
581
  if (updateType & UpdateType.Clipping) {
525
582
  this.calculateClippingRect(parentClippingRect);
526
583
  updateType |= UpdateType.Children;
@@ -537,7 +594,7 @@ export class CoreNode extends EventEmitter {
537
594
  const same = tl === tr && tl === bl && tl === br;
538
595
  const merged = mergeColorAlphaPremultiplied(tl, alpha, true);
539
596
  this.premultipliedColorTl = merged;
540
- if (same) {
597
+ if (same === true) {
541
598
  this.premultipliedColorTr =
542
599
  this.premultipliedColorBl =
543
600
  this.premultipliedColorBr =
@@ -549,42 +606,37 @@ export class CoreNode extends EventEmitter {
549
606
  this.premultipliedColorBr = mergeColorAlphaPremultiplied(br, alpha, true);
550
607
  }
551
608
  }
609
+ if (this.renderState === CoreNodeRenderState.OutOfBounds) {
610
+ // Delay updating children until the node is in bounds
611
+ this.updateType = updateType;
612
+ this.childUpdateType = childUpdateType;
613
+ return;
614
+ }
552
615
  if (updateParent === true) {
553
616
  parent.setUpdateType(UpdateType.Children);
554
617
  }
555
- // No need to update zIndex if there is no parent
556
- if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
557
- this.calculateZIndex();
558
- // Tell parent to re-sort children
559
- parent.setUpdateType(UpdateType.ZIndexSortedChildren);
560
- }
561
- if (props.strictBounds === true &&
562
- this.renderState === CoreNodeRenderState.OutOfBounds) {
563
- updateType &= ~UpdateType.RenderBounds; // remove render bounds update
564
- return;
565
- }
566
618
  if (updateType & UpdateType.RecalcUniforms &&
567
619
  this.hasShaderUpdater === true) {
620
+ this.updateShaderUniforms = true;
621
+ }
622
+ if (this.isRenderable === true && this.updateShaderUniforms === true) {
623
+ this.updateShaderUniforms = false;
568
624
  //this exists because the boolean hasShaderUpdater === true
569
625
  this.shader.update();
570
626
  }
571
627
  if (updateType & UpdateType.Children && this.children.length > 0) {
628
+ let childClippingRect = this.clippingRect;
629
+ if (this.rtt === true) {
630
+ childClippingRect = NO_CLIPPING_RECT;
631
+ }
572
632
  for (let i = 0, length = this.children.length; i < length; i++) {
573
633
  const child = this.children[i];
574
- child.setUpdateType(childUpdateType);
634
+ if (childUpdateType !== 0) {
635
+ child.setUpdateType(childUpdateType);
636
+ }
575
637
  if (child.updateType === 0) {
576
638
  continue;
577
639
  }
578
- let childClippingRect = this.clippingRect;
579
- if (this.rtt === true) {
580
- childClippingRect = {
581
- x: 0,
582
- y: 0,
583
- width: 0,
584
- height: 0,
585
- valid: false,
586
- };
587
- }
588
640
  child.update(delta, childClippingRect);
589
641
  }
590
642
  }
@@ -594,32 +646,24 @@ export class CoreNode extends EventEmitter {
594
646
  if (parentHasRenderTexture === true) {
595
647
  this.notifyParentRTTOfUpdate();
596
648
  }
597
- // Sorting children MUST happen after children have been updated so
598
- // that they have the oppotunity to update their calculated zIndex.
599
- if (updateType & UpdateType.ZIndexSortedChildren) {
649
+ //Resort children if needed
650
+ if (updateType & UpdateType.SortZIndexChildren) {
600
651
  // reorder z-index
601
652
  this.sortChildren();
602
653
  }
603
- if (this.updateTextureCoords === true) {
604
- this.updateTextureCoords = false;
605
- this.textureCoords = this.stage.renderer.getTextureCoords(this);
606
- }
607
654
  // If we're out of bounds, apply the render state now
608
655
  // this is done so nodes can finish their entire update loop before
609
656
  // being marked as out of bounds
610
- if (renderState === CoreNodeRenderState.OutOfBounds) {
611
- this.updateRenderState(renderState);
657
+ if (newRenderState === CoreNodeRenderState.OutOfBounds) {
658
+ this.updateRenderState(newRenderState);
612
659
  this.updateIsRenderable();
613
660
  if (this.rtt === true &&
614
- renderState === CoreNodeRenderState.OutOfBounds) {
661
+ newRenderState === CoreNodeRenderState.OutOfBounds) {
615
662
  // notify children that we are going out of bounds
616
663
  // we have to do this now before we stop processing the render tree
617
- this.notifyChildrenRTTOfUpdate(renderState);
664
+ this.notifyChildrenRTTOfUpdate(newRenderState);
618
665
  }
619
666
  }
620
- // reset update type
621
- this.updateType = 0;
622
- this.childUpdateType = 0;
623
667
  }
624
668
  findParentRTTNode() {
625
669
  let rttNode = this.parent;
@@ -664,15 +708,16 @@ export class CoreNode extends EventEmitter {
664
708
  return CoreNodeRenderState.InViewport;
665
709
  }
666
710
  // check if we dont have dimensions, take our parent's render state
667
- if (this.parent !== null &&
668
- (this.props.width === 0 || this.props.height === 0)) {
711
+ if (this.parent !== null && (this.props.w === 0 || this.props.h === 0)) {
669
712
  return this.parent.renderState;
670
713
  }
671
714
  return CoreNodeRenderState.OutOfBounds;
672
715
  }
673
716
  updateBoundingRect() {
674
- const transform = (this.sceneGlobalTransform || this.globalTransform);
675
- const renderCoords = (this.sceneRenderCoords || this.renderCoords);
717
+ const transform = (this.sceneGlobalTransform ||
718
+ this.globalTransform);
719
+ const renderCoords = (this.sceneRenderCoords ||
720
+ this.renderCoords);
676
721
  if (transform.tb === 0 || transform.tc === 0) {
677
722
  this.renderBound = createBound(renderCoords.x1, renderCoords.y1, renderCoords.x3, renderCoords.y3, this.renderBound);
678
723
  }
@@ -707,13 +752,13 @@ export class CoreNode extends EventEmitter {
707
752
  return;
708
753
  }
709
754
  // clipping is enabled and we are in bounds create our own bounds
710
- const { x, y, width, height } = this.props;
755
+ const { x, y, w, h } = this.props;
711
756
  // Pick the global transform if available, otherwise use the local transform
712
757
  // global transform is only available if the node in an RTT chain
713
758
  const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
714
759
  const _x = tx ?? x;
715
760
  const _y = ty ?? y;
716
- this.strictBound = createBound(_x, _y, _x + width, _y + height, this.strictBound);
761
+ this.strictBound = createBound(_x, _y, _x + w, _y + h, this.strictBound);
717
762
  this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
718
763
  }
719
764
  updateRenderState(renderState) {
@@ -729,6 +774,17 @@ export class CoreNode extends EventEmitter {
729
774
  current: renderState,
730
775
  });
731
776
  }
777
+ /**
778
+ * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
779
+ */
780
+ checkBasicRenderability() {
781
+ if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
782
+ return false;
783
+ }
784
+ else {
785
+ return true;
786
+ }
787
+ }
732
788
  /**
733
789
  * Updates the `isRenderable` property based on various conditions.
734
790
  */
@@ -736,13 +792,20 @@ export class CoreNode extends EventEmitter {
736
792
  let newIsRenderable = false;
737
793
  let needsTextureOwnership = false;
738
794
  // If the node is out of bounds or has an alpha of 0, it is not renderable
739
- if (this.worldAlpha === 0 ||
740
- this.renderState <= CoreNodeRenderState.OutOfBounds) {
795
+ if (this.checkBasicRenderability() === false) {
741
796
  this.updateTextureOwnership(false);
742
797
  this.setRenderable(false);
743
798
  return;
744
799
  }
745
800
  if (this.texture !== null) {
801
+ // preemptive check for failed textures this will mark the current node as non-renderable
802
+ // and will prevent further checks until the texture is reloaded or retry is reset on the texture
803
+ if (this.texture.retryCount > this.texture.maxRetryCount) {
804
+ // texture has failed to load, we cannot render
805
+ this.updateTextureOwnership(false);
806
+ this.setRenderable(false);
807
+ return;
808
+ }
746
809
  needsTextureOwnership = true;
747
810
  // we're only renderable if the texture state is loaded
748
811
  newIsRenderable = this.texture.state === 'loaded';
@@ -751,7 +814,7 @@ export class CoreNode extends EventEmitter {
751
814
  // check shader
752
815
  (this.props.shader !== null || this.hasColorProps === true) &&
753
816
  // check dimensions
754
- (this.props.width !== 0 && this.props.height !== 0) === true) {
817
+ this.hasDimensions() === true) {
755
818
  // This mean we have dimensions and a color set, so we can render a ColorTexture
756
819
  if (this.stage.defaultTexture &&
757
820
  this.stage.defaultTexture.state === 'loaded') {
@@ -766,28 +829,43 @@ export class CoreNode extends EventEmitter {
766
829
  * @param isRenderable - The new renderable state
767
830
  */
768
831
  setRenderable(isRenderable) {
832
+ const previousIsRenderable = this.isRenderable;
769
833
  this.isRenderable = isRenderable;
770
- if (isRenderable === true &&
771
- this.stage.calculateTextureCoord === true &&
772
- this.textureCoords === undefined) {
773
- this.updateTextureCoords = true;
834
+ // Emit event if renderable status has changed
835
+ if (previousIsRenderable !== isRenderable) {
836
+ this.emit('renderable', {
837
+ type: 'renderable',
838
+ isRenderable,
839
+ });
774
840
  }
775
841
  }
776
842
  /**
777
843
  * Changes the renderable state of the node.
778
844
  */
779
845
  updateTextureOwnership(isRenderable) {
780
- this.texture?.setRenderableOwner(this, isRenderable);
846
+ this.texture?.setRenderableOwner(this._id, isRenderable);
847
+ }
848
+ /**
849
+ * Checks if the node is out of the viewport bounds.
850
+ */
851
+ isOutOfBounds() {
852
+ return this.renderState <= CoreNodeRenderState.OutOfBounds;
853
+ }
854
+ /**
855
+ * Checks if the node has dimensions (width/height)
856
+ */
857
+ hasDimensions() {
858
+ return this.props.w !== 0 && this.props.h !== 0;
781
859
  }
782
860
  calculateRenderCoords() {
783
- const { width, height } = this;
861
+ const { w, h } = this.props;
784
862
  const g = this.globalTransform;
785
863
  const tx = g.tx, ty = g.ty, ta = g.ta, tb = g.tb, tc = g.tc, td = g.td;
786
864
  if (tb === 0 && tc === 0) {
787
865
  const minX = tx;
788
- const maxX = tx + width * ta;
866
+ const maxX = tx + w * ta;
789
867
  const minY = ty;
790
- const maxY = ty + height * td;
868
+ const maxY = ty + h * td;
791
869
  this.renderCoords = RenderCoords.translate(
792
870
  //top-left
793
871
  minX, minY,
@@ -803,11 +881,11 @@ export class CoreNode extends EventEmitter {
803
881
  //top-left
804
882
  tx, ty,
805
883
  //top-right
806
- tx + width * ta, ty + width * tc,
884
+ tx + w * ta, ty + w * tc,
807
885
  //bottom-right
808
- tx + width * ta + height * tb, ty + width * tc + height * td,
886
+ tx + w * ta + h * tb, ty + w * tc + h * td,
809
887
  //bottom-left
810
- tx + height * tb, ty + height * td, this.renderCoords);
888
+ tx + h * tb, ty + h * td, this.renderCoords);
811
889
  }
812
890
  if (this.sceneGlobalTransform === undefined) {
813
891
  return;
@@ -815,9 +893,9 @@ export class CoreNode extends EventEmitter {
815
893
  const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
816
894
  if (stb === 0 && stc === 0) {
817
895
  const minX = stx;
818
- const maxX = stx + width * sta;
896
+ const maxX = stx + w * sta;
819
897
  const minY = sty;
820
- const maxY = sty + height * std;
898
+ const maxY = sty + h * std;
821
899
  this.sceneRenderCoords = RenderCoords.translate(
822
900
  //top-left
823
901
  minX, minY,
@@ -833,11 +911,11 @@ export class CoreNode extends EventEmitter {
833
911
  //top-left
834
912
  stx, sty,
835
913
  //top-right
836
- stx + width * sta, sty + width * stc,
914
+ stx + w * sta, sty + w * stc,
837
915
  //bottom-right
838
- stx + width * sta + height * stb, sty + width * stc + height * std,
916
+ stx + w * sta + h * stb, sty + w * stc + h * std,
839
917
  //bottom-left
840
- stx + height * stb, sty + height * std, this.sceneRenderCoords);
918
+ stx + h * stb, sty + h * std, this.sceneRenderCoords);
841
919
  }
842
920
  }
843
921
  /**
@@ -855,8 +933,8 @@ export class CoreNode extends EventEmitter {
855
933
  if (clipping === true && isRotated === false) {
856
934
  clippingRect.x = gt.tx;
857
935
  clippingRect.y = gt.ty;
858
- clippingRect.width = this.width * gt.ta;
859
- clippingRect.height = this.height * gt.td;
936
+ clippingRect.w = this.props.w * gt.ta;
937
+ clippingRect.h = this.props.h * gt.td;
860
938
  clippingRect.valid = true;
861
939
  }
862
940
  else {
@@ -872,16 +950,6 @@ export class CoreNode extends EventEmitter {
872
950
  clippingRect.valid = true;
873
951
  }
874
952
  }
875
- calculateZIndex() {
876
- const props = this.props;
877
- const z = props.zIndex || 0;
878
- const p = props.parent?.zIndex || 0;
879
- let zIndex = z;
880
- if (props.parent?.zIndexLocked) {
881
- zIndex = z < p ? z : p;
882
- }
883
- this.calcZIndex = zIndex;
884
- }
885
953
  /**
886
954
  * Destroy the node and cleanup all resources
887
955
  */
@@ -893,21 +961,23 @@ export class CoreNode extends EventEmitter {
893
961
  this.destroyed = true;
894
962
  this.unloadTexture();
895
963
  this.isRenderable = false;
964
+ if (this.hasShaderTimeFn === true) {
965
+ this.stage.untrackTimedNode(this);
966
+ }
896
967
  // Kill children
897
968
  while (this.children.length > 0) {
898
969
  this.children[0].destroy();
899
970
  }
900
971
  const parent = this.parent;
901
972
  if (parent !== null) {
902
- const index = parent.children.indexOf(this);
903
- parent.children.splice(index, 1);
904
- parent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
973
+ parent.removeChild(this);
905
974
  }
906
975
  this.props.parent = null;
907
976
  this.props.texture = null;
908
977
  if (this.rtt === true) {
909
978
  this.stage.renderer.removeRTTNode(this);
910
979
  }
980
+ this.stage.requestRender();
911
981
  }
912
982
  renderQuads(renderer) {
913
983
  if (this.parentHasRenderTexture === true) {
@@ -915,37 +985,134 @@ export class CoreNode extends EventEmitter {
915
985
  if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
916
986
  return;
917
987
  }
918
- const p = this.props;
919
- const t = this.globalTransform;
920
- const coords = this.renderCoords;
921
- const texture = p.texture || this.stage.defaultTexture;
922
- renderer.addQuad({
923
- width: p.width,
924
- height: p.height,
925
- colorTl: this.premultipliedColorTl,
926
- colorTr: this.premultipliedColorTr,
927
- colorBl: this.premultipliedColorBl,
928
- colorBr: this.premultipliedColorBr,
929
- texture,
930
- textureOptions: p.textureOptions,
931
- textureCoords: this.textureCoords,
932
- shader: p.shader,
933
- alpha: this.worldAlpha,
934
- clippingRect: this.clippingRect,
935
- tx: t.tx,
936
- ty: t.ty,
937
- ta: t.ta,
938
- tb: t.tb,
939
- tc: t.tc,
940
- td: t.td,
941
- renderCoords: coords,
942
- rtt: p.rtt,
943
- zIndex: this.calcZIndex,
944
- parentHasRenderTexture: this.parentHasRenderTexture,
945
- framebufferDimensions: this.parentHasRenderTexture
946
- ? this.parentFramebufferDimensions
947
- : null,
948
- });
988
+ const texture = this.props.texture || this.stage.defaultTexture;
989
+ // There is a race condition where the texture can be null
990
+ // with RTT nodes. Adding this defensively to avoid errors.
991
+ // Also check if we have a valid texture or default texture to render
992
+ if (!texture || texture.state !== 'loaded') {
993
+ return;
994
+ }
995
+ renderer.addQuad(this);
996
+ }
997
+ get quadBufferCollection() {
998
+ return this.stage.renderer.quadBufferCollection;
999
+ }
1000
+ get time() {
1001
+ if (this.hasShaderTimeFn === true) {
1002
+ return this.getTimerValue();
1003
+ }
1004
+ return 0;
1005
+ }
1006
+ getTimerValue() {
1007
+ if (typeof this.shader.time === 'function') {
1008
+ return this.shader.time(this.stage);
1009
+ }
1010
+ return this.stage.elapsedTime;
1011
+ }
1012
+ sortChildren() {
1013
+ const children = this.children;
1014
+ const n = children.length;
1015
+ if (n === 0) {
1016
+ this.zIndexMin = 0;
1017
+ this.zIndexMax = 0;
1018
+ return;
1019
+ }
1020
+ let firstZIndex = children[0].props.zIndex;
1021
+ let min = firstZIndex;
1022
+ let max = firstZIndex;
1023
+ let prevZIndex = firstZIndex;
1024
+ let isSorted = true;
1025
+ for (let i = 1; i < n; i++) {
1026
+ const zIndex = children[i].props.zIndex;
1027
+ if (zIndex < min) {
1028
+ min = zIndex;
1029
+ }
1030
+ else if (zIndex > max) {
1031
+ max = zIndex;
1032
+ }
1033
+ if (prevZIndex > zIndex) {
1034
+ isSorted = false;
1035
+ }
1036
+ prevZIndex = zIndex;
1037
+ }
1038
+ // update min and max zIndex
1039
+ this.zIndexMin = min;
1040
+ this.zIndexMax = max;
1041
+ // if min and max are the same, no need to sort
1042
+ if (min === max || isSorted === true) {
1043
+ return;
1044
+ }
1045
+ bucketSortByZIndex(children, min);
1046
+ }
1047
+ removeChild(node, targetParent = null) {
1048
+ if (targetParent === null) {
1049
+ if (this.props.rtt === true && this.parentHasRenderTexture === true) {
1050
+ node.clearRTTInheritance();
1051
+ }
1052
+ const autosizeTarget = this.autosizer || this.parentAutosizer;
1053
+ if (autosizeTarget !== null) {
1054
+ autosizeTarget.detach(node);
1055
+ }
1056
+ }
1057
+ const children = this.children;
1058
+ removeChild(node, children);
1059
+ if (children.length === 0) {
1060
+ this.zIndexMin = 0;
1061
+ this.zIndexMax = 0;
1062
+ return;
1063
+ }
1064
+ const removedZIndex = node.zIndex;
1065
+ if (removedZIndex === this.zIndexMin || removedZIndex === this.zIndexMax) {
1066
+ this.setUpdateType(UpdateType.SortZIndexChildren);
1067
+ }
1068
+ }
1069
+ addChild(node, previousParent = null) {
1070
+ const inRttCluster = this.props.rtt === true || this.parentHasRenderTexture === true;
1071
+ const children = this.children;
1072
+ const zIndex = node.zIndex;
1073
+ const autosizeTarget = this.autosizer || this.parentAutosizer;
1074
+ let attachToAutosizer = autosizeTarget !== null;
1075
+ node.parentHasRenderTexture = inRttCluster;
1076
+ if (previousParent !== null) {
1077
+ const previousParentInRttCluster = previousParent.props.rtt === true ||
1078
+ previousParent.parentHasRenderTexture === true;
1079
+ if (inRttCluster === false && previousParentInRttCluster === true) {
1080
+ // update child RTT status
1081
+ node.clearRTTInheritance();
1082
+ }
1083
+ const previousAutosizer = node.autosizer || node.parentAutosizer;
1084
+ if (previousAutosizer !== null) {
1085
+ if (autosizeTarget === null ||
1086
+ previousAutosizer.id !== autosizeTarget.id) {
1087
+ previousAutosizer.detach(node);
1088
+ }
1089
+ attachToAutosizer = false;
1090
+ }
1091
+ }
1092
+ if (attachToAutosizer === true) {
1093
+ //if this is true, then the autosizer really exists
1094
+ autosizeTarget.attach(node);
1095
+ }
1096
+ if (inRttCluster === true) {
1097
+ node.markChildrenWithRTT(this);
1098
+ }
1099
+ children.push(node);
1100
+ if (children.length === 1) {
1101
+ this.zIndexMin = zIndex;
1102
+ this.zIndexMax = zIndex;
1103
+ }
1104
+ else {
1105
+ if (zIndex < this.zIndexMin) {
1106
+ this.zIndexMin = zIndex;
1107
+ }
1108
+ if (zIndex > this.zIndexMax) {
1109
+ this.zIndexMax = zIndex;
1110
+ }
1111
+ }
1112
+ if (this.zIndexMax !== this.zIndexMin) {
1113
+ this.setUpdateType(UpdateType.SortZIndexChildren);
1114
+ }
1115
+ this.setUpdateType(UpdateType.Children);
949
1116
  }
950
1117
  //#region Properties
951
1118
  get id() {
@@ -968,12 +1135,12 @@ export class CoreNode extends EventEmitter {
968
1135
  }
969
1136
  get absX() {
970
1137
  return (this.props.x +
971
- -this.props.width * this.props.mountX +
1138
+ -this.props.w * this.props.mountX +
972
1139
  (this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
973
1140
  }
974
1141
  get absY() {
975
1142
  return (this.props.y +
976
- -this.props.height * this.props.mountY +
1143
+ -this.props.h * this.props.mountY +
977
1144
  (this.props.parent?.absY ?? 0));
978
1145
  }
979
1146
  get y() {
@@ -985,34 +1152,46 @@ export class CoreNode extends EventEmitter {
985
1152
  this.setUpdateType(UpdateType.Local);
986
1153
  }
987
1154
  }
988
- get width() {
989
- return this.props.width;
1155
+ get w() {
1156
+ return this.props.w;
990
1157
  }
991
- set width(value) {
992
- if (this.props.width !== value) {
993
- this.textureCoords = undefined;
994
- this.props.width = value;
995
- this.setUpdateType(UpdateType.Local);
996
- if (this.props.rtt === true) {
997
- this.framebufferDimensions.width = value;
1158
+ set w(value) {
1159
+ const props = this.props;
1160
+ if (props.w !== value) {
1161
+ props.w = value;
1162
+ let updateType = UpdateType.Local;
1163
+ if (props.texture !== null &&
1164
+ this.stage.calculateTextureCoord === true &&
1165
+ props.textureOptions !== null) {
1166
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
1167
+ }
1168
+ if (props.rtt === true) {
1169
+ this.framebufferDimensions.w = value;
998
1170
  this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
999
- this.setUpdateType(UpdateType.RenderTexture);
1171
+ updateType |= UpdateType.RenderTexture;
1000
1172
  }
1173
+ this.setUpdateType(updateType);
1001
1174
  }
1002
1175
  }
1003
- get height() {
1004
- return this.props.height;
1176
+ get h() {
1177
+ return this.props.h;
1005
1178
  }
1006
- set height(value) {
1007
- if (this.props.height !== value) {
1008
- this.textureCoords = undefined;
1009
- this.props.height = value;
1010
- this.setUpdateType(UpdateType.Local);
1011
- if (this.props.rtt === true) {
1012
- this.framebufferDimensions.height = value;
1179
+ set h(value) {
1180
+ const props = this.props;
1181
+ if (props.h !== value) {
1182
+ props.h = value;
1183
+ let updateType = UpdateType.Local;
1184
+ if (props.texture !== null &&
1185
+ this.stage.calculateTextureCoord === true &&
1186
+ props.textureOptions !== null) {
1187
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
1188
+ }
1189
+ if (props.rtt === true) {
1190
+ this.framebufferDimensions.h = value;
1013
1191
  this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
1014
- this.setUpdateType(UpdateType.RenderTexture);
1192
+ updateType |= UpdateType.RenderTexture;
1015
1193
  }
1194
+ this.setUpdateType(updateType);
1016
1195
  }
1017
1196
  }
1018
1197
  get scale() {
@@ -1126,7 +1305,16 @@ export class CoreNode extends EventEmitter {
1126
1305
  return this.props.autosize;
1127
1306
  }
1128
1307
  set autosize(value) {
1308
+ if (this.props.autosize === value) {
1309
+ return;
1310
+ }
1129
1311
  this.props.autosize = value;
1312
+ if (value === true && this.autosizer === null) {
1313
+ this.autosizer = new Autosizer(this);
1314
+ }
1315
+ else {
1316
+ this.autosizer = null;
1317
+ }
1130
1318
  }
1131
1319
  get boundsMargin() {
1132
1320
  const props = this.props;
@@ -1265,26 +1453,34 @@ export class CoreNode extends EventEmitter {
1265
1453
  this.hasColorProps = value > 0;
1266
1454
  this.setUpdateType(UpdateType.PremultipliedColors);
1267
1455
  }
1268
- // we're only interested in parent zIndex to test
1269
- // if we should use node zIndex is higher then parent zIndex
1270
- get zIndexLocked() {
1271
- return this.props.zIndexLocked || 0;
1272
- }
1273
- set zIndexLocked(value) {
1274
- this.props.zIndexLocked = value;
1275
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1276
- for (let i = 0, length = this.children.length; i < length; i++) {
1277
- this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1278
- }
1279
- }
1280
1456
  get zIndex() {
1281
1457
  return this.props.zIndex;
1282
1458
  }
1283
1459
  set zIndex(value) {
1284
- this.props.zIndex = value;
1285
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1286
- for (let i = 0, length = this.children.length; i < length; i++) {
1287
- this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1460
+ let sanitizedValue = value;
1461
+ if (isNaN(sanitizedValue) || Number.isFinite(sanitizedValue) === false) {
1462
+ console.warn(`zIndex was set to an invalid value: ${value}, defaulting to 0`);
1463
+ sanitizedValue = 0;
1464
+ }
1465
+ //Clamp to safe integer range
1466
+ if (sanitizedValue > Number.MAX_SAFE_INTEGER) {
1467
+ sanitizedValue = 1000;
1468
+ }
1469
+ else if (sanitizedValue < Number.MIN_SAFE_INTEGER) {
1470
+ sanitizedValue = -1000;
1471
+ }
1472
+ if (this.props.zIndex === sanitizedValue) {
1473
+ return;
1474
+ }
1475
+ this.previousZIndex = this.props.zIndex;
1476
+ this.props.zIndex = sanitizedValue;
1477
+ const parent = this.parent;
1478
+ if (parent !== null) {
1479
+ const min = parent.zIndexMin;
1480
+ const max = parent.zIndexMax;
1481
+ if (min !== max || sanitizedValue < min || sanitizedValue > max) {
1482
+ parent.setUpdateType(UpdateType.SortZIndexChildren);
1483
+ }
1288
1484
  }
1289
1485
  }
1290
1486
  get parent() {
@@ -1297,23 +1493,13 @@ export class CoreNode extends EventEmitter {
1297
1493
  }
1298
1494
  this.props.parent = newParent;
1299
1495
  if (oldParent) {
1300
- const index = oldParent.children.indexOf(this);
1301
- oldParent.children.splice(index, 1);
1302
- oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1303
- }
1304
- if (newParent) {
1305
- newParent.children.push(this);
1306
- // Since this node has a new parent, to be safe, have it do a full update.
1307
- this.setUpdateType(UpdateType.All);
1308
- // Tell parent that it's children need to be updated and sorted.
1309
- newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1310
- // If the new parent has an RTT enabled, apply RTT inheritance
1311
- if (newParent.rtt || newParent.parentHasRenderTexture) {
1312
- this.applyRTTInheritance(newParent);
1313
- }
1496
+ oldParent.removeChild(this, newParent);
1314
1497
  }
1315
- // fetch render bounds from parent
1316
- this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1498
+ if (newParent !== null) {
1499
+ newParent.addChild(this, oldParent);
1500
+ }
1501
+ //since this node has a new parent, recalc global and render bounds
1502
+ this.setUpdateType(UpdateType.Global | UpdateType.RenderBounds);
1317
1503
  }
1318
1504
  get rtt() {
1319
1505
  return this.props.rtt;
@@ -1337,8 +1523,8 @@ export class CoreNode extends EventEmitter {
1337
1523
  }
1338
1524
  initRenderTexture() {
1339
1525
  this.framebufferDimensions = {
1340
- width: this.width,
1341
- height: this.height,
1526
+ w: this.props.w,
1527
+ h: this.props.h,
1342
1528
  };
1343
1529
  this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
1344
1530
  this.stage.renderer.renderToTexture(this);
@@ -1397,8 +1583,15 @@ export class CoreNode extends EventEmitter {
1397
1583
  }
1398
1584
  if (shader.shaderKey !== 'default') {
1399
1585
  this.hasShaderUpdater = shader.update !== undefined;
1586
+ this.hasShaderTimeFn = shader.time !== undefined;
1400
1587
  shader.attachNode(this);
1401
1588
  }
1589
+ if (this.hasShaderTimeFn === true) {
1590
+ this.stage.trackTimedNode(this);
1591
+ }
1592
+ else {
1593
+ this.stage.untrackTimedNode(this);
1594
+ }
1402
1595
  this.props.shader = shader;
1403
1596
  this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
1404
1597
  }
@@ -1416,8 +1609,8 @@ export class CoreNode extends EventEmitter {
1416
1609
  }
1417
1610
  this.texture = this.stage.txManager.createTexture('ImageTexture', {
1418
1611
  src: imageUrl,
1419
- width: this.props.width,
1420
- height: this.props.height,
1612
+ w: this.props.w,
1613
+ h: this.props.h,
1421
1614
  type: this.props.imageType,
1422
1615
  sx: this.props.srcX,
1423
1616
  sy: this.props.srcY,
@@ -1466,7 +1659,7 @@ export class CoreNode extends EventEmitter {
1466
1659
  return this.rttParent.framebufferDimensions;
1467
1660
  }
1468
1661
  this.rttParent = this.findParentRTTNode();
1469
- return this.rttParent.framebufferDimensions;
1662
+ return this.rttParent ? this.rttParent.framebufferDimensions : null;
1470
1663
  }
1471
1664
  /**
1472
1665
  * Returns the parent render texture node if it exists.
@@ -1491,17 +1684,26 @@ export class CoreNode extends EventEmitter {
1491
1684
  const oldTexture = this.props.texture;
1492
1685
  if (oldTexture) {
1493
1686
  this.unloadTexture();
1687
+ if (this.autosizer !== null && value === null) {
1688
+ this.autosizer.setMode(AutosizeMode.Children); // Set to children size mode
1689
+ }
1494
1690
  }
1495
1691
  this.textureCoords = undefined;
1496
1692
  this.props.texture = value;
1497
1693
  if (value !== null) {
1498
- value.setRenderableOwner(this, this.isRenderable);
1694
+ if (this.autosizer !== null) {
1695
+ this.autosizer.setMode(AutosizeMode.Texture); // Set to texture size mode
1696
+ }
1697
+ value.setRenderableOwner(this._id, this.isRenderable);
1499
1698
  this.loadTexture();
1500
1699
  }
1501
1700
  this.setUpdateType(UpdateType.IsRenderable);
1502
1701
  }
1503
1702
  set textureOptions(value) {
1504
1703
  this.props.textureOptions = value;
1704
+ if (this.stage.calculateTextureCoord === true && value !== null) {
1705
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
1706
+ }
1505
1707
  }
1506
1708
  get textureOptions() {
1507
1709
  return this.props.textureOptions;
@@ -1520,17 +1722,6 @@ export class CoreNode extends EventEmitter {
1520
1722
  this.hasRTTupdates = true;
1521
1723
  this.parent?.setRTTUpdates(type);
1522
1724
  }
1523
- get strictBounds() {
1524
- return this.props.strictBounds;
1525
- }
1526
- set strictBounds(v) {
1527
- if (v === this.props.strictBounds) {
1528
- return;
1529
- }
1530
- this.props.strictBounds = v;
1531
- this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1532
- this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
1533
- }
1534
1725
  animate(props, settings) {
1535
1726
  const animation = new CoreAnimation(this, props, settings);
1536
1727
  const controller = new CoreAnimationController(this.stage.animationManager, animation);
@@ -1539,5 +1730,56 @@ export class CoreNode extends EventEmitter {
1539
1730
  flush() {
1540
1731
  // no-op
1541
1732
  }
1733
+ /**
1734
+ * Add a texture to the current RenderOp.
1735
+ *
1736
+ * @param texture
1737
+ * @returns Assigned Texture Index of the texture in the render op
1738
+ */
1739
+ addTexture(texture) {
1740
+ const textures = this.renderOpTextures;
1741
+ const length = textures.length;
1742
+ for (let i = 0; i < length; i++) {
1743
+ if (textures[i] === texture) {
1744
+ return i;
1745
+ }
1746
+ }
1747
+ if (length >= 1) {
1748
+ return 0xffffffff;
1749
+ }
1750
+ textures.push(texture);
1751
+ return length;
1752
+ }
1753
+ draw(renderer) {
1754
+ const { glw, stage } = renderer;
1755
+ const canvas = stage.platform.canvas;
1756
+ const shader = this.props.shader;
1757
+ stage.shManager.useShader(shader.program);
1758
+ shader.program.bindRenderOp(this);
1759
+ // Clipping
1760
+ if (this.clippingRect.valid === true) {
1761
+ const pixelRatio = this.parentHasRenderTexture ? 1 : stage.pixelRatio;
1762
+ const clipX = Math.round(this.clippingRect.x * pixelRatio);
1763
+ const clipWidth = Math.round(this.clippingRect.w * pixelRatio);
1764
+ const clipHeight = Math.round(this.clippingRect.h * pixelRatio);
1765
+ let clipY = Math.round(canvas.height - clipHeight - this.clippingRect.y * pixelRatio);
1766
+ // if parent has render texture, we need to adjust the scissor rect
1767
+ // to be relative to the parent's framebuffer
1768
+ if (this.parentHasRenderTexture) {
1769
+ const parentFramebufferDimensions = this.parentFramebufferDimensions;
1770
+ clipY =
1771
+ parentFramebufferDimensions !== null
1772
+ ? parentFramebufferDimensions.h - this.props.h
1773
+ : 0;
1774
+ }
1775
+ glw.setScissorTest(true);
1776
+ glw.scissor(clipX, clipY, clipWidth, clipHeight);
1777
+ }
1778
+ else {
1779
+ glw.setScissorTest(false);
1780
+ }
1781
+ const quadIdx = (this.renderOpBufferIdx / 32) * 6 * 2;
1782
+ glw.drawElements(glw.TRIANGLES, 6 * this.numQuads, glw.UNSIGNED_SHORT, quadIdx);
1783
+ }
1542
1784
  }
1543
1785
  //# sourceMappingURL=CoreNode.js.map