@lightningjs/renderer 3.0.0-beta1 → 3.0.0-beta10

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 (611) hide show
  1. package/COPYING +1 -0
  2. package/LICENSE +202 -202
  3. package/NOTICE +3 -3
  4. package/README.md +133 -147
  5. package/dist/exports/canvas.d.ts +1 -1
  6. package/dist/exports/canvas.js +1 -1
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +1 -5
  9. package/dist/exports/index.js +1 -5
  10. package/dist/exports/index.js.map +1 -1
  11. package/dist/exports/utils.d.ts +2 -1
  12. package/dist/exports/utils.js +2 -1
  13. package/dist/exports/utils.js.map +1 -1
  14. package/dist/exports/webgl.d.ts +2 -1
  15. package/dist/exports/webgl.js +2 -1
  16. package/dist/exports/webgl.js.map +1 -1
  17. package/dist/src/core/CoreNode.d.ts +45 -69
  18. package/dist/src/core/CoreNode.js +323 -305
  19. package/dist/src/core/CoreNode.js.map +1 -1
  20. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  21. package/dist/src/core/CoreShaderManager.js.map +1 -1
  22. package/dist/src/core/CoreTextNode.d.ts +58 -87
  23. package/dist/src/core/CoreTextNode.js +243 -237
  24. package/dist/src/core/CoreTextNode.js.map +1 -1
  25. package/dist/src/core/CoreTextureManager.d.ts +9 -11
  26. package/dist/src/core/CoreTextureManager.js +80 -91
  27. package/dist/src/core/CoreTextureManager.js.map +1 -1
  28. package/dist/src/core/Stage.d.ts +75 -31
  29. package/dist/src/core/Stage.js +270 -136
  30. package/dist/src/core/Stage.js.map +1 -1
  31. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  32. package/dist/src/core/TextureMemoryManager.js +112 -78
  33. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  34. package/dist/src/core/animations/CoreAnimation.js +5 -0
  35. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  36. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  37. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  38. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  39. package/dist/src/core/lib/ImageWorker.js +3 -2
  40. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  41. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  42. package/dist/src/core/lib/RenderCoords.js +43 -55
  43. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  44. package/dist/src/core/lib/WebGlContextWrapper.d.ts +51 -2
  45. package/dist/src/core/lib/WebGlContextWrapper.js +92 -22
  46. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  47. package/dist/src/core/lib/colorCache.d.ts +1 -0
  48. package/dist/src/core/lib/colorCache.js +19 -0
  49. package/dist/src/core/lib/colorCache.js.map +1 -0
  50. package/dist/src/core/lib/colorParser.d.ts +21 -0
  51. package/dist/src/core/lib/colorParser.js +72 -0
  52. package/dist/src/core/lib/colorParser.js.map +1 -0
  53. package/dist/src/core/lib/utils.d.ts +3 -0
  54. package/dist/src/core/lib/utils.js +42 -0
  55. package/dist/src/core/lib/utils.js.map +1 -1
  56. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  57. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  58. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  59. package/dist/src/core/platforms/Platform.d.ts +37 -0
  60. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  61. package/dist/src/core/platforms/Platform.js.map +1 -0
  62. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  63. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  64. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  65. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -1
  66. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -2
  67. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  68. package/dist/src/core/renderers/CoreShaderNode.d.ts +3 -3
  69. package/dist/src/core/renderers/CoreShaderNode.js +8 -2
  70. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  71. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  72. package/dist/src/core/renderers/canvas/CanvasRenderer.js +10 -21
  73. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  74. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  75. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  76. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +2 -2
  77. package/dist/src/core/renderers/canvas/CanvasTexture.js +11 -9
  78. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  79. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +3 -0
  80. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +5 -6
  82. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +30 -21
  83. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  84. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +10 -2
  85. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +37 -19
  86. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  88. package/dist/src/core/renderers/webgl/WebGlRenderer.js +144 -117
  89. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  90. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -1
  91. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  92. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  93. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -3
  94. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +55 -31
  95. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +35 -35
  97. package/dist/src/core/shaders/canvas/Border.js +1 -1
  98. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  99. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  100. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  101. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  102. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  103. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  104. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  105. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  106. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  107. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  108. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  109. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  110. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  111. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  112. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  113. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  114. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  115. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  116. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  117. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  118. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  119. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  120. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  121. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  122. package/dist/src/core/shaders/utils.js.map +1 -0
  123. package/dist/src/core/shaders/webgl/Border.js +86 -63
  124. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  125. package/dist/src/core/shaders/webgl/Default.js +47 -47
  126. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  127. package/dist/src/core/shaders/webgl/HolePunch.js +36 -35
  128. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  129. package/dist/src/core/shaders/webgl/LinearGradient.js +41 -40
  130. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  131. package/dist/src/core/shaders/webgl/RadialGradient.js +39 -38
  132. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  133. package/dist/src/core/shaders/webgl/Rounded.js +71 -71
  134. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +115 -72
  135. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  136. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +138 -88
  137. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  138. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +54 -54
  139. package/dist/src/core/shaders/webgl/SdfShader.js +63 -63
  140. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  141. package/dist/src/core/shaders/webgl/Shadow.js +83 -83
  142. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +25 -0
  143. package/dist/src/core/text-rendering/CanvasFontHandler.js +130 -0
  144. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  145. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +22 -0
  146. package/dist/src/core/text-rendering/CanvasTextRenderer.js +366 -0
  147. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  148. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +137 -0
  149. package/dist/src/core/text-rendering/SdfFontHandler.js +336 -0
  150. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  151. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  152. package/dist/src/core/text-rendering/SdfTextRenderer.js +355 -0
  153. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  154. package/dist/src/core/text-rendering/TextRenderer.d.ts +349 -0
  155. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  156. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  157. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  158. package/dist/src/core/text-rendering/Utils.js +212 -0
  159. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  160. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  161. package/dist/src/core/{renderers/CoreShader.js → text-rendering/canvas/Settings.js} +3 -11
  162. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  163. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  164. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  165. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  166. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  167. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  168. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  169. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  170. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  171. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  172. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +5 -0
  173. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  174. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -1
  175. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +50 -2
  176. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  177. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +9 -54
  178. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  179. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  180. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +66 -8
  181. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  182. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +13 -0
  183. package/dist/src/core/text-rendering/renderers/TextRenderer.js +3 -0
  184. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  185. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  186. package/dist/src/core/text-rendering/sdf/Utils.js +304 -0
  187. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  188. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  189. package/dist/src/{main-api/texture-usage-trackers/TextureUsageTracker.js → core/text-rendering/sdf/index.js} +3 -11
  190. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  191. package/dist/src/core/textures/ImageTexture.d.ts +4 -3
  192. package/dist/src/core/textures/ImageTexture.js +36 -9
  193. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  194. package/dist/src/core/textures/Texture.d.ts +21 -2
  195. package/dist/src/core/textures/Texture.js +37 -6
  196. package/dist/src/core/textures/Texture.js.map +1 -1
  197. package/dist/src/core/utils.d.ts +1 -1
  198. package/dist/src/main-api/INode.d.ts +2 -2
  199. package/dist/src/main-api/Inspector.d.ts +6 -1
  200. package/dist/src/main-api/Inspector.js +43 -7
  201. package/dist/src/main-api/Inspector.js.map +1 -1
  202. package/dist/src/main-api/Renderer.d.ts +122 -46
  203. package/dist/src/main-api/Renderer.js +174 -37
  204. package/dist/src/main-api/Renderer.js.map +1 -1
  205. package/dist/src/utils.d.ts +1 -6
  206. package/dist/src/utils.js +2 -9
  207. package/dist/src/utils.js.map +1 -1
  208. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  209. package/exports/canvas-shaders.ts +28 -28
  210. package/exports/canvas.ts +45 -45
  211. package/exports/index.ts +82 -89
  212. package/exports/inspector.ts +24 -24
  213. package/exports/utils.ts +50 -44
  214. package/exports/webgl-shaders.ts +28 -28
  215. package/exports/webgl.ts +52 -50
  216. package/package.json +2 -4
  217. package/src/common/CommonTypes.ts +146 -146
  218. package/src/common/EventEmitter.ts +77 -77
  219. package/src/common/IAnimationController.ts +92 -92
  220. package/src/common/IEventEmitter.ts +28 -28
  221. package/src/core/CoreNode.test.ts +202 -203
  222. package/src/core/CoreNode.ts +2491 -2476
  223. package/src/core/CoreShaderManager.ts +188 -193
  224. package/src/core/CoreTextNode.ts +443 -448
  225. package/src/core/CoreTextureManager.ts +565 -597
  226. package/src/core/Stage.ts +906 -740
  227. package/src/core/TextureMemoryManager.ts +445 -395
  228. package/src/core/animations/AnimationManager.ts +38 -38
  229. package/src/core/animations/CoreAnimation.ts +291 -284
  230. package/src/core/animations/CoreAnimationController.ts +166 -157
  231. package/src/core/lib/ContextSpy.ts +41 -41
  232. package/src/core/lib/ImageWorker.ts +286 -279
  233. package/src/core/lib/Matrix3d.ts +244 -244
  234. package/src/core/lib/RenderCoords.ts +71 -86
  235. package/src/core/lib/WebGlContextWrapper.ts +1381 -1324
  236. package/src/core/lib/colorCache.ts +20 -0
  237. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  238. package/src/core/lib/textureCompression.ts +152 -152
  239. package/src/core/lib/textureSvg.ts +78 -78
  240. package/src/core/lib/utils.ts +412 -361
  241. package/src/core/lib/validateImageBitmap.ts +87 -76
  242. package/src/core/platforms/Platform.ts +77 -0
  243. package/src/core/platforms/web/WebPlatform.ts +121 -0
  244. package/src/core/renderers/CoreContextTexture.ts +43 -43
  245. package/src/core/renderers/CoreRenderOp.ts +22 -22
  246. package/src/core/renderers/CoreRenderer.ts +110 -107
  247. package/src/core/renderers/CoreShaderNode.ts +175 -171
  248. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  249. package/src/core/renderers/canvas/CanvasRenderer.ts +283 -299
  250. package/src/core/renderers/canvas/CanvasShaderNode.ts +96 -99
  251. package/src/core/renderers/canvas/CanvasTexture.ts +156 -153
  252. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +91 -86
  253. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -50
  254. package/src/core/renderers/webgl/WebGlCtxTexture.ts +310 -301
  255. package/src/core/renderers/webgl/WebGlRenderOp.ts +167 -145
  256. package/src/core/renderers/webgl/WebGlRenderer.ts +747 -715
  257. package/src/core/renderers/webgl/WebGlShaderNode.ts +435 -433
  258. package/src/core/renderers/webgl/WebGlShaderProgram.ts +341 -310
  259. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  260. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
  261. package/src/core/renderers/webgl/internal/ShaderUtils.ts +281 -281
  262. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  263. package/src/core/shaders/canvas/Border.ts +75 -78
  264. package/src/core/shaders/canvas/HolePunch.ts +62 -62
  265. package/src/core/shaders/canvas/LinearGradient.ts +71 -69
  266. package/src/core/shaders/canvas/RadialGradient.ts +99 -113
  267. package/src/core/shaders/canvas/Rounded.ts +55 -55
  268. package/src/core/shaders/canvas/RoundedWithBorder.ts +74 -68
  269. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +90 -88
  270. package/src/core/shaders/canvas/RoundedWithShadow.ts +70 -69
  271. package/src/core/shaders/canvas/Shadow.ts +52 -52
  272. package/src/core/shaders/canvas/utils/render.ts +151 -151
  273. package/src/core/shaders/templates/BorderTemplate.ts +115 -115
  274. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  275. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  276. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -81
  277. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  278. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  279. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  280. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  281. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  282. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +46 -47
  283. package/src/core/shaders/webgl/Border.ts +116 -96
  284. package/src/core/shaders/webgl/Default.ts +89 -89
  285. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  286. package/src/core/shaders/webgl/HolePunch.ts +75 -78
  287. package/src/core/shaders/webgl/LinearGradient.ts +82 -81
  288. package/src/core/shaders/webgl/RadialGradient.ts +85 -84
  289. package/src/core/shaders/webgl/Rounded.ts +117 -117
  290. package/src/core/shaders/webgl/RoundedWithBorder.ts +155 -114
  291. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +175 -133
  292. package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -98
  293. package/src/core/shaders/webgl/SdfShader.ts +134 -137
  294. package/src/core/shaders/webgl/Shadow.ts +115 -115
  295. package/src/core/text-rendering/CanvasFontHandler.ts +176 -0
  296. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -0
  297. package/src/core/text-rendering/SdfFontHandler.ts +517 -0
  298. package/src/core/text-rendering/SdfTextRenderer.ts +466 -0
  299. package/src/core/text-rendering/TextRenderer.ts +404 -0
  300. package/src/core/text-rendering/{TextTextureRendererUtils.ts → Utils.ts} +257 -263
  301. package/src/core/text-rendering/canvas/Settings.ts +99 -0
  302. package/src/core/text-rendering/canvas/Utils.test.ts +206 -0
  303. package/src/core/text-rendering/canvas/Utils.ts +178 -0
  304. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -0
  305. package/src/core/text-rendering/canvas/draw.ts +165 -0
  306. package/src/core/text-rendering/sdf/Utils.test.ts +402 -0
  307. package/src/core/text-rendering/sdf/Utils.ts +436 -0
  308. package/src/core/text-rendering/sdf/index.ts +20 -0
  309. package/src/core/textures/ColorTexture.ts +102 -102
  310. package/src/core/textures/ImageTexture.ts +418 -376
  311. package/src/core/textures/NoiseTexture.ts +104 -104
  312. package/src/core/textures/RenderTexture.ts +85 -85
  313. package/src/core/textures/SubTexture.ts +205 -205
  314. package/src/core/textures/Texture.ts +381 -337
  315. package/src/core/utils.ts +227 -227
  316. package/src/env.d.ts +7 -7
  317. package/src/main-api/INode.ts +100 -99
  318. package/src/main-api/Inspector.ts +567 -522
  319. package/src/main-api/Renderer.ts +873 -649
  320. package/src/main-api/utils.ts +45 -45
  321. package/src/utils.ts +267 -267
  322. package/dist/exports/core-api.d.ts +0 -74
  323. package/dist/exports/core-api.js +0 -96
  324. package/dist/exports/core-api.js.map +0 -1
  325. package/dist/exports/main-api.d.ts +0 -30
  326. package/dist/exports/main-api.js +0 -45
  327. package/dist/exports/main-api.js.map +0 -1
  328. package/dist/src/core/CoreExtension.d.ts +0 -12
  329. package/dist/src/core/CoreExtension.js +0 -29
  330. package/dist/src/core/CoreExtension.js.map +0 -1
  331. package/dist/src/core/CoreStuff.d.ts +0 -1
  332. package/dist/src/core/CoreStuff.js +0 -138
  333. package/dist/src/core/CoreStuff.js.map +0 -1
  334. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  335. package/dist/src/core/CoreTexturizer.js +0 -47
  336. package/dist/src/core/CoreTexturizer.js.map +0 -1
  337. package/dist/src/core/LngNode.d.ts +0 -736
  338. package/dist/src/core/LngNode.js +0 -1174
  339. package/dist/src/core/LngNode.js.map +0 -1
  340. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  341. package/dist/src/core/Matrix2DContext.js +0 -45
  342. package/dist/src/core/Matrix2DContext.js.map +0 -1
  343. package/dist/src/core/ShaderNode.d.ts +0 -10
  344. package/dist/src/core/ShaderNode.js +0 -30
  345. package/dist/src/core/ShaderNode.js.map +0 -1
  346. package/dist/src/core/TextNode.d.ts +0 -103
  347. package/dist/src/core/TextNode.js +0 -331
  348. package/dist/src/core/TextNode.js.map +0 -1
  349. package/dist/src/core/lib/Coords.d.ts +0 -14
  350. package/dist/src/core/lib/Coords.js +0 -55
  351. package/dist/src/core/lib/Coords.js.map +0 -1
  352. package/dist/src/core/lib/glm/common.d.ts +0 -162
  353. package/dist/src/core/lib/glm/common.js +0 -81
  354. package/dist/src/core/lib/glm/common.js.map +0 -1
  355. package/dist/src/core/lib/glm/index.d.ts +0 -11
  356. package/dist/src/core/lib/glm/index.js +0 -30
  357. package/dist/src/core/lib/glm/index.js.map +0 -1
  358. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  359. package/dist/src/core/lib/glm/mat2.js +0 -396
  360. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  361. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  362. package/dist/src/core/lib/glm/mat2d.js +0 -442
  363. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  364. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  365. package/dist/src/core/lib/glm/mat3.js +0 -680
  366. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  367. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  368. package/dist/src/core/lib/glm/mat4.js +0 -1802
  369. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  370. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  371. package/dist/src/core/lib/glm/quat.js +0 -693
  372. package/dist/src/core/lib/glm/quat.js.map +0 -1
  373. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  374. package/dist/src/core/lib/glm/quat2.js +0 -754
  375. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  376. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  377. package/dist/src/core/lib/glm/vec2.js +0 -569
  378. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  379. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  380. package/dist/src/core/lib/glm/vec3.js +0 -720
  381. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  382. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  383. package/dist/src/core/lib/glm/vec4.js +0 -608
  384. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  385. package/dist/src/core/platform.d.ts +0 -10
  386. package/dist/src/core/platform.js +0 -56
  387. package/dist/src/core/platform.js.map +0 -1
  388. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  389. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  390. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  391. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  392. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  393. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  394. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  395. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  396. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  397. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
  398. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  399. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  400. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  401. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  402. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  403. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
  404. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  405. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  406. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  407. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  408. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
  409. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
  410. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  411. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  412. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  413. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  414. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  415. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
  416. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  417. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  418. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
  419. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  420. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  421. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  422. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  423. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  426. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  427. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  428. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  429. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  430. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  431. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  432. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  433. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  434. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  435. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  436. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  437. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  438. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  439. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  440. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  441. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  442. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  443. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  444. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  445. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  446. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  447. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  448. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  449. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  450. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  451. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  452. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  453. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  454. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  455. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  456. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  457. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  458. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  460. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  461. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  463. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  464. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  465. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  466. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  467. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  468. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  469. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  470. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  471. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  472. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  473. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  474. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  475. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  476. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  477. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  478. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  479. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  480. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  481. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  482. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  483. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  484. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  485. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  486. package/dist/src/core/scene/Scene.d.ts +0 -59
  487. package/dist/src/core/scene/Scene.js +0 -106
  488. package/dist/src/core/scene/Scene.js.map +0 -1
  489. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  490. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  491. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  492. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  493. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  494. package/dist/src/main-api/DynamicShaderController.js +0 -58
  495. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  496. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  497. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  498. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  499. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  500. package/dist/src/main-api/IShaderController.d.ts +0 -14
  501. package/dist/src/main-api/IShaderController.js +0 -30
  502. package/dist/src/main-api/IShaderController.js.map +0 -1
  503. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  504. package/dist/src/main-api/IShaderNode.js +0 -19
  505. package/dist/src/main-api/IShaderNode.js.map +0 -1
  506. package/dist/src/main-api/RendererMain.d.ts +0 -375
  507. package/dist/src/main-api/RendererMain.js +0 -365
  508. package/dist/src/main-api/RendererMain.js.map +0 -1
  509. package/dist/src/main-api/ShaderController.d.ts +0 -31
  510. package/dist/src/main-api/ShaderController.js +0 -37
  511. package/dist/src/main-api/ShaderController.js.map +0 -1
  512. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  513. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  514. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  515. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  516. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  517. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  518. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  519. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  520. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  521. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  522. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  523. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  524. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  525. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  526. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  527. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  528. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  529. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  530. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  531. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  532. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  533. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  534. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  535. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  536. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  537. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  538. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  539. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  540. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  541. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  542. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  543. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  544. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  545. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  546. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  547. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  548. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  549. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  550. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  551. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  552. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  553. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  554. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  555. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  556. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  557. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  558. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  559. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  560. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  561. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  562. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  563. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  564. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  565. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  566. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  567. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  568. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  569. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  570. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  571. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  572. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  573. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  574. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  575. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  576. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  577. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  578. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  579. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  580. package/dist/src/render-drivers/utils.d.ts +0 -12
  581. package/dist/src/render-drivers/utils.js +0 -69
  582. package/dist/src/render-drivers/utils.js.map +0 -1
  583. package/scripts/please-use-pnpm.js +0 -13
  584. package/src/core/platform.ts +0 -64
  585. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  586. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  587. package/src/core/text-rendering/TrFontManager.ts +0 -183
  588. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  589. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  590. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  591. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  592. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  593. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  594. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  595. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  596. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  597. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  598. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  599. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  600. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  601. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  602. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  603. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  604. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  605. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  606. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  607. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  608. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  609. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  610. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  611. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -16,7 +16,7 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { assertTruthy, getNewId, isProductionEnvironment, mergeColorAlphaPremultiplied, } from '../utils.js';
