@lightningjs/renderer 2.18.2 → 2.18.4

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 (222) hide show
  1. package/dist/exports/canvas-shaders.d.ts +10 -0
  2. package/dist/exports/canvas-shaders.js +27 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -0
  4. package/dist/exports/index.d.ts +1 -0
  5. package/dist/exports/index.js +1 -0
  6. package/dist/exports/index.js.map +1 -1
  7. package/dist/exports/webgl-shaders.d.ts +11 -0
  8. package/dist/exports/webgl-shaders.js +28 -0
  9. package/dist/exports/webgl-shaders.js.map +1 -0
  10. package/dist/src/common/CommonTypes.d.ts +2 -1
  11. package/dist/src/core/CoreNode.js +8 -4
  12. package/dist/src/core/CoreNode.js.map +1 -1
  13. package/dist/src/core/CoreTextureManager.d.ts +2 -0
  14. package/dist/src/core/CoreTextureManager.js +8 -4
  15. package/dist/src/core/CoreTextureManager.js.map +1 -1
  16. package/dist/src/core/Stage.d.ts +1 -0
  17. package/dist/src/core/Stage.js +2 -1
  18. package/dist/src/core/Stage.js.map +1 -1
  19. package/dist/src/core/TextureError.d.ts +11 -0
  20. package/dist/src/core/TextureError.js +37 -0
  21. package/dist/src/core/TextureError.js.map +1 -0
  22. package/dist/src/core/TextureMemoryManager.d.ts +1 -19
  23. package/dist/src/core/TextureMemoryManager.js +16 -43
  24. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  25. package/dist/src/core/lib/colorCache.d.ts +1 -0
  26. package/dist/src/core/lib/colorCache.js +19 -0
  27. package/dist/src/core/lib/colorCache.js.map +1 -0
  28. package/dist/src/core/lib/colorParser.d.ts +21 -0
  29. package/dist/src/core/lib/colorParser.js +72 -0
  30. package/dist/src/core/lib/colorParser.js.map +1 -0
  31. package/dist/src/core/platform.js +0 -3
  32. package/dist/src/core/platform.js.map +1 -1
  33. package/dist/src/core/platforms/Platform.d.ts +37 -0
  34. package/dist/src/core/platforms/Platform.js +22 -0
  35. package/dist/src/core/platforms/Platform.js.map +1 -0
  36. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  37. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  38. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  39. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  40. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  41. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  42. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  43. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  44. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  45. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +35 -0
  46. package/dist/src/core/renderers/canvas/CanvasRenderer.js +201 -0
  47. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  48. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  49. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +58 -0
  50. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  51. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  52. package/dist/src/core/renderers/canvas/CanvasTexture.js +125 -0
  53. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  55. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +57 -0
  56. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  58. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +67 -0
  59. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +56 -0
  61. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +236 -0
  62. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  63. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  64. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +125 -0
  65. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  66. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  67. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  68. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  69. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  70. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  71. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  72. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  73. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +218 -0
  74. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  75. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  76. package/dist/src/core/shaders/canvas/Border.js +57 -0
  77. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  78. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  79. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  80. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  81. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  82. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  83. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  84. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  85. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  86. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  87. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  88. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  89. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  90. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  91. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  92. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  93. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  94. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  95. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  96. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  97. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  98. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  99. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  100. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  101. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  102. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  103. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  104. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  105. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  106. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  107. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  108. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  109. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  110. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  111. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  112. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  113. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  114. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  115. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  116. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  117. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  118. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  119. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  120. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  121. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  122. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  123. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  124. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  125. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  126. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  127. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  128. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  129. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  130. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  131. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  132. package/dist/src/core/shaders/utils.d.ts +5 -0
  133. package/dist/src/core/shaders/utils.js +41 -0
  134. package/dist/src/core/shaders/utils.js.map +1 -0
  135. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  136. package/dist/src/core/shaders/webgl/Border.js +110 -0
  137. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  138. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  139. package/dist/src/core/shaders/webgl/Default.js +86 -0
  140. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  141. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  142. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  143. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  144. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  145. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  146. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  147. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  148. package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
  149. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  150. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  151. package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
  152. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  153. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  154. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  155. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  156. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  157. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  158. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  159. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  160. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  161. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  162. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  163. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  164. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  165. package/dist/src/core/shaders/webgl/SdfShader.d.ts +30 -0
  166. package/dist/src/core/shaders/webgl/SdfShader.js +107 -0
  167. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  168. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  169. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  170. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  171. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  172. package/dist/src/core/text-rendering/CanvasFontHandler.js +221 -0
  173. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  174. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  175. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  176. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  177. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  178. package/dist/src/core/text-rendering/SdfFontHandler.js +388 -0
  179. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  180. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  181. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  182. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  183. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  184. package/dist/src/core/text-rendering/TextLayoutEngine.js +324 -0
  185. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  186. package/dist/src/core/text-rendering/TextRenderer.d.ts +368 -0
  187. package/dist/src/core/text-rendering/TextRenderer.js +20 -0
  188. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  189. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  190. package/dist/src/core/text-rendering/Utils.js +84 -0
  191. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  192. package/dist/src/core/textures/ImageTexture.js +3 -2
  193. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  194. package/dist/src/core/textures/SubTexture.js +2 -0
  195. package/dist/src/core/textures/SubTexture.js.map +1 -1
  196. package/dist/src/core/textures/Texture.d.ts +2 -1
  197. package/dist/src/core/textures/Texture.js +2 -1
  198. package/dist/src/core/textures/Texture.js.map +1 -1
  199. package/dist/src/core/utils.d.ts +1 -1
  200. package/dist/src/main-api/Inspector.js +1 -1
  201. package/dist/src/main-api/Inspector.js.map +1 -1
  202. package/dist/src/main-api/Renderer.d.ts +13 -0
  203. package/dist/src/main-api/Renderer.js +2 -0
  204. package/dist/src/main-api/Renderer.js.map +1 -1
  205. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  206. package/exports/index.ts +5 -0
  207. package/package.json +1 -1
  208. package/src/common/CommonTypes.ts +2 -1
  209. package/src/core/CoreNode.ts +10 -4
  210. package/src/core/CoreTextureManager.ts +19 -4
  211. package/src/core/Stage.ts +3 -0
  212. package/src/core/TextureError.ts +46 -0
  213. package/src/core/TextureMemoryManager.ts +18 -52
  214. package/src/core/platform.ts +0 -4
  215. package/src/core/textures/ImageTexture.ts +3 -2
  216. package/src/core/textures/SubTexture.ts +2 -0
  217. package/src/core/textures/Texture.ts +5 -3
  218. package/src/main-api/Inspector.ts +4 -1
  219. package/src/main-api/Renderer.ts +16 -0
  220. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.d.ts +0 -1
  221. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +0 -2
  222. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ export enum TextureErrorCode {
2
+ MEMORY_THRESHOLD_EXCEEDED = 'MEMORY_THRESHOLD_EXCEEDED',
3
+ TEXTURE_DATA_NULL = 'TEXTURE_DATA_NULL',
4
+ TEXTURE_TYPE_NOT_REGISTERED = 'TEXTURE_TYPE_NOT_REGISTERED',
5
+ }
6
+
7
+ const defaultMessages: Record<TextureErrorCode, string> = {
8
+ [TextureErrorCode.MEMORY_THRESHOLD_EXCEEDED]: 'Memory threshold exceeded',
9
+ [TextureErrorCode.TEXTURE_DATA_NULL]: 'Texture data is null',
10
+ [TextureErrorCode.TEXTURE_TYPE_NOT_REGISTERED]:
11
+ 'Texture type is not registered',
12
+ };
13
+
14
+ export class TextureError extends Error {
15
+ code?: TextureErrorCode;
16
+
17
+ constructor(message: string);
18
+ constructor(code: TextureErrorCode, message?: string);
19
+ constructor(codeOrMessage: TextureErrorCode | string, maybeMessage?: string) {
20
+ const isCode = Object.values(TextureErrorCode).includes(
21
+ codeOrMessage as TextureErrorCode,
22
+ );
23
+
24
+ const code = isCode ? (codeOrMessage as TextureErrorCode) : undefined;
25
+ let message: string;
26
+ if (isCode && code) {
27
+ message = maybeMessage ?? defaultMessages[code];
28
+ } else {
29
+ message = String(codeOrMessage);
30
+ }
31
+
32
+ super(message);
33
+ this.name = new.target.name;
34
+ if (code) this.code = code;
35
+ }
36
+ }
37
+
38
+ export function isTextureError(err: unknown): err is TextureError {
39
+ return (
40
+ err instanceof TextureError ||
41
+ (typeof err === 'object' &&
42
+ err !== null &&
43
+ (err as { name?: unknown }).name === 'TextureError' &&
44
+ typeof (err as { code?: unknown }).code === 'string')
45
+ );
46
+ }
@@ -122,7 +122,7 @@ export class TextureMemoryManager {
122
122
  private debugLogging: boolean;
123
123
  private lastCleanupTime = 0;
124
124
  private baselineMemoryAllocation: number;
125
- private needsDefrag = false;
125
+ private hasWarnedAboveCritical = false;
126
126
 
127
127
  public criticalCleanupRequested = false;
128
128
  public doNotExceedCriticalThreshold: boolean;
@@ -191,11 +191,10 @@ export class TextureMemoryManager {
191
191
  this.memUsed -= texture.memUsed;
192
192
 
193
193
  if (byteSize === 0) {
194
- // PERFORMANCE: Mark for deletion instead of splice (zero overhead)
194
+ // PERFORMANCE: Mark for deletion, slot will be reused later
195
195
  const index = this.loadedTextures.indexOf(texture);
196
196
  if (index !== -1) {
197
197
  this.loadedTextures[index] = null;
198
- this.needsDefrag = true;
199
198
  }
200
199
  texture.memUsed = 0;
201
200
  return;
@@ -204,7 +203,13 @@ export class TextureMemoryManager {
204
203
  texture.memUsed = byteSize;
205
204
  this.memUsed += byteSize;
206
205
  if (this.loadedTextures.indexOf(texture) === -1) {
207
- this.loadedTextures.push(texture);
206
+ // PERFORMANCE: Reuse empty slots before appending
207
+ const emptyIndex = this.loadedTextures.indexOf(null);
208
+ if (emptyIndex !== -1) {
209
+ this.loadedTextures[emptyIndex] = texture;
210
+ } else {
211
+ this.loadedTextures.push(texture);
212
+ }
208
213
  }
209
214
  }
210
215
 
@@ -225,19 +230,6 @@ export class TextureMemoryManager {
225
230
  return this.memUsed > this.criticalThreshold;
226
231
  }
227
232
 
228
- /**
229
- * Check if defragmentation is needed
230
- *
231
- * @remarks
232
- * Returns true if the loadedTextures array has null entries that need
233
- * to be compacted. Called by platform during idle periods.
234
- *
235
- * @returns true if defragmentation should be performed
236
- */
237
- checkDefrag() {
238
- return this.needsDefrag;
239
- }
240
-
241
233
  /**
242
234
  * Destroy a texture and null out its array position
243
235
  *
@@ -250,11 +242,10 @@ export class TextureMemoryManager {
250
242
  );
251
243
  }
252
244
 
253
- // PERFORMANCE: Null out array position instead of splice (zero overhead)
245
+ // PERFORMANCE: Null out array position, slot will be reused later
254
246
  const index = this.loadedTextures.indexOf(texture);
255
247
  if (index !== -1) {
256
248
  this.loadedTextures[index] = null;
257
- this.needsDefrag = true;
258
249
  }
259
250
 
260
251
  // Destroy texture and update memory counters
@@ -323,48 +314,23 @@ export class TextureMemoryManager {
323
314
  memUsed: this.memUsed,
324
315
  criticalThreshold: this.criticalThreshold,
325
316
  });
326
-
327
- if (this.debugLogging === true || isProductionEnvironment() === false) {
317
+ // Only emit the warning once per over-threshold period
318
+ if (
319
+ !this.hasWarnedAboveCritical &&
320
+ (this.debugLogging === true || isProductionEnvironment() === false)
321
+ ) {
328
322
  console.warn(
329
323
  `[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${this.memUsed}`,
330
324
  );
325
+
326
+ this.hasWarnedAboveCritical = true;
331
327
  }
332
328
  } else {
333
329
  this.criticalCleanupRequested = false;
330
+ this.hasWarnedAboveCritical = false;
334
331
  }
335
332
  }
336
333
 
337
- /**
338
- * Defragment the loadedTextures array by removing null entries
339
- *
340
- * @remarks
341
- * This should be called during idle periods to compact the array
342
- * after null-marking deletions. Zero overhead during critical cleanup.
343
- */
344
- defragment() {
345
- if (!this.needsDefrag) {
346
- return;
347
- }
348
-
349
- // PERFORMANCE: Single-pass compaction
350
- let writeIndex = 0;
351
- for (
352
- let readIndex = 0;
353
- readIndex < this.loadedTextures.length;
354
- readIndex++
355
- ) {
356
- const texture = this.loadedTextures[readIndex];
357
- if (texture !== null && texture !== undefined) {
358
- this.loadedTextures[writeIndex] = texture;
359
- writeIndex++;
360
- }
361
- }
362
-
363
- // Trim array to new size
364
- this.loadedTextures.length = writeIndex;
365
- this.needsDefrag = false;
366
- }
367
-
368
334
  /**
369
335
  * Get the current texture memory usage information
370
336
  *
@@ -66,10 +66,6 @@ export const startLoop = (stage: Stage) => {
66
66
  stage.txMemManager.cleanup();
67
67
  }
68
68
 
69
- if (stage.txMemManager.checkDefrag() === true) {
70
- stage.txMemManager.defragment();
71
- }
72
-
73
69
  stage.flushFrameEvents();
74
70
  return;
75
71
  }
@@ -138,7 +138,8 @@ export class ImageTexture extends Texture {
138
138
  const resolvedProps = ImageTexture.resolveDefaults(props);
139
139
  super(txManager);
140
140
  this.props = resolvedProps;
141
- this.maxRetryCount = resolvedProps.maxRetryCount ?? 5;
141
+ this.maxRetryCount =
142
+ resolvedProps.maxRetryCount ?? this.txManager.maxRetryCount;
142
143
  }
143
144
 
144
145
  hasAlphaChannel(mimeType: string) {
@@ -407,7 +408,7 @@ export class ImageTexture extends Texture {
407
408
  sy: props.sy ?? null,
408
409
  sw: props.sw ?? null,
409
410
  sh: props.sh ?? null,
410
- maxRetryCount: props.maxRetryCount ?? 5,
411
+ maxRetryCount: props.maxRetryCount ?? null,
411
412
  };
412
413
  }
413
414
 
@@ -137,6 +137,8 @@ export class SubTexture extends Texture {
137
137
  };
138
138
 
139
139
  private onParentTxFailed: TextureFailedEventHandler = (target, error) => {
140
+ //decrement with 1 because in the failed state it will do +1 again.
141
+ this.retryCount = this.parentTexture.retryCount - 1;
140
142
  this.forwardParentTxState('failed', error);
141
143
  };
142
144
 
@@ -22,6 +22,7 @@ import type { SubTextureProps } from './SubTexture.js';
22
22
  import type { Dimensions } from '../../common/CommonTypes.js';
23
23
  import { EventEmitter } from '../../common/EventEmitter.js';
24
24
  import type { CoreContextTexture } from '../renderers/CoreContextTexture.js';
25
+ import type { TextureError } from '../TextureError.js';
25
26
 
26
27
  /**
27
28
  * Event handler for when a Texture is freed
@@ -135,7 +136,7 @@ export abstract class Texture extends EventEmitter {
135
136
  * `null`.
136
137
  */
137
138
  private _dimensions: Dimensions | null = null;
138
- private _error: Error | null = null;
139
+ private _error: TextureError | null = null;
139
140
 
140
141
  // aggregate state
141
142
  public state: TextureState = 'initial';
@@ -162,7 +163,7 @@ export abstract class Texture extends EventEmitter {
162
163
  public memUsed = 0;
163
164
 
164
165
  public retryCount = 0;
165
- public maxRetryCount: number = 5;
166
+ public maxRetryCount: number;
166
167
 
167
168
  /**
168
169
  * Timestamp when texture was created (for startup grace period)
@@ -182,13 +183,14 @@ export abstract class Texture extends EventEmitter {
182
183
 
183
184
  constructor(protected txManager: CoreTextureManager) {
184
185
  super();
186
+ this.maxRetryCount = txManager.maxRetryCount;
185
187
  }
186
188
 
187
189
  get dimensions(): Dimensions | null {
188
190
  return this._dimensions;
189
191
  }
190
192
 
191
- get error(): Error | null {
193
+ get error(): TextureError | null {
192
194
  return this._error;
193
195
  }
194
196
 
@@ -533,7 +533,10 @@ export class Inspector {
533
533
 
534
534
  // Update error information if present
535
535
  if (texture.error) {
536
- div.setAttribute('data-texture-error', texture.error.message);
536
+ div.setAttribute(
537
+ 'data-texture-error',
538
+ texture.error.code || texture.error.message,
539
+ );
537
540
  } else {
538
541
  div.removeAttribute('data-texture-error');
539
542
  }
@@ -329,6 +329,20 @@ export interface RendererMainSettings {
329
329
  * @defaultValue `full`
330
330
  */
331
331
  createImageBitmapSupport?: 'auto' | 'basic' | 'options' | 'full';
332
+
333
+ /**
334
+ * Number of times to retry loading a failed texture
335
+ *
336
+ * @remarks
337
+ * When a texture fails to load, Lightning will retry up to this many times
338
+ * before permanently giving up. Each retry will clear the texture ownership
339
+ * and then re-establish it to trigger a new load attempt.
340
+ *
341
+ * Set to null to disable retries. Set to 0 to always try once and never retry.
342
+ * This is typically only used on ImageTexture instances.
343
+ *
344
+ */
345
+ maxRetryCount?: number;
332
346
  }
333
347
 
334
348
  /**
@@ -432,6 +446,7 @@ export class RendererMain extends EventEmitter {
432
446
  textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 42,
433
447
  canvas: settings.canvas || document.createElement('canvas'),
434
448
  createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
449
+ maxRetryCount: settings.maxRetryCount ?? 5,
435
450
  };
436
451
  this.settings = resolvedSettings;
437
452
 
@@ -477,6 +492,7 @@ export class RendererMain extends EventEmitter {
477
492
  strictBounds: this.settings.strictBounds,
478
493
  textureProcessingTimeLimit: this.settings.textureProcessingTimeLimit,
479
494
  createImageBitmapSupport: this.settings.createImageBitmapSupport,
495
+ maxRetryCount: this.settings.maxRetryCount,
480
496
  });
481
497
 
482
498
  // Extract the root node
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WebGlCoreShader.destroy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebGlCoreShader.destroy.js","sourceRoot":"","sources":["../../../../../src/core/renderers/webgl/WebGlCoreShader.destroy.ts"],"names":[],"mappings":""}