@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
@@ -24,6 +24,7 @@ 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 { bucketSortByZIndex, incrementalRepositionByZIndex, removeChild, } from './lib/collectionUtils.js';
27
28
  export var CoreNodeRenderState;
28
29
  (function (CoreNodeRenderState) {
29
30
  CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
@@ -31,6 +32,13 @@ export var CoreNodeRenderState;
31
32
  CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
32
33
  CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
33
34
  })(CoreNodeRenderState || (CoreNodeRenderState = {}));
35
+ const NO_CLIPPING_RECT = {
36
+ x: 0,
37
+ y: 0,
38
+ width: 0,
39
+ height: 0,
40
+ valid: false,
41
+ };
34
42
  const CoreNodeRenderStateMap = new Map();
35
43
  CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
36
44
  CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
@@ -69,21 +77,13 @@ export var UpdateType;
69
77
  */
70
78
  UpdateType[UpdateType["Clipping"] = 8] = "Clipping";
71
79
  /**
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
80
+ * Sort Z-Index Children update
81
81
  *
82
82
  * @remarks
83
83
  * CoreNode Properties Updated:
84
84
  * - `children` (sorts children by their `calcZIndex`)
85
85
  */
86
- UpdateType[UpdateType["ZIndexSortedChildren"] = 32] = "ZIndexSortedChildren";
86
+ UpdateType[UpdateType["SortZIndexChildren"] = 16] = "SortZIndexChildren";
87
87
  /**
88
88
  * Premultiplied Colors update
89
89
  *
@@ -94,7 +94,7 @@ export var UpdateType;
94
94
  * - `premultipliedColorBl`
95
95
  * - `premultipliedColorBr`
96
96
  */
97
- UpdateType[UpdateType["PremultipliedColors"] = 64] = "PremultipliedColors";
97
+ UpdateType[UpdateType["PremultipliedColors"] = 32] = "PremultipliedColors";
98
98
  /**
99
99
  * World Alpha update
100
100
  *
@@ -102,7 +102,7 @@ export var UpdateType;
102
102
  * CoreNode Properties Updated:
103
103
  * - `worldAlpha` = `parent.worldAlpha` * `alpha`
104
104
  */
105
- UpdateType[UpdateType["WorldAlpha"] = 128] = "WorldAlpha";
105
+ UpdateType[UpdateType["WorldAlpha"] = 64] = "WorldAlpha";
106
106
  /**
107
107
  * Render State update
108
108
  *
@@ -110,7 +110,7 @@ export var UpdateType;
110
110
  * CoreNode Properties Updated:
111
111
  * - `renderState`
112
112
  */
113
- UpdateType[UpdateType["RenderState"] = 256] = "RenderState";
113
+ UpdateType[UpdateType["RenderState"] = 128] = "RenderState";
114
114
  /**
115
115
  * Is Renderable update
116
116
  *
@@ -118,23 +118,23 @@ export var UpdateType;
118
118
  * CoreNode Properties Updated:
119
119
  * - `isRenderable`
120
120
  */
121
- UpdateType[UpdateType["IsRenderable"] = 512] = "IsRenderable";
121
+ UpdateType[UpdateType["IsRenderable"] = 256] = "IsRenderable";
122
122
  /**
123
123
  * Render Texture update
124
124
  */
125
- UpdateType[UpdateType["RenderTexture"] = 1024] = "RenderTexture";
125
+ UpdateType[UpdateType["RenderTexture"] = 512] = "RenderTexture";
126
126
  /**
127
127
  * Track if parent has render texture
128
128
  */
129
- UpdateType[UpdateType["ParentRenderTexture"] = 2048] = "ParentRenderTexture";
129
+ UpdateType[UpdateType["ParentRenderTexture"] = 1024] = "ParentRenderTexture";
130
130
  /**
131
131
  * Render Bounds update
132
132
  */