19
+ import { assertTruthy, getNewId, mergeColorAlphaPremultiplied, } from '../utils.js';
20
20
  import {} from './textures/Texture.js';
21
21
  import { EventEmitter } from '../common/EventEmitter.js';
22
22
  import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
@@ -43,31 +43,23 @@ export var UpdateType;
43
43
  */
44
44
  UpdateType[UpdateType["Children"] = 1] = "Children";
45
45
  /**
46
- * Scale/Rotate transform update
47
- *
48
- * @remarks
49
- * CoreNode Properties Updated:
50
- * - `scaleRotateTransform`
51
- */
52
- UpdateType[UpdateType["ScaleRotate"] = 2] = "ScaleRotate";
53
- /**
54
- * Translate transform update (x/y/width/height/pivot/mount)
46
+ * localTransform
55
47
  *
56
48
  * @remarks
57
49
  * CoreNode Properties Updated:
58
50
  * - `localTransform`
59
51
  */
60
- UpdateType[UpdateType["Local"] = 4] = "Local";
52
+ UpdateType[UpdateType["Local"] = 2] = "Local";
61
53
  /**
62
- * Global Transform update
54
+ * globalTransform
63
55
  *
64
- * @remarks
56
+ * * @remarks
65
57
  * CoreNode Properties Updated:
66
58
  * - `globalTransform`
59
+ * - `renderBounds`
67
60
  * - `renderCoords`
68
- * - `renderBound`
69
61
  */
