@lightningjs/renderer 2.18.3 → 2.19.0

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 (216) 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/CoreTextureManager.d.ts +2 -0
  12. package/dist/src/core/CoreTextureManager.js +8 -4
  13. package/dist/src/core/CoreTextureManager.js.map +1 -1
  14. package/dist/src/core/Stage.d.ts +1 -0
  15. package/dist/src/core/Stage.js +2 -1
  16. package/dist/src/core/Stage.js.map +1 -1
  17. package/dist/src/core/TextureError.d.ts +11 -0
  18. package/dist/src/core/TextureError.js +37 -0
  19. package/dist/src/core/TextureError.js.map +1 -0
  20. package/dist/src/core/TextureMemoryManager.d.ts +1 -0
  21. package/dist/src/core/TextureMemoryManager.js +6 -1
  22. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  23. package/dist/src/core/lib/colorCache.d.ts +1 -0
  24. package/dist/src/core/lib/colorCache.js +19 -0
  25. package/dist/src/core/lib/colorCache.js.map +1 -0
  26. package/dist/src/core/lib/colorParser.d.ts +21 -0
  27. package/dist/src/core/lib/colorParser.js +72 -0
  28. package/dist/src/core/lib/colorParser.js.map +1 -0
  29. package/dist/src/core/platforms/Platform.d.ts +37 -0
  30. package/dist/src/core/platforms/Platform.js +22 -0
  31. package/dist/src/core/platforms/Platform.js.map +1 -0
  32. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  33. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  34. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  35. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  36. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  37. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  38. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  39. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  40. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  41. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +35 -0
  42. package/dist/src/core/renderers/canvas/CanvasRenderer.js +201 -0
  43. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  44. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  45. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +58 -0
  46. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  47. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  48. package/dist/src/core/renderers/canvas/CanvasTexture.js +125 -0
  49. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  50. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  51. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +57 -0
  52. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  53. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  54. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +67 -0
  55. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  56. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +56 -0
  57. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +236 -0
  58. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  59. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  60. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +125 -0
  61. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  62. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  63. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  64. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  65. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  66. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  67. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  68. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  69. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +218 -0
  70. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  71. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +23 -18
  72. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  74. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +31 -4
  75. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  76. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  77. package/dist/src/core/shaders/canvas/Border.js +57 -0
  78. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  79. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  80. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  81. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  82. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  83. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  84. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  85. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  86. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  87. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  88. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  89. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  90. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  91. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  92. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  93. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  94. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  95. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  96. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  97. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  98. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  99. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  100. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  101. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  102. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  103. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  104. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  105. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  106. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  107. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  108. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  109. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  110. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  111. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  112. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  113. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  114. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  115. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  116. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  117. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  118. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  119. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  120. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  121. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  122. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  123. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  124. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  125. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  126. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  127. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  128. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  129. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  130. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  131. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  132. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  133. package/dist/src/core/shaders/utils.d.ts +5 -0
  134. package/dist/src/core/shaders/utils.js +41 -0
  135. package/dist/src/core/shaders/utils.js.map +1 -0
  136. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  137. package/dist/src/core/shaders/webgl/Border.js +110 -0
  138. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  140. package/dist/src/core/shaders/webgl/Default.js +86 -0
  141. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  142. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  143. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  144. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  145. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  146. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  147. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  148. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  149. package/dist/src/core/shaders/webgl/LinearGradient.js +99 -0
  150. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  151. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  152. package/dist/src/core/shaders/webgl/RadialGradient.js +96 -0
  153. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  154. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  155. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  156. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  157. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  158. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  159. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  160. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  161. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  162. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  163. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  164. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  165. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  166. package/dist/src/core/shaders/webgl/SdfShader.d.ts +30 -0
  167. package/dist/src/core/shaders/webgl/SdfShader.js +107 -0
  168. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  169. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  170. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  171. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  172. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  173. package/dist/src/core/text-rendering/CanvasFontHandler.js +221 -0
  174. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  175. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  176. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  177. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  178. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  179. package/dist/src/core/text-rendering/SdfFontHandler.js +388 -0
  180. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  181. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  182. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  183. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  184. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  185. package/dist/src/core/text-rendering/TextLayoutEngine.js +324 -0
  186. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  187. package/dist/src/core/text-rendering/TextRenderer.d.ts +368 -0
  188. package/dist/src/core/text-rendering/TextRenderer.js +20 -0
  189. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  190. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  191. package/dist/src/core/text-rendering/Utils.js +84 -0
  192. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  193. package/dist/src/core/textures/ImageTexture.js +3 -2
  194. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  195. package/dist/src/core/textures/Texture.d.ts +2 -1
  196. package/dist/src/core/textures/Texture.js +2 -1
  197. package/dist/src/core/textures/Texture.js.map +1 -1
  198. package/dist/src/main-api/Inspector.js +1 -1
  199. package/dist/src/main-api/Inspector.js.map +1 -1
  200. package/dist/src/main-api/Renderer.d.ts +13 -0
  201. package/dist/src/main-api/Renderer.js +2 -0
  202. package/dist/src/main-api/Renderer.js.map +1 -1
  203. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  204. package/exports/index.ts +5 -0
  205. package/package.json +1 -1
  206. package/src/common/CommonTypes.ts +2 -1
  207. package/src/core/CoreTextureManager.ts +19 -4
  208. package/src/core/Stage.ts +3 -0
  209. package/src/core/TextureError.ts +46 -0
  210. package/src/core/TextureMemoryManager.ts +9 -2
  211. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +23 -18
  212. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +32 -4
  213. package/src/core/textures/ImageTexture.ts +3 -2
  214. package/src/core/textures/Texture.ts +5 -3
  215. package/src/main-api/Inspector.ts +4 -1
  216. package/src/main-api/Renderer.ts +16 -0
