@solidtv/renderer 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -4
- package/dist/src/core/CoreNode.d.ts +5 -0
- package/dist/src/core/CoreNode.js +33 -18
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +0 -4
- package/dist/src/core/CoreTextureManager.js +70 -17
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.js +2 -2
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.js +0 -4
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.js +1 -1
- package/dist/src/core/lib/collectionUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -3
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -3
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +0 -3
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +3 -2
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +8 -10
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +15 -18
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +17 -21
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js +3 -3
- 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 +2 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.js +3 -3
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/Utils.js.map +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/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +6 -0
- package/dist/src/core/textures/Texture.js +6 -0
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/core/CoreNode.ts +36 -22
- package/src/core/CoreTextureManager.ts +77 -20
- package/src/core/Stage.ts +7 -5
- package/src/core/lib/WebGlContextWrapper.ts +0 -2
- package/src/core/lib/collectionUtils.ts +1 -1
- package/src/core/renderers/canvas/CanvasRenderer.ts +3 -3
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +0 -4
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +4 -2
- package/src/core/shaders/webgl/Border.ts +8 -10
- package/src/core/shaders/webgl/RoundedWithBorder.ts +15 -18
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +17 -21
- package/src/core/text-rendering/CanvasFontHandler.ts +4 -4
- package/src/core/text-rendering/CanvasTextRenderer.ts +7 -2
- package/src/core/text-rendering/SdfFontHandler.ts +4 -4
- package/src/core/text-rendering/Utils.ts +0 -2
- package/src/core/textures/ImageTexture.ts +1 -4
- package/src/core/textures/SubTexture.ts +0 -2
- package/src/core/textures/Texture.ts +7 -0
|
@@ -42,12 +42,10 @@ export const Border: WebGlShaderType<BorderProps> = {
|
|
|
42
42
|
varying vec2 v_outerBorderUv;
|
|
43
43
|
varying vec2 v_innerBorderUv;
|
|
44
44
|
varying vec2 v_halfDimensions;
|
|
45
|
-
varying float v_edgeWidth;
|
|
46
45
|
|
|
47
46
|
void main() {
|
|
48
47
|
vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
|
|
49
48
|
vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
|
|
50
|
-
v_edgeWidth = 1.0 / u_pixelRatio;
|
|
51
49
|
|
|
52
50
|
float borderTop = u_borderWidth.x;
|
|
53
51
|
float borderRight = u_borderWidth.y;
|
|
@@ -120,7 +118,6 @@ export const Border: WebGlShaderType<BorderProps> = {
|
|
|
120
118
|
varying vec2 v_outerBorderUv;
|
|
121
119
|
varying vec2 v_innerBorderUv;
|
|
122
120
|
varying vec2 v_halfDimensions;
|
|
123
|
-
varying float v_edgeWidth;
|
|
124
121
|
|
|
125
122
|
float box(vec2 p, vec2 s) {
|
|
126
123
|
vec2 q = abs(p) - s;
|
|
@@ -131,24 +128,25 @@ export const Border: WebGlShaderType<BorderProps> = {
|
|
|
131
128
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
132
129
|
vec4 resultColor = vec4(0.0);
|
|
133
130
|
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
131
|
+
float edgeWidth = 1.0 / u_pixelRatio;
|
|
134
132
|
|
|
135
|
-
float outerDist = box(boxUv + v_outerBorderUv, v_outerSize -
|
|
136
|
-
float innerDist = box(boxUv + v_innerBorderUv, v_innerSize -
|
|
133
|
+
float outerDist = box(boxUv + v_outerBorderUv, v_outerSize - edgeWidth);
|
|
134
|
+
float innerDist = box(boxUv + v_innerBorderUv, v_innerSize - edgeWidth);
|
|
137
135
|
|
|
138
136
|
if(u_borderGap == 0.0) {
|
|
139
|
-
float outerAlpha = 1.0 - smoothstep(-0.5 *
|
|
140
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 *
|
|
137
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
138
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
141
139
|
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
142
140
|
resultColor = mix(resultColor, color, innerAlpha);
|
|
143
141
|
gl_FragColor = resultColor * u_alpha;
|
|
144
142
|
return;
|
|
145
143
|
}
|
|
146
144
|
|
|
147
|
-
float nodeDist = box(boxUv, v_halfDimensions -
|
|
148
|
-
float nodeAlpha = 1.0 - smoothstep(-0.5 *
|
|
145
|
+
float nodeDist = box(boxUv, v_halfDimensions - edgeWidth);
|
|
146
|
+
float nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
149
147
|
|
|
150
148
|
float borderDist = max(-innerDist, outerDist);
|
|
151
|
-
float borderAlpha = 1.0 - smoothstep(-0.5 *
|
|
149
|
+
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
152
150
|
resultColor = mix(resultColor, color, nodeAlpha);
|
|
153
151
|
resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
|
|
154
152
|
|
|
@@ -53,20 +53,18 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
|
|
|
53
53
|
varying vec4 v_innerBorderRadius;
|
|
54
54
|
varying vec4 v_outerBorderRadius;
|
|
55
55
|
varying vec2 v_halfDimensions;
|
|
56
|
-
varying float v_edgeWidth;
|
|
57
|
-
varying float v_borderZero;
|
|
58
56
|
|
|
59
57
|
void main() {
|
|
60
58
|
vec2 vertexPos = a_position * u_pixelRatio;
|
|
61
59
|
vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
|
|
62
60
|
vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
|
|
63
61
|
vec2 edgeOffset = vec2(0.0);
|
|
62
|
+
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
64
63
|
|
|
65
|
-
v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
|
|
66
64
|
v_innerSize = vec2(0.0);
|
|
67
65
|
v_outerSize = vec2(0.0);
|
|
68
66
|
|
|
69
|
-
if(
|
|
67
|
+
if(borderZero == 0.0) {
|
|
70
68
|
float borderTop = u_borderWidth.x;
|
|
71
69
|
float borderRight = u_borderWidth.y;
|
|
72
70
|
float borderBottom = u_borderWidth.z;
|
|
@@ -125,7 +123,6 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
|
|
|
125
123
|
v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
|
|
126
124
|
|
|
127
125
|
v_halfDimensions = u_dimensions * 0.5;
|
|
128
|
-
v_edgeWidth = 1.0 / u_pixelRatio;
|
|
129
126
|
}
|
|
130
127
|
`,
|
|
131
128
|
fragment: `
|
|
@@ -159,8 +156,6 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
|
|
|
159
156
|
varying vec4 v_innerBorderRadius;
|
|
160
157
|
varying vec4 v_outerBorderRadius;
|
|
161
158
|
varying vec2 v_halfDimensions;
|
|
162
|
-
varying float v_edgeWidth;
|
|
163
|
-
varying float v_borderZero;
|
|
164
159
|
|
|
165
160
|
float roundedBox(vec2 p, vec2 s, vec4 r) {
|
|
166
161
|
r.xy = (p.x > 0.0) ? r.yz : r.xw;
|
|
@@ -173,36 +168,38 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
|
|
|
173
168
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
174
169
|
vec4 resultColor = vec4(0.0);
|
|
175
170
|
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
171
|
+
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
172
|
+
float edgeWidth = 1.0 / u_pixelRatio;
|
|
176
173
|
|
|
177
174
|
float nodeDist;
|
|
178
175
|
float nodeAlpha;
|
|
179
176
|
|
|
180
|
-
if(
|
|
181
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions -
|
|
182
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 *
|
|
177
|
+
if(borderZero == 1.0) {
|
|
178
|
+
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
179
|
+
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
183
180
|
gl_FragColor = (color * nodeAlpha) * u_alpha;
|
|
184
181
|
return;
|
|
185
182
|
}
|
|
186
183
|
|
|
187
|
-
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize -
|
|
188
|
-
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize -
|
|
184
|
+
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - edgeWidth, v_outerBorderRadius);
|
|
185
|
+
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - edgeWidth, v_innerBorderRadius);
|
|
189
186
|
|
|
190
187
|
if(u_borderGap == 0.0) {
|
|
191
|
-
float outerAlpha = 1.0 - smoothstep(-0.5 *
|
|
192
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 *
|
|
188
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
189
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
193
190
|
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
194
191
|
resultColor = mix(resultColor, color, innerAlpha);
|
|
195
192
|
gl_FragColor = resultColor * u_alpha;
|
|
196
193
|
return;
|
|
197
194
|
}
|
|
198
195
|
|
|
199
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions -
|
|
200
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 *
|
|
201
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 *
|
|
196
|
+
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
197
|
+
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
198
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
202
199
|
float gapAlpha = max(0.0, innerAlpha - nodeAlpha);
|
|
203
200
|
|
|
204
201
|
float borderDist = max(-innerDist, outerDist);
|
|
205
|
-
float borderAlpha = 1.0 - smoothstep(-0.5 *
|
|
202
|
+
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
206
203
|
|
|
207
204
|
resultColor = (color * nodeAlpha) + (u_fillColor * gapAlpha);
|
|
208
205
|
resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
|
|
@@ -59,22 +59,19 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
|
|
|
59
59
|
varying vec4 v_innerBorderRadius;
|
|
60
60
|
varying vec4 v_outerBorderRadius;
|
|
61
61
|
varying vec2 v_halfDimensions;
|
|
62
|
-
varying float v_edgeWidth;
|
|
63
|
-
varying float v_borderZero;
|
|
64
62
|
|
|
65
63
|
void main() {
|
|
66
64
|
vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
|
|
67
65
|
vec2 edge = clamp(a_nodeCoords * 2.0 - vec2(1.0), -1.0, 1.0);
|
|
66
|
+
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
68
67
|
|
|
69
68
|
vec2 edgeOffset = edge * ((u_shadow.w * 2.0)+ u_shadow.z) + u_shadow.xy;
|
|
70
69
|
vec2 vertexPos = (a_position + edge + edgeOffset) * u_pixelRatio;
|
|
71
70
|
|
|
72
|
-
v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
|
|
73
|
-
|
|
74
71
|
v_innerSize = vec2(0.0);
|
|
75
72
|
v_outerSize = vec2(0.0);
|
|
76
73
|
|
|
77
|
-
if(
|
|
74
|
+
if(borderZero == 0.0) {
|
|
78
75
|
float borderTop = u_borderWidth.x;
|
|
79
76
|
float borderRight = u_borderWidth.y;
|
|
80
77
|
float borderBottom = u_borderWidth.z;
|
|
@@ -129,7 +126,6 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
|
|
|
129
126
|
gl_Position = vec4(vertexPos.x * screenSpace.x - 1.0, -sign(screenSpace.y) * (vertexPos.y * -abs(screenSpace.y)) + 1.0, 0.0, 1.0);
|
|
130
127
|
|
|
131
128
|
v_halfDimensions = u_dimensions * 0.5;
|
|
132
|
-
v_edgeWidth = 1.0 / u_pixelRatio;
|
|
133
129
|
v_color = a_color;
|
|
134
130
|
v_nodeCoords = a_nodeCoords + (screenSpace + edgeOffset) / (u_dimensions);
|
|
135
131
|
v_textureCoords = a_textureCoords + (screenSpace + edgeOffset) / (u_dimensions);
|
|
@@ -167,8 +163,6 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
|
|
|
167
163
|
varying vec4 v_innerBorderRadius;
|
|
168
164
|
varying vec4 v_outerBorderRadius;
|
|
169
165
|
varying vec2 v_halfDimensions;
|
|
170
|
-
varying float v_edgeWidth;
|
|
171
|
-
varying float v_borderZero;
|
|
172
166
|
|
|
173
167
|
float roundedBox(vec2 p, vec2 s, vec4 r) {
|
|
174
168
|
r.xy = (p.x > 0.0) ? r.yz : r.xw;
|
|
@@ -189,32 +183,34 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
|
|
|
189
183
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
190
184
|
vec4 resultColor = vec4(0.0);
|
|
191
185
|
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
186
|
+
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
187
|
+
float edgeWidth = 1.0 / u_pixelRatio;
|
|
192
188
|
float nodeDist;
|
|
193
189
|
float nodeAlpha;
|
|
194
190
|
float shadowAlpha;
|
|
195
191
|
|
|
196
|
-
if(
|
|
197
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions -
|
|
198
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 *
|
|
199
|
-
shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w -
|
|
192
|
+
if(borderZero == 1.0) {
|
|
193
|
+
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
194
|
+
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
195
|
+
shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - edgeWidth, u_radius + u_shadow.z);
|
|
200
196
|
resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
|
|
201
197
|
gl_FragColor = mix(resultColor, color, nodeAlpha) * u_alpha;
|
|
202
198
|
return;
|
|
203
199
|
}
|
|
204
200
|
|
|
205
201
|
if(v_outerSize.x > v_halfDimensions.x || v_outerSize.y > v_halfDimensions.y) {
|
|
206
|
-
shadowAlpha = shadowBox(boxUv + v_outerBorderUv - u_shadow.xy, v_outerSize + u_shadow.w -
|
|
202
|
+
shadowAlpha = shadowBox(boxUv + v_outerBorderUv - u_shadow.xy, v_outerSize + u_shadow.w - edgeWidth, v_outerBorderRadius + u_shadow.z);
|
|
207
203
|
}
|
|
208
204
|
else {
|
|
209
|
-
shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w -
|
|
205
|
+
shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - edgeWidth, u_radius + u_shadow.z);
|
|
210
206
|
}
|
|
211
207
|
|
|
212
|
-
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize -
|
|
213
|
-
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize -
|
|
208
|
+
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - edgeWidth, v_outerBorderRadius);
|
|
209
|
+
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - edgeWidth, v_innerBorderRadius);
|
|
214
210
|
|
|
215
211
|
if(u_borderGap == 0.0) {
|
|
216
|
-
float outerAlpha = 1.0 - smoothstep(-0.5 *
|
|
217
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 *
|
|
212
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
213
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
218
214
|
resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
|
|
219
215
|
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
220
216
|
resultColor = mix(resultColor, color, innerAlpha);
|
|
@@ -222,10 +218,10 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
|
|
|
222
218
|
return;
|
|
223
219
|
}
|
|
224
220
|
|
|
225
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions -
|
|
226
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 *
|
|
221
|
+
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
222
|
+
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
227
223
|
float borderDist = max(-innerDist, outerDist);
|
|
228
|
-
float borderAlpha = 1.0 - smoothstep(-0.5 *
|
|
224
|
+
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
229
225
|
resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
|
|
230
226
|
resultColor = mix(resultColor, color, nodeAlpha);
|
|
231
227
|
resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
|
|
@@ -65,7 +65,7 @@ const processFontData = (
|
|
|
65
65
|
/**
|
|
66
66
|
* Load a font by providing fontFamily, fontUrl, and optional metrics
|
|
67
67
|
*/
|
|
68
|
-
export const loadFont =
|
|
68
|
+
export const loadFont = (
|
|
69
69
|
stage: Stage,
|
|
70
70
|
options: FontLoadOptions,
|
|
71
71
|
): Promise<void> => {
|
|
@@ -73,7 +73,7 @@ export const loadFont = async (
|
|
|
73
73
|
|
|
74
74
|
// If already loaded, return immediately
|
|
75
75
|
if (fontCache.has(fontFamily) === true) {
|
|
76
|
-
return;
|
|
76
|
+
return Promise.resolve();
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
const existingPromise = fontLoadPromises.get(fontFamily);
|
|
@@ -117,7 +117,7 @@ export const getFontFamilies = (): FontFamilyMap => {
|
|
|
117
117
|
*/
|
|
118
118
|
export const init = (
|
|
119
119
|
c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
|
|
120
|
-
mc
|
|
120
|
+
mc?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
|
|
121
121
|
): void => {
|
|
122
122
|
if (initialized === true) {
|
|
123
123
|
return;
|
|
@@ -130,7 +130,7 @@ export const init = (
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
context = c;
|
|
133
|
-
measureContext = mc;
|
|
133
|
+
measureContext = mc || c;
|
|
134
134
|
|
|
135
135
|
// Register the default 'sans-serif' font face
|
|
136
136
|
const defaultMetrics: FontMetrics = {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { assertTruthy } from '../../utils.js';
|
|
2
2
|
import type { Stage } from '../Stage.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
FontHandler,
|
|
5
|
+
TextLineStruct,
|
|
6
|
+
TextRenderInfo,
|
|
7
|
+
} from './TextRenderer.js';
|
|
4
8
|
import * as CanvasFontHandler from './CanvasFontHandler.js';
|
|
5
9
|
import type { CoreTextNodeProps } from '../CoreTextNode.js';
|
|
6
10
|
import { hasZeroWidthSpace } from './Utils.js';
|
|
@@ -9,6 +13,7 @@ import { mapTextLayout } from './TextLayoutEngine.js';
|
|
|
9
13
|
const MAX_TEXTURE_DIMENSION = 4096;
|
|
10
14
|
|
|
11
15
|
const type = 'canvas' as const;
|
|
16
|
+
const font: FontHandler = CanvasFontHandler;
|
|
12
17
|
|
|
13
18
|
let canvas: HTMLCanvasElement | OffscreenCanvas | null = null;
|
|
14
19
|
let context:
|
|
@@ -238,7 +243,7 @@ const renderQuads = (): void => {
|
|
|
238
243
|
*/
|
|
239
244
|
const CanvasTextRenderer = {
|
|
240
245
|
type,
|
|
241
|
-
font
|
|
246
|
+
font,
|
|
242
247
|
renderText,
|
|
243
248
|
addQuads,
|
|
244
249
|
renderQuads,
|
|
@@ -259,14 +259,14 @@ export const canRenderFont = (trProps: TrProps): boolean => {
|
|
|
259
259
|
* @param {string} options.atlasUrl - PNG atlas texture URL
|
|
260
260
|
* @param {FontMetrics} options.metrics - Optional font metrics
|
|
261
261
|
*/
|
|
262
|
-
export const loadFont =
|
|
262
|
+
export const loadFont = (
|
|
263
263
|
stage: Stage,
|
|
264
264
|
options: FontLoadOptions,
|
|
265
265
|
): Promise<void> => {
|
|
266
266
|
const { fontFamily, atlasUrl, atlasDataUrl, metrics } = options;
|
|
267
267
|
// Early return if already loaded
|
|
268
268
|
if (fontCache.get(fontFamily) !== undefined) {
|
|
269
|
-
return;
|
|
269
|
+
return Promise.resolve();
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
// Early return if already loading
|
|
@@ -276,8 +276,8 @@ export const loadFont = async (
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
if (atlasDataUrl === undefined) {
|
|
279
|
-
|
|
280
|
-
`Atlas data URL must be provided for SDF font: ${fontFamily}
|
|
279
|
+
return Promise.reject(
|
|
280
|
+
new Error(`Atlas data URL must be provided for SDF font: ${fontFamily}`),
|
|
281
281
|
);
|
|
282
282
|
}
|
|
283
283
|
|
|
@@ -12,10 +12,7 @@ import {
|
|
|
12
12
|
import { isSvgImage, loadSvg } from '../lib/textureSvg.js';
|
|
13
13
|
import { fetchJson } from '../lib/utils.js';
|
|
14
14
|
import type { Platform } from '../platforms/Platform.js';
|
|
15
|
-
import {
|
|
16
|
-
ENABLE_COMPRESSED_TEXTURES,
|
|
17
|
-
isProductionEnvironment,
|
|
18
|
-
} from '../../utils.js';
|
|
15
|
+
import { ENABLE_COMPRESSED_TEXTURES } from '../../utils.js';
|
|
19
16
|
|
|
20
17
|
/**
|
|
21
18
|
* Properties of the {@link ImageTexture}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Dimensions } from '../../common/CommonTypes.js';
|
|
2
1
|
import { assertTruthy } from '../../utils.js';
|
|
3
2
|
import type { CoreTextureManager } from '../CoreTextureManager.js';
|
|
4
3
|
import { ImageTexture } from './ImageTexture.js';
|
|
@@ -8,7 +7,6 @@ import {
|
|
|
8
7
|
type TextureData,
|
|
9
8
|
type TextureFailedEventHandler,
|
|
10
9
|
type TextureLoadedEventHandler,
|
|
11
|
-
type TextureState,
|
|
12
10
|
} from './Texture.js';
|
|
13
11
|
|
|
14
12
|
let subTextureId = 0;
|
|
@@ -153,6 +153,13 @@ export abstract class Texture extends EventEmitter {
|
|
|
153
153
|
|
|
154
154
|
public textureData: TextureData | null = null;
|
|
155
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Cache key under which this texture is registered in the
|
|
158
|
+
* {@link CoreTextureManager} keyCache, or `null` if the texture is
|
|
159
|
+
* not cached. Owned by the texture manager.
|
|
160
|
+
*/
|
|
161
|
+
public cacheKey: string | null = null;
|
|
162
|
+
|
|
156
163
|
public memUsed = 0;
|
|
157
164
|
|
|
158
165
|
/**
|