70
- UpdateType[UpdateType["Global"] = 8] = "Global";
62
+ UpdateType[UpdateType["Global"] = 4] = "Global";
71
63
  /**
72
64
  * Clipping rect update
73
65
  *
@@ -75,7 +67,7 @@ export var UpdateType;
75
67
  * CoreNode Properties Updated:
76
68
  * - `clippingRect`
77
69
  */
78
- UpdateType[UpdateType["Clipping"] = 16] = "Clipping";
70
+ UpdateType[UpdateType["Clipping"] = 8] = "Clipping";
79
71
  /**
80
72
  * Calculated ZIndex update
81
73
  *
@@ -83,7 +75,7 @@ export var UpdateType;
83
75
  * CoreNode Properties Updated:
84
76
  * - `calcZIndex`
85
77
  */
86
- UpdateType[UpdateType["CalculatedZIndex"] = 32] = "CalculatedZIndex";
78
+ UpdateType[UpdateType["CalculatedZIndex"] = 16] = "CalculatedZIndex";
87
79
  /**
88
80
  * Z-Index Sorted Children update
89
81
  *
@@ -91,7 +83,7 @@ export var UpdateType;
91
83
  * CoreNode Properties Updated:
92
84
  * - `children` (sorts children by their `calcZIndex`)
93
85
  */
94
- UpdateType[UpdateType["ZIndexSortedChildren"] = 64] = "ZIndexSortedChildren";
86
+ UpdateType[UpdateType["ZIndexSortedChildren"] = 32] = "ZIndexSortedChildren";
95
87
  /**
96
88
  * Premultiplied Colors update
97
89
  *
@@ -102,7 +94,7 @@ export var UpdateType;
102
94
  * - `premultipliedColorBl`
103
95
  * - `premultipliedColorBr`
104
96
  */
105
- UpdateType[UpdateType["PremultipliedColors"] = 128] = "PremultipliedColors";
97
+ UpdateType[UpdateType["PremultipliedColors"] = 64] = "PremultipliedColors";
106
98
  /**
107
99
  * World Alpha update
108
100
  *
@@ -110,7 +102,7 @@ export var UpdateType;
110
102
  * CoreNode Properties Updated:
111
103
  * - `worldAlpha` = `parent.worldAlpha` * `alpha`
112
104
  */
113
- UpdateType[UpdateType["WorldAlpha"] = 256] = "WorldAlpha";
105
+ UpdateType[UpdateType["WorldAlpha"] = 128] = "WorldAlpha";
114
106
  /**
115
107
  * Render State update
116
108
  *
@@ -118,7 +110,7 @@ export var UpdateType;
118
110
  * CoreNode Properties Updated:
119
111
  * - `renderState`
120
112
  */
121
- UpdateType[UpdateType["RenderState"] = 512] = "RenderState";
113
+ UpdateType[UpdateType["RenderState"] = 256] = "RenderState";
122
114
  /**
123
115
  * Is Renderable update
124
116
  *
@@ -126,19 +118,23 @@ export var UpdateType;
126
118
  * CoreNode Properties Updated:
127
119
  * - `isRenderable`
128
120
  */
129
- UpdateType[UpdateType["IsRenderable"] = 1024] = "IsRenderable";
121
+ UpdateType[UpdateType["IsRenderable"] = 512] = "IsRenderable";
130
122
  /**
131
123
  * Render Texture update
132
124
  */
133
- UpdateType[UpdateType["RenderTexture"] = 2048] = "RenderTexture";
125
+ UpdateType[UpdateType["RenderTexture"] = 1024] = "RenderTexture";
134
126
  /**
135
127
  * Track if parent has render texture
136
128
  */
137
- UpdateType[UpdateType["ParentRenderTexture"] = 4096] = "ParentRenderTexture";
129
+ UpdateType[UpdateType["ParentRenderTexture"] = 2048] = "ParentRenderTexture";
138
130
  /**
139
131
  * Render Bounds update
140
132
  */
141
- UpdateType[UpdateType["RenderBounds"] = 8192] = "RenderBounds";
133
+ UpdateType[UpdateType["RenderBounds"] = 4096] = "RenderBounds";
134
+ /**
135
+ * RecalcUniforms
136
+ */
137
+ UpdateType[UpdateType["RecalcUniforms"] = 8192] = "RecalcUniforms";
142
138
  /**
143
139
  * None
144
140
  */
@@ -147,10 +143,6 @@ export var UpdateType;
147
143
  * All
148
144
  */
149
145
  UpdateType[UpdateType["All"] = 14335] = "All";
150
- /**
151
- * RecalcUniforms
152
- */
153
- UpdateType[UpdateType["RecalcUniforms"] = 16384] = "RecalcUniforms";
154
146
  })(UpdateType || (UpdateType = {}));
