@lightningjs/renderer 3.0.3 → 3.0.5

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/src/common/EventEmitter.d.ts +7 -4
  2. package/dist/src/common/EventEmitter.js +1 -1
  3. package/dist/src/common/EventEmitter.js.map +1 -1
  4. package/dist/src/core/AutosizeManager.d.ts +29 -0
  5. package/dist/src/core/AutosizeManager.js +169 -0
  6. package/dist/src/core/AutosizeManager.js.map +1 -0
  7. package/dist/src/core/CoreNode.d.ts +2 -1
  8. package/dist/src/core/CoreNode.js +6 -3
  9. package/dist/src/core/CoreNode.js.map +1 -1
  10. package/dist/src/core/CoreTextNode.d.ts +18 -5
  11. package/dist/src/core/CoreTextNode.js +141 -59
  12. package/dist/src/core/CoreTextNode.js.map +1 -1
  13. package/dist/src/core/CoreTextNodeCanvas.d.ts +215 -0
  14. package/dist/src/core/CoreTextNodeCanvas.js +236 -0
  15. package/dist/src/core/CoreTextNodeCanvas.js.map +1 -0
  16. package/dist/src/core/Stage.js +10 -0
  17. package/dist/src/core/Stage.js.map +1 -1
  18. package/dist/src/core/TextureMemoryManager.js +4 -3
  19. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  20. package/dist/src/core/animations/Animation.d.ts +21 -0
  21. package/dist/src/core/animations/Animation.js +194 -0
  22. package/dist/src/core/animations/Animation.js.map +1 -0
  23. package/dist/src/core/animations/AnimationManager.d.ts +1 -1
  24. package/dist/src/core/animations/AnimationManager.js +5 -5
  25. package/dist/src/core/animations/AnimationManager.js.map +1 -1
  26. package/dist/src/core/animations/CoreAnimation.d.ts +11 -2
  27. package/dist/src/core/animations/CoreAnimation.js +44 -38
  28. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  29. package/dist/src/core/animations/CoreAnimationController.d.ts +6 -0
  30. package/dist/src/core/animations/CoreAnimationController.js +16 -3
  31. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  32. package/dist/src/core/animations/Playback.d.ts +64 -0
  33. package/dist/src/core/animations/Playback.js +169 -0
  34. package/dist/src/core/animations/Playback.js.map +1 -0
  35. package/dist/src/core/animations/Ticker.d.ts +71 -0
  36. package/dist/src/core/animations/Ticker.js +89 -0
  37. package/dist/src/core/animations/Ticker.js.map +1 -0
  38. package/dist/src/core/animations/Transition.d.ts +38 -0
  39. package/dist/src/core/animations/Transition.js +35 -0
  40. package/dist/src/core/animations/Transition.js.map +1 -0
  41. package/dist/src/core/animations/TransitionsController.d.ts +10 -0
  42. package/dist/src/core/animations/TransitionsController.js +39 -0
  43. package/dist/src/core/animations/TransitionsController.js.map +1 -0
  44. package/dist/src/core/animations/utils.d.ts +2 -0
  45. package/dist/src/core/animations/utils.js +136 -0
  46. package/dist/src/core/animations/utils.js.map +1 -0
  47. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  48. package/dist/src/core/lib/ImageWorker.js +11 -30
  49. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  50. package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -16
  51. package/dist/src/core/lib/WebGlContextWrapper.js +1 -35
  52. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  53. package/dist/src/core/lib/textureCompression.d.ts +2 -14
  54. package/dist/src/core/lib/textureCompression.js +67 -320
  55. package/dist/src/core/lib/textureCompression.js.map +1 -1
  56. package/dist/src/core/platform.js +9 -38
  57. package/dist/src/core/platform.js.map +1 -1
  58. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -1
  59. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +3 -11
  60. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  61. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -2
  62. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -16
  63. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  64. package/dist/src/core/renderers/canvas/CanvasRenderer.js +14 -1
  65. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  66. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -1
  67. package/dist/src/core/renderers/canvas/CanvasTexture.js +16 -6
  68. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  69. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -13
  70. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +192 -113
  71. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  72. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +2 -0
  73. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +14 -0
  74. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +1 -2
  76. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +5 -12
  77. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  78. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +6 -18
  79. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +60 -102
  80. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  82. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +1 -3
  83. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +31 -74
  84. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  85. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +7 -2
  86. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +50 -21
  87. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  88. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -3
  89. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +1 -3
  90. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  91. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +2 -2
  92. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  93. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +1 -0
  94. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +23 -0
  95. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +4 -5
  97. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  98. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +1 -0
  99. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +6 -3
  101. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +11 -0
  103. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +10 -5
  105. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  106. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +10 -5
  107. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +12 -0
  109. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  110. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  111. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  112. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  113. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  114. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +2 -2
  115. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  116. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  117. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +1 -0
  118. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +30 -14
  119. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -1
  121. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +3 -13
  122. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  124. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  125. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  126. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  127. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  128. package/dist/src/core/text-rendering/CanvasFont.d.ts +1 -1
  129. package/dist/src/core/text-rendering/CanvasFont.js +7 -16
  130. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -1
  131. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +1 -1
  132. package/dist/src/core/text-rendering/CanvasFontHandler.js +1 -1
  133. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  134. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -3
  135. package/dist/src/core/text-rendering/CanvasTextRenderer.js +7 -5
  136. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  137. package/dist/src/core/text-rendering/CoreFont.d.ts +1 -1
  138. package/dist/src/core/text-rendering/CoreFont.js +1 -1
  139. package/dist/src/core/text-rendering/CoreFont.js.map +1 -1
  140. package/dist/src/core/text-rendering/FontManager.js +2 -1
  141. package/dist/src/core/text-rendering/FontManager.js.map +1 -1
  142. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +3 -5
  143. package/dist/src/core/text-rendering/SdfTextRenderer.js +19 -109
  144. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  145. package/dist/src/core/text-rendering/TextLayoutEngine.js +43 -12
  146. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
  147. package/dist/src/core/text-rendering/TextRenderer.d.ts +16 -8
  148. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  149. package/dist/src/core/text-rendering/canvas/Settings.js +20 -0
  150. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  151. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  152. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  153. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  154. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  155. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  156. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  157. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  158. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  159. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  160. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  161. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  162. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -4
  163. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +46 -98
  164. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  165. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +1 -1
  166. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +2 -2
  167. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +66 -8
  168. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  169. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +1 -1
  170. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -1
  171. package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.d.ts +26 -0
  172. package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.js +158 -0
  173. package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.js.map +1 -0
  174. package/dist/src/core/text-rendering/renderers/canvas/internal/draw.d.ts +5 -0
  175. package/dist/src/core/text-rendering/renderers/canvas/internal/draw.js +127 -0
  176. package/dist/src/core/text-rendering/renderers/canvas/internal/draw.js.map +1 -0
  177. package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.d.ts +2 -0
  178. package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.js +50 -0
  179. package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.js.map +1 -0
  180. package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.d.ts +33 -0
  181. package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.js +192 -0
  182. package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.js.map +1 -0
  183. package/dist/src/core/text-rendering/renderers/canvas/internal/types.d.ts +66 -0
  184. package/dist/src/core/text-rendering/renderers/canvas/internal/types.js +2 -0
  185. package/dist/src/core/text-rendering/renderers/canvas/internal/types.js.map +1 -0
  186. package/dist/src/core/text-rendering/renderers/canvas/internal/utils.d.ts +91 -0
  187. package/dist/src/core/text-rendering/renderers/canvas/internal/utils.js +282 -0
  188. package/dist/src/core/text-rendering/renderers/canvas/internal/utils.js.map +1 -0
  189. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  190. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  191. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  192. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  193. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  194. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  195. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  196. package/dist/src/core/text-rendering/sdf/Utils.js +301 -0
  197. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  198. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  199. package/dist/src/core/text-rendering/sdf/index.js +20 -0
  200. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  201. package/dist/src/core/textures/ImageTexture.js +11 -0
  202. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  203. package/dist/src/core/textures/Texture.js +5 -0
  204. package/dist/src/core/textures/Texture.js.map +1 -1
  205. package/dist/src/main-api/Inspector.d.ts +1 -1
  206. package/dist/src/main-api/Inspector.js +25 -20
  207. package/dist/src/main-api/Inspector.js.map +1 -1
  208. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  209. package/dist/tsconfig.tsbuildinfo +1 -0
  210. package/package.json +1 -1
  211. package/src/common/EventEmitter.ts +6 -8
  212. package/src/core/CoreNode.test.ts +1 -1
  213. package/src/core/CoreNode.ts +8 -4
  214. package/src/core/CoreTextNode.test.ts +138 -25
  215. package/src/core/CoreTextNode.ts +174 -67
  216. package/src/core/Stage.ts +11 -0
  217. package/src/core/TextureMemoryManager.ts +4 -3
  218. package/src/core/animations/AnimationManager.ts +5 -5
  219. package/src/core/animations/CoreAnimation.ts +61 -45
  220. package/src/core/animations/CoreAnimationController.ts +16 -7
  221. package/src/core/renderers/canvas/CanvasRenderer.ts +19 -1
  222. package/src/core/renderers/canvas/CanvasTexture.ts +23 -8
  223. package/src/core/renderers/webgl/WebGlRenderer.ts +2 -3
  224. package/src/core/renderers/webgl/WebGlShaderNode.ts +24 -0
  225. package/src/core/renderers/webgl/WebGlShaderProgram.test.ts +274 -0
  226. package/src/core/renderers/webgl/WebGlShaderProgram.ts +10 -10
  227. package/src/core/renderers/webgl/internal/ShaderUtils.ts +1 -0
  228. package/src/core/text-rendering/CanvasFontHandler.ts +2 -2
  229. package/src/core/text-rendering/CanvasTextRenderer.ts +14 -7
  230. package/src/core/text-rendering/SdfTextRenderer.ts +28 -140
  231. package/src/core/text-rendering/TextLayoutEngine.ts +61 -28
  232. package/src/core/text-rendering/TextRenderer.ts +19 -12
  233. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +20 -0
  234. package/src/core/textures/ImageTexture.ts +18 -0
  235. package/src/core/textures/Texture.ts +6 -0
  236. package/src/main-api/Inspector.ts +25 -25
  237. package/dist/src/core/text-rendering/TextGenerator.d.ts +0 -10
  238. package/dist/src/core/text-rendering/TextGenerator.js +0 -36
  239. package/dist/src/core/text-rendering/TextGenerator.js.map +0 -1
  240. package/src/core/renderers/webgl/SdfRenderOp.ts +0 -106
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import { assertTruthy } from '../../../utils.js';
20
- import { uploadCompressedTexture } from '../../lib/textureCompression.js';
20
+ import { isPowerOfTwo } from '../../utils.js';
21
21
  import { CoreContextTexture } from '../CoreContextTexture.js';