133
- UpdateType[UpdateType["RenderBounds"] = 4096] = "RenderBounds";
133
+ UpdateType[UpdateType["RenderBounds"] = 2048] = "RenderBounds";
134
134
  /**
135
135
  * RecalcUniforms
136
136
  */
137
- UpdateType[UpdateType["RecalcUniforms"] = 8192] = "RecalcUniforms";
137
+ UpdateType[UpdateType["RecalcUniforms"] = 4096] = "RecalcUniforms";
138
138
  /**
139
139
  * None
140
140
  */
@@ -142,7 +142,7 @@ export var UpdateType;
142
142
  /**
143
143
  * All
144
144
  */
145
- UpdateType[UpdateType["All"] = 14335] = "All";
145
+ UpdateType[UpdateType["All"] = 7167] = "All";
146
146
  })(UpdateType || (UpdateType = {}));
147
147
  /**
148
148
  * A visual Node in the Renderer scene graph.
@@ -158,7 +158,12 @@ export class CoreNode extends EventEmitter {
158
158
  _id = getNewId();
159
159
  props;
160
160
  hasShaderUpdater = false;
161
+ hasShaderTimeFn = false;
161
162
  hasColorProps = false;
163
+ zIndexMin = 0;
164
+ zIndexMax = 0;
165
+ previousZIndex = -1;
166
+ zIndexSortList = [];
162
167
  updateType = UpdateType.All;
163
168
  childUpdateType = UpdateType.None;
164
169
  globalTransform;
@@ -177,7 +182,6 @@ export class CoreNode extends EventEmitter {
177
182
  valid: false,
178
183
  };
179
184
  textureCoords;
180
- updateTextureCoords = false;
181
185
  updateShaderUniforms = false;
182
186
  isRenderable = false;
183
187
  renderState = CoreNodeRenderState.Init;
@@ -226,7 +230,6 @@ export class CoreNode extends EventEmitter {
226
230
  p.mount = props.mount;
227
231
  p.pivot = props.pivot;
228
232
  p.zIndex = props.zIndex;
229
- p.zIndexLocked = props.zIndexLocked;
230
233
  p.textureOptions = props.textureOptions;
231
234
  p.data = props.data;
232
235
  p.imageType = props.imageType;
@@ -234,14 +237,20 @@ export class CoreNode extends EventEmitter {
234
237
  p.srcY = props.srcY;
235
238
  p.srcWidth = props.srcWidth;
236
239
  p.srcHeight = props.srcHeight;
237
- p.parent = null;
240
+ p.parent = props.parent;
238
241
  p.texture = null;
239
242
  p.shader = null;
240
243
  p.src = null;
241
244
  p.rtt = false;
242
245
  p.boundsMargin = null;
246
+ // Only set non-default values
247
+ if (props.zIndex !== 0) {
248
+ this.zIndex = props.zIndex;
249
+ }
250
+ if (props.parent !== null) {
251
+ props.parent.addChild(this);
252
+ }
243
253
  // Assign props to instances
244
- this.parent = props.parent;
245
254
  this.texture = props.texture;
246
255
  this.shader = props.shader;
247
256
  this.src = props.src;
@@ -258,43 +267,49 @@ export class CoreNode extends EventEmitter {
258
267
  }
259
268
  //#region Textures
260
269
  loadTexture() {
261
- const { texture } = this.props;
262
- if (!texture) {
270
+ if (this.props.texture === null) {
263
271
  return;
264
272
  }
265
273
  // If texture is already loaded / failed, trigger loaded event manually
266
274
  // so that users get a consistent event experience.
267
275
  // We do this in a microtask to allow listeners to be attached in the same
268
276
  // 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
- });
277
+ queueMicrotask(this.loadTextureTask);
297
278
  }
279
+ /**
280
+ * Task for queueMicrotask to loadTexture
281
+ *
282
+ * @remarks
283
+ * This method is called in a microtask to release the texture.
284
+ */
285
+ loadTextureTask = () => {
286
+ const texture = this.texture;
287
+ if (this.textureOptions.preload === true) {
288
+ this.stage.txManager.loadTexture(texture);
289
+ }
290
+ texture.preventCleanup = this.props.textureOptions?.preventCleanup ?? false;
291
+ texture.on('loaded', this.onTextureLoaded);
292
+ texture.on('failed', this.onTextureFailed);
293
+ texture.on('freed', this.onTextureFreed);
294
+ // If the parent is a render texture, the initial texture status
295
+ // will be set to freed until the texture is processed by the
296
+ // Render RTT nodes. So we only need to listen fo changes and
297
+ // no need to check the texture.state until we restructure how
298
+ // textures are being processed.
299
+ if (this.parentHasRenderTexture) {
300
+ this.notifyParentRTTOfUpdate();
301
+ return;
302
+ }
303
+ if (texture.state === 'loaded') {
304
+ this.onTextureLoaded(texture, texture.dimensions);
305
+ }
306
+ else if (texture.state === 'failed') {
307
+ this.onTextureFailed(texture, texture.error);
308
+ }
309
+ else if (texture.state === 'freed') {
310
+ this.onTextureFreed(texture);
311
+ }
312
+ };
298
313
  unloadTexture() {
299
314
  if (this.texture === null) {
300
315
  return;
@@ -303,7 +318,7 @@ export class CoreNode extends EventEmitter {
303
318
  texture.off('loaded', this.onTextureLoaded);
304
319
  texture.off('failed', this.onTextureFailed);
305
320
  texture.off('freed', this.onTextureFreed);
306
- texture.setRenderableOwner(this, false);
321
+ texture.setRenderableOwner(this._id, false);
307
322
  }
308
323
  onTextureLoaded = (_, dimensions) => {
309
324
  if (this.autosize === true) {
@@ -325,6 +340,10 @@ export class CoreNode extends EventEmitter {
325
340
  dimensions,
326
341
  });
327
342
  }
343
+ if (this.stage.calculateTextureCoord === true &&
344
+ this.props.textureOptions !== null) {
345
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
346
+ }
328
347
  // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
329
348
  if (this.props.textureOptions?.resizeMode?.type === 'contain') {
330
349
  this.setUpdateType(UpdateType.Local);
@@ -334,20 +353,25 @@ export class CoreNode extends EventEmitter {
334
353
  // immediately set isRenderable to false, so that we handle the error
335
354
  // without waiting for the next frame loop
336
355
  this.isRenderable = false;
356
+ this.updateTextureOwnership(false);
337
357
  this.setUpdateType(UpdateType.IsRenderable);
338
358
  // If parent has a render texture, flag that we need to update
339
359
  if (this.parentHasRenderTexture) {
340
360
  this.notifyParentRTTOfUpdate();
341
361
  }
342
- this.emit('failed', {
343
- type: 'texture',
344
- error,
345
- });
362
+ if (this.texture !== null &&
363
+ this.texture.retryCount > this.texture.maxRetryCount) {
364
+ this.emit('failed', {
365
+ type: 'texture',
366
+ error,
367
+ });
368
+ }
346
369
  };
347
370
  onTextureFreed = () => {
348
371
  // immediately set isRenderable to false, so that we handle the error
349
372
  // without waiting for the next frame loop
350
373
  this.isRenderable = false;
374
+ this.updateTextureOwnership(false);
351
375
  this.setUpdateType(UpdateType.IsRenderable);
352
376
  // If parent has a render texture, flag that we need to update
353
377
  if (this.parentHasRenderTexture) {
@@ -373,9 +397,6 @@ export class CoreNode extends EventEmitter {
373
397
  return;
374
398
  parent.setUpdateType(UpdateType.Children);
375
399
  }
376
- sortChildren() {
377
- this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
378
- }
379
400
  updateLocalTransform() {
380
401
  const p = this.props;
381
402
  const { x, y, w, h } = p;
@@ -433,9 +454,6 @@ export class CoreNode extends EventEmitter {
433
454
  * @param delta
434
455
  */
435
456
  update(delta, parentClippingRect) {
436
- if (this.updateType === UpdateType.None) {
437
- return;
438
- }
439
457
  const props = this.props;
440
458
  const parent = props.parent;
441
459
  const parentHasRenderTexture = this.parentHasRenderTexture;
@@ -444,6 +462,9 @@ export class CoreNode extends EventEmitter {
444
462
  let updateType = this.updateType;
445
463
  let childUpdateType = this.childUpdateType;
446
464
  let updateParent = false;
465
+ // reset update type
466
+ this.updateType = 0;
467
+ this.childUpdateType = 0;
447
468
  if (updateType & UpdateType.Local) {
448
469
  this.updateLocalTransform();
449
470
  updateType |= UpdateType.Global;
@@ -549,14 +570,9 @@ export class CoreNode extends EventEmitter {
549
570
  if (updateParent === true) {
550
571
  parent.setUpdateType(UpdateType.Children);
551
572
  }
552
- // No need to update zIndex if there is no parent
553
- if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
554
- this.calculateZIndex();
555
- // Tell parent to re-sort children
556
- parent.setUpdateType(UpdateType.ZIndexSortedChildren);
557
- }
558
573
  if (this.renderState === CoreNodeRenderState.OutOfBounds) {
559
574
  updateType &= ~UpdateType.RenderBounds; // remove render bounds update
575
+ this.updateType = updateType;
560
576
  return;
561
577
  }
562
578
  if (updateType & UpdateType.RecalcUniforms &&
@@ -569,22 +585,18 @@ export class CoreNode extends EventEmitter {
569
585
  this.shader.update();
570
586
  }
571
587
  if (updateType & UpdateType.Children && this.children.length > 0) {
588
+ let childClippingRect = this.clippingRect;
589
+ if (this.rtt === true) {
590
+ childClippingRect = NO_CLIPPING_RECT;
591
+ }
572
592
  for (let i = 0, length = this.children.length; i < length; i++) {
573
593
  const child = this.children[i];
574
- child.setUpdateType(childUpdateType);
594
+ if (childUpdateType !== 0) {
595
+ child.setUpdateType(childUpdateType);
596
+ }
575
597
  if (child.updateType === 0) {
576
598
  continue;
577
599
  }
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
600
  child.update(delta, childClippingRect);
589
601
  }
590
602
  }
@@ -594,16 +606,11 @@ export class CoreNode extends EventEmitter {
594
606
  if (parentHasRenderTexture === true) {
595
607
  this.notifyParentRTTOfUpdate();
596
608
  }
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) {
609
+ //Resort children if needed
610
+ if (updateType & UpdateType.SortZIndexChildren) {
600
611
  // reorder z-index
601
612
  this.sortChildren();
602
613
  }
603
- if (this.updateTextureCoords === true) {
604
- this.updateTextureCoords = false;
605
- this.textureCoords = this.stage.renderer.getTextureCoords(this);
606
- }
607
614
  // If we're out of bounds, apply the render state now
608
615
  // this is done so nodes can finish their entire update loop before
609
616
  // being marked as out of bounds
@@ -617,9 +624,6 @@ export class CoreNode extends EventEmitter {
617
624
  this.notifyChildrenRTTOfUpdate(renderState);
618
625
  }
619
626
  }
620
- // reset update type
621
- this.updateType = 0;
622
- this.childUpdateType = 0;
623
627
  }
624
628
  findParentRTTNode() {
625
629
  let rttNode = this.parent;
@@ -730,6 +734,17 @@ export class CoreNode extends EventEmitter {
730
734
  current: renderState,
731
735
  });
732
736
  }
737
+ /**
738
+ * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
739
+ */
740
+ checkBasicRenderability() {
741
+ if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
742
+ return false;
743
+ }
744
+ else {
745
+ return true;
746
+ }
747
+ }
733
748
  /**
734
749
  * Updates the `isRenderable` property based on various conditions.
735
750
  */
@@ -737,13 +752,20 @@ export class CoreNode extends EventEmitter {
737
752
  let newIsRenderable = false;
738
753
  let needsTextureOwnership = false;
739
754
  // If the node is out of bounds or has an alpha of 0, it is not renderable
740
- if (this.worldAlpha === 0 ||
741
- this.renderState <= CoreNodeRenderState.OutOfBounds) {
755
+ if (this.checkBasicRenderability() === false) {
742
756
  this.updateTextureOwnership(false);
743
757
  this.setRenderable(false);
744
758
  return;
745
759
  }
746
760
  if (this.texture !== null) {
761
+ // preemptive check for failed textures this will mark the current node as non-renderable
762
+ // and will prevent further checks until the texture is reloaded or retry is reset on the texture
763
+ if (this.texture.retryCount > this.texture.maxRetryCount) {
764
+ // texture has failed to load, we cannot render
765
+ this.updateTextureOwnership(false);
766
+ this.setRenderable(false);
767
+ return;
768
+ }
747
769
  needsTextureOwnership = true;
748
770
  // we're only renderable if the texture state is loaded
749
771
  newIsRenderable = this.texture.state === 'loaded';
@@ -752,7 +774,7 @@ export class CoreNode extends EventEmitter {
752
774
  // check shader
753
775
  (this.props.shader !== null || this.hasColorProps === true) &&
754
776
  // check dimensions
755
- (this.props.w !== 0 && this.props.h !== 0) === true) {
777
+ this.hasDimensions() === true) {
756
778
  // This mean we have dimensions and a color set, so we can render a ColorTexture
757
779
  if (this.stage.defaultTexture &&
758
780
  this.stage.defaultTexture.state === 'loaded') {
@@ -776,17 +798,24 @@ export class CoreNode extends EventEmitter {
776
798
  isRenderable,
777
799
  });
778
800
  }
779
- if (isRenderable === true &&
780
- this.stage.calculateTextureCoord === true &&
781
- this.textureCoords === undefined) {
782
- this.updateTextureCoords = true;
783
- }
784
801
  }
785
802
  /**
786
803
  * Changes the renderable state of the node.
787
804
  */
788
805
  updateTextureOwnership(isRenderable) {
789
- this.texture?.setRenderableOwner(this, isRenderable);
806
+ this.texture?.setRenderableOwner(this._id, isRenderable);
807
+ }
808
+ /**
809
+ * Checks if the node is out of the viewport bounds.
810
+ */
811
+ isOutOfBounds() {
812
+ return this.renderState <= CoreNodeRenderState.OutOfBounds;
813
+ }
814
+ /**
815
+ * Checks if the node has dimensions (width/height)
816
+ */
817
+ hasDimensions() {
818
+ return this.props.w !== 0 && this.props.h !== 0;
790
819
  }
791
820
  calculateRenderCoords() {
792
821
  const { w, h } = this.props;
@@ -881,16 +910,6 @@ export class CoreNode extends EventEmitter {
881
910
  clippingRect.valid = true;
882
911
  }
883
912
  }
884
- calculateZIndex() {
885
- const props = this.props;
886
- const z = props.zIndex || 0;
887
- const p = props.parent?.zIndex || 0;
888
- let zIndex = z;
889
- if (props.parent?.zIndexLocked) {
890
- zIndex = z < p ? z : p;
891
- }
892
- this.calcZIndex = zIndex;
893
- }
894
913
  /**
895
914
  * Destroy the node and cleanup all resources
896
915
  */
@@ -902,21 +921,23 @@ export class CoreNode extends EventEmitter {
902
921
  this.destroyed = true;
903
922
  this.unloadTexture();
904
923
  this.isRenderable = false;
924
+ if (this.hasShaderTimeFn === true) {
925
+ this.stage.untrackTimedNode(this);
926
+ }
905
927
  // Kill children
906
928
  while (this.children.length > 0) {
907
929
  this.children[0].destroy();
908
930
  }
909
931
  const parent = this.parent;
910
932
  if (parent !== null) {
911
- const index = parent.children.indexOf(this);
912
- parent.children.splice(index, 1);
913
- parent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
933
+ parent.removeChild(this);
914
934
  }
915
935
  this.props.parent = null;
916
936
  this.props.texture = null;
917
937
  if (this.rtt === true) {
918
938
  this.stage.renderer.removeRTTNode(this);
919
939
  }
940
+ this.stage.requestRender();
920
941
  }
921
942
  renderQuads(renderer) {
922
943
  if (this.parentHasRenderTexture === true) {
@@ -928,6 +949,7 @@ export class CoreNode extends EventEmitter {
928
949
  const t = this.globalTransform;
929
950
  const coords = this.renderCoords;
930
951
  const texture = p.texture || this.stage.defaultTexture;
952
+ const textureCoords = this.textureCoords || this.stage.renderer.defaultTextureCoords;
931
953
  // There is a race condition where the texture can be null
932
954
  // with RTT nodes. Adding this defensively to avoid errors.
933
955
  if (texture && texture.state !== 'loaded') {
@@ -942,7 +964,7 @@ export class CoreNode extends EventEmitter {
942
964
  colorBr: this.premultipliedColorBr,
943
965
  texture,
944
966
  textureOptions: p.textureOptions,
945
- textureCoords: this.textureCoords,
967
+ textureCoords: textureCoords,
946
968
  shader: p.shader,
947
969
  alpha: this.worldAlpha,
948
970
  clippingRect: this.clippingRect,
@@ -959,8 +981,85 @@ export class CoreNode extends EventEmitter {
959
981
  framebufferDimensions: this.parentHasRenderTexture
960
982
  ? this.parentFramebufferDimensions
961
983
  : null,
984
+ time: this.hasShaderTimeFn === true ? this.getTimerValue() : null,
962
985
  });
963
986
  }
987
+ getTimerValue() {
988
+ if (typeof this.shader.time === 'function') {
989
+ return this.shader.time(this.stage);
990
+ }
991
+ return this.stage.elapsedTime;
992
+ }
993
+ sortChildren() {
994
+ const changedCount = this.zIndexSortList.length;
995
+ if (changedCount === 0) {
996
+ return;
997
+ }
998
+ const children = this.children;
999
+ let min = Infinity;
1000
+ let max = -Infinity;
1001
+ // find min and max zIndex
1002
+ for (let i = 0; i < children.length; i++) {
1003
+ const zIndex = children[i].props.zIndex;
1004
+ if (zIndex < min) {
1005
+ min = zIndex;
1006
+ }
1007
+ if (zIndex > max) {
1008
+ max = zIndex;
1009
+ }
1010
+ }
1011
+ // update min and max zIndex
1012
+ this.zIndexMin = min;
1013
+ this.zIndexMax = max;
1014
+ // if min and max are the same, no need to sort
1015
+ if (min === max) {
1016
+ return;
1017
+ }
1018
+ const n = children.length;
1019
+ // decide whether to use incremental sort or bucket sort
1020
+ const useIncremental = changedCount <= 2 || changedCount < n * 0.05;
1021
+ // when changed count is less than 2 or 5% of total children, use incremental sort
1022
+ if (useIncremental === true) {
1023
+ incrementalRepositionByZIndex(this.zIndexSortList, children);
1024
+ }
1025
+ else {
1026
+ bucketSortByZIndex(children, min);
1027
+ }
1028
+ this.zIndexSortList.length = 0;
1029
+ this.zIndexSortList = [];
1030
+ }
1031
+ removeChild(node, targetParent = null) {
1032
+ if (targetParent === null &&
1033
+ this.props.rtt === true &&
1034
+ this.parentHasRenderTexture === true) {
1035
+ node.clearRTTInheritance();
1036
+ }
1037
+ removeChild(node, this.children);
1038
+ }
1039
+ addChild(node, previousParent = null) {
1040
+ const inRttCluster = this.props.rtt === true || this.parentHasRenderTexture === true;
1041
+ const children = this.children;
1042
+ const min = this.zIndexMin;
1043
+ const max = this.zIndexMax;
1044
+ const zIndex = node.zIndex;
1045
+ node.parentHasRenderTexture = inRttCluster;
1046
+ if (previousParent !== null) {
1047
+ const previousParentInRttCluster = previousParent.props.rtt === true ||
1048
+ previousParent.parentHasRenderTexture === true;
1049
+ if (inRttCluster === false && previousParentInRttCluster === true) {
1050
+ // update child RTT status
1051
+ node.clearRTTInheritance();
1052
+ }
1053
+ }
1054
+ if (inRttCluster === true) {
1055
+ node.markChildrenWithRTT(this);
1056
+ }
1057
+ children.push(node);
1058
+ if (min !== max || (zIndex !== min && zIndex !== max)) {
1059
+ this.zIndexSortList.push(node);
1060
+ this.setUpdateType(UpdateType.SortZIndexChildren);
1061
+ }
1062
+ }
964
1063
  //#region Properties
965
1064
  get id() {
966
1065
  return this._id;
@@ -1004,7 +1103,6 @@ export class CoreNode extends EventEmitter {
1004
1103
  }
1005
1104
  set w(value) {
1006
1105
  if (this.props.w !== value) {
1007
- this.updateTextureCoords = true;
1008
1106
  this.props.w = value;
1009
1107
  this.setUpdateType(UpdateType.Local);
1010
1108
  if (this.props.rtt === true) {
@@ -1019,7 +1117,6 @@ export class CoreNode extends EventEmitter {
1019
1117
  }
1020
1118
  set h(value) {
1021
1119
  if (this.props.h !== value) {
1022
- this.updateTextureCoords = true;
1023
1120
  this.props.h = value;
1024
1121
  this.setUpdateType(UpdateType.Local);
1025
1122
  if (this.props.rtt === true) {
@@ -1279,29 +1376,35 @@ export class CoreNode extends EventEmitter {
1279
1376
  this.hasColorProps = value > 0;
1280
1377
  this.setUpdateType(UpdateType.PremultipliedColors);
1281
1378
  }
1282
- // we're only interested in parent zIndex to test
1283
- // if we should use node zIndex is higher then parent zIndex
1284
- get zIndexLocked() {
1285
- return this.props.zIndexLocked || 0;
1286
- }
1287
- set zIndexLocked(value) {
1288
- this.props.zIndexLocked = value;
1289
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1290
- for (let i = 0, length = this.children.length; i < length; i++) {
1291
- this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1292
- }
1293
- }
1294
1379
  get zIndex() {
1295
1380
  return this.props.zIndex;
1296
1381
  }
1297
1382
  set zIndex(value) {
1298
- if (this.props.zIndex === value) {
1383
+ let sanitizedValue = value;
1384
+ if (isNaN(sanitizedValue) || Number.isFinite(sanitizedValue) === false) {
1385
+ console.warn(`zIndex was set to an invalid value: ${value}, defaulting to 0`);
1386
+ sanitizedValue = 0;
1387
+ }
1388
+ //Clamp to safe integer range
1389
+ if (sanitizedValue > Number.MAX_SAFE_INTEGER) {
1390
+ sanitizedValue = 1000;
1391
+ }
1392
+ else if (sanitizedValue < Number.MIN_SAFE_INTEGER) {
1393
+ sanitizedValue = -1000;
1394
+ }
1395
+ if (this.props.zIndex === sanitizedValue) {
1299
1396
  return;
1300
1397
  }
1301
- this.props.zIndex = value;
1302
- this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1303
- for (let i = 0, length = this.children.length; i < length; i++) {
1304
- this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1398
+ this.previousZIndex = this.props.zIndex;
1399
+ this.props.zIndex = sanitizedValue;
1400
+ const parent = this.parent;
1401
+ if (parent !== null) {
1402
+ const min = parent.zIndexMin;
1403
+ const max = parent.zIndexMax;
1404
+ if (min !== max || sanitizedValue < min || sanitizedValue > max) {
1405
+ parent.zIndexSortList.push(this);
1406
+ parent.setUpdateType(UpdateType.SortZIndexChildren);
1407
+ }
1305
1408
  }
1306
1409
  }
1307
1410
  get parent() {
@@ -1314,23 +1417,13 @@ export class CoreNode extends EventEmitter {
1314
1417
  }
1315
1418
  this.props.parent = newParent;
1316
1419
  if (oldParent) {
1317
- const index = oldParent.children.indexOf(this);
1318
- oldParent.children.splice(index, 1);
1319
- oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1320
- }
1321
- if (newParent) {
1322
- newParent.children.push(this);
1323
- // Since this node has a new parent, to be safe, have it do a full update.
1324
- this.setUpdateType(UpdateType.All);
1325
- // Tell parent that it's children need to be updated and sorted.
1326
- newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1327
- // If the new parent has an RTT enabled, apply RTT inheritance
1328
- if (newParent.rtt || newParent.parentHasRenderTexture) {
1329
- this.applyRTTInheritance(newParent);
1330
- }
1420
+ oldParent.removeChild(this, newParent);
1331
1421
  }
1332
- // fetch render bounds from parent
1333
- this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1422
+ if (newParent !== null) {
1423
+ newParent.addChild(this, oldParent);
1424
+ }
1425
+ //since this node has a new parent, recalc global and render bounds
1426
+ this.setUpdateType(UpdateType.Global | UpdateType.RenderBounds);
1334
1427
  }
1335
1428
  get rtt() {
1336
1429
  return this.props.rtt;
@@ -1414,8 +1507,15 @@ export class CoreNode extends EventEmitter {
1414
1507
  }
1415
1508
  if (shader.shaderKey !== 'default') {
1416
1509
  this.hasShaderUpdater = shader.update !== undefined;
1510
+ this.hasShaderTimeFn = shader.time !== undefined;
1417
1511
  shader.attachNode(this);
1418
1512
  }
1513
+ if (this.hasShaderTimeFn === true) {
1514
+ this.stage.trackTimedNode(this);
1515
+ }
1516
+ else {
1517
+ this.stage.untrackTimedNode(this);
1518
+ }
1419
1519
  this.props.shader = shader;
1420
1520
  this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
1421
1521
  }
@@ -1512,13 +1612,16 @@ export class CoreNode extends EventEmitter {
1512
1612
  this.textureCoords = undefined;
1513
1613
  this.props.texture = value;
1514
1614
  if (value !== null) {
1515
- value.setRenderableOwner(this, this.isRenderable);
1615
+ value.setRenderableOwner(this._id, this.isRenderable);
1516
1616
  this.loadTexture();
1517
1617
  }
1518
1618
  this.setUpdateType(UpdateType.IsRenderable);
1519
1619
  }
1520
1620
  set textureOptions(value) {
1521
1621
  this.props.textureOptions = value;
1622
+ if (this.stage.calculateTextureCoord === true && value !== null) {
1623
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
1624
+ }
1522
1625
  }
1523
1626
  get textureOptions() {
1524
1627
  return this.props.textureOptions;