@lightningjs/renderer 3.0.0-beta18 → 3.0.0-beta19

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 (306) hide show
  1. package/dist/src/core/Autosizer.d.ts +29 -0
  2. package/dist/src/core/Autosizer.js +178 -0
  3. package/dist/src/core/Autosizer.js.map +1 -0
  4. package/dist/src/core/CoreNode.d.ts +44 -26
  5. package/dist/src/core/CoreNode.js +253 -150
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -0
  8. package/dist/src/core/CoreTextNode.js +8 -4
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +16 -2
  11. package/dist/src/core/CoreTextureManager.js +38 -51
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +18 -2
  14. package/dist/src/core/Stage.js +44 -14
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  17. package/dist/src/core/TextureMemoryManager.js +80 -95
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/lib/WebGlContextWrapper.d.ts +11 -0
  20. package/dist/src/core/lib/WebGlContextWrapper.js +34 -0
  21. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  22. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  23. package/dist/src/core/lib/textureCompression.js +320 -67
  24. package/dist/src/core/lib/textureCompression.js.map +1 -1
  25. package/dist/src/core/platforms/web/WebPlatform.js +2 -2
  26. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  27. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  29. package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
  30. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  31. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  32. package/dist/src/core/renderers/CoreShaderNode.d.ts +6 -0
  33. package/dist/src/core/renderers/CoreShaderNode.js +2 -0
  34. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -0
  36. package/dist/src/core/renderers/canvas/CanvasTexture.js +4 -1
  37. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  38. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  39. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +6 -0
  40. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  41. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +11 -0
  42. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +51 -14
  43. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -1
  45. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +2 -0
  46. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlRenderer.js +57 -61
  49. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +12 -0
  52. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  53. package/dist/src/core/shaders/webgl/Rounded.js +3 -1
  54. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  55. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +3 -2
  56. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  57. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +3 -2
  58. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  59. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +2 -1
  60. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  61. package/dist/src/core/text-rendering/SdfFontHandler.js +1 -1
  62. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  63. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  64. package/dist/src/core/textures/ColorTexture.js +2 -3
  65. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  66. package/dist/src/core/textures/ImageTexture.d.ts +7 -1
  67. package/dist/src/core/textures/ImageTexture.js +20 -36
  68. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  69. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  70. package/dist/src/core/textures/NoiseTexture.js +2 -2
  71. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  72. package/dist/src/core/textures/RenderTexture.d.ts +1 -1
  73. package/dist/src/core/textures/RenderTexture.js +2 -2
  74. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  75. package/dist/src/core/textures/SubTexture.d.ts +2 -4
  76. package/dist/src/core/textures/SubTexture.js +13 -31
  77. package/dist/src/core/textures/SubTexture.js.map +1 -1
  78. package/dist/src/core/textures/Texture.d.ts +67 -8
  79. package/dist/src/core/textures/Texture.js +127 -15
  80. package/dist/src/core/textures/Texture.js.map +1 -1
  81. package/dist/src/main-api/Renderer.d.ts +15 -2
  82. package/dist/src/main-api/Renderer.js +19 -12
  83. package/dist/src/main-api/Renderer.js.map +1 -1
  84. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/core/CoreNode.test.ts +0 -1
  87. package/src/core/CoreNode.ts +296 -177
  88. package/src/core/CoreTextNode.ts +9 -4
  89. package/src/core/CoreTextureManager.ts +69 -57
  90. package/src/core/Stage.ts +51 -17
  91. package/src/core/TextureError.ts +46 -0
  92. package/src/core/TextureMemoryManager.ts +95 -122
  93. package/src/core/lib/WebGlContextWrapper.ts +40 -0
  94. package/src/core/lib/collectionUtils.ts +118 -0
  95. package/src/core/lib/textureCompression.ts +433 -77
  96. package/src/core/platforms/web/WebPlatform.ts +2 -2
  97. package/src/core/renderers/CoreContextTexture.ts +1 -0
  98. package/src/core/renderers/CoreRenderer.ts +3 -2
  99. package/src/core/renderers/CoreShaderNode.ts +7 -0
  100. package/src/core/renderers/canvas/CanvasTexture.ts +5 -1
  101. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +8 -0
  102. package/src/core/renderers/webgl/WebGlCtxTexture.ts +58 -15
  103. package/src/core/renderers/webgl/WebGlRenderOp.ts +4 -1
  104. package/src/core/renderers/webgl/WebGlRenderer.ts +66 -68
  105. package/src/core/renderers/webgl/WebGlShaderProgram.ts +16 -0
  106. package/src/core/shaders/webgl/Rounded.ts +3 -1
  107. package/src/core/shaders/webgl/RoundedWithBorder.ts +3 -2
  108. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +3 -2
  109. package/src/core/shaders/webgl/RoundedWithShadow.ts +2 -1
  110. package/src/core/text-rendering/SdfFontHandler.ts +1 -1
  111. package/src/core/textures/ColorTexture.ts +6 -4
  112. package/src/core/textures/ImageTexture.ts +35 -42
  113. package/src/core/textures/NoiseTexture.ts +6 -4
  114. package/src/core/textures/RenderTexture.ts +6 -4
  115. package/src/core/textures/SubTexture.ts +17 -38
  116. package/src/core/textures/Texture.ts +159 -20
  117. package/src/main-api/Renderer.ts +36 -14
  118. package/dist/src/core/AutosizeManager.d.ts +0 -29
  119. package/dist/src/core/AutosizeManager.js +0 -171
  120. package/dist/src/core/AutosizeManager.js.map +0 -1
  121. package/dist/src/core/animations/Animation.d.ts +0 -16
  122. package/dist/src/core/animations/Animation.js +0 -111
  123. package/dist/src/core/animations/Animation.js.map +0 -1
  124. package/dist/src/core/animations/CoreTransition.d.ts +0 -24
  125. package/dist/src/core/animations/CoreTransition.js +0 -63
  126. package/dist/src/core/animations/CoreTransition.js.map +0 -1
  127. package/dist/src/core/animations/Playback.d.ts +0 -62
  128. package/dist/src/core/animations/Playback.js +0 -155
  129. package/dist/src/core/animations/Playback.js.map +0 -1
  130. package/dist/src/core/animations/Transition.d.ts +0 -25
  131. package/dist/src/core/animations/Transition.js +0 -63
  132. package/dist/src/core/animations/Transition.js.map +0 -1
  133. package/dist/src/core/animations/utils.d.ts +0 -2
  134. package/dist/src/core/animations/utils.js +0 -137
  135. package/dist/src/core/animations/utils.js.map +0 -1
  136. package/dist/src/core/platform.d.ts +0 -10
  137. package/dist/src/core/platform.js +0 -81
  138. package/dist/src/core/platform.js.map +0 -1
  139. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  140. package/dist/src/core/renderers/CoreShader.js +0 -28
  141. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  142. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  143. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  145. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
  146. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  148. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  149. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  150. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  151. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
  152. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
  153. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  154. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  155. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  156. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  162. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  163. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -69
  164. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -272
  165. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  168. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  169. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  170. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -645
  171. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  172. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -78
  173. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -202
  174. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -84
  177. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  178. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  179. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -108
  180. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  181. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  182. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -408
  183. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  184. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  185. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -126
  186. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  187. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  188. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -148
  189. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  201. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  202. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  203. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  204. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  205. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  206. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  207. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  208. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  209. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  210. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  211. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  213. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  214. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  215. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  216. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  217. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  218. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  219. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  220. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  221. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -134
  222. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -40
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -143
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  228. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  229. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  230. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  231. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  232. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  233. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  234. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  235. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  236. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  237. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  238. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  239. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  240. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  241. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  242. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  243. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  244. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  245. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  246. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  247. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  248. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  249. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  250. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  251. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  252. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  253. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  254. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  255. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  256. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  257. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  258. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  259. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  260. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  261. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  262. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  263. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  264. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  266. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  267. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  269. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  270. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  271. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  272. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  273. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  274. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  275. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  276. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  277. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  278. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  279. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  280. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  281. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  282. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  283. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  284. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  285. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  286. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  287. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  288. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  289. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  290. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  291. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  292. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  293. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  294. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  295. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  296. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  297. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  298. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  299. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  300. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  301. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  302. package/dist/src/main-api/DynamicShaderController.js +0 -58
  303. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  304. package/dist/src/main-api/ShaderController.d.ts +0 -31
  305. package/dist/src/main-api/ShaderController.js +0 -37
  306. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -57,6 +57,11 @@ import type { IAnimationController } from '../common/IAnimationController.js';