22
22
  import { isHTMLImageElement } from './internal/RendererUtils.js';
23
23
  const TRANSPARENT_TEXTURE_DATA = new Uint8Array([0, 0, 0, 0]);
@@ -37,31 +37,10 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
37
37
  _nativeCtxTexture = null;
38
38
  _w = 0;
39
39
  _h = 0;
40
- txCoordX1 = 0;
41
- txCoordY1 = 0;
42
- txCoordX2 = 1;
43
- txCoordY2 = 1;
44
40
  constructor(glw, memManager, textureSource) {
45
41
  super(memManager, textureSource);
46
42
  this.glw = glw;
47
43
  }
48
- /**
49
- * GL error check with direct state marking
50
- * Uses cached error result to minimize function calls
51
- */
52
- checkGLError() {
53
- // Skip if already failed to prevent double-processing
54
- if (this.state === 'failed') {
55
- return true;
56
- }
57
- const error = this.glw.getError();
58
- if (error !== 0) {
59
- this.state = 'failed';
60
- this.textureSource.setState('failed', new Error(`WebGL Error: ${error}`));
61
- return true;
62
- }
63
- return false;
64
- }
65
44
  get ctxTexture() {
66
45
  if (this.state === 'freed') {
67
46
  this.load();
@@ -85,24 +64,23 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
85
64
  * to force the texture to be pre-loaded prior to accessing the ctxTexture
86
65
  * property.
87
66
  */
88
- async load() {
89
- // If the texture is already loading or loaded, return resolved promise
67
+ load() {
68
+ // If the texture is already loading or loaded, don't load it again.
90
69
  if (this.state === 'loading' || this.state === 'loaded') {
91
- return Promise.resolve();
70
+ return;
92
71
  }
93
72
  this.state = 'loading';
94
- this.textureSource.setState('loading');
95
- // Await the native texture creation to ensure GPU buffer is fully allocated
73
+ this.textureSource.setCoreCtxState('loading');
96
74
  this._nativeCtxTexture = this.createNativeCtxTexture();
97
75
  if (this._nativeCtxTexture === null) {
98
76
  this.state = 'failed';
99
- this.textureSource.setState('failed', new Error('WebGL Texture creation failed'));
77
+ this.textureSource.setCoreCtxState('failed', new Error('Could not create WebGL Texture'));
78
+ console.error('Could not create WebGL Texture');
100
79
  return;
101
80
  }
102
- try {
103
- const { width, height } = await this.onLoadRequest();
81
+ this.onLoadRequest()
82
+ .then(({ width, height }) => {
104
83
  // If the texture has been freed while loading, return early.
105
- // Type assertion needed because state could change during async operations
106
84
  if (this.state === 'freed') {
107
85
  return;
108
86
  }
@@ -111,19 +89,17 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
111
89
  this._h = height;
112
90
  // Update the texture source's width and height so that it can be used
113
91
  // for rendering.
114
- this.textureSource.setState('loaded', { width, height });
115
- this.textureSource.freeTextureData();
116
- }
117
- catch (err) {
92
+ this.textureSource.setCoreCtxState('loaded', { width, height });
93
+ })
94
+ .catch((err) => {
118
95
  // If the texture has been freed while loading, return early.
119
- // Type assertion needed because state could change during async operations
120
96
  if (this.state === 'freed') {
121
97
  return;
122
98
  }
123
- // Ensure texture is marked as failed
124
99
  this.state = 'failed';
125
- this.textureSource.setState('failed');
126
- }
100
+ this.textureSource.setCoreCtxState('failed', err);
101
+ console.error(err);
102
+ });
127
103
  }
128
104
  /**
129
105
  * Called when the texture data needs to be loaded and uploaded to a texture
@@ -131,29 +107,21 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
131
107
  async onLoadRequest() {
132
108
  const { glw } = this;
133
109
  const textureData = this.textureSource.textureData;
134
- // Early return if texture is already failed
135
- if (this.state === 'failed') {
136
- return { width: 0, height: 0 };
137
- }
138
- if (textureData === null || this._nativeCtxTexture === null) {
139
- this.state = 'failed';
140
- this.textureSource.setState('failed', new Error('No texture data available'));
141
- return { width: 0, height: 0 };
142
- }
110
+ assertTruthy(textureData, 'Texture data is null');
143
111
  // Set to a 1x1 transparent texture
144
112
  glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
145
113
  this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
114
+ // If the texture has been freed while loading, return early.
115
+ if (!this._nativeCtxTexture) {
116
+ assertTruthy(this.state === 'freed');
117
+ return { width: 0, height: 0 };
118
+ }
146
119
  let width = 0;
147
120
  let height = 0;
148
121
  glw.activeTexture(0);
149
- // High-performance error check - single call, direct state marking
150
- if (this.checkGLError() === true) {
151
- return { width: 0, height: 0 };
152
- }
153
122
  const tdata = textureData.data;
154
- const format = glw.RGBA;
155
- const formatBytes = 4;
156
- const memoryPadding = 1.1; // Add padding to account for GPU Padding
123
+ const format = textureData.premultiplyAlpha ? glw.RGBA : glw.RGB;
124
+ const formatBytes = format === glw.RGBA ? 4 : 3;
157
125
  // If textureData is null, the texture is empty (0, 0) and we don't need to
158
126
  // upload any data to the GPU.
159
127
  if ((typeof ImageBitmap !== 'undefined' && tdata instanceof ImageBitmap) ||
@@ -165,26 +133,32 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
165
133
  glw.bindTexture(this._nativeCtxTexture);
166
134
  glw.pixelStorei(glw.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !!textureData.premultiplyAlpha);
167
135
  glw.texImage2D(0, format, format, glw.UNSIGNED_BYTE, tdata);
168
- // Check for errors after image upload operations
169
- if (this.checkGLError() === true) {
170
- return { width: 0, height: 0 };
136
+ this.setTextureMemUse(width * height * formatBytes);
137
+ // generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
138
+ if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
139
+ glw.generateMipmap();
171
140
  }
172
- this.setTextureMemUse(height * width * formatBytes * memoryPadding);
173
141
  }
174
- else if (tdata && 'mipmaps' in tdata && tdata.mipmaps) {
175
- const { mipmaps, type, blockInfo } = tdata;
176
- uploadCompressedTexture[type](glw, this._nativeCtxTexture, tdata);
177
- // Check for errors after compressed texture operations
178
- if (this.checkGLError() === true) {
179
- return { width: 0, height: 0 };
180
- }
181
- width = tdata.width;
182
- height = tdata.height;
183
- this.txCoordX2 =
184
- width / (Math.ceil(width / blockInfo.width) * blockInfo.width);
185
- this.txCoordY2 =
186
- height / (Math.ceil(height / blockInfo.height) * blockInfo.height);
187
- this.setTextureMemUse(mipmaps[0]?.byteLength ?? 0);
142
+ else if (tdata === null) {
143
+ width = 0;
144
+ height = 0;
145
+ // Reset to a 1x1 transparent texture
146
+ glw.bindTexture(this._nativeCtxTexture);
147
+ glw.texImage2D(0, format, 1, 1, 0, format, glw.UNSIGNED_BYTE, TRANSPARENT_TEXTURE_DATA);
148
+ this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
149
+ }
150
+ else if ('mipmaps' in tdata && tdata.mipmaps) {
151
+ const { mipmaps, width = 0, height = 0, type, glInternalFormat } = tdata;
152
+ const view = type === 'ktx'
153
+ ? new DataView(mipmaps[0] ?? new ArrayBuffer(0))
154
+ : mipmaps[0];
155
+ glw.bindTexture(this._nativeCtxTexture);
156
+ glw.compressedTexImage2D(0, glInternalFormat, width, height, 0, view);
157
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
158
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
159
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
160
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
161
+ this.setTextureMemUse(view.byteLength);
188
162
  }
189
163
  else if (tdata && tdata instanceof Uint8Array) {
190
164
  // Color Texture
@@ -193,17 +167,10 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
193
167
  glw.bindTexture(this._nativeCtxTexture);
194
168
  glw.pixelStorei(glw.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !!textureData.premultiplyAlpha);
195
169
  glw.texImage2D(0, format, width, height, 0, format, glw.UNSIGNED_BYTE, tdata);
196
- // Check for errors after color texture operations
197
- if (this.checkGLError() === true) {
198
- return { width: 0, height: 0 };
199
- }
200
170
  this.setTextureMemUse(width * height * formatBytes);
201
171
  }
202
172
  else {
203
- throw new Error(`WebGlCoreCtxTexture.onLoadRequest: Unexpected textureData returned`);
204
- this.state = 'failed';
205
- this.textureSource.setState('failed', new Error('Unexpected texture data'));
206
- return { width: 0, height: 0 };
173
+ console.error(`WebGlCoreCtxTexture.onLoadRequest: Unexpected textureData returned`, textureData);
207
174
  }
208
175
  return {
209
176
  width,
@@ -220,31 +187,26 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
220
187
  return;
221
188
  }
222
189
  this.state = 'freed';
223
- this.textureSource.setState('freed');
224
- this.release();
225
- }
226
- /**
227
- * Release the WebGLTexture from the GPU without changing state
228
- */
229
- release() {
190
+ this.textureSource.setCoreCtxState('freed');
230
191
  this._w = 0;
231
192
  this._h = 0;
232
- if (this._nativeCtxTexture !== null) {
233
- this.glw.deleteTexture(this._nativeCtxTexture);
234
- this.setTextureMemUse(0);
235
- this._nativeCtxTexture = null;
193
+ if (!this._nativeCtxTexture) {
194
+ return;
236
195
  }
237
- // if the texture still has source data, free it
238
- this.textureSource.freeTextureData();
196
+ const { glw } = this;
197
+ glw.deleteTexture(this._nativeCtxTexture);
198
+ this.setTextureMemUse(0);
199
+ this._nativeCtxTexture = null;
239
200
  }
240
201
  /**
241
- * Create native context texture asynchronously
202
+ * Create native context texture
242
203
  *
243
204
  * @remarks
244
- * When this method resolves, the returned texture will be bound to the GL context state
245
- * and fully ready for use. This ensures proper GPU resource allocation timing.
205
+ * When this method returns the returned texture will be bound to the GL context state.
246
206
  *
247
- * @returns Promise that resolves to the native WebGL texture or null on failure
207
+ * @param width
208
+ * @param height
209
+ * @returns
248
210
  */
249
211
  createNativeCtxTexture() {
250
212
  const { glw } = this;
@@ -262,10 +224,6 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
262
224
  // texture wrapping method
263
225
  glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
264
226
  glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
265
- const error = glw.getError();
266
- if (error !== 0) {
267
- return null;
268
- }
269
227
  return nativeTexture;
270
228
  }
271
229
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WebGlCoreCtxTexture.js","sourceRoot":"","sources":["../../../../../src/core/renderers/webgl/WebGlCoreCtxTexture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebGlCoreCtxTexture.js","sourceRoot":"","sources":["../../../../../src/core/renderers/webgl/WebGlCoreCtxTexture.ts"],"names":[],"mappings":"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"}
@@ -85,7 +85,7 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
85
85
  shManager.useShader(shader);
86
86
  shader.bindRenderOp(this, shaderProps);
87
87
  // TODO: Reduce calculations required
88
- const quadIdx = (this.bufferIdx / 32) * 6 * 2;
88
+ const quadIdx = (this.bufferIdx / 24) * 6 * 2;
89
89
  // Clipping
90
90
  if (this.clippingRect.valid) {
91
91
  const { x, y, width, height } = this.clippingRect;
@@ -7,7 +7,7 @@ import { CoreShaderManager } from '../../CoreShaderManager.js';
7
7
  import { BufferCollection } from './internal/BufferCollection.js';
8
8
  import { WebGlCoreShader } from './WebGlCoreShader.js';
9
9
  import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
10
- import { type CoreNode } from '../../CoreNode.js';
10
+ import type { CoreNode } from '../../CoreNode.js';
11
11
  import type { BaseShaderController } from '../../../main-api/ShaderController.js';
12
12
  export type WebGlCoreRendererOptions = CoreRendererOptions;
13
13
  interface CoreWebGlSystem {
@@ -33,7 +33,6 @@ export declare class WebGlCoreRenderer extends CoreRenderer {
33
33
  * White pixel texture used by default when no texture is specified.
34
34
  */
35
35
  quadBufferUsage: number;
36
- numQuadsRendered: number;
37
36
  /**
38
37
  * Whether the renderer is currently rendering to a texture.
39
38
  */
@@ -94,7 +93,6 @@ export declare class WebGlCoreRenderer extends CoreRenderer {
94
93
  * @param surface
95
94
  */
96
95
  render(surface?: 'screen' | CoreContextTexture): void;
97
- getQuadCount(): number;
98
96
  renderToTexture(node: CoreNode): void;
99
97
  /**
100
98
  * Inserts an RTT node into `this.rttNodes` while maintaining the correct rendering order based on hierarchy.
@@ -30,7 +30,6 @@ import { compareRect, getNormalizedRgbaComponents, } from '../../lib/utils.js';
30
30
  import { WebGlCoreShader } from './WebGlCoreShader.js';
31
31
  import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
32
32
  import { RenderTexture } from '../../textures/RenderTexture.js';
33
- import { CoreNodeRenderState } from '../../CoreNode.js';
34
33
  import { WebGlCoreCtxRenderTexture } from './WebGlCoreCtxRenderTexture.js';
35
34
  const WORDS_PER_QUAD = 24;
36
35
  export class WebGlCoreRenderer extends CoreRenderer {
@@ -59,7 +58,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
59
58
  * White pixel texture used by default when no texture is specified.
60
59
  */
61
60
  quadBufferUsage = 0;
62
- numQuadsRendered = 0;
63
61
  /**
64
62
  * Whether the renderer is currently rendering to a texture.
65
63
  */
@@ -87,7 +85,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
87
85
  this.defaultShader = this.defShaderCtrl.shader;
88
86
  const quadBuffer = glw.createBuffer();
89
87
  assertTruthy(quadBuffer);
90
- const stride = 8 * Float32Array.BYTES_PER_ELEMENT;
88
+ const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
91
89
  this.quadBufferCollection = new BufferCollection([
92
90
  {
93
91
  buffer: quadBuffer,
@@ -124,14 +122,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
124
122
  stride,
125
123
  offset: 5 * Float32Array.BYTES_PER_ELEMENT,
126
124
  },
127
- a_nodeCoordinate: {
128
- name: 'a_nodeCoordinate',
129
- size: 2,
130
- type: glw.FLOAT,
131
- normalized: false,
132
- stride,
133
- offset: 6 * Float32Array.BYTES_PER_ELEMENT,
134
- },
135
125
  },
136
126
  },
137
127
  ]);
@@ -176,7 +166,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
176
166
  * If the shader props contain any automatic properties, update it with the
177
167
  * current dimensions and or alpha that will be used to render the quad.
178
168
  */
179
- if (params.shader !== this.defaultShader) {
169
+ if (params.shaderProps !== null) {
180
170
  if (hasOwn(params.shaderProps, '$dimensions') == true) {
181
171
  const dimensions = params.shaderProps.$dimensions;
182
172
  dimensions.width = params.width;
@@ -187,13 +177,16 @@ export class WebGlCoreRenderer extends CoreRenderer {
187
177
  }
188
178
  }
189
179
  let { curBufferIdx: bufferIdx, curRenderOp } = this;
190
- const targetDims = { width: params.width, height: params.height };
180
+ const targetDims = { width: -1, height: -1 };
181
+ targetDims.width = params.width;
182
+ targetDims.height = params.height;
183
+ const targetShader = params.shader || this.defaultShader;
184
+ assertTruthy(targetShader.getUniformLocation !== undefined, 'Invalid WebGL shader');
191
185
  if (this.reuseRenderOp(params) === false) {
192
- this.newRenderOp(params.shader, params.shaderProps, params.alpha, targetDims, params.clippingRect, bufferIdx, params.rtt, params.parentHasRenderTexture, params.framebufferDimensions);
186
+ this.newRenderOp(targetShader, params.shaderProps, params.alpha, targetDims, params.clippingRect, bufferIdx, params.rtt, params.parentHasRenderTexture, params.framebufferDimensions);
193
187
  curRenderOp = this.curRenderOp;
194
188
  assertTruthy(curRenderOp);
195
189
  }
196
- let ctxTexture = undefined;
197
190
  let texCoordX1 = 0;
198
191
  let texCoordY1 = 0;
199
192
  let texCoordX2 = 1;
@@ -206,18 +199,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
206
199
  texCoordY1 = ty / parentH;
207
200
  texCoordY2 = texCoordY1 + th / parentH;
208
201
  texture = texture.parentTexture;
209
- ctxTexture = texture.ctxTexture;
210
- }
211
- else {
212
- ctxTexture = texture.ctxTexture;
213
- if (ctxTexture === undefined) {
214
- ctxTexture = this.stage.defaultTexture?.ctxTexture;
215
- console.warn('WebGL Renderer: Texture does not have a ctxTexture, using default texture instead');
216
- }
217
- texCoordX1 = ctxTexture.txCoordX1;
218
- texCoordY1 = ctxTexture.txCoordY1;
219
- texCoordX2 = ctxTexture.txCoordX2;
220
- texCoordY2 = ctxTexture.txCoordY2;
221
202
  }
222
203
  if (texture.type === TextureType.image &&
223
204
  params.textureOptions !== null &&
@@ -257,6 +238,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
257
238
  if (flipY ^ +(texture.type === TextureType.renderToTexture)) {
258
239
  [texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
259
240
  }
241
+ const ctxTexture = texture.ctxTexture;
242
+ assertTruthy(ctxTexture instanceof WebGlCoreCtxTexture);
260
243
  const textureIdx = this.addTexture(ctxTexture, bufferIdx);
261
244
  assertTruthy(this.curRenderOp !== null);
262
245
  if (params.renderCoords) {
@@ -267,8 +250,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
267
250
  fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
268
251
  uiQuadBuffer[bufferIdx++] = params.colorTl; // color
269
252
  fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
270
- fQuadBuffer[bufferIdx++] = 0;
271
- fQuadBuffer[bufferIdx++] = 0;
272
253
  // Upper-Right
273
254
  fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
274
255
  fQuadBuffer[bufferIdx++] = params.renderCoords.y2;
@@ -276,8 +257,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
276
257
  fQuadBuffer[bufferIdx++] = texCoordY1;
277
258
  uiQuadBuffer[bufferIdx++] = params.colorTr;
278
259
  fQuadBuffer[bufferIdx++] = textureIdx;
279
- fQuadBuffer[bufferIdx++] = 1;
280
- fQuadBuffer[bufferIdx++] = 0;
281
260
  // Lower-Left
282
261
  fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
283
262
  fQuadBuffer[bufferIdx++] = params.renderCoords.y4;
@@ -285,8 +264,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
285
264
  fQuadBuffer[bufferIdx++] = texCoordY2;
286
265
  uiQuadBuffer[bufferIdx++] = params.colorBl;
287
266
  fQuadBuffer[bufferIdx++] = textureIdx;
288
- fQuadBuffer[bufferIdx++] = 0;
289
- fQuadBuffer[bufferIdx++] = 1;
290
267
  // Lower-Right
291
268
  fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
292
269
  fQuadBuffer[bufferIdx++] = params.renderCoords.y3;
@@ -294,8 +271,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
294
271
  fQuadBuffer[bufferIdx++] = texCoordY2;
295
272
  uiQuadBuffer[bufferIdx++] = params.colorBr;
296
273
  fQuadBuffer[bufferIdx++] = textureIdx;
297
- fQuadBuffer[bufferIdx++] = 1;
298
- fQuadBuffer[bufferIdx++] = 1;
299
274
  }
300
275
  else if (params.tb !== 0 || params.tc !== 0) {
301
276
  // Upper-Left
@@ -305,8 +280,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
305
280
  fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
306
281
  uiQuadBuffer[bufferIdx++] = params.colorTl; // color
307
282
  fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
308
- fQuadBuffer[bufferIdx++] = 0;
309
- fQuadBuffer[bufferIdx++] = 0;
310
283
  // Upper-Right
311
284
  fQuadBuffer[bufferIdx++] = params.tx + params.width * params.ta;
312
285
  fQuadBuffer[bufferIdx++] = params.ty + params.width * params.tc;
@@ -314,8 +287,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
314
287
  fQuadBuffer[bufferIdx++] = texCoordY1;
315
288
  uiQuadBuffer[bufferIdx++] = params.colorTr;
316
289
  fQuadBuffer[bufferIdx++] = textureIdx;
317
- fQuadBuffer[bufferIdx++] = 1;
318
- fQuadBuffer[bufferIdx++] = 0;
319
290
  // Lower-Left
320
291
  fQuadBuffer[bufferIdx++] = params.tx + params.height * params.tb;
321
292
  fQuadBuffer[bufferIdx++] = params.ty + params.height * params.td;
@@ -323,8 +294,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
323
294
  fQuadBuffer[bufferIdx++] = texCoordY2;
324
295
  uiQuadBuffer[bufferIdx++] = params.colorBl;
325
296
  fQuadBuffer[bufferIdx++] = textureIdx;
326
- fQuadBuffer[bufferIdx++] = 0;
327
- fQuadBuffer[bufferIdx++] = 1;
328
297
  // Lower-Right
329
298
  fQuadBuffer[bufferIdx++] =
330
299
  params.tx + params.width * params.ta + params.height * params.tb;
@@ -334,8 +303,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
334
303
  fQuadBuffer[bufferIdx++] = texCoordY2;
335
304
  uiQuadBuffer[bufferIdx++] = params.colorBr;
336
305
  fQuadBuffer[bufferIdx++] = textureIdx;
337
- fQuadBuffer[bufferIdx++] = 1;
338
- fQuadBuffer[bufferIdx++] = 1;
339
306
  }
340
307
  else {
341
308
  // Calculate the right corner of the quad
@@ -349,8 +316,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
349
316
  fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
350
317
  uiQuadBuffer[bufferIdx++] = params.colorTl; // color
351
318
  fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
352
- fQuadBuffer[bufferIdx++] = 0;
353
- fQuadBuffer[bufferIdx++] = 0;
354
319
  // Upper-Right
355
320
  fQuadBuffer[bufferIdx++] = rightCornerX;
356
321
  fQuadBuffer[bufferIdx++] = params.ty;
@@ -358,8 +323,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
358
323
  fQuadBuffer[bufferIdx++] = texCoordY1;
359
324
  uiQuadBuffer[bufferIdx++] = params.colorTr;
360
325
  fQuadBuffer[bufferIdx++] = textureIdx;
361
- fQuadBuffer[bufferIdx++] = 1;
362
- fQuadBuffer[bufferIdx++] = 0;
363
326
  // Lower-Left
364
327
  fQuadBuffer[bufferIdx++] = params.tx;
365
328
  fQuadBuffer[bufferIdx++] = rightCornerY;
@@ -367,8 +330,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
367
330
  fQuadBuffer[bufferIdx++] = texCoordY2;
368
331
  uiQuadBuffer[bufferIdx++] = params.colorBl;
369
332
  fQuadBuffer[bufferIdx++] = textureIdx;
370
- fQuadBuffer[bufferIdx++] = 0;
371
- fQuadBuffer[bufferIdx++] = 1;
372
333
  // Lower-Right
373
334
  fQuadBuffer[bufferIdx++] = rightCornerX;
374
335
  fQuadBuffer[bufferIdx++] = rightCornerY;
@@ -376,10 +337,9 @@ export class WebGlCoreRenderer extends CoreRenderer {
376
337
  fQuadBuffer[bufferIdx++] = texCoordY2;
377
338
  uiQuadBuffer[bufferIdx++] = params.colorBr;
378
339
  fQuadBuffer[bufferIdx++] = textureIdx;
379
- fQuadBuffer[bufferIdx++] = 1;
380
- fQuadBuffer[bufferIdx++] = 1;
381
340
  }
382
341
  // Update the length of the current render op
342
+ this.curRenderOp.length += WORDS_PER_QUAD;
383
343
  this.curRenderOp.numQuads++;
384
344
  this.curBufferIdx = bufferIdx;
385
345
  }
@@ -429,23 +389,25 @@ export class WebGlCoreRenderer extends CoreRenderer {
429
389
  */
430
390
  reuseRenderOp(params) {
431
391
  const { shader, shaderProps, parentHasRenderTexture, rtt, clippingRect } = params;
392
+ const targetShader = shader || this.defaultShader;
432
393
  // Switching shader program will require a new render operation
433
- if (this.curRenderOp?.shader !== shader) {
394
+ if (this.curRenderOp?.shader !== targetShader) {
434
395
  return false;
435
396
  }
436
397
  // Switching clipping rect will require a new render operation
437
- if (compareRect(this.curRenderOp.clippingRect, clippingRect) === false) {
398
+ if (!compareRect(this.curRenderOp.clippingRect, clippingRect)) {
438
399
  return false;
439
400
  }
440
401
  // Force new render operation if rendering to texture
441
402
  // @todo: This needs to be improved, render operations could also be reused
442
403
  // for rendering to texture
443
- if (parentHasRenderTexture === true || rtt === true) {
404
+ if (parentHasRenderTexture || rtt) {
444
405
  return false;
445
406
  }
446
407
  // Check if the shader can batch the shader properties
447
408
  if (this.curRenderOp.shader !== this.defaultShader &&
448
- this.curRenderOp.shader.canBatchShaderProps(this.curRenderOp.shaderProps, shaderProps) === false) {
409
+ (!shaderProps ||
410
+ !this.curRenderOp.shader.canBatchShaderProps(this.curRenderOp.shaderProps, shaderProps))) {
449
411
  return false;
450
412
  }
451
413
  // Render operation can be reused
@@ -468,19 +430,20 @@ export class WebGlCoreRenderer extends CoreRenderer {
468
430
  render(surface = 'screen') {
469
431
  const { glw, quadBuffer } = this;
470
432
  const arr = new Float32Array(quadBuffer, 0, this.curBufferIdx);
471
- const buffer = this.quadBufferCollection.getBuffer('a_position') || null;
433
+ const buffer = this.quadBufferCollection.getBuffer('a_position') ?? null;
472
434
  glw.arrayBufferData(buffer, arr, glw.STATIC_DRAW);
435
+ const doLog = false; // idx++ % 100 === 0;
436
+ if (doLog) {
437
+ console.log('renderOps', this.renderOps.length);
438
+ }
473
439
  for (let i = 0, length = this.renderOps.length; i < length; i++) {
474
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
475
- this.renderOps[i].draw();
440
+ const renderOp = this.renderOps[i];
441
+ if (doLog) {
442
+ console.log('Quads per operation', renderOp.numQuads);
443
+ }
444
+ renderOp.draw();
476
445
  }
477
446
  this.quadBufferUsage = this.curBufferIdx * arr.BYTES_PER_ELEMENT;
478
- // Calculate the size of each quad in bytes (4 vertices per quad) times the size of each vertex in bytes
479
- const QUAD_SIZE_IN_BYTES = 4 * (8 * arr.BYTES_PER_ELEMENT); // 8 attributes per vertex
480
- this.numQuadsRendered = this.quadBufferUsage / QUAD_SIZE_IN_BYTES;
481
- }
482
- getQuadCount() {
483
- return this.numQuadsRendered;
484
447
  }
485
448
  renderToTexture(node) {
486
449
  for (let i = 0; i < this.rttNodes.length; i++) {
@@ -561,17 +524,11 @@ export class WebGlCoreRenderer extends CoreRenderer {
561
524
  for (let i = 0; i < this.rttNodes.length; i++) {
562
525
  const node = this.rttNodes[i];
563
526
  // Skip nodes that don't have RTT updates
564
- if (node === undefined || node.hasRTTupdates === false) {
565
- continue;
566
- }
567
- // Skip nodes that are not visible
568
- if (node.worldAlpha === 0 ||
569
- (node.strictBounds === true &&
570
- node.renderState === CoreNodeRenderState.OutOfBounds)) {
527
+ if (!node || !node.hasRTTupdates) {
571
528
  continue;
572
529
  }
573
- // Skip nodes that do not have a loaded texture
574
- if (node.texture === null || node.texture.state !== 'loaded') {
530
+ if (!node.texture || !node.texture.ctxTexture) {
531
+ console.warn('Texture not loaded for RTT node', node);
575
532
  continue;
576
533
  }
577
534
  // Set the active RTT node to the current node
@@ -590,7 +547,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
590
547
  // Render all associated quads to the texture
591
548
  for (let i = 0; i < node.children.length; i++) {
592
549
  const child = node.children[i];
593
- if (child === undefined) {
550
+ if (!child) {
594
551
  continue;
595
552
  }
596
553
  this.stage.addQuads(child);