@@ -121,20 +121,6 @@ export class LinearGradientEffect extends ShaderEffect {
121
121
  };
122
122
 
123
123
  static override methods: Record<string, string> = {
124
- fromLinear: `
125
- vec4 function(vec4 linearRGB) {
126
- vec4 higher = vec4(1.055)*pow(linearRGB, vec4(1.0/2.4)) - vec4(0.055);
127
- vec4 lower = linearRGB * vec4(12.92);
128
- return mix(higher, lower, 1.0);
129
- }
130
- `,
131
- toLinear: `
132
- vec4 function(vec4 sRGB) {
133
- vec4 higher = pow((sRGB + vec4(0.055))/vec4(1.055), vec4(2.4));
134
- vec4 lower = sRGB/vec4(12.92);
135
- return mix(higher, lower, 1.0);
136
- }
137
- `,
138
124
  calcPoint: `
139
125
  vec2 function(float d, float angle) {
140
126
  return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
@@ -162,10 +148,29 @@ export class LinearGradientEffect extends ShaderEffect {
162
148
  vec2 gradVec = t - f;
163
149
  float dist = dot(v_textureCoordinate.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
164
150
 
165
- float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
166
- vec4 colorOut = $fromLinear(mix($toLinear(colors[0]), $toLinear(colors[1]), stopCalc));
167
- ${this.ColorLoop(colors)}
168
- return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
151
+ //return early if dist is lower or equal to first stop
152
+ if(dist <= stops[0]) {
153
+ return mix(maskColor, colors[0], clamp(colors[0].a, 0.0, 1.0));
154
+ }
155
+ const int amount = ${colors};
156
+ const int last = amount - 1;
157
+
158
+ if(dist >= stops[last]) {
159
+ return mix(maskColor, colors[last], clamp(colors[last].a, 0.0, 1.0));
160
+ }
161
+
162
+ for(int i = 0; i < last; i++) {
163
+ float left = stops[i];
164
+ float right = stops[i + 1];
165
+ if(dist >= left && dist <= right) {
166
+ float localDist = smoothstep(left, right, dist);
167
+ vec4 colorOut = mix(colors[i], colors[i + 1], localDist);
168
+ return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
169
+ }
170
+ }
171
+
172
+ //final fallback
173
+ return mix(maskColor, colors[last], clamp(colors[last].a, 0.0, 1.0));
169
174
  `;
170
175
  };
171
176
  }
@@ -141,6 +141,14 @@ export class RadialGradientEffect extends ShaderEffect {
141
141
  },
142
142
  };
143
143
 
144
+ static override methods: Record<string, string> = {
145
+ getGradientColor: `
146
+ float function(float dist) {
147
+ return clamp(-dist, 0.0, 1.0);
148
+ }
149
+ `,
150
+ };
151
+
144
152
  static ColorLoop = (amount: number): string => {
145
153
  let loop = '';
146
154
  for (let i = 2; i < amount; i++) {
@@ -159,10 +167,30 @@ export class RadialGradientEffect extends ShaderEffect {
159
167
 
160
168
  float dist = length((point - projection) / vec2(width, height));
161
169
 
162
- float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
163
- vec4 colorOut = mix(colors[0], colors[1], stopCalc);
164
- ${this.ColorLoop(colors)}
165
- return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
170
+ dist = clamp(dist, 0.0, 1.0);
171
+ //return early if dist is lower or equal to first stop
172
+ if(dist <= stops[0]) {
173
+ return mix(maskColor, colors[0], clamp(colors[0].a, 0.0, 1.0));
174
+ }
175
+ const int amount = ${colors};
176
+ const int last = amount - 1;
177
+
178
+ if(dist >= stops[last]) {
179
+ return mix(maskColor, colors[last], clamp(colors[last].a, 0.0, 1.0));
180
+ }
181
+
182
+ for(int i = 0; i < last; i++) {
183
+ float left = stops[i];
184
+ float right = stops[i + 1];
185
+ if(dist >= left && dist <= right) {
186
+ float localDist = smoothstep(left, right, dist);
187
+ vec4 colorOut = mix(colors[i], colors[i + 1], localDist);
188
+ return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
189
+ }
190
+ }
191
+
192
+ //final fallback
193
+ return mix(maskColor, colors[last], clamp(colors[last].a, 0.0, 1.0));
166
194
  `;
167
195
  };
168
196
  }
@@ -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
 
@@ -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