57
57
  import { CoreAnimation } from './animations/CoreAnimation.js';
58
58
  import { CoreAnimationController } from './animations/CoreAnimationController.js';
59
59
  import type { CoreShaderNode } from './renderers/CoreShaderNode.js';
60
+ import {
61
+ bucketSortByZIndex,
62
+ incrementalRepositionByZIndex,
63
+ removeChild,
64
+ } from './lib/collectionUtils.js';
60
65
 
61
66
  export enum CoreNodeRenderState {
62
67
  Init = 0,
@@ -65,6 +70,14 @@ export enum CoreNodeRenderState {
65
70
  InViewport = 8,
66
71
  }
67
72
 
73
+ const NO_CLIPPING_RECT: RectWithValid = {
74
+ x: 0,
75
+ y: 0,
76
+ width: 0,
77
+ height: 0,
78
+ valid: false,
79
+ };
80
+
68
81
  const CoreNodeRenderStateMap: Map<CoreNodeRenderState, string> = new Map();
69
82
  CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
70
83
  CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
@@ -107,22 +120,13 @@ export enum UpdateType {
107
120
  Clipping = 8,
108
121
 
109
122
  /**
110
- * Calculated ZIndex update
111
- *
112
- * @remarks
113
- * CoreNode Properties Updated:
114
- * - `calcZIndex`
115
- */
116
- CalculatedZIndex = 16,
117
-
118
- /**
119
- * Z-Index Sorted Children update
123
+ * Sort Z-Index Children update
120
124
  *
121
125
  * @remarks
122
126
  * CoreNode Properties Updated:
123
127
  * - `children` (sorts children by their `calcZIndex`)
124
128
  */
125
- ZIndexSortedChildren = 32,
129
+ SortZIndexChildren = 16,
126
130
 
127
131
  /**
128
132
  * Premultiplied Colors update
@@ -134,7 +138,7 @@ export enum UpdateType {
134
138
  * - `premultipliedColorBl`
135
139
  * - `premultipliedColorBr`
136
140
  */
137
- PremultipliedColors = 64,
141
+ PremultipliedColors = 32,
138
142
 
139
143
  /**
140
144
  * World Alpha update
@@ -143,7 +147,7 @@ export enum UpdateType {
143
147
  * CoreNode Properties Updated:
144
148
  * - `worldAlpha` = `parent.worldAlpha` * `alpha`
145
149
  */
146
- WorldAlpha = 128,
150
+ WorldAlpha = 64,
147
151
 
148
152
  /**
149
153
  * Render State update
@@ -152,7 +156,7 @@ export enum UpdateType {
152
156
  * CoreNode Properties Updated:
153
157
  * - `renderState`
154
158
  */
155
- RenderState = 256,
159
+ RenderState = 128,
156
160
 
157
161
  /**
158
162
  * Is Renderable update
@@ -161,27 +165,27 @@ export enum UpdateType {
161
165
  * CoreNode Properties Updated:
162
166
  * - `isRenderable`
163
167
  */
164
- IsRenderable = 512,
168
+ IsRenderable = 256,
165
169
 
166
170
  /**
167
171
  * Render Texture update
168
172
  */
169
- RenderTexture = 1024,
173
+ RenderTexture = 512,
170
174
 
171
175
  /**
172
176
  * Track if parent has render texture
173
177
  */
174
- ParentRenderTexture = 2048,
178
+ ParentRenderTexture = 1024,
175
179
 
176
180
  /**
177
181
  * Render Bounds update
178
182
  */
179
- RenderBounds = 4096,
183
+ RenderBounds = 2048,
180
184
 
181
185
  /**
182
186
  * RecalcUniforms
183
187
  */
184
- RecalcUniforms = 8192,
188
+ RecalcUniforms = 4096,
185
189
 
186
190
  /**
187
191
  * None
@@ -191,7 +195,7 @@ export enum UpdateType {
191
195
  /**
192
196
  * All
193
197
  */
194
- All = 14335,
198
+ All = 7167,
195
199
  }
196
200
 
197
201
  /**
@@ -390,7 +394,11 @@ export interface CoreNodeProps {
390
394
  * The Node's z-index.
391
395
  *
392
396
  * @remarks
393
- * TBD
397
+ * Max z-index of children under the same parent determines which child
398
+ * is rendered on top. Higher z-index means the Node is rendered on top of
399
+ * children with lower z-index.
400
+ *
401
+ * Max value is 1000 and min value is -1000. Values outside of this range will be clamped.
394
402
  */
395
403
  zIndex: number;
396
404
  /**
@@ -447,7 +455,6 @@ export interface CoreNodeProps {
447
455
  * settings being defaults)
448
456
  */
449
457
  src: string | null;
450
- zIndexLocked: number;
451
458
  /**
452
459
  * Scale to render the Node at
453
460
  *
@@ -707,7 +714,13 @@ export class CoreNode extends EventEmitter {
707
714
  readonly props: CoreNodeProps;
708
715
 
709
716
  private hasShaderUpdater = false;
717
+ public hasShaderTimeFn = false;
710
718
  private hasColorProps = false;
719
+ private zIndexMin = 0;
720
+ private zIndexMax = 0;
721
+
722
+ public previousZIndex = -1;
723
+ public zIndexSortList: CoreNode[] = [];
711
724
 
712
725
  public updateType = UpdateType.All;
713
726
  public childUpdateType = UpdateType.None;
@@ -728,7 +741,6 @@ export class CoreNode extends EventEmitter {
728
741
  valid: false,
729
742
  };
730
743
  public textureCoords?: TextureCoords;
731
- public updateTextureCoords: boolean = false;
732
744
  public updateShaderUniforms: boolean = false;
733
745
  public isRenderable = false;
734
746
  public renderState: CoreNodeRenderState = CoreNodeRenderState.Init;
@@ -751,7 +763,6 @@ export class CoreNode extends EventEmitter {
751
763
 
752
764
  constructor(readonly stage: Stage, props: CoreNodeProps) {
753
765
  super();
754
-
755
766
  const p = (this.props = {} as CoreNodeProps);
756
767
 
757
768
  // Fast-path assign only known keys
@@ -784,7 +795,6 @@ export class CoreNode extends EventEmitter {
784
795
  p.pivot = props.pivot;
785
796
 
786
797
  p.zIndex = props.zIndex;
787
- p.zIndexLocked = props.zIndexLocked;
788
798
  p.textureOptions = props.textureOptions;
789
799
 
790
800
  p.data = props.data;
@@ -794,15 +804,23 @@ export class CoreNode extends EventEmitter {
794
804
  p.srcWidth = props.srcWidth;
795
805
  p.srcHeight = props.srcHeight;
796
806
 
797
- p.parent = null;
807
+ p.parent = props.parent;
798
808
  p.texture = null;
799
809
  p.shader = null;
800
810
  p.src = null;
801
811
  p.rtt = false;
802
812
  p.boundsMargin = null;
803
813
 
814
+ // Only set non-default values
815
+ if (props.zIndex !== 0) {
816
+ this.zIndex = props.zIndex;
817
+ }
818
+
819
+ if (props.parent !== null) {
820
+ props.parent.addChild(this);
821
+ }
822
+
804
823
  // Assign props to instances
805
- this.parent = props.parent;
806
824
  this.texture = props.texture;
807
825
  this.shader = props.shader;
808
826
  this.src = props.src;
@@ -824,8 +842,7 @@ export class CoreNode extends EventEmitter {
824
842
 
825
843
  //#region Textures
826
844
  loadTexture(): void {
827
- const { texture } = this.props;
828
- if (!texture) {
845
+ if (this.props.texture === null) {
829
846
  return;
830
847
  }
831
848
 
@@ -833,36 +850,44 @@ export class CoreNode extends EventEmitter {
833
850
  // so that users get a consistent event experience.
834
851
  // We do this in a microtask to allow listeners to be attached in the same
835
852
  // synchronous task after calling loadTexture()
836
- queueMicrotask(() => {
837
- if (this.textureOptions.preload === true) {
838
- this.stage.txManager.loadTexture(texture);
839
- }
853
+ queueMicrotask(this.loadTextureTask);
854
+ }
840
855
 
841
- texture.preventCleanup =
842
- this.props.textureOptions?.preventCleanup ?? false;
843
- texture.on('loaded', this.onTextureLoaded);
844
- texture.on('failed', this.onTextureFailed);
845
- texture.on('freed', this.onTextureFreed);
846
-
847
- // If the parent is a render texture, the initial texture status
848
- // will be set to freed until the texture is processed by the
849
- // Render RTT nodes. So we only need to listen fo changes and
850
- // no need to check the texture.state until we restructure how
851
- // textures are being processed.
852
- if (this.parentHasRenderTexture) {
853
- this.notifyParentRTTOfUpdate();
854
- return;
855
- }
856
+ /**
857
+ * Task for queueMicrotask to loadTexture
858
+ *
859
+ * @remarks
860
+ * This method is called in a microtask to release the texture.
861
+ */
862
+ private loadTextureTask = (): void => {
863
+ const texture = this.texture as Texture;
864
+ if (this.textureOptions.preload === true) {
865
+ this.stage.txManager.loadTexture(texture);
866
+ }
856
867
 
857
- if (texture.state === 'loaded') {
858
- this.onTextureLoaded(texture, texture.dimensions!);
859
- } else if (texture.state === 'failed') {
860
- this.onTextureFailed(texture, texture.error!);
861
- } else if (texture.state === 'freed') {
862
- this.onTextureFreed(texture);
863
- }
864
- });
865
- }
868
+ texture.preventCleanup = this.props.textureOptions?.preventCleanup ?? false;
869
+ texture.on('loaded', this.onTextureLoaded);
870
+ texture.on('failed', this.onTextureFailed);
871
+ texture.on('freed', this.onTextureFreed);
872
+
873
+ // If the parent is a render texture, the initial texture status
874
+ // will be set to freed until the texture is processed by the
875
+ // Render RTT nodes. So we only need to listen fo changes and
876
+ // no need to check the texture.state until we restructure how
877
+ // textures are being processed.
878
+ if (this.parentHasRenderTexture) {
879
+ this.notifyParentRTTOfUpdate();
880
+ return;
881
+ }
882
+
883
+ if (texture.state === 'loaded') {
884
+ this.onTextureLoaded(texture, texture.dimensions!);
885
+ } else if (texture.state === 'failed') {
886
+ this.onTextureFailed(texture, texture.error!);
887
+ } else if (texture.state === 'freed') {
888
+ this.onTextureFreed(texture);
889
+ }
890
+ };
866
891
 
