@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta9

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 (240) hide show
  1. package/dist/exports/utils.d.ts +2 -1
  2. package/dist/exports/utils.js +2 -1
  3. package/dist/exports/utils.js.map +1 -1
  4. package/dist/src/core/CoreNode.d.ts +24 -49
  5. package/dist/src/core/CoreNode.js +257 -255
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -1
  8. package/dist/src/core/CoreTextNode.js +14 -15
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +4 -9
  11. package/dist/src/core/CoreTextureManager.js +41 -78
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +12 -27
  14. package/dist/src/core/Stage.js +50 -37
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  17. package/dist/src/core/TextureMemoryManager.js +103 -50
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/animations/CoreAnimation.js +5 -0
  20. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  21. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  22. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  23. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  24. package/dist/src/core/lib/WebGlContextWrapper.d.ts +19 -2
  25. package/dist/src/core/lib/WebGlContextWrapper.js +56 -25
  26. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  27. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  29. package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -0
  30. package/dist/src/core/renderers/CoreShaderNode.js +9 -0
  31. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  32. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
  33. package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
  34. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
  36. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
  38. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  39. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
  40. package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
  41. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  43. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +4 -2
  45. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +31 -13
  46. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  47. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  48. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  49. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  50. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  51. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
  52. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  53. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  54. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  55. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  56. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  57. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  58. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  59. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  60. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  61. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  62. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  63. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  64. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  65. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  66. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  67. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  68. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  69. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  70. package/dist/src/core/shaders/utils.js.map +1 -0
  71. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  72. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  73. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  74. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  75. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  76. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  77. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
  78. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  79. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
  80. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  83. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  84. package/dist/src/core/textures/ImageTexture.js +1 -1
  85. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  86. package/dist/src/core/textures/Texture.d.ts +12 -0
  87. package/dist/src/core/textures/Texture.js +19 -0
  88. package/dist/src/core/textures/Texture.js.map +1 -1
  89. package/dist/src/core/utils.d.ts +1 -1
  90. package/dist/src/main-api/Inspector.d.ts +6 -1
  91. package/dist/src/main-api/Inspector.js +42 -4
  92. package/dist/src/main-api/Inspector.js.map +1 -1
  93. package/dist/src/main-api/Renderer.d.ts +62 -43
  94. package/dist/src/main-api/Renderer.js +119 -31
  95. package/dist/src/main-api/Renderer.js.map +1 -1
  96. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  97. package/exports/utils.ts +7 -1
  98. package/package.json +1 -1
  99. package/src/core/CoreNode.ts +307 -313
  100. package/src/core/CoreTextNode.ts +23 -20
  101. package/src/core/CoreTextureManager.ts +40 -99
  102. package/src/core/Stage.ts +68 -65
  103. package/src/core/TextureMemoryManager.ts +135 -67
  104. package/src/core/animations/CoreAnimation.ts +7 -0
  105. package/src/core/animations/CoreAnimationController.ts +13 -4
  106. package/src/core/lib/WebGlContextWrapper.ts +69 -75
  107. package/src/core/renderers/CoreRenderer.ts +1 -0
  108. package/src/core/renderers/CoreShaderNode.ts +10 -0
  109. package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
  110. package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
  111. package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
  112. package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
  113. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  114. package/src/core/renderers/webgl/WebGlShaderProgram.ts +37 -14
  115. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  116. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  117. package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
  118. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  119. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  120. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  121. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  122. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  123. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  124. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  125. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  126. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  127. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  128. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  129. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  130. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  131. package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
  132. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
  133. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
  134. package/src/core/textures/ImageTexture.ts +17 -16
  135. package/src/core/textures/Texture.ts +23 -0
  136. package/src/main-api/Inspector.ts +52 -5
  137. package/src/main-api/Renderer.ts +222 -77
  138. package/dist/src/core/platform.d.ts +0 -10
  139. package/dist/src/core/platform.js +0 -56
  140. package/dist/src/core/platform.js.map +0 -1
  141. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  142. package/dist/src/core/renderers/CoreShader.js +0 -28
  143. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  145. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  146. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  148. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
  149. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  150. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  151. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  152. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  154. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
  155. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  156. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  162. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  163. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  164. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  165. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  168. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  169. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
  170. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  171. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  172. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  173. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  174. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  177. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  178. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  179. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  180. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  181. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  182. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  183. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  184. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  185. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  186. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  187. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  188. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  189. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  201. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  202. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  203. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  205. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  206. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  207. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  208. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  209. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  211. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  213. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  214. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  215. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  216. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  217. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  218. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  219. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  220. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  221. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  222. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  228. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  229. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  230. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  231. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  232. package/dist/src/core/temp.d.ts +0 -1
  233. package/dist/src/core/temp.js +0 -77
  234. package/dist/src/core/temp.js.map +0 -1
  235. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  236. package/dist/src/main-api/DynamicShaderController.js +0 -58
  237. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  238. package/dist/src/main-api/ShaderController.d.ts +0 -31
  239. package/dist/src/main-api/ShaderController.js +0 -37
  240. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -25,7 +25,12 @@ import type {
25
25
  TrFailedEventHandler,
26
26
  TrLoadedEventHandler,
27
27
  } from './text-rendering/renderers/TextRenderer.js';
