@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.
- package/dist/exports/canvas-shaders.d.ts +10 -0
- package/dist/exports/canvas-shaders.js +27 -0
- package/dist/exports/canvas-shaders.js.map +1 -0
- package/dist/exports/index.d.ts +1 -0
- package/dist/exports/index.js +1 -0
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/webgl-shaders.d.ts +11 -0
- package/dist/exports/webgl-shaders.js +28 -0
- package/dist/exports/webgl-shaders.js.map +1 -0
- package/dist/src/common/CommonTypes.d.ts +2 -1
- package/dist/src/core/CoreNode.js +8 -4
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +2 -0
- package/dist/src/core/CoreTextureManager.js +8 -4
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +1 -0
- package/dist/src/core/Stage.js +2 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +1 -19
- package/dist/src/core/TextureMemoryManager.js +16 -43
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +72 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/platform.js +0 -3
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +37 -0
- package/dist/src/core/platforms/Platform.js +22 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
- package/dist/src/core/platforms/web/WebPlatform.js +84 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
- package/dist/src/core/renderers/CoreShaderNode.js +113 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
- package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +35 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +201 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +58 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +125 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +57 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +67 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +56 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +236 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +125 -0
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +218 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
- package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
- package/dist/src/core/shaders/canvas/Border.js +57 -0
- package/dist/src/core/shaders/canvas/Border.js.map +1 -0
- package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
- package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/canvas/Rounded.js +33 -0
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/Shadow.js +31 -0
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
- package/dist/src/core/shaders/canvas/utils/render.js +84 -0
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/utils.d.ts +5 -0
- package/dist/src/core/shaders/utils.js +41 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Border.js +110 -0
- package/dist/src/core/shaders/webgl/Border.js.map +1 -0
- package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
- package/dist/src/core/shaders/webgl/Default.js +86 -0
- package/dist/src/core/shaders/webgl/Default.js.map +1 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
- package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/webgl/Rounded.js +86 -0
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +30 -0
- package/dist/src/core/shaders/webgl/SdfShader.js +107 -0
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Shadow.js +110 -0
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +221 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +388 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +324 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +368 -0
- package/dist/src/core/text-rendering/TextRenderer.js +20 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +84 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ImageTexture.js +3 -2
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.js +2 -0
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +2 -1
- package/dist/src/core/textures/Texture.js +2 -1
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/main-api/Inspector.js +1 -1
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +13 -0
- package/dist/src/main-api/Renderer.js +2 -0
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/index.ts +5 -0
- package/package.json +1 -1
- package/src/common/CommonTypes.ts +2 -1
- package/src/core/CoreNode.ts +10 -4
- package/src/core/CoreTextureManager.ts +19 -4
- package/src/core/Stage.ts +3 -0
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +18 -52
- package/src/core/platform.ts +0 -4
- package/src/core/textures/ImageTexture.ts +3 -2
- package/src/core/textures/SubTexture.ts +2 -0
- package/src/core/textures/Texture.ts +5 -3
- package/src/main-api/Inspector.ts +4 -1
- package/src/main-api/Renderer.ts +16 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.d.ts +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +0 -2
- 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
|
|
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
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
*
|
package/src/core/platform.ts
CHANGED
|
@@ -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 =
|
|
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 ??
|
|
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:
|
|
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
|
|
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():
|
|
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(
|
|
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
|
}
|
package/src/main-api/Renderer.ts
CHANGED
|
@@ -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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebGlCoreShader.destroy.js","sourceRoot":"","sources":["../../../../../src/core/renderers/webgl/WebGlCoreShader.destroy.ts"],"names":[],"mappings":""}
|