@bloopjs/toodle 0.1.2 → 0.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/dist/Toodle.d.ts +1 -1
- package/dist/Toodle.d.ts.map +1 -1
- package/dist/backends/ITextShader.d.ts +15 -0
- package/dist/backends/ITextShader.d.ts.map +1 -0
- package/dist/backends/mod.d.ts +1 -0
- package/dist/backends/mod.d.ts.map +1 -1
- package/dist/backends/webgl2/WebGLFontPipeline.d.ts +26 -0
- package/dist/backends/webgl2/WebGLFontPipeline.d.ts.map +1 -0
- package/dist/backends/webgl2/WebGLTextShader.d.ts +24 -0
- package/dist/backends/webgl2/WebGLTextShader.d.ts.map +1 -0
- package/dist/backends/webgl2/glsl/text.glsl.d.ts +12 -0
- package/dist/backends/webgl2/glsl/text.glsl.d.ts.map +1 -0
- package/dist/backends/webgl2/mod.d.ts +2 -0
- package/dist/backends/webgl2/mod.d.ts.map +1 -1
- package/dist/{text → backends/webgpu}/FontPipeline.d.ts +1 -1
- package/dist/backends/webgpu/FontPipeline.d.ts.map +1 -0
- package/dist/{text/TextShader.d.ts → backends/webgpu/WebGPUTextShader.d.ts} +7 -7
- package/dist/backends/webgpu/WebGPUTextShader.d.ts.map +1 -0
- package/dist/backends/webgpu/mod.d.ts +2 -0
- package/dist/backends/webgpu/mod.d.ts.map +1 -1
- package/dist/backends/webgpu/wgsl/text.wgsl.d.ts.map +1 -0
- package/dist/mod.d.ts +1 -1
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +1832 -1460
- package/dist/mod.js.map +17 -14
- package/dist/{text → scene}/TextNode.d.ts +5 -5
- package/dist/scene/TextNode.d.ts.map +1 -0
- package/dist/scene/mod.d.ts +1 -0
- package/dist/scene/mod.d.ts.map +1 -1
- package/dist/text/mod.d.ts +1 -3
- package/dist/text/mod.d.ts.map +1 -1
- package/dist/textures/AssetManager.d.ts +9 -6
- package/dist/textures/AssetManager.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Toodle.ts +1 -1
- package/src/backends/ITextShader.ts +15 -0
- package/src/backends/mod.ts +1 -0
- package/src/backends/webgl2/WebGLFontPipeline.ts +173 -0
- package/src/backends/webgl2/WebGLTextShader.ts +275 -0
- package/src/backends/webgl2/glsl/text.glsl.ts +132 -0
- package/src/backends/webgl2/mod.ts +2 -0
- package/src/{text → backends/webgpu}/FontPipeline.ts +2 -2
- package/src/{text/TextShader.ts → backends/webgpu/WebGPUTextShader.ts} +14 -10
- package/src/backends/webgpu/mod.ts +2 -0
- package/src/mod.ts +1 -1
- package/src/{text → scene}/TextNode.ts +6 -6
- package/src/scene/mod.ts +1 -0
- package/src/text/mod.ts +1 -4
- package/src/textures/AssetManager.ts +46 -31
- package/dist/text/FontPipeline.d.ts.map +0 -1
- package/dist/text/TextNode.d.ts.map +0 -1
- package/dist/text/TextShader.d.ts.map +0 -1
- package/dist/text/text.wgsl.d.ts.map +0 -1
- /package/dist/{text → backends/webgpu/wgsl}/text.wgsl.d.ts +0 -0
- /package/src/{text → backends/webgpu/wgsl}/text.wgsl.ts +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLSL ES 3.0 port of the WGSL text shader for MSDF font rendering.
|
|
3
|
+
*
|
|
4
|
+
* Key differences from WebGPU version:
|
|
5
|
+
* - Uses texelFetch() to read from data textures instead of storage buffers
|
|
6
|
+
* - Character metrics stored in RGBA32F texture (8 floats per char = 2 texels)
|
|
7
|
+
* - Per-glyph positions stored in RGBA32F texture (vec4: xy = pos, z = charIndex)
|
|
8
|
+
* - Each TextNode is rendered separately with uniforms (no firstInstance)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const vertexShader = /*glsl*/ `#version 300 es
|
|
12
|
+
precision highp float;
|
|
13
|
+
|
|
14
|
+
// Engine uniforms
|
|
15
|
+
uniform mat3 u_viewProjection;
|
|
16
|
+
|
|
17
|
+
// Per-text-block uniforms
|
|
18
|
+
uniform mat3 u_textTransform;
|
|
19
|
+
uniform vec4 u_textColor;
|
|
20
|
+
uniform float u_fontSize;
|
|
21
|
+
uniform float u_blockWidth;
|
|
22
|
+
uniform float u_blockHeight;
|
|
23
|
+
uniform float u_lineHeight;
|
|
24
|
+
|
|
25
|
+
// Character data texture (RGBA32F, 2 texels per character)
|
|
26
|
+
// Texel 0: texOffset.xy, texExtent.xy
|
|
27
|
+
// Texel 1: size.xy, offset.xy
|
|
28
|
+
uniform sampler2D u_charData;
|
|
29
|
+
|
|
30
|
+
// Text buffer texture (RGBA32F, 1 texel per glyph)
|
|
31
|
+
// Each texel: xy = glyph position, z = char index
|
|
32
|
+
uniform sampler2D u_textBuffer;
|
|
33
|
+
|
|
34
|
+
// Outputs to fragment shader
|
|
35
|
+
out vec2 v_texcoord;
|
|
36
|
+
|
|
37
|
+
// Quad vertex positions for a character (matches WGSL)
|
|
38
|
+
const vec2 pos[4] = vec2[4](
|
|
39
|
+
vec2(0.0, -1.0),
|
|
40
|
+
vec2(1.0, -1.0),
|
|
41
|
+
vec2(0.0, 0.0),
|
|
42
|
+
vec2(1.0, 0.0)
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
void main() {
|
|
46
|
+
// gl_VertexID gives us 0-3 for the quad vertices
|
|
47
|
+
// gl_InstanceID gives us which glyph we're rendering
|
|
48
|
+
int vertexIndex = gl_VertexID;
|
|
49
|
+
int glyphIndex = gl_InstanceID;
|
|
50
|
+
|
|
51
|
+
// Fetch glyph data from text buffer texture
|
|
52
|
+
vec4 glyphData = texelFetch(u_textBuffer, ivec2(glyphIndex, 0), 0);
|
|
53
|
+
vec2 glyphPos = glyphData.xy;
|
|
54
|
+
int charIndex = int(glyphData.z);
|
|
55
|
+
|
|
56
|
+
// Fetch character metrics (2 texels per char)
|
|
57
|
+
// Texel 0: texOffset.x, texOffset.y, texExtent.x, texExtent.y
|
|
58
|
+
// Texel 1: size.x, size.y, offset.x, offset.y
|
|
59
|
+
vec4 charData0 = texelFetch(u_charData, ivec2(charIndex * 2, 0), 0);
|
|
60
|
+
vec4 charData1 = texelFetch(u_charData, ivec2(charIndex * 2 + 1, 0), 0);
|
|
61
|
+
|
|
62
|
+
vec2 texOffset = charData0.xy;
|
|
63
|
+
vec2 texExtent = charData0.zw;
|
|
64
|
+
vec2 charSize = charData1.xy;
|
|
65
|
+
vec2 charOffset = charData1.zw;
|
|
66
|
+
|
|
67
|
+
// Center text vertically; origin is mid-height
|
|
68
|
+
vec2 offset = vec2(0.0, -u_blockHeight / 2.0);
|
|
69
|
+
|
|
70
|
+
// Glyph position in ems (quad pos * size + per-char offset)
|
|
71
|
+
vec2 emPos = pos[vertexIndex] * charSize + charOffset + glyphPos - offset;
|
|
72
|
+
vec2 charPos = emPos * (u_fontSize / u_lineHeight);
|
|
73
|
+
|
|
74
|
+
// Transform position through model and view-projection matrices
|
|
75
|
+
vec3 worldPos = u_textTransform * vec3(charPos, 1.0);
|
|
76
|
+
vec3 clipPos = u_viewProjection * worldPos;
|
|
77
|
+
|
|
78
|
+
gl_Position = vec4(clipPos.xy, 0.0, 1.0);
|
|
79
|
+
|
|
80
|
+
// Calculate texture coordinates
|
|
81
|
+
v_texcoord = pos[vertexIndex] * vec2(1.0, -1.0);
|
|
82
|
+
v_texcoord *= texExtent;
|
|
83
|
+
v_texcoord += texOffset;
|
|
84
|
+
}
|
|
85
|
+
`;
|
|
86
|
+
|
|
87
|
+
export const fragmentShader = /*glsl*/ `#version 300 es
|
|
88
|
+
precision highp float;
|
|
89
|
+
|
|
90
|
+
// Font texture (MSDF atlas)
|
|
91
|
+
uniform sampler2D u_fontTexture;
|
|
92
|
+
|
|
93
|
+
// Text color
|
|
94
|
+
uniform vec4 u_textColor;
|
|
95
|
+
|
|
96
|
+
// Input from vertex shader
|
|
97
|
+
in vec2 v_texcoord;
|
|
98
|
+
|
|
99
|
+
// Output color
|
|
100
|
+
out vec4 fragColor;
|
|
101
|
+
|
|
102
|
+
// Signed distance function sampling for MSDF font rendering
|
|
103
|
+
// Median of three: max(min(r,g), min(max(r,g), b))
|
|
104
|
+
float sampleMsdf(vec2 texcoord) {
|
|
105
|
+
vec4 c = texture(u_fontTexture, texcoord);
|
|
106
|
+
return max(min(c.r, c.g), min(max(c.r, c.g), c.b));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
void main() {
|
|
110
|
+
// pxRange (AKA distanceRange) comes from the msdfgen tool
|
|
111
|
+
float pxRange = 4.0;
|
|
112
|
+
vec2 texSize = vec2(textureSize(u_fontTexture, 0));
|
|
113
|
+
|
|
114
|
+
// Anti-aliasing technique by Paul Houx
|
|
115
|
+
// https://github.com/Chlumsky/msdfgen/issues/22#issuecomment-234958005
|
|
116
|
+
float dx = texSize.x * length(vec2(dFdx(v_texcoord.x), dFdy(v_texcoord.x)));
|
|
117
|
+
float dy = texSize.y * length(vec2(dFdx(v_texcoord.y), dFdy(v_texcoord.y)));
|
|
118
|
+
|
|
119
|
+
float toPixels = pxRange * inversesqrt(dx * dx + dy * dy);
|
|
120
|
+
float sigDist = sampleMsdf(v_texcoord) - 0.5;
|
|
121
|
+
float pxDist = sigDist * toPixels;
|
|
122
|
+
|
|
123
|
+
float edgeWidth = 0.5;
|
|
124
|
+
float alpha = smoothstep(-edgeWidth, edgeWidth, pxDist);
|
|
125
|
+
|
|
126
|
+
if (alpha < 0.001) {
|
|
127
|
+
discard;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
fragColor = vec4(u_textColor.rgb, u_textColor.a * alpha);
|
|
131
|
+
}
|
|
132
|
+
`;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { WgslReflect } from "wgsl_reflect";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
2
|
+
import type { EngineUniform } from "../../coreTypes/EngineUniform";
|
|
3
|
+
import type { SceneNode } from "../../scene/SceneNode";
|
|
4
|
+
import { DEFAULT_FONT_SIZE, TextNode } from "../../scene/TextNode";
|
|
5
|
+
import type { MsdfFont } from "../../text/MsdfFont";
|
|
6
|
+
import {
|
|
7
|
+
findLargestFontSize,
|
|
8
|
+
measureText,
|
|
9
|
+
shapeText,
|
|
10
|
+
} from "../../text/shaping";
|
|
11
|
+
import type { ITextShader } from "../ITextShader";
|
|
6
12
|
import type { FontPipeline } from "./FontPipeline";
|
|
7
|
-
import type {
|
|
8
|
-
import
|
|
9
|
-
import { DEFAULT_FONT_SIZE, TextNode } from "./TextNode";
|
|
10
|
-
import msdfShader from "./text.wgsl";
|
|
13
|
+
import type { WebGPUBackend } from "./WebGPUBackend";
|
|
14
|
+
import msdfShader from "./wgsl/text.wgsl";
|
|
11
15
|
|
|
12
16
|
const deets = new WgslReflect(msdfShader);
|
|
13
17
|
const struct = deets.structs.find((s) => s.name === "TextBlockDescriptor");
|
|
@@ -16,7 +20,7 @@ if (!struct) {
|
|
|
16
20
|
}
|
|
17
21
|
const textDescriptorInstanceSize = struct.size;
|
|
18
22
|
|
|
19
|
-
export class
|
|
23
|
+
export class WebGPUTextShader implements ITextShader {
|
|
20
24
|
readonly label = "text";
|
|
21
25
|
|
|
22
26
|
#backend: WebGPUBackend;
|
|
@@ -130,7 +134,7 @@ export class TextShader implements IBackendShader {
|
|
|
130
134
|
if (!(node instanceof TextNode)) {
|
|
131
135
|
console.error(node);
|
|
132
136
|
throw new Error(
|
|
133
|
-
`Tried to use
|
|
137
|
+
`Tried to use WebGPUTextShader on something that isn't a TextNode: ${node}`,
|
|
134
138
|
);
|
|
135
139
|
}
|
|
136
140
|
const text = node.text;
|
package/src/mod.ts
CHANGED
|
@@ -4,7 +4,7 @@ export type * from "./coreTypes/mod";
|
|
|
4
4
|
|
|
5
5
|
export type * from "./scene/QuadNode";
|
|
6
6
|
export type * from "./scene/SceneNode";
|
|
7
|
-
export type * from "./
|
|
7
|
+
export type * from "./scene/TextNode";
|
|
8
8
|
export type * from "./backends/IBackendShader";
|
|
9
9
|
export type * from "./backends/IRenderBackend";
|
|
10
10
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import type { ITextShader } from "../backends/ITextShader";
|
|
1
2
|
import type { Color } from "../coreTypes/Color";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import type
|
|
6
|
-
import type { TextShader } from "./TextShader";
|
|
3
|
+
import type { MsdfFont } from "../text/MsdfFont";
|
|
4
|
+
import { measureText } from "../text/shaping";
|
|
5
|
+
import type { TextFormatting } from "../text/TextFormatting";
|
|
6
|
+
import { type NodeOptions, SceneNode } from "./SceneNode";
|
|
7
7
|
|
|
8
8
|
export const DEFAULT_FONT_SIZE = 14;
|
|
9
9
|
|
|
@@ -12,7 +12,7 @@ export class TextNode extends SceneNode {
|
|
|
12
12
|
#formatting: TextFormatting;
|
|
13
13
|
#font: MsdfFont;
|
|
14
14
|
|
|
15
|
-
constructor(shader:
|
|
15
|
+
constructor(shader: ITextShader, text: string, opts: TextOptions = {}) {
|
|
16
16
|
const { width, height } = measureText(shader.font, text, opts.wordWrap);
|
|
17
17
|
|
|
18
18
|
if (text.length > shader.maxCharCount) {
|
package/src/scene/mod.ts
CHANGED
package/src/text/mod.ts
CHANGED
|
@@ -2,7 +2,4 @@
|
|
|
2
2
|
// https://tchayen.com/drawing-text-in-webgpu-using-just-the-font-file
|
|
3
3
|
// https://github.com/Chlumsky/msdfgen/issues/22#issuecomment-234958005
|
|
4
4
|
// https://github.com/pixijs/pixijs/blob/dev/src/scene/text-bitmap/utils/getBitmapTextLayout.ts#L20
|
|
5
|
-
|
|
6
|
-
export type { TextOptions } from "./TextNode";
|
|
7
|
-
export { TextNode } from "./TextNode";
|
|
8
|
-
export { TextShader } from "./TextShader";
|
|
5
|
+
export { WebGPUTextShader as TextShader } from "../backends/webgpu/WebGPUTextShader";
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import type { IRenderBackend } from "../backends/IRenderBackend";
|
|
2
|
+
import type { ITextShader } from "../backends/ITextShader";
|
|
3
|
+
import type { WebGLBackend } from "../backends/webgl2/WebGLBackend";
|
|
4
|
+
import { WebGLFontPipeline } from "../backends/webgl2/WebGLFontPipeline";
|
|
5
|
+
import { WebGLTextShader } from "../backends/webgl2/WebGLTextShader";
|
|
6
|
+
import { FontPipeline } from "../backends/webgpu/FontPipeline";
|
|
2
7
|
import { TextureComputeShader } from "../backends/webgpu/TextureComputeShader";
|
|
3
8
|
import type { WebGPUBackend } from "../backends/webgpu/WebGPUBackend";
|
|
9
|
+
import { WebGPUTextShader } from "../backends/webgpu/WebGPUTextShader";
|
|
4
10
|
import type { Size } from "../coreTypes/Size";
|
|
5
11
|
import type { Vec2 } from "../coreTypes/Vec2";
|
|
6
12
|
import { JumboQuadNode } from "../scene/JumboQuadNode";
|
|
7
13
|
import { QuadNode } from "../scene/QuadNode";
|
|
8
14
|
import type { SceneNode } from "../scene/SceneNode";
|
|
9
|
-
import { FontPipeline } from "../text/FontPipeline";
|
|
10
15
|
import { MsdfFont } from "../text/MsdfFont";
|
|
11
|
-
import { TextShader } from "../text/TextShader";
|
|
12
16
|
import { Bundles } from "./Bundles";
|
|
13
17
|
import type {
|
|
14
18
|
AtlasBundleOpts,
|
|
@@ -34,7 +38,7 @@ export class AssetManager {
|
|
|
34
38
|
readonly bundles: Bundles;
|
|
35
39
|
#backend: IRenderBackend;
|
|
36
40
|
#atlasId: string;
|
|
37
|
-
#fonts: Map<string,
|
|
41
|
+
#fonts: Map<string, ITextShader> = new Map();
|
|
38
42
|
#cropComputeShader: TextureComputeShader | null = null;
|
|
39
43
|
#availableIndices: Set<number> = new Set();
|
|
40
44
|
|
|
@@ -310,43 +314,54 @@ export class AssetManager {
|
|
|
310
314
|
}
|
|
311
315
|
|
|
312
316
|
/**
|
|
313
|
-
* Load a font
|
|
317
|
+
* Load a font for text rendering (WebGPU) or measurement only (WebGL).
|
|
314
318
|
*
|
|
315
319
|
* @param id - The id of the font to load
|
|
316
|
-
* @param url - The url of the font to load
|
|
317
|
-
* @param fallbackCharacter - The character to use as a fallback if the font does not contain a character to be
|
|
320
|
+
* @param url - The url of the font JSON to load
|
|
321
|
+
* @param fallbackCharacter - The character to use as a fallback if the font does not contain a character to be rendered
|
|
318
322
|
*
|
|
319
|
-
* @
|
|
323
|
+
* @remarks
|
|
324
|
+
* On WebGPU backend, loads the full font for rendering.
|
|
325
|
+
* On WebGL backend, loads the font for text measurement only. Attempting to
|
|
326
|
+
* render text on WebGL will throw an error.
|
|
320
327
|
*/
|
|
321
328
|
async loadFont(id: string, url: URL, fallbackCharacter = "_") {
|
|
322
|
-
if (this.#backend.type !== "webgpu") {
|
|
323
|
-
throw new Error(
|
|
324
|
-
"loadFont is only supported with WebGPU backend. Text rendering is not available in WebGL mode.",
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
const webgpuBackend = this.#backend as WebGPUBackend;
|
|
329
|
-
const device = webgpuBackend.device;
|
|
330
|
-
const presentationFormat = webgpuBackend.presentationFormat;
|
|
331
329
|
const limits = this.#backend.limits;
|
|
332
|
-
|
|
333
330
|
const font = await MsdfFont.create(id, url);
|
|
334
331
|
font.fallbackCharacter = fallbackCharacter;
|
|
335
|
-
const fontPipeline = await FontPipeline.create(
|
|
336
|
-
device,
|
|
337
|
-
font,
|
|
338
|
-
presentationFormat,
|
|
339
|
-
limits.maxTextLength,
|
|
340
|
-
);
|
|
341
332
|
|
|
342
|
-
|
|
343
|
-
this.#backend as WebGPUBackend
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
333
|
+
if (this.#backend.type === "webgpu") {
|
|
334
|
+
const webgpuBackend = this.#backend as WebGPUBackend;
|
|
335
|
+
const device = webgpuBackend.device;
|
|
336
|
+
const presentationFormat = webgpuBackend.presentationFormat;
|
|
337
|
+
|
|
338
|
+
const fontPipeline = await FontPipeline.create(
|
|
339
|
+
device,
|
|
340
|
+
font,
|
|
341
|
+
presentationFormat,
|
|
342
|
+
limits.maxTextLength,
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
const textShader = new WebGPUTextShader(
|
|
346
|
+
webgpuBackend,
|
|
347
|
+
fontPipeline,
|
|
348
|
+
font,
|
|
349
|
+
presentationFormat,
|
|
350
|
+
limits.instanceCount,
|
|
351
|
+
);
|
|
352
|
+
this.#fonts.set(id, textShader);
|
|
353
|
+
} else {
|
|
354
|
+
// WebGL: create font pipeline and text shader for rendering
|
|
355
|
+
const webglBackend = this.#backend as WebGLBackend;
|
|
356
|
+
const fontPipeline = WebGLFontPipeline.create(
|
|
357
|
+
webglBackend.gl,
|
|
358
|
+
font,
|
|
359
|
+
limits.maxTextLength,
|
|
360
|
+
);
|
|
361
|
+
const textShader = new WebGLTextShader(webglBackend, fontPipeline);
|
|
362
|
+
this.#fonts.set(id, textShader);
|
|
363
|
+
}
|
|
364
|
+
|
|
350
365
|
return id;
|
|
351
366
|
}
|
|
352
367
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FontPipeline.d.ts","sourceRoot":"","sources":["../../src/text/FontPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C;;GAEG;AACH,qBAAa,YAAY;IAEd,QAAQ,EAAE,iBAAiB;IAC3B,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,MAAM;gBAHpB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,YAAY,EAC3B,YAAY,EAAE,MAAM;WAGhB,MAAM,CACjB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC;CAuEzB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,gBAAgB,EAC7B,KAAK,EAAE,MAAM,8BA4Cd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextNode.d.ts","sourceRoot":"","sources":["../../src/text/TextNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,qBAAa,QAAS,SAAQ,SAAS;;gBAKzB,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB;IAgCpE,IAAI,IAAI,IAYO,MAAM,CAVpB;IAED,IAAI,UAAU,IAyBa,cAAc,CAvBxC;IAED,IAAI,IAAI,aAEP;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAMpB;IAED,IAAI,IAAI,IAIO,KAAK,CAFnB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAGnB;IAED,IAAI,UAAU,CAAC,UAAU,EAAE,cAAc,EAGxC;CACF;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextShader.d.ts","sourceRoot":"","sources":["../../src/text/TextShader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAY3C,qBAAa,UAAW,YAAW,cAAc;;IAC/C,QAAQ,CAAC,KAAK,UAAU;gBAgBtB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,MAAM;IAqEvB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAWxC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM;IAkGxC,QAAQ,IAAI,IAAI;IAIhB,IAAI,IAAI,aAEP;IAED,IAAI,YAAY,WAEf;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.wgsl.d.ts","sourceRoot":"","sources":["../../src/text/text.wgsl.ts"],"names":[],"mappings":";AAAA,wBAoJE"}
|
|
File without changes
|
|
File without changes
|