28
- import { CoreNode, UpdateType, type CoreNodeProps } from './CoreNode.js';
28
+ import {
29
+ CoreNode,
30
+ CoreNodeRenderState,
31
+ UpdateType,
32
+ type CoreNodeProps,
33
+ } from './CoreNode.js';
29
34
  import type { Stage } from './Stage.js';
30
35
  import type { CoreRenderer } from './renderers/CoreRenderer.js';
31
36
  import type {
@@ -33,7 +38,6 @@ import type {
33
38
  NodeTextLoadedPayload,
34
39
  } from '../common/CommonTypes.js';
35
40
  import type { RectWithValid } from './lib/utils.js';
36
- import { assertTruthy } from '../utils.js';
37
41
 
38
42
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
39
43
  /**
@@ -130,7 +134,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
130
134
  this.props.width = calcWidth;
131
135
  this.props.height = calcHeight;
132
136
  }
133
- this.updateLocalTransform();
137
+ this.setUpdateType(UpdateType.Local);
134
138
 
135
139
  // Incase the RAF loop has been stopped already before text was loaded,
136
140
  // we request a render so it can be drawn.
@@ -211,7 +215,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
211
215
  this._textRendererOverride,
212
216
  );
213
217
 
214
- if (!textRenderer) {
218
+ if (textRenderer === null) {
215
219
  console.warn(
216
220
  'Text Renderer not found for font',
217
221
  this.trState.props.fontFamily,
@@ -370,23 +374,24 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
370
374
  override update(delta: number, parentClippingRect: RectWithValid) {
371
375
  super.update(delta, parentClippingRect);
372
376
 
373
- assertTruthy(this.globalTransform);
374
-
375
377
  // globalTransform is updated in super.update(delta)
376
- this.textRenderer.set.x(this.trState, this.globalTransform.tx);
377
- this.textRenderer.set.y(this.trState, this.globalTransform.ty);
378
+ this.textRenderer.set.x(this.trState, this.globalTransform!.tx);
379
+ this.textRenderer.set.y(this.trState, this.globalTransform!.ty);
378
380
  }
379
381
 
380
- override checkBasicRenderability() {
381
- if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
382
- return false;
382
+ override updateIsRenderable() {
383
+ // If the node is out of bounds or has an alpha of 0, it is not renderable
384
+ if (
385
+ this.worldAlpha === 0 ||
386
+ this.renderState <= CoreNodeRenderState.OutOfBounds
387
+ ) {
388
+ this.setRenderable(false);
389
+ return;
383
390
  }
384
391
 
385
- if (this.trState && this.trState.props.text !== '') {
386
- return true;
392
+ if (this.trState !== undefined && this.trState.props.text !== '') {
393
+ this.setRenderable(true);
387
394
  }
388
-
389
- return false;
390
395
  }
391
396
 
392
397
  override setRenderable(isRenderable: boolean) {
@@ -395,11 +400,9 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
395
400
  }
396
401
 
397
402
  override renderQuads(renderer: CoreRenderer) {
398
- assertTruthy(this.globalTransform);
399
-
400
403
  // If the text renderer does not support rendering quads, fallback to the
401
404
  // default renderQuads method
402
- if (!this.textRenderer.renderQuads) {
405
+ if (this.textRenderer.renderQuads === undefined) {
403
406
  super.renderQuads(renderer);
404
407
  return;
405
408
  }
@@ -408,8 +411,8 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
408
411
 
409
412
  // Prevent quad rendering if parent has a render texture
410
413
  // and this node is not the render texture
411
- if (this.parentHasRenderTexture) {
412
- if (!renderer.renderToTextureActive) {
414
+ if (this.parentHasRenderTexture === true) {
415
+ if (renderer.renderToTextureActive === false) {
413
416
  return;
414
417
  }
415
418
  // Prevent quad rendering if parent render texture is not the active render texture
@@ -24,7 +24,7 @@ import { ImageTexture } from './textures/ImageTexture.js';
24
24
  import { NoiseTexture } from './textures/NoiseTexture.js';
25
25
  import { SubTexture } from './textures/SubTexture.js';
26
26
  import { RenderTexture } from './textures/RenderTexture.js';
27
- import { TextureType, type Texture } from './textures/Texture.js';
27
+ import { Texture, TextureType } from './textures/Texture.js';
28
28
  import { EventEmitter } from '../common/EventEmitter.js';
29
29
  import type { Stage } from './Stage.js';
30
30
  import {
@@ -178,7 +178,6 @@ export class CoreTextureManager extends EventEmitter {
178
178
  */
179
179
  txConstructors: Partial<TextureMap> = {};
180
180
 
181
- private downloadTextureSourceQueue: Array<Texture> = [];
182
181
  private priorityQueue: Array<Texture> = [];
183
182
  private uploadTextureQueue: Array<Texture> = [];
184
183
  private initialized = false;
@@ -229,7 +228,7 @@ export class CoreTextureManager extends EventEmitter {
229
228
  .then((result) => {
230
229
  this.initialize(result);
231
230
  })
232
- .catch((e) => {
231
+ .catch(() => {
233
232
  console.warn(
234
233
  '[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
235
234
  );
@@ -290,15 +289,6 @@ export class CoreTextureManager extends EventEmitter {
290
289
  this.emit('initialized');
291
290
  }
292
291
 
293
- /**
294
- * Enqueue a texture for downloading its source image.
295
- */
296
- enqueueDownloadTextureSource(texture: Texture): void {
297
- if (!this.downloadTextureSourceQueue.includes(texture)) {
298
- this.downloadTextureSourceQueue.push(texture);
299
- }
300
- }
301
-
302
292
  /**
303
293
  * Enqueue a texture for uploading to the GPU.
304
294
  *
@@ -368,39 +358,15 @@ export class CoreTextureManager extends EventEmitter {
368
358
  return;
369
359
  }
370
360
 
371
- // if the texture is already loaded, don't load it again
372
- if (
373
- texture.ctxTexture !== undefined &&
374
- texture.ctxTexture.state === 'loaded'
375
- ) {
376
- texture.setState('loaded');
361
+ if (texture.state === 'loaded') {
362
+ // if the texture is already loaded, just return
377
363
  return;
378
364
  }
379
365
 
380
- // if the texture is already being processed, don't load it again
381
- if (
382
- this.downloadTextureSourceQueue.includes(texture) === true ||
383
- this.uploadTextureQueue.includes(texture) === true
384
- ) {
366
+ if (Texture.TRANSITIONAL_TEXTURE_STATES.includes(texture.state)) {
385
367
  return;
386
368
  }
387
369
 
388
- // if the texture is already loading, free it, this can happen if the texture is
389
- // orphaned and then reloaded
390
- if (
391
- texture.ctxTexture !== undefined &&
392
- texture.ctxTexture.state === 'loading'
393
- ) {
394
- // if the texture has texture data, queue it for upload
395
- if (texture.textureData !== null) {
396
- this.enqueueUploadTexture(texture);
397
- return;
398
- }
399
-
400
- // else we will have to re-download the texture
401
- texture.free();
402
- }
403
-
404
370
  // if we're not initialized, just queue the texture into the priority queue
405
371
  if (this.initialized === false) {
406
372
  this.priorityQueue.push(texture);
@@ -413,35 +379,34 @@ export class CoreTextureManager extends EventEmitter {
413
379
  texture.freeTextureData();
414
380
  }
415
381
 
416
- // these types of textures don't need to be downloaded
417
- // Technically the noise texture shouldn't either, but it's a special case
418
- // and not really used in production so who cares ¯\_(ツ)_/¯
419
- if (
420
- (texture.type === TextureType.color ||
421
- texture.type === TextureType.renderToTexture) &&
422
- texture.state !== 'initial'
423
- ) {
424
- texture.setState('fetched');
425
- this.enqueueUploadTexture(texture);
426
- return;
427
- }
428
-
429
382
  texture.setState('loading');
430
383
 
431
- // prioritize the texture for immediate loading
432
- if (priority === true) {
433
- texture
434
- .getTextureData()
435
- .then(() => {
436
- this.uploadTexture(texture);
437
- })
438
- .catch((err) => {
439
- console.error(err);
440
- });
441
- }
384
+ // Get the texture data
385
+ texture
386
+ .getTextureData()
387
+ .then(() => {
388
+ if (texture.state !== 'fetched') {
389
+ texture.setState('failed');
390
+ return;
391
+ }
442
392
 
443
- // enqueue the texture for download and upload
444
- this.enqueueDownloadTextureSource(texture);
393
+ // For non-image textures, upload immediately
394
+ if (texture.type !== TextureType.image) {
395
+ this.uploadTexture(texture);
396
+ } else {
397
+ // For image textures, queue for throttled upload
398
+ // If it's a priority texture, upload it immediately
399
+ if (priority === true) {
400
+ this.uploadTexture(texture);
401
+ } else {
402
+ this.enqueueUploadTexture(texture);
403
+ }
404
+ }
405
+ })
406
+ .catch((err) => {
407
+ console.error(err);
408
+ texture.setState('failed');
409
+ });
445
410
  }
446
411
 
447
412
  /**
@@ -472,28 +437,26 @@ export class CoreTextureManager extends EventEmitter {
472
437
  * Check if a texture is being processed
473
438
  */
474
439
  isProcessingTexture(texture: Texture): boolean {
475
- return (
476
- this.downloadTextureSourceQueue.includes(texture) === true ||
477
- this.uploadTextureQueue.includes(texture) === true
478
- );
440
+ return this.uploadTextureQueue.includes(texture) === true;
479
441
  }
480
442
 
481
443
  /**
482
- * Process a limited number of downloads and uploads.
444
+ * Process a limited number of uploads.
483
445
  *
484
- * @param maxItems - The maximum number of items to process
446
+ * @param maxProcessingTime - The maximum processing time in milliseconds
485
447
  */
486
448
  processSome(maxProcessingTime: number): void {
487
449
  if (this.initialized === false) {
488
450
  return;
489
451
  }
490
452
 
491
- const startTime = this.platform.getTimeStamp();
453
+ const platform = this.platform;
454
+ const startTime = platform.getTimeStamp();
492
455
 
493
456
  // Process priority queue
494
457
  while (
495
458
  this.priorityQueue.length > 0 &&
496
- this.platform.getTimeStamp() - startTime < maxProcessingTime
459
+ platform.getTimeStamp() - startTime < maxProcessingTime
497
460
  ) {
498
461
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
499
462
  const texture = this.priorityQueue.pop()!;
@@ -505,32 +468,15 @@ export class CoreTextureManager extends EventEmitter {
505
468
  // Process uploads
506
469
  while (
507
470
  this.uploadTextureQueue.length > 0 &&
508
- this.platform.getTimeStamp() - startTime < maxProcessingTime
471
+ platform.getTimeStamp() - startTime < maxProcessingTime
509
472
  ) {
510
473
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
511
- this.uploadTexture(this.uploadTextureQueue.pop()!);
512
- }
513
-
514
- // Process downloads
515
- while (
516
- this.downloadTextureSourceQueue.length > 0 &&
517
- this.platform.getTimeStamp() - startTime < maxProcessingTime
518
- ) {
519
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
520
- const texture = this.downloadTextureSourceQueue.shift()!;
521
- texture.getTextureData().then(() => {
522
- if (texture.state === 'fetched') {
523
- this.enqueueUploadTexture(texture);
524
- }
525
- });
474
+ this.uploadTexture(this.uploadTextureQueue.shift()!);
526
475
  }
527
476
  }
528
477
 
529
478
  public hasUpdates(): boolean {
530
- return (
531
- this.downloadTextureSourceQueue.length > 0 ||
532
- this.uploadTextureQueue.length > 0
533
- );
479
+ return this.uploadTextureQueue.length > 0;
534
480
  }
535
481
 
536
482
  /**
@@ -571,16 +517,11 @@ export class CoreTextureManager extends EventEmitter {
571
517
  }
572
518
 
573
519
  /**
574
- * Remove texture from the queue's
520
+ * Remove texture from the upload queue
575
521
  *
576
522
  * @param texture - The texture to remove
577
523
  */
578
524
  removeTextureFromQueue(texture: Texture): void {
579
- const downloadIndex = this.downloadTextureSourceQueue.indexOf(texture);
580
- if (downloadIndex !== -1) {
581
- this.downloadTextureSourceQueue.splice(downloadIndex, 1);
582
- }
583
-
584
525
  const uploadIndex = this.uploadTextureQueue.indexOf(texture);
585
526
  if (uploadIndex !== -1) {
586
527
  this.uploadTextureQueue.splice(uploadIndex, 1);
package/src/core/Stage.ts CHANGED
@@ -46,8 +46,6 @@ import {
46
46
  type TextureMemoryManagerSettings,
47
47
  } from './TextureMemoryManager.js';
48
48
  import { CoreRenderer } from './renderers/CoreRenderer.js';
49
- import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
50
- import type { CanvasRenderer } from './renderers/canvas/CanvasRenderer.js';
51
49
  import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
52
50
  import { santizeCustomDataMap } from '../main-api/utils.js';
53
51
  import type { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
@@ -59,30 +57,19 @@ import type { Texture } from './textures/Texture.js';
59
57
  import { ColorTexture } from './textures/ColorTexture.js';
60
58
  import type { Platform } from './platforms/Platform.js';
61
59
  import type { WebPlatform } from './platforms/web/WebPlatform.js';
60
+ import type { RendererMainSettings } from '../main-api/Renderer.js';
62
61
 
63
- export interface StageOptions {
64
- appWidth: number;
65
- appHeight: number;
62
+ export type StageOptions = Omit<
63
+ RendererMainSettings,
64
+ 'inspector' | 'platform'
65
+ > & {
66
66
  textureMemory: TextureMemoryManagerSettings;
67
- boundsMargin: number | [number, number, number, number];
68
- deviceLogicalPixelRatio: number;
69
- devicePhysicalPixelRatio: number;
70
67
  canvas: HTMLCanvasElement | OffscreenCanvas;
71
- clearColor: number;
72
68
  fpsUpdateInterval: number;
73
- enableContextSpy: boolean;
74
- forceWebGL2: boolean;
75
- numImageWorkers: number;
76
- renderEngine: typeof WebGlRenderer | typeof CanvasRenderer;
77
69
  eventBus: EventEmitter;
78
- quadBufferSize: number;
79
- fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
80
- inspector: boolean;
81
- strictBounds: boolean;
82
- textureProcessingTimeLimit: number;
83
- createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
84
70
  platform: Platform | WebPlatform;
85
- }
71
+ inspector: boolean;
72
+ };
86
73
 
87
74
  export type StageFpsUpdateHandler = (
88
75
  stage: Stage,
@@ -114,11 +101,11 @@ export class Stage {
114
101
  public readonly interactiveNodes: Set<CoreNode> = new Set();
115
102
  public boundsMargin: [number, number, number, number];
116
103
  public readonly defShaderNode: CoreShaderNode | null = null;
117
- public readonly strictBound: Bound;
118
- public readonly preloadBound: Bound;
104
+ public strictBound: Bound;
105
+ public preloadBound: Bound;
119
106
  public readonly strictBounds: boolean;
120
107
  public readonly defaultTexture: Texture | null = null;
121
- public readonly pixelRatio: number;
108
+ public pixelRatio: number;
122
109
  public readonly bufferMemory: number = 2e6;
123
110
  public readonly platform: Platform | WebPlatform;
124
111
  public readonly calculateTextureCoord: boolean;
@@ -152,7 +139,7 @@ export class Stage {
152
139
  /**
153
140
  * Stage constructor
154
141
  */
155
- constructor(readonly options: StageOptions) {
142
+ constructor(public options: StageOptions) {
156
143
  const {
157
144
  canvas,
158
145
  clearColor,
@@ -385,12 +372,12 @@ export class Stage {
385
372
  * Start a new frame draw
386
373
  */
387
374
  drawFrame() {
388
- const { renderer, renderRequested } = this;
389
- assertTruthy(renderer);
375
+ const { renderer, renderRequested, root } = this;
376
+ const txMemManager = this.txMemManager;
390
377
 
391
378
  // Update tree if needed
392
- if (this.root.updateType !== 0) {
393
- this.root.update(this.deltaTime, this.root.clippingRect);
379
+ if (root.updateType !== 0) {
380
+ root.update(this.deltaTime, root.clippingRect);
394
381
  }
395
382
 
396
383
  // Process some textures
@@ -400,12 +387,12 @@ export class Stage {
400
387
  renderer.reset();
401
388
 
402
389
  // Check if we need to cleanup textures
403
- if (this.txMemManager.criticalCleanupRequested === true) {
404
- this.txMemManager.cleanup(false);
390
+ if (txMemManager.criticalCleanupRequested === true) {
391
+ txMemManager.cleanup(false);
405
392
 
406
- if (this.txMemManager.criticalCleanupRequested === true) {
393
+ if (txMemManager.criticalCleanupRequested === true) {
407
394
  // If we still need to cleanup, request another but aggressive cleanup
408
- this.txMemManager.cleanup(true);
395
+ txMemManager.cleanup(true);
409
396
  }
410
397
  }
411
398
 
@@ -419,13 +406,13 @@ export class Stage {
419
406
  this.addQuads(this.root);
420
407
 
421
408
  // Perform render pass
422
- renderer?.render();
409
+ renderer.render();
423
410
 
424
411
  this.calculateFps();
425
412
  this.calculateQuads();
426
413
 
427
414
  // Reset renderRequested flag if it was set
428
- if (renderRequested) {
415
+ if (renderRequested === true) {
429
416
  this.renderRequested = false;
430
417
  }
431
418
  }
@@ -663,7 +650,20 @@ export class Stage {
663
650
  }
664
651
 
665
652
  /**
666
- * Find all nodes at a given point
653
+ * Update the viewport bounds
654
+ */
655
+ updateViewportBounds() {
656
+ const { appWidth, appHeight } = this.options;
657
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
658
+ this.preloadBound = createPreloadBounds(
659
+ this.strictBound,
660
+ this.boundsMargin,
661
+ );
662
+ this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
663
+ this.root.childUpdateType |= UpdateType.RenderBounds;
664
+ }
665
+
666
+ /** Find all nodes at a given point
667
667
  * @param data
668
668
  */
669
669
  findNodesAtPoint(data: Point): CoreNode[] {
@@ -713,18 +713,23 @@ export class Stage {
713
713
  */
714
714
  protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
715
715
  const color = props.color ?? 0xffffffff;
716
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
717
- const colorTr =
718
- props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
719
- const colorBl =
720
- props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
721
- const colorBr =
722
- props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
723
-
724
- let data = {};
725
- if (this.options.inspector === true) {
726
- data = santizeCustomDataMap(props.data ?? {});
727
- }
716
+ const colorTop = props.colorTop ?? color;
717
+ const colorBottom = props.colorBottom ?? color;
718
+ const colorLeft = props.colorLeft ?? color;
719
+ const colorRight = props.colorRight ?? color;
720
+
721
+ const colorTl = props.colorTl ?? colorTop ?? colorLeft ?? color;
722
+ const colorTr = props.colorTr ?? colorTop ?? colorRight ?? color;
723
+ const colorBl = props.colorBl ?? colorBottom ?? colorLeft ?? color;
724
+ const colorBr = props.colorBr ?? colorBottom ?? colorRight ?? color;
725
+
726
+ const scale = props.scale ?? null;
727
+ const mount = props.mount ?? 0;
728
+ const pivot = props.pivot ?? 0.5;
729
+
730
+ const data = this.options.inspector
731
+ ? santizeCustomDataMap(props.data ?? {})
732
+ : {};
728
733
 
729
734
  return {
730
735
  x: props.x ?? 0,
@@ -736,39 +741,37 @@ export class Stage {
736
741
  boundsMargin: props.boundsMargin ?? null,
737
742
  clipping: props.clipping ?? false,
738
743
  color,
739
- colorTop: props.colorTop ?? color,
740
- colorBottom: props.colorBottom ?? color,
741
- colorLeft: props.colorLeft ?? color,
742
- colorRight: props.colorRight ?? color,
743
- colorBl,
744
- colorBr,
744
+ colorTop,
745
+ colorBottom,
746
+ colorLeft,
747
+ colorRight,
745
748
  colorTl,
746
749
  colorTr,
750
+ colorBl,
751
+ colorBr,
747
752
  zIndex: props.zIndex ?? 0,
748
753
  zIndexLocked: props.zIndexLocked ?? 0,
749
754
  parent: props.parent ?? null,
750
755
  texture: props.texture ?? null,
751
756
  textureOptions: props.textureOptions ?? {},
752
757
  shader: props.shader ?? this.defShaderNode,
753
- // Since setting the `src` will trigger a texture load, we need to set it after
754
- // we set the texture. Otherwise, problems happen.
755
758
  src: props.src ?? null,
756
759
  srcHeight: props.srcHeight,
757
760
  srcWidth: props.srcWidth,
758
761
  srcX: props.srcX,
759
762
  srcY: props.srcY,
760
- scale: props.scale ?? null,
761
- scaleX: props.scaleX ?? props.scale ?? 1,
762
- scaleY: props.scaleY ?? props.scale ?? 1,
763
- mount: props.mount ?? 0,
764
- mountX: props.mountX ?? props.mount ?? 0,
765
- mountY: props.mountY ?? props.mount ?? 0,
766
- pivot: props.pivot ?? 0.5,
767
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
768
- pivotY: props.pivotY ?? props.pivot ?? 0.5,
763
+ scale,
764
+ scaleX: props.scaleX ?? scale ?? 1,
765
+ scaleY: props.scaleY ?? scale ?? 1,
766
+ mount,
767
+ mountX: props.mountX ?? mount,
768
+ mountY: props.mountY ?? mount,
769
+ pivot,
770
+ pivotX: props.pivotX ?? pivot,
771
+ pivotY: props.pivotY ?? pivot,
769
772
  rotation: props.rotation ?? 0,
770
773
  rtt: props.rtt ?? false,
771
- data: data,
774
+ data,
772
775
  imageType: props.imageType,
773
776
  interactive: props.interactive ?? false,
774
777
  strictBounds: props.strictBounds ?? this.strictBounds,