@lightningjs/renderer 3.0.3 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/common/EventEmitter.d.ts +7 -4
- package/dist/src/common/EventEmitter.js +1 -1
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +169 -0
- package/dist/src/core/AutosizeManager.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +2 -1
- package/dist/src/core/CoreNode.js +6 -3
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +18 -5
- package/dist/src/core/CoreTextNode.js +141 -59
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextNodeCanvas.d.ts +215 -0
- package/dist/src/core/CoreTextNodeCanvas.js +236 -0
- package/dist/src/core/CoreTextNodeCanvas.js.map +1 -0
- package/dist/src/core/Stage.js +10 -0
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.js +4 -3
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/AnimationManager.d.ts +1 -1
- package/dist/src/core/animations/AnimationManager.js +5 -5
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +11 -2
- package/dist/src/core/animations/CoreAnimation.js +44 -38
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +6 -0
- package/dist/src/core/animations/CoreAnimationController.js +16 -3
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Ticker.d.ts +71 -0
- package/dist/src/core/animations/Ticker.js +89 -0
- package/dist/src/core/animations/Ticker.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +38 -0
- package/dist/src/core/animations/Transition.js +35 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/TransitionsController.d.ts +10 -0
- package/dist/src/core/animations/TransitionsController.js +39 -0
- package/dist/src/core/animations/TransitionsController.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +11 -30
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -16
- package/dist/src/core/lib/WebGlContextWrapper.js +1 -35
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/textureCompression.d.ts +2 -14
- package/dist/src/core/lib/textureCompression.js +67 -320
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/platform.js +9 -38
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +3 -11
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -2
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -16
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +14 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.js +16 -6
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -13
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +192 -113
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +2 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +14 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +1 -2
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +5 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +6 -18
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +60 -102
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +1 -3
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +31 -74
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +7 -2
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +50 -21
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -3
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +1 -3
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +2 -2
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +23 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +4 -5
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +6 -3
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +11 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +10 -5
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +10 -5
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +12 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +30 -14
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +3 -13
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFont.d.ts +1 -1
- package/dist/src/core/text-rendering/CanvasFont.js +7 -16
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -3
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +7 -5
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/CoreFont.d.ts +1 -1
- package/dist/src/core/text-rendering/CoreFont.js +1 -1
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -1
- package/dist/src/core/text-rendering/FontManager.js +2 -1
- package/dist/src/core/text-rendering/FontManager.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +3 -5
- package/dist/src/core/text-rendering/SdfTextRenderer.js +19 -109
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.js +43 -12
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
- package/dist/src/core/text-rendering/TextRenderer.d.ts +16 -8
- package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
- package/dist/src/core/text-rendering/canvas/Settings.js +20 -0
- package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
- package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
- package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
- package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
- package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
- package/dist/src/core/text-rendering/canvas/draw.js +132 -0
- package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +46 -98
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +2 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +66 -8
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.d.ts +26 -0
- package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.js +158 -0
- package/dist/src/core/text-rendering/renderers/canvas/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/draw.d.ts +5 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/draw.js +127 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/draw.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.d.ts +2 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.js +50 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/mergeDefaults.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.d.ts +33 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.js +192 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/renderInfo.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/types.d.ts +66 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/types.js +2 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/types.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/utils.d.ts +91 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/utils.js +282 -0
- package/dist/src/core/text-rendering/renderers/canvas/internal/utils.js.map +1 -0
- package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
- package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
- package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
- package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
- package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
- package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
- package/dist/src/core/text-rendering/sdf/Utils.js +301 -0
- package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
- package/dist/src/core/text-rendering/sdf/index.js +20 -0
- package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
- package/dist/src/core/textures/ImageTexture.js +11 -0
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.js +5 -0
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +1 -1
- package/dist/src/main-api/Inspector.js +25 -20
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/src/common/EventEmitter.ts +6 -8
- package/src/core/CoreNode.test.ts +1 -1
- package/src/core/CoreNode.ts +8 -4
- package/src/core/CoreTextNode.test.ts +138 -25
- package/src/core/CoreTextNode.ts +174 -67
- package/src/core/Stage.ts +11 -0
- package/src/core/TextureMemoryManager.ts +4 -3
- package/src/core/animations/AnimationManager.ts +5 -5
- package/src/core/animations/CoreAnimation.ts +61 -45
- package/src/core/animations/CoreAnimationController.ts +16 -7
- package/src/core/renderers/canvas/CanvasRenderer.ts +19 -1
- package/src/core/renderers/canvas/CanvasTexture.ts +23 -8
- package/src/core/renderers/webgl/WebGlRenderer.ts +2 -3
- package/src/core/renderers/webgl/WebGlShaderNode.ts +24 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.test.ts +274 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +10 -10
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +1 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +2 -2
- package/src/core/text-rendering/CanvasTextRenderer.ts +14 -7
- package/src/core/text-rendering/SdfTextRenderer.ts +28 -140
- package/src/core/text-rendering/TextLayoutEngine.ts +61 -28
- package/src/core/text-rendering/TextRenderer.ts +19 -12
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +20 -0
- package/src/core/textures/ImageTexture.ts +18 -0
- package/src/core/textures/Texture.ts +6 -0
- package/src/main-api/Inspector.ts +25 -25
- package/dist/src/core/text-rendering/TextGenerator.d.ts +0 -10
- package/dist/src/core/text-rendering/TextGenerator.js +0 -36
- package/dist/src/core/text-rendering/TextGenerator.js.map +0 -1
- package/src/core/renderers/webgl/SdfRenderOp.ts +0 -106
|
@@ -177,7 +177,7 @@ export class TextureMemoryManager {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
if (this.memUsed > this.criticalThreshold) {
|
|
180
|
+
if (this.criticalThreshold > 0 && this.memUsed > this.criticalThreshold) {
|
|
181
181
|
this.criticalCleanupRequested = true;
|
|
182
182
|
}
|
|
183
183
|
}
|
|
@@ -185,13 +185,14 @@ export class TextureMemoryManager {
|
|
|
185
185
|
checkCleanup() {
|
|
186
186
|
return (
|
|
187
187
|
this.criticalCleanupRequested ||
|
|
188
|
-
(this.
|
|
188
|
+
(this.criticalThreshold > 0 &&
|
|
189
|
+
this.memUsed > this.targetThreshold &&
|
|
189
190
|
this.frameTime - this.lastCleanupTime >= this.cleanupInterval)
|
|
190
191
|
);
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
checkCriticalCleanup() {
|
|
194
|
-
return this.memUsed > this.criticalThreshold;
|
|
195
|
+
return this.criticalThreshold > 0 && this.memUsed > this.criticalThreshold;
|
|
195
196
|
}
|
|
196
197
|
|
|
197
198
|
/**
|
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
import { CoreAnimation } from './CoreAnimation.js';
|
|
21
21
|
|
|
22
22
|
export class AnimationManager {
|
|
23
|
-
activeAnimations:
|
|
23
|
+
activeAnimations: Map<number, CoreAnimation> = new Map();
|
|
24
24
|
|
|
25
25
|
registerAnimation(animation: CoreAnimation) {
|
|
26
|
-
this.activeAnimations.
|
|
26
|
+
this.activeAnimations.set(animation.id, animation);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
unregisterAnimation(animation: CoreAnimation) {
|
|
30
|
-
this.activeAnimations.delete(animation);
|
|
30
|
+
this.activeAnimations.delete(animation.id);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
update(dt: number) {
|
|
34
|
-
this.activeAnimations.
|
|
34
|
+
for (const animation of this.activeAnimations.values()) {
|
|
35
35
|
animation.update(dt);
|
|
36
|
-
}
|
|
36
|
+
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -34,17 +34,30 @@ export interface AnimationSettings {
|
|
|
34
34
|
type PropValues = {
|
|
35
35
|
start: number;
|
|
36
36
|
target: number;
|
|
37
|
+
isColor: boolean;
|
|
37
38
|
};
|
|
38
|
-
|
|
39
|
+
|
|
40
|
+
type PropGroup = {
|
|
41
|
+
keys: string[];
|
|
42
|
+
values: PropValues[];
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
type PropValuesMap = {
|
|
46
|
+
props: PropGroup | null;
|
|
47
|
+
shaderProps: PropGroup | null;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
let animationIdCounter = 0;
|
|
39
51
|
|
|
40
52
|
export class CoreAnimation extends EventEmitter {
|
|
53
|
+
public readonly id: number = ++animationIdCounter;
|
|
41
54
|
public settings: AnimationSettings;
|
|
42
55
|
private progress = 0;
|
|
43
56
|
private delayFor = 0;
|
|
44
57
|
private delay = 0;
|
|
45
58
|
private timingFunction: TimingFunction;
|
|
46
59
|
|
|
47
|
-
propValuesMap: PropValuesMap = {};
|
|
60
|
+
propValuesMap: PropValuesMap = { props: null, shaderProps: null };
|
|
48
61
|
|
|
49
62
|
constructor(
|
|
50
63
|
private node: CoreNode,
|
|
@@ -55,27 +68,31 @@ export class CoreAnimation extends EventEmitter {
|
|
|
55
68
|
|
|
56
69
|
for (const key in props) {
|
|
57
70
|
if (key !== 'shaderProps') {
|
|
58
|
-
if (this.propValuesMap['props'] ===
|
|
59
|
-
this.propValuesMap['props'] = {};
|
|
71
|
+
if (this.propValuesMap['props'] === null) {
|
|
72
|
+
this.propValuesMap['props'] = { keys: [], values: [] };
|
|
60
73
|
}
|
|
61
|
-
this.propValuesMap['props'][key
|
|
74
|
+
this.propValuesMap['props']!['keys'].push(key);
|
|
75
|
+
this.propValuesMap['props']!['values'].push({
|
|
62
76
|
start:
|
|
63
77
|
node[key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>] || 0,
|
|
64
78
|
target: props[
|
|
65
79
|
key as keyof Omit<CoreNodeAnimateProps, 'shaderProps'>
|
|
66
80
|
] as number,
|
|
67
|
-
|
|
81
|
+
isColor: key.indexOf('color') !== -1,
|
|
82
|
+
});
|
|
68
83
|
} else if (key === 'shaderProps' && node.shader !== null) {
|
|
69
|
-
this.propValuesMap['shaderProps'] = {};
|
|
84
|
+
this.propValuesMap['shaderProps'] = { keys: [], values: [] };
|
|
70
85
|
for (const key in props.shaderProps) {
|
|
71
86
|
let start = node.shader.props![key];
|
|
72
87
|
if (Array.isArray(start) === true) {
|
|
73
88
|
start = start[0];
|
|
74
89
|
}
|
|
75
|
-
this.propValuesMap['shaderProps'][key
|
|
90
|
+
this.propValuesMap['shaderProps']!['keys'].push(key);
|
|
91
|
+
this.propValuesMap['shaderProps']!['values'].push({
|
|
76
92
|
start,
|
|
77
93
|
target: props.shaderProps[key] as number,
|
|
78
|
-
|
|
94
|
+
isColor: key.indexOf('color') !== -1,
|
|
95
|
+
});
|
|
79
96
|
}
|
|
80
97
|
}
|
|
81
98
|
}
|
|
@@ -102,28 +119,24 @@ export class CoreAnimation extends EventEmitter {
|
|
|
102
119
|
this.update(0);
|
|
103
120
|
}
|
|
104
121
|
|
|
105
|
-
private restoreValues(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
for (let i = 0; i < eLength; i++) {
|
|
113
|
-
const [key, value] = entries[i]!;
|
|
114
|
-
target[key] = value.start;
|
|
122
|
+
private restoreValues(target: Record<string, number>, group: PropGroup) {
|
|
123
|
+
const keys = group.keys;
|
|
124
|
+
const values = group.values;
|
|
125
|
+
const length = keys.length;
|
|
126
|
+
for (let i = 0; i < length; i++) {
|
|
127
|
+
target[keys[i]!] = values[i]!.start;
|
|
115
128
|
}
|
|
116
129
|
}
|
|
117
130
|
|
|
118
131
|
restore() {
|
|
119
132
|
this.reset();
|
|
120
|
-
if (this.propValuesMap['props'] !==
|
|
133
|
+
if (this.propValuesMap['props'] !== null) {
|
|
121
134
|
this.restoreValues(
|
|
122
135
|
this.node as unknown as Record<string, number>,
|
|
123
136
|
this.propValuesMap['props'],
|
|
124
137
|
);
|
|
125
138
|
}
|
|
126
|
-
if (this.propValuesMap['shaderProps'] !==
|
|
139
|
+
if (this.propValuesMap['shaderProps'] !== null) {
|
|
127
140
|
this.restoreValues(
|
|
128
141
|
this.node.shader!.props as Record<string, number>,
|
|
129
142
|
this.propValuesMap['shaderProps'],
|
|
@@ -131,26 +144,24 @@ export class CoreAnimation extends EventEmitter {
|
|
|
131
144
|
}
|
|
132
145
|
}
|
|
133
146
|
|
|
134
|
-
private reverseValues(
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
target: value.start,
|
|
143
|
-
};
|
|
147
|
+
private reverseValues(group: PropGroup) {
|
|
148
|
+
const values = group.values;
|
|
149
|
+
const length = values.length;
|
|
150
|
+
for (let i = 0; i < length; i++) {
|
|
151
|
+
const value = values[i]!;
|
|
152
|
+
const tmp = value.start;
|
|
153
|
+
value.start = value.target;
|
|
154
|
+
value.target = tmp;
|
|
144
155
|
}
|
|
145
156
|
}
|
|
146
157
|
|
|
147
158
|
reverse() {
|
|
148
159
|
this.progress = 0;
|
|
149
160
|
|
|
150
|
-
if (this.propValuesMap['props'] !==
|
|
161
|
+
if (this.propValuesMap['props'] !== null) {
|
|
151
162
|
this.reverseValues(this.propValuesMap['props']);
|
|
152
163
|
}
|
|
153
|
-
if (this.propValuesMap['shaderProps'] !==
|
|
164
|
+
if (this.propValuesMap['shaderProps'] !== null) {
|
|
154
165
|
this.reverseValues(this.propValuesMap['shaderProps']);
|
|
155
166
|
}
|
|
156
167
|
|
|
@@ -165,7 +176,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
165
176
|
}
|
|
166
177
|
|
|
167
178
|
updateValue(
|
|
168
|
-
|
|
179
|
+
isColor: boolean,
|
|
169
180
|
propValue: number,
|
|
170
181
|
startValue: number,
|
|
171
182
|
easing: string | TimingFunction | undefined,
|
|
@@ -178,7 +189,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
178
189
|
}
|
|
179
190
|
|
|
180
191
|
const endValue = propValue;
|
|
181
|
-
if (
|
|
192
|
+
if (isColor === true) {
|
|
182
193
|
if (startValue === endValue) {
|
|
183
194
|
return startValue;
|
|
184
195
|
}
|
|
@@ -199,15 +210,20 @@ export class CoreAnimation extends EventEmitter {
|
|
|
199
210
|
|
|
200
211
|
private updateValues(
|
|
201
212
|
target: Record<string, number>,
|
|
202
|
-
|
|
213
|
+
group: PropGroup,
|
|
203
214
|
easing: string | TimingFunction | undefined,
|
|
204
215
|
) {
|
|
205
|
-
const
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
for (let i = 0; i <
|
|
209
|
-
const
|
|
210
|
-
target[
|
|
216
|
+
const keys = group.keys;
|
|
217
|
+
const values = group.values;
|
|
218
|
+
const length = keys.length;
|
|
219
|
+
for (let i = 0; i < length; i++) {
|
|
220
|
+
const value = values[i]!;
|
|
221
|
+
target[keys[i]!] = this.updateValue(
|
|
222
|
+
value.isColor,
|
|
223
|
+
value.target,
|
|
224
|
+
value.start,
|
|
225
|
+
easing,
|
|
226
|
+
);
|
|
211
227
|
}
|
|
212
228
|
}
|
|
213
229
|
|
|
@@ -264,14 +280,14 @@ export class CoreAnimation extends EventEmitter {
|
|
|
264
280
|
}
|
|
265
281
|
}
|
|
266
282
|
|
|
267
|
-
if (this.propValuesMap['props'] !==
|
|
283
|
+
if (this.propValuesMap['props'] !== null) {
|
|
268
284
|
this.updateValues(
|
|
269
285
|
this.node as unknown as Record<string, number>,
|
|
270
286
|
this.propValuesMap['props'],
|
|
271
287
|
easing,
|
|
272
288
|
);
|
|
273
289
|
}
|
|
274
|
-
if (this.propValuesMap['shaderProps'] !==
|
|
290
|
+
if (this.propValuesMap['shaderProps'] !== null) {
|
|
275
291
|
this.updateValues(
|
|
276
292
|
this.node.shader!.props as Record<string, number>,
|
|
277
293
|
this.propValuesMap['shaderProps'],
|
|
@@ -280,7 +296,7 @@ export class CoreAnimation extends EventEmitter {
|
|
|
280
296
|
}
|
|
281
297
|
|
|
282
298
|
if (this.progress < 1) {
|
|
283
|
-
this.emit('tick'
|
|
299
|
+
this.emit('tick');
|
|
284
300
|
}
|
|
285
301
|
|
|
286
302
|
if (this.progress === 1) {
|
|
@@ -23,7 +23,6 @@ import type {
|
|
|
23
23
|
} from '../../common/IAnimationController.js';
|
|
24
24
|
import type { AnimationManager } from './AnimationManager.js';
|
|
25
25
|
import type { CoreAnimation } from './CoreAnimation.js';
|
|
26
|
-
import { assertTruthy } from '../../utils.js';
|
|
27
26
|
import { EventEmitter } from '../../common/EventEmitter.js';
|
|
28
27
|
import type { AnimationTickPayload } from '../../common/CommonTypes.js';
|
|
29
28
|
|
|
@@ -159,11 +158,21 @@ export class CoreAnimationController
|
|
|
159
158
|
this.emit('animating', this);
|
|
160
159
|
}
|
|
161
160
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
161
|
+
/**
|
|
162
|
+
* manually override the tick event to emit the progress of the animation as well
|
|
163
|
+
* we are first checking if there are any listeners for the tick event. this avoid unnecessary object creation.
|
|
164
|
+
* @param this
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
167
|
+
private onTick(this: CoreAnimationController): void {
|
|
168
|
+
const listeners = this.eventListeners['tick'];
|
|
169
|
+
if (listeners === undefined) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
listeners.forEach((listener) => {
|
|
173
|
+
listener(this, {
|
|
174
|
+
progress: this.animation['progress'],
|
|
175
|
+
});
|
|
176
|
+
});
|
|
168
177
|
}
|
|
169
178
|
}
|
|
@@ -83,7 +83,19 @@ export class CanvasRenderer extends CoreRenderer {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
const hasTransform = ta !== 1;
|
|
86
|
-
const
|
|
86
|
+
const clippingValid = clippingRect.valid === true;
|
|
87
|
+
|
|
88
|
+
// If the clipping rect is valid but zero-area, the node is fully clipped — skip rendering
|
|
89
|
+
if (
|
|
90
|
+
clippingValid === true &&
|
|
91
|
+
clippingRect.w === 0 &&
|
|
92
|
+
clippingRect.h === 0
|
|
93
|
+
) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const hasClipping =
|
|
98
|
+
clippingValid === true && clippingRect.w !== 0 && clippingRect.h !== 0;
|
|
87
99
|
const shader = node.props.shader;
|
|
88
100
|
const hasShader = shader !== null;
|
|
89
101
|
|
|
@@ -146,6 +158,9 @@ export class CanvasRenderer extends CoreRenderer {
|
|
|
146
158
|
const tintColor = parseColor(color);
|
|
147
159
|
if (textureType !== TextureType.subTexture) {
|
|
148
160
|
const image = (texture.ctxTexture as CanvasTexture).getImage(tintColor);
|
|
161
|
+
if (image === null) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
149
164
|
this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
|
|
150
165
|
this.context.drawImage(image, tx, ty, width, height);
|
|
151
166
|
this.context.globalAlpha = 1;
|
|
@@ -154,6 +169,9 @@ export class CanvasRenderer extends CoreRenderer {
|
|
|
154
169
|
const image = (
|
|
155
170
|
(texture as SubTexture).parentTexture.ctxTexture as CanvasTexture
|
|
156
171
|
).getImage(tintColor);
|
|
172
|
+
if (image === null) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
157
175
|
const props = (texture as SubTexture).props;
|
|
158
176
|
|
|
159
177
|
this.context.globalAlpha = tintColor.a ?? node.worldAlpha;
|
|
@@ -21,6 +21,7 @@ import type { Dimensions } from '../../../common/CommonTypes.js';
|
|
|
21
21
|
import { assertTruthy } from '../../../utils.js';
|
|
22
22
|
import { formatRgba, type IParsedColor } from '../../lib/colorParser.js';
|
|
23
23
|
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
24
|
+
import type { Texture } from '../../textures/Texture.js';
|
|
24
25
|
|
|
25
26
|
export class CanvasTexture extends CoreContextTexture {
|
|
26
27
|
protected image:
|
|
@@ -36,10 +37,23 @@ export class CanvasTexture extends CoreContextTexture {
|
|
|
36
37
|
| undefined;
|
|
37
38
|
|
|
38
39
|
async load(): Promise<void> {
|
|
40
|
+
// Capture textureData synchronously before any await - a pending
|
|
41
|
+
// freeTextureDataTask microtask could null textureSource.textureData
|
|
42
|
+
// during the first async suspension, causing onLoadRequest to fail.
|
|
43
|
+
const textureData = this.textureSource.textureData;
|
|
44
|
+
assertTruthy(textureData?.data, 'Texture data is null before load');
|
|
45
|
+
|
|
39
46
|
this.textureSource.setState('loading');
|
|
40
47
|
|
|
41
48
|
try {
|
|
42
|
-
const size = await this.onLoadRequest();
|
|
49
|
+
const size = await this.onLoadRequest(textureData.data);
|
|
50
|
+
|
|
51
|
+
// Guard against the texture being freed while the load was in flight
|
|
52
|
+
if (this.textureSource.state === 'freed') {
|
|
53
|
+
this.image = undefined;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
43
57
|
this.textureSource.setState('loaded', size);
|
|
44
58
|
this.textureSource.freeTextureData();
|
|
45
59
|
this.updateMemSize();
|
|
@@ -82,9 +96,11 @@ export class CanvasTexture extends CoreContextTexture {
|
|
|
82
96
|
|
|
83
97
|
getImage(
|
|
84
98
|
color: IParsedColor,
|
|
85
|
-
): ImageBitmap | HTMLCanvasElement | HTMLImageElement {
|
|
99
|
+
): ImageBitmap | HTMLCanvasElement | HTMLImageElement | null {
|
|
86
100
|
const image = this.image;
|
|
87
|
-
|
|
101
|
+
if (image === undefined) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
88
104
|
|
|
89
105
|
if (color.isWhite) {
|
|
90
106
|
if (this.tintCache) {
|
|
@@ -133,10 +149,9 @@ export class CanvasTexture extends CoreContextTexture {
|
|
|
133
149
|
return canvas;
|
|
134
150
|
}
|
|
135
151
|
|
|
136
|
-
private async onLoadRequest(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
152
|
+
private async onLoadRequest(
|
|
153
|
+
data: NonNullable<NonNullable<Texture['textureData']>['data']>,
|
|
154
|
+
): Promise<Dimensions> {
|
|
140
155
|
// TODO: canvas from text renderer should be able to provide the canvas directly
|
|
141
156
|
// instead of having to re-draw it into a new canvas...
|
|
142
157
|
if (data instanceof ImageData) {
|
|
@@ -144,7 +159,7 @@ export class CanvasTexture extends CoreContextTexture {
|
|
|
144
159
|
canvas.width = data.width;
|
|
145
160
|
canvas.height = data.height;
|
|
146
161
|
const ctx = canvas.getContext('2d');
|
|
147
|
-
if (ctx) ctx.putImageData(data, 0, 0);
|
|
162
|
+
if (ctx !== null) ctx.putImageData(data, 0, 0);
|
|
148
163
|
this.image = canvas;
|
|
149
164
|
return { w: data.width, h: data.height };
|
|
150
165
|
} else if (
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { CoreRenderer, type BufferInfo } from '../CoreRenderer.js';
|
|
21
|
-
import type { SdfRenderOp } from './SdfRenderOp.js';
|
|
22
21
|
import type { CoreContextTexture } from '../CoreContextTexture.js';
|
|
23
22
|
import {
|
|
24
23
|
createIndexBuffer,
|
|
@@ -47,15 +46,15 @@ import type { WebGlShaderType } from './WebGlShaderNode.js';
|
|
|
47
46
|
import { WebGlShaderNode } from './WebGlShaderNode.js';
|
|
48
47
|
import type { Dimensions } from '../../../common/CommonTypes.js';
|
|
49
48
|
import type { GlContextWrapper } from '../../platforms/GlContextWrapper.js';
|
|
50
|
-
import type { Platform } from '../../platforms/Platform.js';
|
|
51
49
|
import type { Stage } from '../../Stage.js';
|
|
50
|
+
import type { CoreTextNode } from '../../CoreTextNode.js';
|
|
52
51
|
|
|
53
52
|
interface CoreWebGlSystem {
|
|
54
53
|
parameters: CoreWebGlParameters;
|
|
55
54
|
extensions: CoreWebGlExtensions;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
export type WebGlRenderOp = CoreNode |
|
|
57
|
+
export type WebGlRenderOp = CoreNode | CoreTextNode;
|
|
59
58
|
|
|
60
59
|
export class WebGlRenderer extends CoreRenderer {
|
|
61
60
|
//// WebGL Native Context and Data
|
|
@@ -62,6 +62,7 @@ export class WebGlShaderNode<
|
|
|
62
62
|
undefined;
|
|
63
63
|
private valueKey: string = '';
|
|
64
64
|
uniforms: UniformCollection = {
|
|
65
|
+
hasStoredUniforms: false,
|
|
65
66
|
single: {},
|
|
66
67
|
vec2: {},
|
|
67
68
|
vec3: {},
|
|
@@ -83,6 +84,7 @@ export class WebGlShaderNode<
|
|
|
83
84
|
this.update = () => {
|
|
84
85
|
if (this.props === undefined) {
|
|
85
86
|
this.updater!(this.node as CoreNode, this.props);
|
|
87
|
+
this.updateUniformUsage();
|
|
86
88
|
return;
|
|
87
89
|
}
|
|
88
90
|
|
|
@@ -106,12 +108,14 @@ export class WebGlShaderNode<
|
|
|
106
108
|
}
|
|
107
109
|
//create empty uniform collection when calculating new values
|
|
108
110
|
this.uniforms = {
|
|
111
|
+
hasStoredUniforms: false,
|
|
109
112
|
single: {},
|
|
110
113
|
vec2: {},
|
|
111
114
|
vec3: {},
|
|
112
115
|
vec4: {},
|
|
113
116
|
};
|
|
114
117
|
this.updater!(this.node as CoreNode);
|
|
118
|
+
this.updateUniformUsage();
|
|
115
119
|
stage.shManager.setShaderValues(
|
|
116
120
|
this.valueKey,
|
|
117
121
|
this.uniforms as unknown as Record<string, unknown>,
|
|
@@ -120,6 +124,26 @@ export class WebGlShaderNode<
|
|
|
120
124
|
}
|
|
121
125
|
}
|
|
122
126
|
|
|
127
|
+
updateUniformUsage(): void {
|
|
128
|
+
for (const _ in this.uniforms.single) {
|
|
129
|
+
this.uniforms.hasStoredUniforms = true;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (const _ in this.uniforms.vec2) {
|
|
133
|
+
this.uniforms.hasStoredUniforms = true;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
for (const _ in this.uniforms.vec3) {
|
|
137
|
+
this.uniforms.hasStoredUniforms = true;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
for (const _ in this.uniforms.vec4) {
|
|
141
|
+
this.uniforms.hasStoredUniforms = true;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.uniforms.hasStoredUniforms = false;
|
|
145
|
+
}
|
|
146
|
+
|
|
123
147
|
/**
|
|
124
148
|
* Sets the value of a RGBA variable
|
|
125
149
|
* @param location
|