@lightningjs/renderer 3.0.4 → 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/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/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 +2 -2
- 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/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/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/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/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/WebGlShaderNode.ts +24 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +3 -3
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +1 -0
- package/src/core/textures/ImageTexture.ts +18 -0
- package/src/core/textures/Texture.ts +6 -0
- package/dist/src/core/lib/fps.d.ts +0 -15
- package/dist/src/core/lib/fps.js +0 -62
- package/dist/src/core/lib/fps.js.map +0 -1
- 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
|
@@ -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 (
|
|
@@ -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
|
|
@@ -258,12 +258,12 @@ export class WebGlShaderProgram implements CoreShaderProgram {
|
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
const shader = renderOp.shader as WebGlShaderNode;
|
|
261
|
-
|
|
261
|
+
const uniforms = shader.uniforms;
|
|
262
|
+
|
|
263
|
+
if (uniforms.hasStoredUniforms === true) {
|
|
262
264
|
/**
|
|
263
265
|
* loop over all precalculated uniform types
|
|
264
266
|
*/
|
|
265
|
-
const uniforms = shader.uniforms;
|
|
266
|
-
|
|
267
267
|
for (const key in uniforms.single) {
|
|
268
268
|
const { method, value } = uniforms.single[key]!;
|
|
269
269
|
this.glw[method as keyof UniformSet1Param](key, value as never);
|
|
@@ -42,6 +42,7 @@ export type Vec4 = [number, number, number, number];
|
|
|
42
42
|
export type UniformValue = SingleValue | Vec2 | Vec3 | Vec4;
|
|
43
43
|
|
|
44
44
|
export interface UniformCollection {
|
|
45
|
+
hasStoredUniforms: boolean;
|
|
45
46
|
single: Record<string, Uniform<SingleValue>>;
|
|
46
47
|
vec2: Record<string, Uniform<Vec2>>;
|
|
47
48
|
vec3: Record<string, Uniform<Vec3>>;
|
|
@@ -143,6 +143,24 @@ export class ImageTexture extends Texture {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
override async getTextureSource(): Promise<TextureData> {
|
|
146
|
+
// Compressed textures are not supported by the Canvas2D renderer.
|
|
147
|
+
// Fail fast here before incurring a network fetch or binary decode.
|
|
148
|
+
if (this.txManager.renderer?.mode === 'canvas') {
|
|
149
|
+
const { src, type } = this.props;
|
|
150
|
+
if (
|
|
151
|
+
type === 'compressed' ||
|
|
152
|
+
(typeof src === 'string' && isCompressedTextureContainer(src) === true)
|
|
153
|
+
) {
|
|
154
|
+
const err = new Error(
|
|
155
|
+
`ImageTexture: Compressed textures are not supported in Canvas2D render mode (src: ${String(
|
|
156
|
+
src,
|
|
157
|
+
)})`,
|
|
158
|
+
);
|
|
159
|
+
this.setState('failed', err);
|
|
160
|
+
return { data: null };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
146
164
|
let resp: TextureData;
|
|
147
165
|
try {
|
|
148
166
|
resp = await this.determineImageTypeAndLoadImage();
|
|
@@ -252,6 +252,11 @@ export abstract class Texture extends EventEmitter {
|
|
|
252
252
|
return false;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
+
// Don't cleanup a texture that is in the process of loading
|
|
256
|
+
if (this.state === 'loading') {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
|
|
255
260
|
// Don't cleanup if not renderable
|
|
256
261
|
if (this.renderable === true) {
|
|
257
262
|
return false;
|
|
@@ -353,6 +358,7 @@ export abstract class Texture extends EventEmitter {
|
|
|
353
358
|
*/
|
|
354
359
|
free(): void {
|
|
355
360
|
this.ctxTexture?.free();
|
|
361
|
+
this.ctxTexture = undefined;
|
|
356
362
|
}
|
|
357
363
|
|
|
358
364
|
/**
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Class that keeps track of the invocations of Context methods when
|
|
3
|
-
* the `enableContextSpy` renderer option is enabled.
|
|
4
|
-
*/
|
|
5
|
-
export interface FrameCounter {
|
|
6
|
-
start: number;
|
|
7
|
-
end: number;
|
|
8
|
-
frameCount: number;
|
|
9
|
-
frames: Record<number | string, number>;
|
|
10
|
-
increment: (frameDelta: number) => void;
|
|
11
|
-
get averageFps(): number;
|
|
12
|
-
}
|
|
13
|
-
export declare function setFrameBuckets(newBuckets: number[]): void;
|
|
14
|
-
export declare function setFpsInterval(newInterval: number): void;
|
|
15
|
-
export declare function createFrameCounter(frameTime: number): FrameCounter;
|
package/dist/src/core/lib/fps.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
let buckets = [20, 40, 60, 80, 100];
|
|
20
|
-
let overflowBucketLabel = '>' + buckets[buckets.length - 1];
|
|
21
|
-
let fpsInterval = 1000; // 1 second
|
|
22
|
-
const frameCounter = {
|
|
23
|
-
start: 0,
|
|
24
|
-
end: 0,
|
|
25
|
-
frameCount: 0,
|
|
26
|
-
frames: {},
|
|
27
|
-
increment(frameDelta) {
|
|
28
|
-
this.frameCount++;
|
|
29
|
-
for (let i = 0; i < buckets.length; i++) {
|
|
30
|
-
const bucket = buckets[i];
|
|
31
|
-
if (frameDelta <= bucket) {
|
|
32
|
-
this.frames[bucket]++;
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
this.frames[overflowBucketLabel]++;
|
|
37
|
-
},
|
|
38
|
-
get averageFps() {
|
|
39
|
-
//calculate fps based on frame count and elapsed time
|
|
40
|
-
return this.frameCount / (this.end - this.start) * 1000;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
export function setFrameBuckets(newBuckets) {
|
|
44
|
-
buckets = newBuckets;
|
|
45
|
-
overflowBucketLabel = '>' + buckets[buckets.length - 1];
|
|
46
|
-
}
|
|
47
|
-
export function setFpsInterval(newInterval) {
|
|
48
|
-
fpsInterval = newInterval;
|
|
49
|
-
}
|
|
50
|
-
export function createFrameCounter(frameTime) {
|
|
51
|
-
const counter = Object.create(frameCounter);
|
|
52
|
-
counter.start = frameTime;
|
|
53
|
-
counter.end = frameTime + fpsInterval;
|
|
54
|
-
//fill frames with 0 for each bucket
|
|
55
|
-
for (let i = 0; i < buckets.length; i++) {
|
|
56
|
-
const bucket = buckets[i];
|
|
57
|
-
counter.frames[bucket] = 0;
|
|
58
|
-
}
|
|
59
|
-
counter.frames[overflowBucketLabel] = 0;
|
|
60
|
-
return counter;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=fps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fps.js","sourceRoot":"","sources":["../../../../src/core/lib/fps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,IAAI,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACpC,IAAI,mBAAmB,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5D,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,WAAW;AAEnC,MAAM,YAAY,GAAkB;IAClC,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,EAAE;IACV,SAAS,CAAC,UAAkB;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;YACpC,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAE,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,UAAU;QACZ,qDAAqD;QACrD,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1D,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,UAAoB;IAClD,OAAO,GAAG,UAAU,CAAC;IACrB,mBAAmB,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,WAAW,GAAG,WAAW,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAiB,CAAC;IAC5D,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,WAAW,CAAC;IACtC,oCAAoC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Stage } from "../Stage";
|
|
2
|
-
import type { FontLoadOptions, TextRenderer, TextRenderers } from "./TextRenderer";
|
|
3
|
-
export default class TextGenerator {
|
|
4
|
-
readonly stage: Stage;
|
|
5
|
-
private layoutCache;
|
|
6
|
-
fontEngines: Record<string, TextRenderer>;
|
|
7
|
-
constructor(stage: Stage, fontEngines: TextRenderer[]);
|
|
8
|
-
loadFont(rendererType: TextRenderers, options: FontLoadOptions): any;
|
|
9
|
-
destroy(): void;
|
|
10
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export default class TextGenerator {
|
|
2
|
-
stage;
|
|
3
|
-
layoutCache = new Map();
|
|
4
|
-
fontEngines = {};
|
|
5
|
-
constructor(stage, fontEngines) {
|
|
6
|
-
this.stage = stage;
|
|
7
|
-
if (stage.renderer.mode === 'canvas') {
|
|
8
|
-
//filter out SDF renderer if the main renderer is canvas, since SDF rendering is not supported in that case
|
|
9
|
-
fontEngines = fontEngines.filter(engine => {
|
|
10
|
-
if (engine.type === 'canvas') {
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
console.warn(`SDF text rendering is not supported in canvas mode. The SDF text renderer will be ignored.`);
|
|
14
|
-
return false;
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
for (let i = 0; i < fontEngines.length; i++) {
|
|
18
|
-
const engine = fontEngines[i];
|
|
19
|
-
this.fontEngines[engine.type] = engine;
|
|
20
|
-
engine.init(stage);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
loadFont(rendererType, options) {
|
|
24
|
-
const rendererTypeKey = String(rendererType);
|
|
25
|
-
const fontEngine = this.fontEngines[rendererTypeKey];
|
|
26
|
-
if (fontEngine === undefined) {
|
|
27
|
-
throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontEngines).join(', ')}`);
|
|
28
|
-
}
|
|
29
|
-
return fontEngine.font.loadFont(this.stage, options);
|
|
30
|
-
}
|
|
31
|
-
destroy() {
|
|
32
|
-
// Clean up resources if necessary
|
|
33
|
-
this.layoutCache.clear();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=TextGenerator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextGenerator.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextGenerator.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,aAAa;IAKX;IAJb,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IAEzD,WAAW,GAAiC,EAAE,CAAC;IAE/C,YAAqB,KAAY,EAAE,WAA2B;QAAzC,UAAK,GAAL,KAAK,CAAO;QAC/B,IAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,2GAA2G;YAC3G,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;gBAC3G,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAGD,QAAQ,CAAC,YAA2B,EAAE,OAAwB;QAC5D,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mCAAmC,eAAe,iCAAiC,MAAM,CAAC,IAAI,CAC5F,IAAI,CAAC,WAAW,CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,OAAO;QAEL,kCAAkC;QAClC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
|