155
147
  /**
156
148
  * A visual Node in the Renderer scene graph.
@@ -165,10 +157,11 @@ export class CoreNode extends EventEmitter {
165
157
  children = [];
166
158
  _id = getNewId();
167
159
  props;
160
+ hasShaderUpdater = false;
161
+ hasColorProps = false;
168
162
  updateType = UpdateType.All;
169
163
  childUpdateType = UpdateType.None;
170
164
  globalTransform;
171
- scaleRotateTransform;
172
165
  localTransform;
173
166
  sceneGlobalTransform;
174
167
  renderCoords;
@@ -183,6 +176,8 @@ export class CoreNode extends EventEmitter {
183
176
  height: 0,
184
177
  valid: false,
185
178
  };
179
+ textureCoords;
180
+ updateTextureCoords = false;
186
181
  isRenderable = false;
187
182
  renderState = CoreNodeRenderState.Init;
188
183
  worldAlpha = 1;
@@ -194,52 +189,79 @@ export class CoreNode extends EventEmitter {
194
189
  hasRTTupdates = false;
195
190
  parentHasRenderTexture = false;
196
191
  rttParent = null;
192
+ /**
193
+ * only used when rtt = true
194
+ */
195
+ framebufferDimensions = null;
196
+ destroyed = false;
197
197
  constructor(stage, props) {
198
198
  super();
199
199
  this.stage = stage;
200
- this.props = Object.assign({}, props, {
201
- parent: null,
202
- texture: null,
203
- shader: null,
204
- src: null,
205
- rtt: false,
206
- });
207
- // Assign props to instance
200
+ const p = (this.props = {});
201
+ // Fast-path assign only known keys
202
+ p.x = props.x;
203
+ p.y = props.y;
204
+ p.width = props.width;
205
+ p.height = props.height;
206
+ p.alpha = props.alpha;
207
+ p.autosize = props.autosize;
208
+ p.clipping = props.clipping;
209
+ p.color = props.color;
210
+ p.colorTop = props.colorTop;
211
+ p.colorBottom = props.colorBottom;
212
+ p.colorLeft = props.colorLeft;
213
+ p.colorRight = props.colorRight;
214
+ p.colorTl = props.colorTl;
215
+ p.colorTr = props.colorTr;
216
+ p.colorBl = props.colorBl;
217
+ p.colorBr = props.colorBr;
218
+ p.scaleX = props.scaleX;
219
+ p.scaleY = props.scaleY;
220
+ p.rotation = props.rotation;
221
+ p.pivotX = props.pivotX;
222
+ p.pivotY = props.pivotY;
223
+ p.mountX = props.mountX;
224
+ p.mountY = props.mountY;
225
+ p.mount = props.mount;
226
+ p.pivot = props.pivot;
227
+ p.strictBounds = props.strictBounds;
228
+ p.zIndex = props.zIndex;
229
+ p.zIndexLocked = props.zIndexLocked;
230
+ p.textureOptions = props.textureOptions;
231
+ p.data = props.data;
232
+ p.imageType = props.imageType;
233
+ p.srcX = props.srcX;
234
+ p.srcY = props.srcY;
235
+ p.srcWidth = props.srcWidth;
236
+ p.srcHeight = props.srcHeight;
237
+ p.parent = null;
238
+ p.texture = null;
239
+ p.shader = null;
240
+ p.src = null;
241
+ p.rtt = false;
242
+ p.boundsMargin = null;
243
+ // Assign props to instances
208
244
  this.parent = props.parent;
209
245
  this.texture = props.texture;
210
246
  this.shader = props.shader;
211
247
  this.src = props.src;
212
248
  this.rtt = props.rtt;
213
- if (props.boundsMargin) {
214
- this.boundsMargin = Array.isArray(props.boundsMargin)
215
- ? props.boundsMargin
216
- : [
217
- props.boundsMargin,
218
- props.boundsMargin,
219
- props.boundsMargin,
220
- props.boundsMargin,
221
- ];
222
- }
223
- this.setUpdateType(UpdateType.ScaleRotate |
224
- UpdateType.Local |
225
- UpdateType.RenderBounds |
226
- UpdateType.RenderState);
227
- if (isProductionEnvironment() === false && props.preventCleanup === true) {
228
- console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
229
- }
249
+ this.boundsMargin = props.boundsMargin;
250
+ this.interactive = props.interactive;
251
+ this.setUpdateType(UpdateType.Local | UpdateType.RenderBounds | UpdateType.RenderState);
230
252
  // if the default texture isn't loaded yet, wait for it to load
231
253
  // this only happens when the node is created before the stage is ready
232
- if (this.stage.defaultTexture &&
233
- this.stage.defaultTexture.state !== 'loaded') {
234
- this.stage.defaultTexture.once('loaded', () => {
235
- this.setUpdateType(UpdateType.IsRenderable);
236
- });
254
+ const dt = this.stage.defaultTexture;
255
+ if (dt !== null && dt.state !== 'loaded') {
256
+ dt.once('loaded', () => this.setUpdateType(UpdateType.IsRenderable));
237
257
  }
238
258
  }
239
259
  //#region Textures
240
260
  loadTexture() {
241
261
  const { texture } = this.props;
242
- assertTruthy(texture);
262
+ if (!texture) {
263
+ return;
264
+ }
243
265
  // If texture is already loaded / failed, trigger loaded event manually
244
266
  // so that users get a consistent event experience.
245
267
  // We do this in a microtask to allow listeners to be attached in the same
@@ -263,11 +285,9 @@ export class CoreNode extends EventEmitter {
263
285
  return;
264
286
  }
265
287
  if (texture.state === 'loaded') {
266
- assertTruthy(texture.dimensions);
267
288
  this.onTextureLoaded(texture, texture.dimensions);
268
289
  }
269
290
  else if (texture.state === 'failed') {
270
- assertTruthy(texture.error);
271
291
  this.onTextureFailed(texture, texture.error);
272
292
  }
273
293
  else if (texture.state === 'freed') {
@@ -276,12 +296,14 @@ export class CoreNode extends EventEmitter {
276
296
  });
277
297
  }
278
298
  unloadTexture() {
279
- if (this.texture !== null) {
280
- this.texture.off('loaded', this.onTextureLoaded);
281
- this.texture.off('failed', this.onTextureFailed);
282
- this.texture.off('freed', this.onTextureFreed);
283
- this.texture.setRenderableOwner(this, false);
299
+ if (this.texture === null) {
300
+ return;
284
301
  }
302
+ const texture = this.texture;
303
+ texture.off('loaded', this.onTextureLoaded);
304
+ texture.off('failed', this.onTextureFailed);
305
+ texture.off('freed', this.onTextureFreed);
306
+ texture.setRenderableOwner(this, false);
285
307
  }
286
308
  autosizeNode(dimensions) {
287
309
  if (this.autosize) {
@@ -312,6 +334,9 @@ export class CoreNode extends EventEmitter {
312
334
  }
313
335
  };
314
336
  onTextureFailed = (_, error) => {
337
+ // immediately set isRenderable to false, so that we handle the error
338
+ // without waiting for the next frame loop
339
+ this.isRenderable = false;
315
340
  this.setUpdateType(UpdateType.IsRenderable);
316
341
  // If parent has a render texture, flag that we need to update
317
342
  if (this.parentHasRenderTexture) {
@@ -323,6 +348,9 @@ export class CoreNode extends EventEmitter {
323
348
  });
324
349
  };
325
350
  onTextureFreed = () => {
351
+ // immediately set isRenderable to false, so that we handle the error
352
+ // without waiting for the next frame loop
353
+ this.isRenderable = false;
326
354
  this.setUpdateType(UpdateType.IsRenderable);
327
355
  // If parent has a render texture, flag that we need to update
328
356
  if (this.parentHasRenderTexture) {
@@ -346,42 +374,32 @@ export class CoreNode extends EventEmitter {
346
374
  const parent = this.props.parent;
347
375
  if (!parent)
348
376
  return;
349
- if ((parent.updateType & UpdateType.Children) === 0) {
350
- // Inform the parent if it doesn’t already have a child update
351
- parent.setUpdateType(UpdateType.Children);
352
- }
377
+ parent.setUpdateType(UpdateType.Children);
353
378
  }
354
379
  sortChildren() {
355
380
  this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
356
381
  }
357
- updateScaleRotateTransform() {
358
- const { rotation, scaleX, scaleY } = this.props;
359
- // optimize simple translation cases
360
- if (rotation === 0 && scaleX === 1 && scaleY === 1) {
361
- this.scaleRotateTransform = undefined;
362
- return;
363
- }
364
- this.scaleRotateTransform = Matrix3d.rotate(rotation, this.scaleRotateTransform).scale(scaleX, scaleY);
365
- }
366
382
  updateLocalTransform() {
367
- const { x, y, width, height } = this.props;
368
- const mountTranslateX = this.props.mountX * width;
369
- const mountTranslateY = this.props.mountY * height;
370
- if (this.scaleRotateTransform) {
371
- const pivotTranslateX = this.props.pivotX * width;
372
- const pivotTranslateY = this.props.pivotY * height;
383
+ const p = this.props;
384
+ const { x, y, width, height } = p;
385
+ const mountTranslateX = p.mountX * width;
386
+ const mountTranslateY = p.mountY * height;
387
+ if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
388
+ const pivotTranslateX = p.pivotX * width;
389
+ const pivotTranslateY = p.pivotY * height;
373
390
  this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
374
- .multiply(this.scaleRotateTransform)
391
+ .rotate(p.rotation)
392
+ .scale(p.scaleX, p.scaleY)
375
393
  .translate(-pivotTranslateX, -pivotTranslateY);
376
394
  }
377
395
  else {
378
396
  this.localTransform = Matrix3d.translate(x - mountTranslateX, y - mountTranslateY, this.localTransform);
379
397
  }
380
398
  // Handle 'contain' resize mode
381
- const texture = this.props.texture;
399
+ const texture = p.texture;
382
400
  if (texture &&
383
401
  texture.dimensions &&
384
- this.props.textureOptions?.resizeMode?.type === 'contain') {
402
+ p.textureOptions.resizeMode?.type === 'contain') {
385
403
  let resizeModeScaleX = 1;
386
404
  let resizeModeScaleY = 1;
387
405
  let extraX = 0;
@@ -412,29 +430,33 @@ export class CoreNode extends EventEmitter {
412
430
  .translate(extraX, extraY)
413
431
  .scale(resizeModeScaleX, resizeModeScaleY);
414
432
  }
415
- this.setUpdateType(UpdateType.Global);
416
433
  }
417
434
  /**
418
435
  * @todo: test for correct calculation flag
419
436
  * @param delta
420
437
  */
421
438
  update(delta, parentClippingRect) {
422
- if (this.updateType & UpdateType.ScaleRotate) {
423
- this.updateScaleRotateTransform();
424
- this.setUpdateType(UpdateType.Local);
439
+ if (this.updateType === UpdateType.None) {
440
+ return;
425
441
  }
426
- if (this.updateType & UpdateType.Local) {
442
+ const props = this.props;
443
+ const parent = props.parent;
444
+ const parentHasRenderTexture = this.parentHasRenderTexture;
445
+ const hasParent = props.parent !== null;
446
+ let renderState = null;
447
+ let updateType = this.updateType;
448
+ let childUpdateType = this.childUpdateType;
449
+ let updateParent = false;
450
+ if (updateType & UpdateType.Local) {
427
451
  this.updateLocalTransform();
428
- this.setUpdateType(UpdateType.Global);
452
+ updateType |= UpdateType.Global;
453
+ updateParent = hasParent;
429
454
  }
430
- const parent = this.props.parent;
431
- let renderState = null;
432
455
  // Handle specific RTT updates at this node level
433
- if (this.updateType & UpdateType.RenderTexture && this.rtt) {
456
+ if (updateType & UpdateType.RenderTexture && this.rtt === true) {
434
457
  this.hasRTTupdates = true;
435
458
  }
436
- if (this.updateType & UpdateType.Global) {
437
- assertTruthy(this.localTransform);
459
+ if (updateType & UpdateType.Global) {
438
460
  if (this.parentHasRenderTexture === true && parent?.rtt === true) {
439
461
  // we are at the start of the RTT chain, so we need to reset the globalTransform
440
462
  // for correct RTT rendering
@@ -458,24 +480,28 @@ export class CoreNode extends EventEmitter {
458
480
  }
459
481
  this.calculateRenderCoords();
460
482
  this.updateBoundingRect();
461
- this.setUpdateType(UpdateType.RenderState |
462
- UpdateType.Children |
463
- UpdateType.RecalcUniforms);
464
- this.childUpdateType |= UpdateType.Global;
483
+ updateType |=
484
+ UpdateType.RenderState |
485
+ UpdateType.Children |
486
+ UpdateType.RecalcUniforms;
487
+ updateParent = hasParent;
488
+ childUpdateType |= UpdateType.Global;
465
489
  if (this.clipping === true) {
466
- this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds);
467
- this.childUpdateType |= UpdateType.RenderBounds;
490
+ updateType |= UpdateType.Clipping | UpdateType.RenderBounds;
491
+ updateParent = hasParent;
492
+ childUpdateType |= UpdateType.RenderBounds;
468
493
  }
469
494
  }
470
- if (this.updateType & UpdateType.RenderBounds) {
495
+ if (updateType & UpdateType.RenderBounds) {
471
496
  this.createRenderBounds();
472
- this.setUpdateType(UpdateType.RenderState);
473
- this.setUpdateType(UpdateType.Children);
474
- this.childUpdateType |= UpdateType.RenderBounds;
497
+ updateType |= UpdateType.RenderState | UpdateType.Children;
498
+ updateParent = hasParent;
499
+ childUpdateType |= UpdateType.RenderBounds;
475
500
  }
476
- if (this.updateType & UpdateType.RenderState) {
501
+ if (updateType & UpdateType.RenderState) {
477
502
  renderState = this.checkRenderBounds();
478
- this.setUpdateType(UpdateType.IsRenderable);
503
+ updateType |= UpdateType.IsRenderable;
504
+ updateParent = hasParent;
479
505
  // if we're not going out of bounds, update the render state
480
506
  // this is done so the update loop can finish before we mark a node
481
507
  // as out of bounds
@@ -483,64 +509,69 @@ export class CoreNode extends EventEmitter {
483
509
  this.updateRenderState(renderState);
484
510
  }
485
511
  }
486
- if (this.updateType & UpdateType.WorldAlpha) {
487
- if (parent) {
488
- this.worldAlpha = parent.worldAlpha * this.props.alpha;
489
- }
490
- else {
491
- this.worldAlpha = this.props.alpha;
492
- }
493
- this.setUpdateType(UpdateType.Children |
512
+ if (updateType & UpdateType.WorldAlpha) {
513
+ this.worldAlpha = ((parent && parent.worldAlpha) || 1) * props.alpha;
514
+ updateType |=
494
515
  UpdateType.PremultipliedColors |
495
- UpdateType.IsRenderable);
496
- this.childUpdateType |= UpdateType.WorldAlpha;
516
+ UpdateType.Children |
517
+ UpdateType.IsRenderable;
518
+ updateParent = hasParent;
519
+ childUpdateType |= UpdateType.WorldAlpha;
497
520
  }
498
- if (this.updateType & UpdateType.IsRenderable) {
521
+ if (updateType & UpdateType.IsRenderable) {
499
522
  this.updateIsRenderable();
500
523
  }
501
- if (this.updateType & UpdateType.Clipping) {
524
+ if (updateType & UpdateType.Clipping) {
502
525
  this.calculateClippingRect(parentClippingRect);
503
- this.setUpdateType(UpdateType.Children);
504
- this.childUpdateType |= UpdateType.Clipping;
505
- this.childUpdateType |= UpdateType.RenderBounds;
506
- }
507
- if (this.updateType & UpdateType.PremultipliedColors) {
508
- this.premultipliedColorTl = mergeColorAlphaPremultiplied(this.props.colorTl, this.worldAlpha, true);
509
- // If all the colors are the same just sent them all to the same value
510
- if (this.props.colorTl === this.props.colorTr &&
511
- this.props.colorBl === this.props.colorBr &&
512
- this.props.colorTl === this.props.colorBl) {
526
+ updateType |= UpdateType.Children;
527
+ updateParent = hasParent;
528
+ childUpdateType |= UpdateType.Clipping | UpdateType.RenderBounds;
529
+ }
530
+ if (updateType & UpdateType.PremultipliedColors) {
531
+ const alpha = this.worldAlpha;
532
+ const tl = props.colorTl;
533
+ const tr = props.colorTr;
534
+ const bl = props.colorBl;
535
+ const br = props.colorBr;
536
+ // Fast equality check (covers all 4 corners)
537
+ const same = tl === tr && tl === bl && tl === br;
538
+ const merged = mergeColorAlphaPremultiplied(tl, alpha, true);
539
+ this.premultipliedColorTl = merged;
540
+ if (same) {
513
541
  this.premultipliedColorTr =
514
542
  this.premultipliedColorBl =
515
543
  this.premultipliedColorBr =
516
- this.premultipliedColorTl;
544
+ merged;
517
545
  }
518
546
  else {
519
- this.premultipliedColorTr = mergeColorAlphaPremultiplied(this.props.colorTr, this.worldAlpha, true);
520
- this.premultipliedColorBl = mergeColorAlphaPremultiplied(this.props.colorBl, this.worldAlpha, true);
521
- this.premultipliedColorBr = mergeColorAlphaPremultiplied(this.props.colorBr, this.worldAlpha, true);
547
+ this.premultipliedColorTr = mergeColorAlphaPremultiplied(tr, alpha, true);
548
+ this.premultipliedColorBl = mergeColorAlphaPremultiplied(bl, alpha, true);
549
+ this.premultipliedColorBr = mergeColorAlphaPremultiplied(br, alpha, true);
522
550
  }
523
551
  }
552
+ if (updateParent === true) {
553
+ parent.setUpdateType(UpdateType.Children);
554
+ }
524
555
  // No need to update zIndex if there is no parent
525
- if (parent !== null && this.updateType & UpdateType.CalculatedZIndex) {
556
+ if (updateType & UpdateType.CalculatedZIndex && parent !== null) {
526
557
  this.calculateZIndex();
527
558
  // Tell parent to re-sort children
528
559
  parent.setUpdateType(UpdateType.ZIndexSortedChildren);
529
560
  }
530
- if (this.props.strictBounds === true &&
561
+ if (props.strictBounds === true &&
531
562
  this.renderState === CoreNodeRenderState.OutOfBounds) {
532
- this.updateType &= ~UpdateType.RenderBounds; // remove render bounds update
563
+ updateType &= ~UpdateType.RenderBounds; // remove render bounds update
533
564
  return;
534
565
  }
535
- if (this.shader?.update !== undefined &&
536
- (this.updateType & UpdateType.Local ||
537
- this.updateType & UpdateType.RecalcUniforms)) {
566
+ if (updateType & UpdateType.RecalcUniforms &&
567
+ this.hasShaderUpdater === true) {
568
+ //this exists because the boolean hasShaderUpdater === true
538
569
  this.shader.update();
539
570
  }
540
- if (this.updateType & UpdateType.Children && this.children.length > 0) {
571
+ if (updateType & UpdateType.Children && this.children.length > 0) {
541
572
  for (let i = 0, length = this.children.length; i < length; i++) {
542
573
  const child = this.children[i];
543
- child.setUpdateType(this.childUpdateType);
574
+ child.setUpdateType(childUpdateType);
544
575
  if (child.updateType === 0) {
545
576
  continue;
546
577
  }
@@ -558,17 +589,21 @@ export class CoreNode extends EventEmitter {
558
589
  }
559
590
  }
560
591
  // If the node has an RTT parent and requires a texture re-render, inform the RTT parent
561
- // if (this.parentHasRenderTexture && this.updateType & UpdateType.RenderTexture) {
592
+ // if (this.parentHasRenderTexture && updateType & UpdateType.RenderTexture) {
562
593
  // @TODO have a more scoped down updateType for RTT updates
563
- if (this.parentHasRenderTexture && this.updateType > 0) {
594
+ if (parentHasRenderTexture === true) {
564
595
  this.notifyParentRTTOfUpdate();
565
596
  }
566
597
  // Sorting children MUST happen after children have been updated so
567
598
  // that they have the oppotunity to update their calculated zIndex.
568
- if (this.updateType & UpdateType.ZIndexSortedChildren) {
599
+ if (updateType & UpdateType.ZIndexSortedChildren) {
569
600
  // reorder z-index
570
601
  this.sortChildren();
571
602
  }
603
+ if (this.updateTextureCoords === true) {
604
+ this.updateTextureCoords = false;
605
+ this.textureCoords = this.stage.renderer.getTextureCoords(this);
606
+ }
572
607
  // If we're out of bounds, apply the render state now
573
608
  // this is done so nodes can finish their entire update loop before
574
609
  // being marked as out of bounds
@@ -580,7 +615,6 @@ export class CoreNode extends EventEmitter {
580
615
  // notify children that we are going out of bounds
581
616
  // we have to do this now before we stop processing the render tree
582
617
  this.notifyChildrenRTTOfUpdate(renderState);
583
- // this.childUpdateType |= UpdateType.RenderState;
584
618
  }
585
619
  }
586
620
  // reset update type
@@ -594,13 +628,6 @@ export class CoreNode extends EventEmitter {
594
628
  }
595
629
  return rttNode;
596
630
  }
597
- getRTTParentRenderState() {
598
- const rttNode = this.rttParent || this.findParentRTTNode();
599
- if (!rttNode) {
600
- return null;
601
- }
602
- return rttNode.renderState;
603
- }
604
631
  notifyChildrenRTTOfUpdate(renderState) {
605
632
  for (const child of this.children) {
606
633
  // force child to update render state
@@ -626,9 +653,6 @@ export class CoreNode extends EventEmitter {
626
653
  }
627
654
  }
628
655
  checkRenderBounds() {
629
- assertTruthy(this.renderBound);
630
- assertTruthy(this.strictBound);
631
- assertTruthy(this.preloadBound);
632
656
  if (boundInsideBound(this.renderBound, this.strictBound)) {
633
657
  return CoreNodeRenderState.InViewport;
634
658
  }
@@ -647,22 +671,19 @@ export class CoreNode extends EventEmitter {
647
671
  return CoreNodeRenderState.OutOfBounds;
648
672
  }
649
673
  updateBoundingRect() {
650
- const transform = this.sceneGlobalTransform || this.globalTransform;
651
- const renderCoords = this.sceneRenderCoords || this.renderCoords;
652
- assertTruthy(transform);
653
- assertTruthy(renderCoords);
654
- const { tb, tc } = transform;
655
- const { x1, y1, x3, y3 } = renderCoords;
656
- if (tb === 0 || tc === 0) {
657
- this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
674
+ const transform = (this.sceneGlobalTransform ||
675
+ this.globalTransform);
676
+ const renderCoords = (this.sceneRenderCoords ||
677
+ this.renderCoords);
678
+ if (transform.tb === 0 || transform.tc === 0) {
679
+ this.renderBound = createBound(renderCoords.x1, renderCoords.y1, renderCoords.x3, renderCoords.y3, this.renderBound);
658
680
  }
659
681
  else {
660
- const { x2, x4, y2, y4 } = renderCoords;
682
+ const { x1, y1, x2, y2, x3, y3, x4, y4 } = renderCoords;
661
683
  this.renderBound = createBound(Math.min(x1, x2, x3, x4), Math.min(y1, y2, y3, y4), Math.max(x1, x2, x3, x4), Math.max(y1, y2, y3, y4), this.renderBound);
662
684
  }
663
685
  }
664
686
  createRenderBounds() {
665
- assertTruthy(this.stage);
666
687
  if (this.parent !== null && this.parent.strictBound !== undefined) {
667
688
  // we have a parent with a valid bound, copy it
668
689
  const parentBound = this.parent.strictBound;
@@ -717,7 +738,8 @@ export class CoreNode extends EventEmitter {
717
738
  let newIsRenderable = false;
718
739
  let needsTextureOwnership = false;
719
740
  // If the node is out of bounds or has an alpha of 0, it is not renderable
720
- if (this.checkBasicRenderability() === false) {
741
+ if (this.worldAlpha === 0 ||
742
+ this.renderState <= CoreNodeRenderState.OutOfBounds) {
721
743
  this.updateTextureOwnership(false);
722
744
  this.setRenderable(false);
723
745
  return;
@@ -727,8 +749,11 @@ export class CoreNode extends EventEmitter {
727
749
  // we're only renderable if the texture state is loaded
728
750
  newIsRenderable = this.texture.state === 'loaded';
729
751
  }
730
- else if ((this.hasShader() || this.hasColorProperties() === true) &&
731
- this.hasDimensions() === true) {
752
+ else if (
753
+ // check shader
754
+ (this.props.shader !== null || this.hasColorProps === true) &&
755
+ // check dimensions
756
+ (this.props.width !== 0 && this.props.height !== 0) === true) {
732
757
  // This mean we have dimensions and a color set, so we can render a ColorTexture
733
758
  if (this.stage.defaultTexture &&
734
759
  this.stage.defaultTexture.state === 'loaded') {
@@ -738,23 +763,17 @@ export class CoreNode extends EventEmitter {
738
763
  this.updateTextureOwnership(needsTextureOwnership);
739
764
  this.setRenderable(newIsRenderable);
740
765
  }
741
- /**
742
- * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
743
- */
744
- checkBasicRenderability() {
745
- if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
746
- return false;
747
- }
748
- else {
749
- return true;
750
- }
751
- }
752
766
  /**
753
767
  * Sets the renderable state and triggers changes if necessary.
754
768
  * @param isRenderable - The new renderable state
755
769
  */
756
770
  setRenderable(isRenderable) {
757
771
  this.isRenderable = isRenderable;
772
+ if (isRenderable === true &&
773
+ this.stage.calculateTextureCoord === true &&
774
+ this.textureCoords === undefined) {
775
+ this.updateTextureCoords = true;
776
+ }
758
777
  }
759
778
  /**
760
779
  * Changes the renderable state of the node.
@@ -762,38 +781,10 @@ export class CoreNode extends EventEmitter {
762
781
  updateTextureOwnership(isRenderable) {
763
782
  this.texture?.setRenderableOwner(this, isRenderable);
764
783
  }
765
- /**
766
- * Checks if the node is out of the viewport bounds.
767
- */
768
- isOutOfBounds() {
769
- return this.renderState <= CoreNodeRenderState.OutOfBounds;
770
- }
771
- /**
772
- * Checks if the node has dimensions (width/height)
773
- */
774
- hasDimensions() {
775
- return this.props.width !== 0 && this.props.height !== 0;
776
- }
777
- /**
778
- * Checks if the node has any color properties set.
779
- */
780
- hasColorProperties() {
781
- return (this.props.color !== 0 ||
782
- this.props.colorTop !== 0 ||
783
- this.props.colorBottom !== 0 ||
784
- this.props.colorLeft !== 0 ||
785
- this.props.colorRight !== 0 ||
786
- this.props.colorTl !== 0 ||
787
- this.props.colorTr !== 0 ||
788
- this.props.colorBl !== 0 ||
789
- this.props.colorBr !== 0);
790
- }
791
- hasShader() {
792
- return this.props.shader !== null;
793
- }
794
784
  calculateRenderCoords() {
795
785
  const { width, height } = this;
796
- const { tx, ty, ta, tb, tc, td } = this.globalTransform;
786
+ const g = this.globalTransform;
787
+ const tx = g.tx, ty = g.ty, ta = g.ta, tb = g.tb, tc = g.tc, td = g.td;
797
788
  if (tb === 0 && tc === 0) {
798
789
  const minX = tx;
799
790
  const maxX = tx + width * ta;
@@ -860,7 +851,6 @@ export class CoreNode extends EventEmitter {
860
851
  * Finally, the node's parentClippingRect and clippingRect properties are updated.
861
852
  */
862
853
  calculateClippingRect(parentClippingRect) {
863
- assertTruthy(this.globalTransform);
864
854
  const { clippingRect, props, globalTransform: gt } = this;
865
855
  const { clipping } = props;
866
856
  const isRotated = gt.tb !== 0 || gt.tc !== 0;
@@ -898,68 +888,65 @@ export class CoreNode extends EventEmitter {
898
888
  * Destroy the node and cleanup all resources
899
889
  */
900
890
  destroy() {
891
+ if (this.destroyed === true) {
892
+ return;
893
+ }
894
+ this.removeAllListeners();
895
+ this.destroyed = true;
901
896
  this.unloadTexture();
902
- this.clippingRect.valid = false;
903
897
  this.isRenderable = false;
904
- this.renderCoords = undefined;
905
- this.renderBound = undefined;
906
- this.strictBound = undefined;
907
- this.preloadBound = undefined;
908
- this.globalTransform = undefined;
909
- this.scaleRotateTransform = undefined;
910
- this.localTransform = undefined;
911
- this.props.texture = null;
912
- this.props.shader = this.stage.defShaderNode;
898
+ // Kill children
913
899
  while (this.children.length > 0) {
914
- this.children[0]?.destroy();
900
+ this.children[0].destroy();
915
901
  }
916
- // This very action will also remove the node from the parent's children array
917
- this.parent = null;
918
- if (this.rtt) {
902
+ const parent = this.parent;
903
+ if (parent !== null) {
904
+ const index = parent.children.indexOf(this);
905
+ parent.children.splice(index, 1);
906
+ parent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
907
+ }
908
+ this.props.parent = null;
909
+ this.props.texture = null;
910
+ if (this.rtt === true) {
919
911
  this.stage.renderer.removeRTTNode(this);
920
912
  }
921
- this.removeAllListeners();
922
913
  }
923
914
  renderQuads(renderer) {
924
- // Prevent quad rendering if parent has a render texture
925
- // and renderer is not currently rendering to a texture
926
- if (this.parentHasRenderTexture) {
927
- if (!renderer.renderToTextureActive) {
928
- return;
929
- }
930
- // Prevent quad rendering if parent render texture is not the active render texture
931
- if (this.parentRenderTexture !== renderer.activeRttNode) {
915
+ if (this.parentHasRenderTexture === true) {
916
+ const rtt = renderer.renderToTextureActive;
917
+ if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
932
918
  return;
933
- }
934
919
  }
935
- assertTruthy(this.globalTransform);
936
- assertTruthy(this.renderCoords);
937
- // add to list of renderables to be sorted before rendering
920
+ const p = this.props;
921
+ const t = this.globalTransform;
922
+ const coords = this.renderCoords;
923
+ const texture = p.texture || this.stage.defaultTexture;
938
924
  renderer.addQuad({
939
- width: this.props.width,
940
- height: this.props.height,
925
+ width: p.width,
926
+ height: p.height,
941
927
  colorTl: this.premultipliedColorTl,
942
928
  colorTr: this.premultipliedColorTr,
943
929
  colorBl: this.premultipliedColorBl,
944
930
  colorBr: this.premultipliedColorBr,
945
- // if we do not have a texture, use the default texture
946
- // this assumes any renderable node is either a distinct texture or a ColorTexture
947
- texture: this.texture || this.stage.defaultTexture,
948
- textureOptions: this.textureOptions,
949
- zIndex: this.zIndex,
950
- shader: this.props.shader,
931
+ texture,
932
+ textureOptions: p.textureOptions,
933
+ textureCoords: this.textureCoords,
934
+ shader: p.shader,
951
935
  alpha: this.worldAlpha,
952
936
  clippingRect: this.clippingRect,
953
- tx: this.globalTransform.tx,
954
- ty: this.globalTransform.ty,
955
- ta: this.globalTransform.ta,
956
- tb: this.globalTransform.tb,
957
- tc: this.globalTransform.tc,
958
- td: this.globalTransform.td,
959
- renderCoords: this.renderCoords,
960
- rtt: this.rtt,
937
+ tx: t.tx,
938
+ ty: t.ty,
939
+ ta: t.ta,
940
+ tb: t.tb,
941
+ tc: t.tc,
942
+ td: t.td,
943
+ renderCoords: coords,
944
+ rtt: p.rtt,
945
+ zIndex: this.calcZIndex,
961
946
  parentHasRenderTexture: this.parentHasRenderTexture,
962
- framebufferDimensions: this.framebufferDimensions,
947
+ framebufferDimensions: this.parentHasRenderTexture
948
+ ? this.parentFramebufferDimensions
949
+ : null,
963
950
  });
964
951
  }
965
952
  //#region Properties
@@ -1005,13 +992,12 @@ export class CoreNode extends EventEmitter {
1005
992
  }
1006
993
  set width(value) {
1007
994
  if (this.props.width !== value) {
995
+ this.textureCoords = undefined;
1008
996
  this.props.width = value;
1009
997
  this.setUpdateType(UpdateType.Local);
1010
- if (this.props.rtt) {
1011
- this.texture = this.stage.txManager.createTexture('RenderTexture', {
1012
- width: this.width,
1013
- height: this.height,
1014
- });
998
+ if (this.props.rtt === true) {
999
+ this.framebufferDimensions.width = value;
1000
+ this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
1015
1001
  this.setUpdateType(UpdateType.RenderTexture);
1016
1002
  }
1017
1003
  }
@@ -1021,13 +1007,12 @@ export class CoreNode extends EventEmitter {
1021
1007
  }
1022
1008
  set height(value) {
1023
1009
  if (this.props.height !== value) {
1010
+ this.textureCoords = undefined;
1024
1011
  this.props.height = value;
1025
1012
  this.setUpdateType(UpdateType.Local);
1026
- if (this.props.rtt) {
1027
- this.texture = this.stage.txManager.createTexture('RenderTexture', {
1028
- width: this.width,
1029
- height: this.height,
1030
- });
1013
+ if (this.props.rtt === true) {
1014
+ this.framebufferDimensions.height = value;
1015
+ this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
1031
1016
  this.setUpdateType(UpdateType.RenderTexture);
1032
1017
  }
1033
1018
  }
@@ -1049,7 +1034,7 @@ export class CoreNode extends EventEmitter {
1049
1034
  set scaleX(value) {
1050
1035
  if (this.props.scaleX !== value) {
1051
1036
  this.props.scaleX = value;
1052
- this.setUpdateType(UpdateType.ScaleRotate);
1037
+ this.setUpdateType(UpdateType.Local);
1053
1038
  }
1054
1039
  }
1055
1040
  get scaleY() {
@@ -1058,7 +1043,7 @@ export class CoreNode extends EventEmitter {
1058
1043
  set scaleY(value) {
1059
1044
  if (this.props.scaleY !== value) {
1060
1045
  this.props.scaleY = value;
1061
- this.setUpdateType(UpdateType.ScaleRotate);
1046
+ this.setUpdateType(UpdateType.Local);
1062
1047
  }
1063
1048
  }
1064
1049
  get mount() {
@@ -1125,7 +1110,7 @@ export class CoreNode extends EventEmitter {
1125
1110
  set rotation(value) {
1126
1111
  if (this.props.rotation !== value) {
1127
1112
  this.props.rotation = value;
1128
- this.setUpdateType(UpdateType.ScaleRotate);
1113
+ this.setUpdateType(UpdateType.Local);
1129
1114
  }
1130
1115
  }
1131
1116
  get alpha() {
@@ -1146,9 +1131,18 @@ export class CoreNode extends EventEmitter {
1146
1131
  this.props.autosize = value;
1147
1132
  }
1148
1133
  get boundsMargin() {
1149
- return (this.props.boundsMargin ??
1150
- this.parent?.boundsMargin ??
1151
- this.stage.boundsMargin);
1134
+ const props = this.props;
1135
+ if (props.boundsMargin !== null) {
1136
+ return props.boundsMargin;
1137
+ }
1138
+ const parent = this.parent;
1139
+ if (parent !== null) {
1140
+ const margin = parent.boundsMargin;
1141
+ if (margin !== undefined) {
1142
+ return margin;
1143
+ }
1144
+ }
1145
+ return this.stage.boundsMargin;
1152
1146
  }
1153
1147
  set boundsMargin(value) {
1154
1148
  if (value === this.props.boundsMargin) {
@@ -1177,11 +1171,20 @@ export class CoreNode extends EventEmitter {
1177
1171
  return this.props.color;
1178
1172
  }
1179
1173
  set color(value) {
1180
- this.colorTop = value;
1181
- this.colorBottom = value;
1182
- this.colorLeft = value;
1183
- this.colorRight = value;
1184
- this.props.color = value;
1174
+ const p = this.props;
1175
+ if (p.color === value)
1176
+ return;
1177
+ p.color = value;
1178
+ const has = value > 0;
1179
+ this.hasColorProps = has;
1180
+ if (p.colorTop !== value)
1181
+ this.colorTop = value;
1182
+ if (p.colorBottom !== value)
1183
+ this.colorBottom = value;
1184
+ if (p.colorLeft !== value)
1185
+ this.colorLeft = value;
1186
+ if (p.colorRight !== value)
1187
+ this.colorRight = value;
1185
1188
  this.setUpdateType(UpdateType.PremultipliedColors);
1186
1189
  }
1187
1190
  get colorTop() {
@@ -1193,6 +1196,7 @@ export class CoreNode extends EventEmitter {
1193
1196
  this.colorTr = value;
1194
1197
  }
1195
1198
  this.props.colorTop = value;
1199
+ this.hasColorProps = value > 0;
1196
1200
  this.setUpdateType(UpdateType.PremultipliedColors);
1197
1201
  }
1198
1202
  get colorBottom() {
@@ -1204,6 +1208,7 @@ export class CoreNode extends EventEmitter {
1204
1208
  this.colorBr = value;
1205
1209
  }
1206
1210
  this.props.colorBottom = value;
1211
+ this.hasColorProps = value > 0;
1207
1212
  this.setUpdateType(UpdateType.PremultipliedColors);
1208
1213
  }
1209
1214
  get colorLeft() {
@@ -1215,6 +1220,7 @@ export class CoreNode extends EventEmitter {
1215
1220
  this.colorBl = value;
1216
1221
  }
1217
1222
  this.props.colorLeft = value;
1223
+ this.hasColorProps = value > 0;
1218
1224
  this.setUpdateType(UpdateType.PremultipliedColors);
1219
1225
  }
1220
1226
  get colorRight() {
@@ -1226,6 +1232,7 @@ export class CoreNode extends EventEmitter {
1226
1232
  this.colorBr = value;
1227
1233
  }
1228
1234
  this.props.colorRight = value;
1235
+ this.hasColorProps = value > 0;
1229
1236
  this.setUpdateType(UpdateType.PremultipliedColors);
1230
1237
  }
1231
1238
  get colorTl() {
@@ -1233,6 +1240,7 @@ export class CoreNode extends EventEmitter {
1233
1240
  }
1234
1241
  set colorTl(value) {
1235
1242
  this.props.colorTl = value;
1243
+ this.hasColorProps = value > 0;
1236
1244
  this.setUpdateType(UpdateType.PremultipliedColors);
1237
1245
  }
1238
1246
  get colorTr() {
@@ -1240,6 +1248,7 @@ export class CoreNode extends EventEmitter {
1240
1248
  }
1241
1249
  set colorTr(value) {
1242
1250
  this.props.colorTr = value;
1251
+ this.hasColorProps = value > 0;
1243
1252
  this.setUpdateType(UpdateType.PremultipliedColors);
1244
1253
  }
1245
1254
  get colorBl() {
@@ -1247,6 +1256,7 @@ export class CoreNode extends EventEmitter {
1247
1256
  }
1248
1257
  set colorBl(value) {
1249
1258
  this.props.colorBl = value;
1259
+ this.hasColorProps = value > 0;
1250
1260
  this.setUpdateType(UpdateType.PremultipliedColors);
1251
1261
  }
1252
1262
  get colorBr() {
@@ -1254,6 +1264,7 @@ export class CoreNode extends EventEmitter {
1254
1264
  }
1255
1265
  set colorBr(value) {
1256
1266
  this.props.colorBr = value;
1267
+ this.hasColorProps = value > 0;
1257
1268
  this.setUpdateType(UpdateType.PremultipliedColors);
1258
1269
  }
1259
1270
  // we're only interested in parent zIndex to test
@@ -1289,7 +1300,6 @@ export class CoreNode extends EventEmitter {
1289
1300
  this.props.parent = newParent;
1290
1301
  if (oldParent) {
1291
1302
  const index = oldParent.children.indexOf(this);
1292
- assertTruthy(index !== -1, "CoreNode.parent: Node not found in old parent's children!");
1293
1303
  oldParent.children.splice(index, 1);
1294
1304
  oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1295
1305
  }
@@ -1304,19 +1314,9 @@ export class CoreNode extends EventEmitter {
1304
1314
  this.applyRTTInheritance(newParent);
1305
1315
  }
1306
1316
  }
1307
- this.updateScaleRotateTransform();
1308
1317
  // fetch render bounds from parent
1309
1318
  this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1310
1319
  }
1311
- get preventCleanup() {
1312
- return this.props.textureOptions.preventCleanup || false;
1313
- }
1314
- set preventCleanup(value) {
1315
- if (isProductionEnvironment() === false) {
1316
- console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
1317
- }
1318
- this.props.textureOptions.preventCleanup = value;
1319
- }
1320
1320
  get rtt() {
1321
1321
  return this.props.rtt;
1322
1322
  }
@@ -1338,10 +1338,11 @@ export class CoreNode extends EventEmitter {
1338
1338
  }
1339
1339
  }
1340
1340
  initRenderTexture() {
1341
- this.texture = this.stage.txManager.createTexture('RenderTexture', {
1341
+ this.framebufferDimensions = {
1342
1342
  width: this.width,
1343
1343
  height: this.height,
1344
- });
1344
+ };
1345
+ this.texture = this.stage.txManager.createTexture('RenderTexture', this.framebufferDimensions);
1345
1346
  this.stage.renderer.renderToTexture(this);
1346
1347
  }
1347
1348
  cleanupRenderTexture() {
@@ -1349,6 +1350,7 @@ export class CoreNode extends EventEmitter {
1349
1350
  this.clearRTTInheritance();
1350
1351
  this.hasRTTupdates = false;
1351
1352
  this.texture = null;
1353
+ this.framebufferDimensions = null;
1352
1354
  }
1353
1355
  markChildrenWithRTT(node = null) {
1354
1356
  const parent = node || this;
@@ -1390,13 +1392,17 @@ export class CoreNode extends EventEmitter {
1390
1392
  return;
1391
1393
  }
1392
1394
  if (shader === null) {
1395
+ this.hasShaderUpdater = false;
1393
1396
  this.props.shader = this.stage.defShaderNode;
1394
1397
  this.setUpdateType(UpdateType.IsRenderable);
1395
1398
  return;
1396
1399
  }
1397
- shader.attachNode(this);
1400
+ if (shader.shaderKey !== 'default') {
1401
+ this.hasShaderUpdater = shader.update !== undefined;
1402
+ shader.attachNode(this);
1403
+ }
1398
1404
  this.props.shader = shader;
1399
- this.setUpdateType(UpdateType.IsRenderable);
1405
+ this.setUpdateType(UpdateType.IsRenderable | UpdateType.RecalcUniforms);
1400
1406
  }
1401
1407
  get src() {
1402
1408
  return this.props.src;
@@ -1455,16 +1461,14 @@ export class CoreNode extends EventEmitter {
1455
1461
  this.props.srcY = value;
1456
1462
  }
1457
1463
  /**
1458
- * Returns the framebuffer dimensions of the node.
1459
- * If the node has a render texture, the dimensions are the same as the node's dimensions.
1460
- * If the node does not have a render texture, the dimensions are inherited from the parent.
1461
- * If the node parent has a render texture and the node is a render texture, the nodes dimensions are used.
1464
+ * Returns the framebuffer dimensions of the RTT parent
1462
1465
  */
1463
- get framebufferDimensions() {
1464
- if (this.parentHasRenderTexture && !this.rtt && this.parent) {
1465
- return this.parent.framebufferDimensions;
1466
+ get parentFramebufferDimensions() {
1467
+ if (this.rttParent !== null) {
1468
+ return this.rttParent.framebufferDimensions;
1466
1469
  }
1467
- return { width: this.width, height: this.height };
1470
+ this.rttParent = this.findParentRTTNode();
1471
+ return this.rttParent.framebufferDimensions;
1468
1472
  }
1469
1473
  /**
1470
1474
  * Returns the parent render texture node if it exists.
@@ -1488,9 +1492,9 @@ export class CoreNode extends EventEmitter {
1488
1492
  }
1489
1493
  const oldTexture = this.props.texture;
1490
1494
  if (oldTexture) {
1491
- oldTexture.setRenderableOwner(this, false);
1492
1495
  this.unloadTexture();
1493
1496
  }
1497
+ this.textureCoords = undefined;
1494
1498
  this.props.texture = value;
1495
1499
  if (value !== null) {
1496
1500
  value.setRenderableOwner(this, this.isRenderable);
@@ -1504,6 +1508,20 @@ export class CoreNode extends EventEmitter {
1504
1508
  get textureOptions() {
1505
1509
  return this.props.textureOptions;
1506
1510
  }
1511
+ set interactive(value) {
1512
+ this.props.interactive = value;
1513
+ // Update Stage's interactive Set
1514
+ if (value === true) {
1515
+ this.stage.interactiveNodes.add(this);
1516
+ }
1517
+ }
1518
+ get interactive() {
1519
+ return this.props.interactive;
1520
+ }
1521
+ setRTTUpdates(type) {
1522
+ this.hasRTTupdates = true;
1523
+ this.parent?.setRTTUpdates(type);
1524
+ }
1507
1525
  get strictBounds() {
1508
1526
  return this.props.strictBounds;
1509
1527
  }