867
892
  unloadTexture(): void {
868
893
  if (this.texture === null) {
@@ -873,7 +898,7 @@ export class CoreNode extends EventEmitter {
873
898
  texture.off('loaded', this.onTextureLoaded);
874
899
  texture.off('failed', this.onTextureFailed);
875
900
  texture.off('freed', this.onTextureFreed);
876
- texture.setRenderableOwner(this, false);
901
+ texture.setRenderableOwner(this._id, false);
877
902
  }
878
903
 
879
904
  protected onTextureLoaded: TextureLoadedEventHandler = (_, dimensions) => {
@@ -901,6 +926,13 @@ export class CoreNode extends EventEmitter {
901
926
  } satisfies NodeTextureLoadedPayload);
902
927
  }
903
928
 
929
+ if (
930
+ this.stage.calculateTextureCoord === true &&
931
+ this.props.textureOptions !== null
932
+ ) {
933
+ this.textureCoords = this.stage.renderer.getTextureCoords!(this);
934
+ }
935
+
904
936
  // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
905
937
  if (this.props.textureOptions?.resizeMode?.type === 'contain') {
906
938
  this.setUpdateType(UpdateType.Local);
@@ -911,6 +943,7 @@ export class CoreNode extends EventEmitter {
911
943
  // immediately set isRenderable to false, so that we handle the error
912
944
  // without waiting for the next frame loop
913
945
  this.isRenderable = false;
946
+ this.updateTextureOwnership(false);
914
947
  this.setUpdateType(UpdateType.IsRenderable);
915
948
 
916
949
  // If parent has a render texture, flag that we need to update
@@ -918,16 +951,22 @@ export class CoreNode extends EventEmitter {
918
951
  this.notifyParentRTTOfUpdate();
919
952
  }
920
953
 
921
- this.emit('failed', {
922
- type: 'texture',
923
- error,
924
- } satisfies NodeTextureFailedPayload);
954
+ if (
955
+ this.texture !== null &&
956
+ this.texture.retryCount > this.texture.maxRetryCount
957
+ ) {
958
+ this.emit('failed', {
959
+ type: 'texture',
960
+ error,
961
+ } satisfies NodeTextureFailedPayload);
962
+ }
925
963
  };
926
964
 
927
965
  private onTextureFreed: TextureFreedEventHandler = () => {
928
966
  // immediately set isRenderable to false, so that we handle the error
929
967
  // without waiting for the next frame loop
930
968
  this.isRenderable = false;
969
+ this.updateTextureOwnership(false);
931
970
  this.setUpdateType(UpdateType.IsRenderable);
932
971
 
933
972
  // If parent has a render texture, flag that we need to update
@@ -958,10 +997,6 @@ export class CoreNode extends EventEmitter {
958
997
  parent.setUpdateType(UpdateType.Children);
959
998
  }
960
999
 
961
- sortChildren() {
962
- this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
963
- }
964
-
965
1000
  updateLocalTransform() {
966
1001
  const p = this.props;
967
1002
  const { x, y, w, h } = p;
@@ -1032,10 +1067,6 @@ export class CoreNode extends EventEmitter {
1032
1067
  * @param delta
1033
1068
  */
1034
1069
  update(delta: number, parentClippingRect: RectWithValid): void {
1035
- if (this.updateType === UpdateType.None) {
1036
- return;
1037
- }
1038
-
1039
1070
  const props = this.props;
1040
1071
  const parent = props.parent;
1041
1072
  const parentHasRenderTexture = this.parentHasRenderTexture;
@@ -1046,6 +1077,9 @@ export class CoreNode extends EventEmitter {
1046
1077
  let updateType = this.updateType;
1047
1078
  let childUpdateType = this.childUpdateType;
1048
1079
  let updateParent = false;
1080
+ // reset update type
1081
+ this.updateType = 0;
1082
+ this.childUpdateType = 0;
1049
1083
 
1050
1084
  if (updateType & UpdateType.Local) {
1051
1085
  this.updateLocalTransform();
@@ -1197,15 +1231,10 @@ export class CoreNode extends EventEmitter {
1197
1231
  if (updateParent === true) {
1198
1232
  parent!.setUpdateType(UpdateType.Children);
1199
1233
  }
1200
- // No need to update zIndex if there is no parent
1201
- if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
1202
- this.calculateZIndex();
1203
- // Tell parent to re-sort children
1204
- parent.setUpdateType(UpdateType.ZIndexSortedChildren);
1205
- }
1206
1234
 
1207
1235
  if (this.renderState === CoreNodeRenderState.OutOfBounds) {
1208
1236
  updateType &= ~UpdateType.RenderBounds; // remove render bounds update
1237
+ this.updateType = updateType;
1209
1238
  return;
1210
1239
  }
1211
1240
 
@@ -1223,26 +1252,23 @@ export class CoreNode extends EventEmitter {
1223
1252
  }
1224
1253
 
1225
1254
  if (updateType & UpdateType.Children && this.children.length > 0) {
1255
+ let childClippingRect = this.clippingRect;
1256
+
1257
+ if (this.rtt === true) {
1258
+ childClippingRect = NO_CLIPPING_RECT;
1259
+ }
1260
+
1226
1261
  for (let i = 0, length = this.children.length; i < length; i++) {
1227
1262
  const child = this.children[i] as CoreNode;
1228
1263
 
1229
- child.setUpdateType(childUpdateType);
1264
+ if (childUpdateType !== 0) {
1265
+ child.setUpdateType(childUpdateType);
1266
+ }
1230
1267
 
1231
1268
  if (child.updateType === 0) {
1232
1269
  continue;
1233
1270
  }
1234
1271
 
1235
- let childClippingRect = this.clippingRect;
1236
- if (this.rtt === true) {
1237
- childClippingRect = {
1238
- x: 0,
1239
- y: 0,
1240
- width: 0,
1241
- height: 0,
1242
- valid: false,
1243
- };
1244
- }
1245
-
1246
1272
  child.update(delta, childClippingRect);
1247
1273
  }
1248
1274
  }
@@ -1254,18 +1280,12 @@ export class CoreNode extends EventEmitter {
1254
1280
  this.notifyParentRTTOfUpdate();
1255
1281
  }
1256
1282
 
1257
- // Sorting children MUST happen after children have been updated so
1258
- // that they have the oppotunity to update their calculated zIndex.
1259
- if (updateType & UpdateType.ZIndexSortedChildren) {
1283
+ //Resort children if needed
1284
+ if (updateType & UpdateType.SortZIndexChildren) {
1260
1285
  // reorder z-index
1261
1286
  this.sortChildren();
1262
1287
  }
1263
1288
 
1264
- if (this.updateTextureCoords === true) {
1265
- this.updateTextureCoords = false;
1266
- this.textureCoords = this.stage.renderer.getTextureCoords!(this);
1267
- }
1268
-
1269
1289
  // If we're out of bounds, apply the render state now
1270
1290
  // this is done so nodes can finish their entire update loop before
1271
1291
  // being marked as out of bounds
@@ -1282,10 +1302,6 @@ export class CoreNode extends EventEmitter {
1282
1302
  this.notifyChildrenRTTOfUpdate(renderState);
1283
1303
  }
1284
1304
  }
1285
-
1286
- // reset update type
1287
- this.updateType = 0;
1288
- this.childUpdateType = 0;
1289
1305
  }
1290
1306
 
1291
1307
  private findParentRTTNode(): CoreNode | null {
@@ -1441,6 +1457,17 @@ export class CoreNode extends EventEmitter {
1441
1457
  });
1442
1458
  }
1443
1459
 
1460
+ /**
1461
+ * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
1462
+ */
1463
+ checkBasicRenderability(): boolean {
1464
+ if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
1465
+ return false;
1466
+ } else {
1467
+ return true;
1468
+ }
1469
+ }
1470
+
1444
1471
  /**
1445
1472
  * Updates the `isRenderable` property based on various conditions.
1446
1473
  */
@@ -1449,25 +1476,30 @@ export class CoreNode extends EventEmitter {
1449
1476
  let needsTextureOwnership = false;
1450
1477
 
1451
1478
  // If the node is out of bounds or has an alpha of 0, it is not renderable
1452
- if (
1453
- this.worldAlpha === 0 ||
1454
- this.renderState <= CoreNodeRenderState.OutOfBounds
1455
- ) {
1479
+ if (this.checkBasicRenderability() === false) {
1456
1480
  this.updateTextureOwnership(false);
1457
1481
  this.setRenderable(false);
1458
1482
  return;
1459
1483
  }
1460
1484
 
1461
1485
  if (this.texture !== null) {
1462
- needsTextureOwnership = true;
1486
+ // preemptive check for failed textures this will mark the current node as non-renderable
1487
+ // and will prevent further checks until the texture is reloaded or retry is reset on the texture
1488
+ if (this.texture.retryCount > this.texture.maxRetryCount) {
1489
+ // texture has failed to load, we cannot render
1490
+ this.updateTextureOwnership(false);
1491
+ this.setRenderable(false);
1492
+ return;
1493
+ }
1463
1494
 
1495
+ needsTextureOwnership = true;
1464
1496
  // we're only renderable if the texture state is loaded
1465
1497
  newIsRenderable = this.texture.state === 'loaded';
1466
1498
  } else if (
1467
1499
  // check shader
1468
1500
  (this.props.shader !== null || this.hasColorProps === true) &&
1469
1501
  // check dimensions
1470
- (this.props.w !== 0 && this.props.h !== 0) === true
1502
+ this.hasDimensions() === true
1471
1503
  ) {
1472
1504
  // This mean we have dimensions and a color set, so we can render a ColorTexture
1473
1505
  if (
@@ -1497,21 +1529,27 @@ export class CoreNode extends EventEmitter {
1497
1529
  isRenderable,
1498
1530
  } satisfies NodeRenderablePayload);
1499
1531
  }
1500
-
1501
- if (
1502
- isRenderable === true &&
1503
- this.stage.calculateTextureCoord === true &&
1504
- this.textureCoords === undefined
1505
- ) {
1506
- this.updateTextureCoords = true;
1507
- }
1508
1532
  }
1509
1533
 
1510
1534
  /**
1511
1535
  * Changes the renderable state of the node.
1512
1536
  */
1513
1537
  updateTextureOwnership(isRenderable: boolean) {
1514
- this.texture?.setRenderableOwner(this, isRenderable);
1538
+ this.texture?.setRenderableOwner(this._id, isRenderable);
1539
+ }
1540
+
1541
+ /**
1542
+ * Checks if the node is out of the viewport bounds.
1543
+ */
1544
+ isOutOfBounds(): boolean {
1545
+ return this.renderState <= CoreNodeRenderState.OutOfBounds;
1546
+ }
1547
+
1548
+ /**
1549
+ * Checks if the node has dimensions (width/height)
1550
+ */
1551
+ hasDimensions(): boolean {
1552
+ return this.props.w !== 0 && this.props.h !== 0;
1515
1553
  }
1516
1554
 
1517
1555
  calculateRenderCoords() {
@@ -1645,18 +1683,6 @@ export class CoreNode extends EventEmitter {
1645
1683
  }
1646
1684
  }
1647
1685
 
1648
- calculateZIndex(): void {
1649
- const props = this.props;
1650
- const z = props.zIndex || 0;
1651
- const p = props.parent?.zIndex || 0;
1652
-
1653
- let zIndex = z;
1654
- if (props.parent?.zIndexLocked) {
1655
- zIndex = z < p ? z : p;
1656
- }
1657
- this.calcZIndex = zIndex;
1658
- }
1659
-
1660
1686
  /**
1661
1687
  * Destroy the node and cleanup all resources
1662
1688
  */
@@ -1670,6 +1696,9 @@ export class CoreNode extends EventEmitter {
1670
1696
  this.destroyed = true;
1671
1697
  this.unloadTexture();
1672
1698
  this.isRenderable = false;
1699
+ if (this.hasShaderTimeFn === true) {
1700
+ this.stage.untrackTimedNode(this);
1701
+ }
1673
1702
 
1674
1703
  // Kill children
1675
1704
  while (this.children.length > 0) {
@@ -1678,11 +1707,7 @@ export class CoreNode extends EventEmitter {
1678
1707
 
1679
1708
  const parent = this.parent;
1680
1709
  if (parent !== null) {
1681
- const index = parent.children.indexOf(this);
1682
- parent.children.splice(index, 1);
1683
- parent.setUpdateType(
1684
- UpdateType.Children | UpdateType.ZIndexSortedChildren,
1685
- );
1710
+ parent.removeChild(this);
1686
1711
  }
1687
1712
 
1688
1713
  this.props.parent = null;
@@ -1691,6 +1716,7 @@ export class CoreNode extends EventEmitter {
1691
1716
  if (this.rtt === true) {
1692
1717
  this.stage.renderer.removeRTTNode(this);
1693
1718
  }
1719
+ this.stage.requestRender();
1694
1720
  }
1695
1721
 
1696
1722
  renderQuads(renderer: CoreRenderer): void {
@@ -1704,6 +1730,8 @@ export class CoreNode extends EventEmitter {
1704
1730
  const t = this.globalTransform!;
1705
1731
  const coords = this.renderCoords;
1706
1732
  const texture = p.texture || this.stage.defaultTexture;
1733
+ const textureCoords =
1734
+ this.textureCoords || this.stage.renderer.defaultTextureCoords;
1707
1735
 
1708
1736
  // There is a race condition where the texture can be null
1709
1737
  // with RTT nodes. Adding this defensively to avoid errors.
@@ -1720,7 +1748,7 @@ export class CoreNode extends EventEmitter {
1720
1748
  colorBr: this.premultipliedColorBr,
1721
1749
  texture,
1722
1750
  textureOptions: p.textureOptions,
1723
- textureCoords: this.textureCoords,
1751
+ textureCoords: textureCoords,
1724
1752
  shader: p.shader as CoreShaderNode<any>,
1725
1753
  alpha: this.worldAlpha,
1726
1754
  clippingRect: this.clippingRect,
@@ -1737,9 +1765,102 @@ export class CoreNode extends EventEmitter {
1737
1765
  framebufferDimensions: this.parentHasRenderTexture
1738
1766
  ? this.parentFramebufferDimensions
1739
1767
  : null,
1768
+ time: this.hasShaderTimeFn === true ? this.getTimerValue() : null,
1740
1769
  });
1741
1770
  }
1742
1771
 
1772
+ getTimerValue(): number {
1773
+ if (typeof this.shader!.time === 'function') {
1774
+ return this.shader!.time(this.stage);
1775
+ }
1776
+ return this.stage.elapsedTime;
1777
+ }
1778
+
1779
+ sortChildren() {
1780
+ const changedCount = this.zIndexSortList.length;
1781
+ if (changedCount === 0) {
1782
+ return;
1783
+ }
1784
+ const children = this.children;
1785
+ let min = Infinity;
1786
+ let max = -Infinity;
1787
+ // find min and max zIndex
1788
+ for (let i = 0; i < children.length; i++) {
1789
+ const zIndex = children[i]!.props.zIndex;
1790
+ if (zIndex < min) {
1791
+ min = zIndex;
1792
+ }
1793
+ if (zIndex > max) {
1794
+ max = zIndex;
1795
+ }
1796
+ }
1797
+
1798
+ // update min and max zIndex
1799
+ this.zIndexMin = min;
1800
+ this.zIndexMax = max;
1801
+
1802
+ // if min and max are the same, no need to sort
1803
+ if (min === max) {
1804
+ return;
1805
+ }
1806
+
1807
+ const n = children.length;
1808
+ // decide whether to use incremental sort or bucket sort
1809
+ const useIncremental = changedCount <= 2 || changedCount < n * 0.05;
1810
+
1811
+ // when changed count is less than 2 or 5% of total children, use incremental sort
1812
+ if (useIncremental === true) {
1813
+ incrementalRepositionByZIndex(this.zIndexSortList, children);
1814
+ } else {
1815
+ bucketSortByZIndex(children, min);
1816
+ }
1817
+
1818
+ this.zIndexSortList.length = 0;
1819
+ this.zIndexSortList = [];
1820
+ }
1821
+
1822
+ removeChild(node: CoreNode, targetParent: CoreNode | null = null) {
1823
+ if (
1824
+ targetParent === null &&
1825
+ this.props.rtt === true &&
1826
+ this.parentHasRenderTexture === true
1827
+ ) {
1828
+ node.clearRTTInheritance();
1829
+ }
1830
+ removeChild(node, this.children);
1831
+ }
1832
+
1833
+ addChild(node: CoreNode, previousParent: CoreNode | null = null) {
1834
+ const inRttCluster =
1835
+ this.props.rtt === true || this.parentHasRenderTexture === true;
1836
+ const children = this.children;
1837
+ const min = this.zIndexMin;
1838
+ const max = this.zIndexMax;
1839
+ const zIndex = node.zIndex;
1840
+
1841
+ node.parentHasRenderTexture = inRttCluster;
1842
+ if (previousParent !== null) {
1843
+ const previousParentInRttCluster =
1844
+ previousParent.props.rtt === true ||
1845
+ previousParent.parentHasRenderTexture === true;
1846
+ if (inRttCluster === false && previousParentInRttCluster === true) {
1847
+ // update child RTT status
1848
+ node.clearRTTInheritance();
1849
+ }
1850
+ }
1851
+
1852
+ if (inRttCluster === true) {
1853
+ node.markChildrenWithRTT(this);
1854
+ }
1855
+
1856
+ children.push(node);
1857
+
1858
+ if (min !== max || (zIndex !== min && zIndex !== max)) {
1859
+ this.zIndexSortList.push(node);
1860
+ this.setUpdateType(UpdateType.SortZIndexChildren);
1861
+ }
1862
+ }
1863
+
1743
1864
  //#region Properties
1744
1865
  get id(): number {
1745
1866
  return this._id;
@@ -1797,7 +1918,6 @@ export class CoreNode extends EventEmitter {
1797
1918
 
1798
1919
  set w(value: number) {
1799
1920
  if (this.props.w !== value) {
1800
- this.updateTextureCoords = true;
1801
1921
  this.props.w = value;
1802
1922
  this.setUpdateType(UpdateType.Local);
1803
1923
 
@@ -1819,7 +1939,6 @@ export class CoreNode extends EventEmitter {
1819
1939
 
1820
1940
  set h(value: number) {
1821
1941
  if (this.props.h !== value) {
1822
- this.updateTextureCoords = true;
1823
1942
  this.props.h = value;
1824
1943
  this.setUpdateType(UpdateType.Local);
1825
1944
 
@@ -2137,33 +2256,39 @@ export class CoreNode extends EventEmitter {
2137
2256
  this.setUpdateType(UpdateType.PremultipliedColors);
2138
2257
  }
2139
2258
 
2140
- // we're only interested in parent zIndex to test
2141
- // if we should use node zIndex is higher then parent zIndex
2142
- get zIndexLocked(): number {
2143
- return this.props.zIndexLocked || 0;
2144
- }
2145
-
2146
- set zIndexLocked(value: number) {
2147
- this.props.zIndexLocked = value;
2148
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
2149
- for (let i = 0, length = this.children.length; i < length; i++) {
2150
- this.children[i]!.setUpdateType(UpdateType.CalculatedZIndex);
2151
- }
2152
- }
2153
-
2154
2259
  get zIndex(): number {
2155
2260
  return this.props.zIndex;
2156
2261
  }
2157
2262
 
2158
2263
  set zIndex(value: number) {
2159
- if (this.props.zIndex === value) {
2160
- return;
2264
+ let sanitizedValue = value;
2265
+ if (isNaN(sanitizedValue) || Number.isFinite(sanitizedValue) === false) {
2266
+ console.warn(
2267
+ `zIndex was set to an invalid value: ${value}, defaulting to 0`,
2268
+ );
2269
+ sanitizedValue = 0;
2161
2270
  }
2162
2271
 
2163
- this.props.zIndex = value;
2164
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
2165
- for (let i = 0, length = this.children.length; i < length; i++) {
2166
- this.children[i]!.setUpdateType(UpdateType.CalculatedZIndex);
2272
+ //Clamp to safe integer range
2273
+ if (sanitizedValue > Number.MAX_SAFE_INTEGER) {
2274
+ sanitizedValue = 1000;
2275
+ } else if (sanitizedValue < Number.MIN_SAFE_INTEGER) {
2276
+ sanitizedValue = -1000;
2277
+ }
2278
+
2279
+ if (this.props.zIndex === sanitizedValue) {
2280
+ return;
2281
+ }
2282
+ this.previousZIndex = this.props.zIndex;
2283
+ this.props.zIndex = sanitizedValue;
2284
+ const parent = this.parent;
2285
+ if (parent !== null) {
2286
+ const min = parent.zIndexMin;
2287
+ const max = parent.zIndexMax;
2288
+ if (min !== max || sanitizedValue < min || sanitizedValue > max) {
2289
+ parent.zIndexSortList.push(this);
2290
+ parent.setUpdateType(UpdateType.SortZIndexChildren);
2291
+ }
2167
2292
  }
2168
2293
  }
2169
2294
 
@@ -2178,29 +2303,13 @@ export class CoreNode extends EventEmitter {
2178
2303
  }
2179
2304
  this.props.parent = newParent;
2180
2305
  if (oldParent) {
2181
- const index = oldParent.children.indexOf(this);
2182
- oldParent.children.splice(index, 1);
2183
- oldParent.setUpdateType(
2184
- UpdateType.Children | UpdateType.ZIndexSortedChildren,
2185
- );
2306
+ oldParent.removeChild(this, newParent);
2186
2307
  }
2187
- if (newParent) {
2188
- newParent.children.push(this);
2189
- // Since this node has a new parent, to be safe, have it do a full update.
2190
- this.setUpdateType(UpdateType.All);
2191
- // Tell parent that it's children need to be updated and sorted.
2192
- newParent.setUpdateType(
2193
- UpdateType.Children | UpdateType.ZIndexSortedChildren,
2194
- );
2195
-
2196
- // If the new parent has an RTT enabled, apply RTT inheritance
2197
- if (newParent.rtt || newParent.parentHasRenderTexture) {
2198
- this.applyRTTInheritance(newParent);
2199
- }
2308
+ if (newParent !== null) {
2309
+ newParent.addChild(this, oldParent);
2200
2310
  }
2201
-
2202
- // fetch render bounds from parent
2203
- this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
2311
+ //since this node has a new parent, recalc global and render bounds
2312
+ this.setUpdateType(UpdateType.Global | UpdateType.RenderBounds);
2204
2313
  }
2205
2314
 
2206
2315
  get rtt(): boolean {
@@ -2301,8 +2410,15 @@ export class CoreNode extends EventEmitter {
2301
2410
  }
2302
2411
  if (shader.shaderKey !== 'default') {
2303
2412
  this.hasShaderUpdater = shader.update !== undefined;
2413
+ this.hasShaderTimeFn = shader.time !== undefined;
2304
2414
  shader.attachNode(this);
2305
2415
  }
2416
+
2417
+ if (this.hasShaderTimeFn === true) {
2418
+ this.stage.trackTimedNode(this);
2419
+ } else {
2420
+ this.stage.untrackTimedNode(this);
2421
+ }
2306
2422
  this.props.shader = shader;
2307
2423
  this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
2308
2424
  }
@@ -2421,7 +2537,7 @@ export class CoreNode extends EventEmitter {
2421
2537
  this.textureCoords = undefined;
2422
2538
  this.props.texture = value;
2423
2539
  if (value !== null) {
2424
- value.setRenderableOwner(this, this.isRenderable);
2540
+ value.setRenderableOwner(this._id, this.isRenderable);
2425
2541
  this.loadTexture();
2426
2542
  }
2427
2543
 
@@ -2430,6 +2546,9 @@ export class CoreNode extends EventEmitter {
2430
2546
 
2431
2547
  set textureOptions(value: TextureOptions) {
2432
2548
  this.props.textureOptions = value;
2549
+ if (this.stage.calculateTextureCoord === true && value !== null) {
2550
+ this.textureCoords = this.stage.renderer.getTextureCoords!(this);
2551
+ }
2433
2552
  }
2434
2553
 
2435
2554
  get textureOptions(): TextureOptions {