@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta8
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/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -1
- package/dist/exports/utils.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +24 -49
- package/dist/src/core/CoreNode.js +251 -255
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +1 -1
- package/dist/src/core/CoreTextNode.js +14 -15
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.js +5 -4
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +12 -27
- package/dist/src/core/Stage.js +50 -37
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +9 -0
- package/dist/src/core/TextureMemoryManager.js +78 -48
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.js +5 -0
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +7 -1
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -0
- package/dist/src/core/renderers/CoreShaderNode.js +9 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +1 -1
- package/dist/src/core/textures/ImageTexture.js +1 -1
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +8 -0
- package/dist/src/core/textures/Texture.js +13 -0
- 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.d.ts +6 -1
- package/dist/src/main-api/Inspector.js +42 -4
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +62 -43
- package/dist/src/main-api/Renderer.js +119 -31
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/utils.ts +7 -1
- package/package.json +1 -1
- package/src/core/CoreNode.ts +301 -313
- package/src/core/CoreTextNode.ts +23 -20
- package/src/core/CoreTextureManager.ts +5 -4
- package/src/core/Stage.ts +68 -65
- package/src/core/TextureMemoryManager.ts +104 -63
- package/src/core/animations/CoreAnimation.ts +7 -0
- package/src/core/animations/CoreAnimationController.ts +8 -1
- package/src/core/renderers/CoreRenderer.ts +1 -0
- package/src/core/renderers/CoreShaderNode.ts +10 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
- package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
- package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
- package/src/core/shaders/canvas/LinearGradient.ts +8 -6
- package/src/core/shaders/canvas/RadialGradient.ts +22 -36
- package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
- package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
- package/src/core/shaders/templates/BorderTemplate.ts +1 -1
- package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
- package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
- package/src/core/shaders/webgl/HolePunch.ts +4 -7
- package/src/core/shaders/webgl/LinearGradient.ts +5 -4
- package/src/core/shaders/webgl/RadialGradient.ts +7 -6
- package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
- package/src/core/textures/ImageTexture.ts +17 -16
- package/src/core/textures/Texture.ts +14 -0
- package/src/main-api/Inspector.ts +52 -5
- package/src/main-api/Renderer.ts +222 -77
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -56
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/temp.d.ts +0 -1
- package/dist/src/core/temp.js +0 -77
- package/dist/src/core/temp.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
package/src/core/CoreTextNode.ts
CHANGED
|
@@ -25,7 +25,12 @@ import type {
|
|
|
25
25
|
TrFailedEventHandler,
|
|
26
26
|
TrLoadedEventHandler,
|
|
27
27
|
} from './text-rendering/renderers/TextRenderer.js';
|
|
28
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
CoreNode,
|
|
30
|
+
CoreNodeRenderState,
|
|
31
|
+
UpdateType,
|
|
32
|
+
type CoreNodeProps,
|
|
33
|
+
} from './CoreNode.js';
|
|
29
34
|
import type { Stage } from './Stage.js';
|
|
30
35
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
31
36
|
import type {
|
|
@@ -33,7 +38,6 @@ import type {
|
|
|
33
38
|
NodeTextLoadedPayload,
|
|
34
39
|
} from '../common/CommonTypes.js';
|
|
35
40
|
import type { RectWithValid } from './lib/utils.js';
|
|
36
|
-
import { assertTruthy } from '../utils.js';
|
|
37
41
|
|
|
38
42
|
export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
|
|
39
43
|
/**
|
|
@@ -130,7 +134,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
130
134
|
this.props.width = calcWidth;
|
|
131
135
|
this.props.height = calcHeight;
|
|
132
136
|
}
|
|
133
|
-
this.
|
|
137
|
+
this.setUpdateType(UpdateType.Local);
|
|
134
138
|
|
|
135
139
|
// Incase the RAF loop has been stopped already before text was loaded,
|
|
136
140
|
// we request a render so it can be drawn.
|
|
@@ -211,7 +215,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
211
215
|
this._textRendererOverride,
|
|
212
216
|
);
|
|
213
217
|
|
|
214
|
-
if (
|
|
218
|
+
if (textRenderer === null) {
|
|
215
219
|
console.warn(
|
|
216
220
|
'Text Renderer not found for font',
|
|
217
221
|
this.trState.props.fontFamily,
|
|
@@ -370,23 +374,24 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
370
374
|
override update(delta: number, parentClippingRect: RectWithValid) {
|
|
371
375
|
super.update(delta, parentClippingRect);
|
|
372
376
|
|
|
373
|
-
assertTruthy(this.globalTransform);
|
|
374
|
-
|
|
375
377
|
// globalTransform is updated in super.update(delta)
|
|
376
|
-
this.textRenderer.set.x(this.trState, this.globalTransform
|
|
377
|
-
this.textRenderer.set.y(this.trState, this.globalTransform
|
|
378
|
+
this.textRenderer.set.x(this.trState, this.globalTransform!.tx);
|
|
379
|
+
this.textRenderer.set.y(this.trState, this.globalTransform!.ty);
|
|
378
380
|
}
|
|
379
381
|
|
|
380
|
-
override
|
|
381
|
-
|
|
382
|
-
|
|
382
|
+
override updateIsRenderable() {
|
|
383
|
+
// If the node is out of bounds or has an alpha of 0, it is not renderable
|
|
384
|
+
if (
|
|
385
|
+
this.worldAlpha === 0 ||
|
|
386
|
+
this.renderState <= CoreNodeRenderState.OutOfBounds
|
|
387
|
+
) {
|
|
388
|
+
this.setRenderable(false);
|
|
389
|
+
return;
|
|
383
390
|
}
|
|
384
391
|
|
|
385
|
-
if (this.trState && this.trState.props.text !== '') {
|
|
386
|
-
|
|
392
|
+
if (this.trState !== undefined && this.trState.props.text !== '') {
|
|
393
|
+
this.setRenderable(true);
|
|
387
394
|
}
|
|
388
|
-
|
|
389
|
-
return false;
|
|
390
395
|
}
|
|
391
396
|
|
|
392
397
|
override setRenderable(isRenderable: boolean) {
|
|
@@ -395,11 +400,9 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
395
400
|
}
|
|
396
401
|
|
|
397
402
|
override renderQuads(renderer: CoreRenderer) {
|
|
398
|
-
assertTruthy(this.globalTransform);
|
|
399
|
-
|
|
400
403
|
// If the text renderer does not support rendering quads, fallback to the
|
|
401
404
|
// default renderQuads method
|
|
402
|
-
if (
|
|
405
|
+
if (this.textRenderer.renderQuads === undefined) {
|
|
403
406
|
super.renderQuads(renderer);
|
|
404
407
|
return;
|
|
405
408
|
}
|
|
@@ -408,8 +411,8 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
408
411
|
|
|
409
412
|
// Prevent quad rendering if parent has a render texture
|
|
410
413
|
// and this node is not the render texture
|
|
411
|
-
if (this.parentHasRenderTexture) {
|
|
412
|
-
if (
|
|
414
|
+
if (this.parentHasRenderTexture === true) {
|
|
415
|
+
if (renderer.renderToTextureActive === false) {
|
|
413
416
|
return;
|
|
414
417
|
}
|
|
415
418
|
// Prevent quad rendering if parent render texture is not the active render texture
|
|
@@ -488,12 +488,13 @@ export class CoreTextureManager extends EventEmitter {
|
|
|
488
488
|
return;
|
|
489
489
|
}
|
|
490
490
|
|
|
491
|
-
const
|
|
491
|
+
const platform = this.platform;
|
|
492
|
+
const startTime = platform.getTimeStamp();
|
|
492
493
|
|
|
493
494
|
// Process priority queue
|
|
494
495
|
while (
|
|
495
496
|
this.priorityQueue.length > 0 &&
|
|
496
|
-
|
|
497
|
+
platform.getTimeStamp() - startTime < maxProcessingTime
|
|
497
498
|
) {
|
|
498
499
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
499
500
|
const texture = this.priorityQueue.pop()!;
|
|
@@ -505,7 +506,7 @@ export class CoreTextureManager extends EventEmitter {
|
|
|
505
506
|
// Process uploads
|
|
506
507
|
while (
|
|
507
508
|
this.uploadTextureQueue.length > 0 &&
|
|
508
|
-
|
|
509
|
+
platform.getTimeStamp() - startTime < maxProcessingTime
|
|
509
510
|
) {
|
|
510
511
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
511
512
|
this.uploadTexture(this.uploadTextureQueue.pop()!);
|
|
@@ -514,7 +515,7 @@ export class CoreTextureManager extends EventEmitter {
|
|
|
514
515
|
// Process downloads
|
|
515
516
|
while (
|
|
516
517
|
this.downloadTextureSourceQueue.length > 0 &&
|
|
517
|
-
|
|
518
|
+
platform.getTimeStamp() - startTime < maxProcessingTime
|
|
518
519
|
) {
|
|
519
520
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
520
521
|
const texture = this.downloadTextureSourceQueue.shift()!;
|
package/src/core/Stage.ts
CHANGED
|
@@ -46,8 +46,6 @@ import {
|
|
|
46
46
|
type TextureMemoryManagerSettings,
|
|
47
47
|
} from './TextureMemoryManager.js';
|
|
48
48
|
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
49
|
-
import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
|
|
50
|
-
import type { CanvasRenderer } from './renderers/canvas/CanvasRenderer.js';
|
|
51
49
|
import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
|
|
52
50
|
import { santizeCustomDataMap } from '../main-api/utils.js';
|
|
53
51
|
import type { SdfTextRenderer } from './text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js';
|
|
@@ -59,30 +57,19 @@ import type { Texture } from './textures/Texture.js';
|
|
|
59
57
|
import { ColorTexture } from './textures/ColorTexture.js';
|
|
60
58
|
import type { Platform } from './platforms/Platform.js';
|
|
61
59
|
import type { WebPlatform } from './platforms/web/WebPlatform.js';
|
|
60
|
+
import type { RendererMainSettings } from '../main-api/Renderer.js';
|
|
62
61
|
|
|
63
|
-
export
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
export type StageOptions = Omit<
|
|
63
|
+
RendererMainSettings,
|
|
64
|
+
'inspector' | 'platform'
|
|
65
|
+
> & {
|
|
66
66
|
textureMemory: TextureMemoryManagerSettings;
|
|
67
|
-
boundsMargin: number | [number, number, number, number];
|
|
68
|
-
deviceLogicalPixelRatio: number;
|
|
69
|
-
devicePhysicalPixelRatio: number;
|
|
70
67
|
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
71
|
-
clearColor: number;
|
|
72
68
|
fpsUpdateInterval: number;
|
|
73
|
-
enableContextSpy: boolean;
|
|
74
|
-
forceWebGL2: boolean;
|
|
75
|
-
numImageWorkers: number;
|
|
76
|
-
renderEngine: typeof WebGlRenderer | typeof CanvasRenderer;
|
|
77
69
|
eventBus: EventEmitter;
|
|
78
|
-
quadBufferSize: number;
|
|
79
|
-
fontEngines: (typeof CanvasTextRenderer | typeof SdfTextRenderer)[];
|
|
80
|
-
inspector: boolean;
|
|
81
|
-
strictBounds: boolean;
|
|
82
|
-
textureProcessingTimeLimit: number;
|
|
83
|
-
createImageBitmapSupport: 'auto' | 'basic' | 'options' | 'full';
|
|
84
70
|
platform: Platform | WebPlatform;
|
|
85
|
-
|
|
71
|
+
inspector: boolean;
|
|
72
|
+
};
|
|
86
73
|
|
|
87
74
|
export type StageFpsUpdateHandler = (
|
|
88
75
|
stage: Stage,
|
|
@@ -114,11 +101,11 @@ export class Stage {
|
|
|
114
101
|
public readonly interactiveNodes: Set<CoreNode> = new Set();
|
|
115
102
|
public boundsMargin: [number, number, number, number];
|
|
116
103
|
public readonly defShaderNode: CoreShaderNode | null = null;
|
|
117
|
-
public
|
|
118
|
-
public
|
|
104
|
+
public strictBound: Bound;
|
|
105
|
+
public preloadBound: Bound;
|
|
119
106
|
public readonly strictBounds: boolean;
|
|
120
107
|
public readonly defaultTexture: Texture | null = null;
|
|
121
|
-
public
|
|
108
|
+
public pixelRatio: number;
|
|
122
109
|
public readonly bufferMemory: number = 2e6;
|
|
123
110
|
public readonly platform: Platform | WebPlatform;
|
|
124
111
|
public readonly calculateTextureCoord: boolean;
|
|
@@ -152,7 +139,7 @@ export class Stage {
|
|
|
152
139
|
/**
|
|
153
140
|
* Stage constructor
|
|
154
141
|
*/
|
|
155
|
-
constructor(
|
|
142
|
+
constructor(public options: StageOptions) {
|
|
156
143
|
const {
|
|
157
144
|
canvas,
|
|
158
145
|
clearColor,
|
|
@@ -385,12 +372,12 @@ export class Stage {
|
|
|
385
372
|
* Start a new frame draw
|
|
386
373
|
*/
|
|
387
374
|
drawFrame() {
|
|
388
|
-
const { renderer, renderRequested } = this;
|
|
389
|
-
|
|
375
|
+
const { renderer, renderRequested, root } = this;
|
|
376
|
+
const txMemManager = this.txMemManager;
|
|
390
377
|
|
|
391
378
|
// Update tree if needed
|
|
392
|
-
if (
|
|
393
|
-
|
|
379
|
+
if (root.updateType !== 0) {
|
|
380
|
+
root.update(this.deltaTime, root.clippingRect);
|
|
394
381
|
}
|
|
395
382
|
|
|
396
383
|
// Process some textures
|
|
@@ -400,12 +387,12 @@ export class Stage {
|
|
|
400
387
|
renderer.reset();
|
|
401
388
|
|
|
402
389
|
// Check if we need to cleanup textures
|
|
403
|
-
if (
|
|
404
|
-
|
|
390
|
+
if (txMemManager.criticalCleanupRequested === true) {
|
|
391
|
+
txMemManager.cleanup(false);
|
|
405
392
|
|
|
406
|
-
if (
|
|
393
|
+
if (txMemManager.criticalCleanupRequested === true) {
|
|
407
394
|
// If we still need to cleanup, request another but aggressive cleanup
|
|
408
|
-
|
|
395
|
+
txMemManager.cleanup(true);
|
|
409
396
|
}
|
|
410
397
|
}
|
|
411
398
|
|
|
@@ -419,13 +406,13 @@ export class Stage {
|
|
|
419
406
|
this.addQuads(this.root);
|
|
420
407
|
|
|
421
408
|
// Perform render pass
|
|
422
|
-
renderer
|
|
409
|
+
renderer.render();
|
|
423
410
|
|
|
424
411
|
this.calculateFps();
|
|
425
412
|
this.calculateQuads();
|
|
426
413
|
|
|
427
414
|
// Reset renderRequested flag if it was set
|
|
428
|
-
if (renderRequested) {
|
|
415
|
+
if (renderRequested === true) {
|
|
429
416
|
this.renderRequested = false;
|
|
430
417
|
}
|
|
431
418
|
}
|
|
@@ -663,7 +650,20 @@ export class Stage {
|
|
|
663
650
|
}
|
|
664
651
|
|
|
665
652
|
/**
|
|
666
|
-
*
|
|
653
|
+
* Update the viewport bounds
|
|
654
|
+
*/
|
|
655
|
+
updateViewportBounds() {
|
|
656
|
+
const { appWidth, appHeight } = this.options;
|
|
657
|
+
this.strictBound = createBound(0, 0, appWidth, appHeight);
|
|
658
|
+
this.preloadBound = createPreloadBounds(
|
|
659
|
+
this.strictBound,
|
|
660
|
+
this.boundsMargin,
|
|
661
|
+
);
|
|
662
|
+
this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
|
|
663
|
+
this.root.childUpdateType |= UpdateType.RenderBounds;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
/** Find all nodes at a given point
|
|
667
667
|
* @param data
|
|
668
668
|
*/
|
|
669
669
|
findNodesAtPoint(data: Point): CoreNode[] {
|
|
@@ -713,18 +713,23 @@ export class Stage {
|
|
|
713
713
|
*/
|
|
714
714
|
protected resolveNodeDefaults(props: Partial<CoreNodeProps>): CoreNodeProps {
|
|
715
715
|
const color = props.color ?? 0xffffffff;
|
|
716
|
-
const
|
|
717
|
-
const
|
|
718
|
-
|
|
719
|
-
const
|
|
720
|
-
|
|
721
|
-
const
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
716
|
+
const colorTop = props.colorTop ?? color;
|
|
717
|
+
const colorBottom = props.colorBottom ?? color;
|
|
718
|
+
const colorLeft = props.colorLeft ?? color;
|
|
719
|
+
const colorRight = props.colorRight ?? color;
|
|
720
|
+
|
|
721
|
+
const colorTl = props.colorTl ?? colorTop ?? colorLeft ?? color;
|
|
722
|
+
const colorTr = props.colorTr ?? colorTop ?? colorRight ?? color;
|
|
723
|
+
const colorBl = props.colorBl ?? colorBottom ?? colorLeft ?? color;
|
|
724
|
+
const colorBr = props.colorBr ?? colorBottom ?? colorRight ?? color;
|
|
725
|
+
|
|
726
|
+
const scale = props.scale ?? null;
|
|
727
|
+
const mount = props.mount ?? 0;
|
|
728
|
+
const pivot = props.pivot ?? 0.5;
|
|
729
|
+
|
|
730
|
+
const data = this.options.inspector
|
|
731
|
+
? santizeCustomDataMap(props.data ?? {})
|
|
732
|
+
: {};
|
|
728
733
|
|
|
729
734
|
return {
|
|
730
735
|
x: props.x ?? 0,
|
|
@@ -736,39 +741,37 @@ export class Stage {
|
|
|
736
741
|
boundsMargin: props.boundsMargin ?? null,
|
|
737
742
|
clipping: props.clipping ?? false,
|
|
738
743
|
color,
|
|
739
|
-
colorTop
|
|
740
|
-
colorBottom
|
|
741
|
-
colorLeft
|
|
742
|
-
colorRight
|
|
743
|
-
colorBl,
|
|
744
|
-
colorBr,
|
|
744
|
+
colorTop,
|
|
745
|
+
colorBottom,
|
|
746
|
+
colorLeft,
|
|
747
|
+
colorRight,
|
|
745
748
|
colorTl,
|
|
746
749
|
colorTr,
|
|
750
|
+
colorBl,
|
|
751
|
+
colorBr,
|
|
747
752
|
zIndex: props.zIndex ?? 0,
|
|
748
753
|
zIndexLocked: props.zIndexLocked ?? 0,
|
|
749
754
|
parent: props.parent ?? null,
|
|
750
755
|
texture: props.texture ?? null,
|
|
751
756
|
textureOptions: props.textureOptions ?? {},
|
|
752
757
|
shader: props.shader ?? this.defShaderNode,
|
|
753
|
-
// Since setting the `src` will trigger a texture load, we need to set it after
|
|
754
|
-
// we set the texture. Otherwise, problems happen.
|
|
755
758
|
src: props.src ?? null,
|
|
756
759
|
srcHeight: props.srcHeight,
|
|
757
760
|
srcWidth: props.srcWidth,
|
|
758
761
|
srcX: props.srcX,
|
|
759
762
|
srcY: props.srcY,
|
|
760
|
-
scale
|
|
761
|
-
scaleX: props.scaleX ??
|
|
762
|
-
scaleY: props.scaleY ??
|
|
763
|
-
mount
|
|
764
|
-
mountX: props.mountX ??
|
|
765
|
-
mountY: props.mountY ??
|
|
766
|
-
pivot
|
|
767
|
-
pivotX: props.pivotX ??
|
|
768
|
-
pivotY: props.pivotY ??
|
|
763
|
+
scale,
|
|
764
|
+
scaleX: props.scaleX ?? scale ?? 1,
|
|
765
|
+
scaleY: props.scaleY ?? scale ?? 1,
|
|
766
|
+
mount,
|
|
767
|
+
mountX: props.mountX ?? mount,
|
|
768
|
+
mountY: props.mountY ?? mount,
|
|
769
|
+
pivot,
|
|
770
|
+
pivotX: props.pivotX ?? pivot,
|
|
771
|
+
pivotY: props.pivotY ?? pivot,
|
|
769
772
|
rotation: props.rotation ?? 0,
|
|
770
773
|
rtt: props.rtt ?? false,
|
|
771
|
-
data
|
|
774
|
+
data,
|
|
772
775
|
imageType: props.imageType,
|
|
773
776
|
interactive: props.interactive ?? false,
|
|
774
777
|
strictBounds: props.strictBounds ?? this.strictBounds,
|
|
@@ -117,15 +117,21 @@ export class TextureMemoryManager {
|
|
|
117
117
|
private memUsed = 0;
|
|
118
118
|
private loadedTextures: Map<Texture, number> = new Map();
|
|
119
119
|
private orphanedTextures: Texture[] = [];
|
|
120
|
-
private criticalThreshold: number;
|
|
121
|
-
private targetThreshold: number;
|
|
122
|
-
private cleanupInterval: number;
|
|
123
|
-
private debugLogging: boolean;
|
|
120
|
+
private criticalThreshold: number = 124e6;
|
|
121
|
+
private targetThreshold: number = 0.5;
|
|
122
|
+
private cleanupInterval: number = 5000;
|
|
123
|
+
private debugLogging: boolean = false;
|
|
124
|
+
private loggingID: ReturnType<typeof setInterval> =
|
|
125
|
+
0 as unknown as ReturnType<typeof setInterval>;
|
|
124
126
|
private lastCleanupTime = 0;
|
|
125
|
-
private baselineMemoryAllocation: number;
|
|
127
|
+
private baselineMemoryAllocation: number = 26e6;
|
|
126
128
|
|
|
127
129
|
public criticalCleanupRequested = false;
|
|
128
|
-
public doNotExceedCriticalThreshold: boolean;
|
|
130
|
+
public doNotExceedCriticalThreshold: boolean = false;
|
|
131
|
+
private originalSetTextureMemUse: (
|
|
132
|
+
texture: Texture,
|
|
133
|
+
byteSize: number,
|
|
134
|
+
) => void;
|
|
129
135
|
|
|
130
136
|
/**
|
|
131
137
|
* The current frame time in milliseconds
|
|
@@ -138,46 +144,9 @@ export class TextureMemoryManager {
|
|
|
138
144
|
public frameTime = 0;
|
|
139
145
|
|
|
140
146
|
constructor(private stage: Stage, settings: TextureMemoryManagerSettings) {
|
|
141
|
-
|
|
142
|
-
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
143
|
-
this.criticalThreshold = Math.round(criticalThreshold);
|
|
144
|
-
const targetFraction = Math.max(
|
|
145
|
-
0,
|
|
146
|
-
Math.min(1, settings.targetThresholdLevel),
|
|
147
|
-
);
|
|
148
|
-
this.cleanupInterval = settings.cleanupInterval;
|
|
149
|
-
this.debugLogging = settings.debugLogging;
|
|
150
|
-
this.baselineMemoryAllocation = Math.round(
|
|
151
|
-
settings.baselineMemoryAllocation,
|
|
152
|
-
);
|
|
153
|
-
this.targetThreshold = Math.max(
|
|
154
|
-
Math.round(criticalThreshold * targetFraction),
|
|
155
|
-
this.baselineMemoryAllocation,
|
|
156
|
-
);
|
|
157
|
-
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
147
|
+
this.originalSetTextureMemUse = this.setTextureMemUse;
|
|
158
148
|
|
|
159
|
-
|
|
160
|
-
let lastMemUse = 0;
|
|
161
|
-
setInterval(() => {
|
|
162
|
-
if (lastMemUse !== this.memUsed) {
|
|
163
|
-
lastMemUse = this.memUsed;
|
|
164
|
-
console.log(
|
|
165
|
-
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
166
|
-
this.memUsed,
|
|
167
|
-
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
168
|
-
(this.memUsed / this.criticalThreshold) *
|
|
169
|
-
100
|
|
170
|
-
).toFixed(1)}%)`,
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
}, 1000);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// If the threshold is 0, we disable the memory manager by replacing the
|
|
177
|
-
// setTextureMemUse method with a no-op function.
|
|
178
|
-
if (criticalThreshold === 0) {
|
|
179
|
-
this.setTextureMemUse = () => {};
|
|
180
|
-
}
|
|
149
|
+
this.updateSettings(settings);
|
|
181
150
|
}
|
|
182
151
|
|
|
183
152
|
/**
|
|
@@ -248,14 +217,14 @@ export class TextureMemoryManager {
|
|
|
248
217
|
|
|
249
218
|
cleanupQuick(critical: boolean) {
|
|
250
219
|
// Free non-renderable textures until we reach the target threshold
|
|
220
|
+
const platform = this.stage.platform;
|
|
251
221
|
const memTarget = this.targetThreshold;
|
|
252
|
-
const
|
|
253
|
-
const timestamp = this.stage.platform.getTimeStamp();
|
|
222
|
+
const timestamp = platform.getTimeStamp();
|
|
254
223
|
|
|
255
224
|
while (
|
|
256
225
|
this.memUsed >= memTarget &&
|
|
257
226
|
this.orphanedTextures.length > 0 &&
|
|
258
|
-
(critical ||
|
|
227
|
+
(critical || platform.getTimeStamp() - timestamp < 10)
|
|
259
228
|
) {
|
|
260
229
|
const texture = this.orphanedTextures.shift();
|
|
261
230
|
|
|
@@ -268,15 +237,28 @@ export class TextureMemoryManager {
|
|
|
268
237
|
continue;
|
|
269
238
|
}
|
|
270
239
|
|
|
271
|
-
|
|
272
|
-
txManager.removeTextureFromCache(texture);
|
|
240
|
+
this.destroyTexture(texture);
|
|
273
241
|
}
|
|
274
242
|
}
|
|
275
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Destroy a texture and remove it from the memory manager
|
|
246
|
+
*
|
|
247
|
+
* @param texture - The texture to destroy
|
|
248
|
+
*/
|
|
249
|
+
destroyTexture(texture: Texture) {
|
|
250
|
+
const txManager = this.stage.txManager;
|
|
251
|
+
txManager.removeTextureFromQueue(texture);
|
|
252
|
+
txManager.removeTextureFromCache(texture);
|
|
253
|
+
|
|
254
|
+
texture.destroy();
|
|
255
|
+
|
|
256
|
+
this.removeFromOrphanedTextures(texture);
|
|
257
|
+
this.loadedTextures.delete(texture);
|
|
258
|
+
}
|
|
276
259
|
cleanupDeep(critical: boolean) {
|
|
277
260
|
// Free non-renderable textures until we reach the target threshold
|
|
278
261
|
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
279
|
-
const txManager = this.stage.txManager;
|
|
280
262
|
|
|
281
263
|
// sort by renderability
|
|
282
264
|
const filteredAndSortedTextures: Texture[] = [];
|
|
@@ -314,21 +296,21 @@ export class TextureMemoryManager {
|
|
|
314
296
|
break;
|
|
315
297
|
}
|
|
316
298
|
|
|
317
|
-
|
|
318
|
-
this.removeFromOrphanedTextures(texture);
|
|
319
|
-
txManager.removeTextureFromCache(texture);
|
|
320
|
-
txManager.removeTextureFromQueue(texture);
|
|
299
|
+
this.destroyTexture(texture);
|
|
321
300
|
}
|
|
322
301
|
}
|
|
323
302
|
|
|
324
303
|
cleanup(aggressive: boolean = false) {
|
|
325
304
|
const critical = this.criticalCleanupRequested;
|
|
305
|
+
const criticalThreshold = this.criticalThreshold;
|
|
306
|
+
const memUsed = this.memUsed;
|
|
307
|
+
const stage = this.stage;
|
|
326
308
|
this.lastCleanupTime = this.frameTime;
|
|
327
309
|
|
|
328
310
|
if (critical === true) {
|
|
329
|
-
|
|
311
|
+
stage.queueFrameEvent('criticalCleanup', {
|
|
330
312
|
memUsed: this.memUsed,
|
|
331
|
-
criticalThreshold:
|
|
313
|
+
criticalThreshold: criticalThreshold,
|
|
332
314
|
});
|
|
333
315
|
}
|
|
334
316
|
|
|
@@ -342,19 +324,19 @@ export class TextureMemoryManager {
|
|
|
342
324
|
this.cleanupQuick(critical);
|
|
343
325
|
|
|
344
326
|
// if we're still above the target threshold, do a deep cleanup
|
|
345
|
-
if (aggressive === true &&
|
|
327
|
+
if (aggressive === true && memUsed >= criticalThreshold) {
|
|
346
328
|
this.cleanupDeep(critical);
|
|
347
329
|
}
|
|
348
330
|
|
|
349
|
-
if (
|
|
350
|
-
|
|
351
|
-
memUsed:
|
|
352
|
-
criticalThreshold:
|
|
331
|
+
if (memUsed >= criticalThreshold) {
|
|
332
|
+
stage.queueFrameEvent('criticalCleanupFailed', {
|
|
333
|
+
memUsed: memUsed,
|
|
334
|
+
criticalThreshold: criticalThreshold,
|
|
353
335
|
});
|
|
354
336
|
|
|
355
337
|
if (this.debugLogging === true || isProductionEnvironment === false) {
|
|
356
338
|
console.warn(
|
|
357
|
-
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${
|
|
339
|
+
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${memUsed}`,
|
|
358
340
|
);
|
|
359
341
|
}
|
|
360
342
|
} else {
|
|
@@ -391,4 +373,63 @@ export class TextureMemoryManager {
|
|
|
391
373
|
baselineMemoryAllocation: this.baselineMemoryAllocation,
|
|
392
374
|
};
|
|
393
375
|
}
|
|
376
|
+
|
|
377
|
+
public updateSettings(settings: TextureMemoryManagerSettings): void {
|
|
378
|
+
const { criticalThreshold, doNotExceedCriticalThreshold } = settings;
|
|
379
|
+
|
|
380
|
+
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
381
|
+
this.criticalThreshold = Math.round(criticalThreshold);
|
|
382
|
+
|
|
383
|
+
if (this.memUsed === 0) {
|
|
384
|
+
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
385
|
+
} else {
|
|
386
|
+
const memUsedExBaseline = this.memUsed - this.baselineMemoryAllocation;
|
|
387
|
+
this.memUsed = Math.round(
|
|
388
|
+
settings.baselineMemoryAllocation + memUsedExBaseline,
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
this.baselineMemoryAllocation = Math.round(
|
|
392
|
+
settings.baselineMemoryAllocation,
|
|
393
|
+
);
|
|
394
|
+
const targetFraction = Math.max(
|
|
395
|
+
0,
|
|
396
|
+
Math.min(1, settings.targetThresholdLevel),
|
|
397
|
+
);
|
|
398
|
+
this.targetThreshold = Math.max(
|
|
399
|
+
Math.round(criticalThreshold * targetFraction),
|
|
400
|
+
this.baselineMemoryAllocation,
|
|
401
|
+
);
|
|
402
|
+
|
|
403
|
+
this.cleanupInterval = settings.cleanupInterval;
|
|
404
|
+
this.debugLogging = settings.debugLogging;
|
|
405
|
+
|
|
406
|
+
if (this.loggingID && !settings.debugLogging) {
|
|
407
|
+
clearInterval(this.loggingID);
|
|
408
|
+
this.loggingID = 0 as unknown as ReturnType<typeof setInterval>;
|
|
409
|
+
}
|
|
410
|
+
if (settings.debugLogging && !this.loggingID) {
|
|
411
|
+
let lastMemUse = 0;
|
|
412
|
+
this.loggingID = setInterval(() => {
|
|
413
|
+
if (lastMemUse !== this.memUsed) {
|
|
414
|
+
lastMemUse = this.memUsed;
|
|
415
|
+
console.log(
|
|
416
|
+
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
417
|
+
this.memUsed,
|
|
418
|
+
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
419
|
+
(this.memUsed / this.criticalThreshold) *
|
|
420
|
+
100
|
|
421
|
+
).toFixed(1)}%)`,
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
}, 1000);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// If the threshold is 0, we disable the memory manager by replacing the
|
|
428
|
+
// setTextureMemUse method with a no-op function.
|
|
429
|
+
if (criticalThreshold === 0) {
|
|
430
|
+
this.setTextureMemUse = () => {};
|
|
431
|
+
} else {
|
|
432
|
+
this.setTextureMemUse = this.originalSetTextureMemUse;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
394
435
|
}
|
|
@@ -215,6 +215,13 @@ export class CoreAnimation extends EventEmitter {
|
|
|
215
215
|
update(dt: number) {
|
|
216
216
|
const { duration, loop, easing, stopMethod } = this.settings;
|
|
217
217
|
const { delayFor } = this;
|
|
218
|
+
|
|
219
|
+
if (this.node.destroyed) {
|
|
220
|
+
// cleanup
|
|
221
|
+
this.emit('destroyed', {});
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
218
225
|
if (duration === 0 && delayFor === 0) {
|
|
219
226
|
this.emit('finished', {});
|
|
220
227
|
return;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
1
|
/*
|
|
3
2
|
* If not stated otherwise in this file or this component's LICENSE file the
|
|
4
3
|
* following copyright and licenses apply:
|
|
@@ -52,6 +51,7 @@ export class CoreAnimationController
|
|
|
52
51
|
this.onAnimating = this.onAnimating.bind(this);
|
|
53
52
|
this.onFinished = this.onFinished.bind(this);
|
|
54
53
|
this.onTick = this.onTick.bind(this);
|
|
54
|
+
this.onDestroy = this.onDestroy.bind(this);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
start(): IAnimationController {
|
|
@@ -96,6 +96,7 @@ export class CoreAnimationController
|
|
|
96
96
|
this.animation.once('finished', this.onFinished);
|
|
97
97
|
this.animation.on('animating', this.onAnimating);
|
|
98
98
|
this.animation.on('tick', this.onTick);
|
|
99
|
+
this.animation.on('destroyed', this.onDestroy);
|
|
99
100
|
// Then register the animation
|
|
100
101
|
this.manager.registerAnimation(this.animation);
|
|
101
102
|
}
|
|
@@ -107,6 +108,7 @@ export class CoreAnimationController
|
|
|
107
108
|
this.animation.off('finished', this.onFinished);
|
|
108
109
|
this.animation.off('animating', this.onAnimating);
|
|
109
110
|
this.animation.off('tick', this.onTick);
|
|
111
|
+
this.animation.off('destroy', this.onDestroy);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
private makeStoppedPromise(): void {
|
|
@@ -117,6 +119,11 @@ export class CoreAnimationController
|
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
122
|
+
private onDestroy(this: CoreAnimationController): void {
|
|
123
|
+
this.unregisterAnimation();
|
|
124
|
+
this.state = 'stopped';
|
|
125
|
+
}
|
|
126
|
+
|
|
120
127
|
private onFinished(this: CoreAnimationController): void {
|
|
121
128
|
assertTruthy(this.stoppedResolve);
|
|
122
129
|
// If the animation is looping, then we need to restart it.
|
|
@@ -104,6 +104,7 @@ export abstract class CoreRenderer {
|
|
|
104
104
|
abstract renderToTexture(node: CoreNode): void;
|
|
105
105
|
abstract getBufferInfo(): BufferInfo | null;
|
|
106
106
|
abstract getQuadCount(): number | null;
|
|
107
|
+
abstract updateViewport(): void;
|
|
107
108
|
abstract updateClearColor(color: number): void;
|
|
108
109
|
getTextureCoords?(node: CoreNode): TextureCoords;
|
|
109
110
|
}
|