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