@flighthq/scene2d-wgpu 0.3.0-next.906.07cea63 → 0.3.0
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/contract.d.ts +8 -6
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +8 -6
- package/dist/contract.js.map +1 -1
- package/dist/enableWgpuColorAdjustmentGuards.js +2 -2
- package/dist/enableWgpuColorAdjustmentGuards.js.map +1 -1
- package/dist/enableWgpuStrokePathTessellation.d.ts +3 -0
- package/dist/enableWgpuStrokePathTessellation.d.ts.map +1 -0
- package/dist/enableWgpuStrokePathTessellation.js +8 -0
- package/dist/enableWgpuStrokePathTessellation.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/wgpuBitmapText.d.ts.map +1 -1
- package/dist/wgpuBitmapText.js +20 -16
- package/dist/wgpuBitmapText.js.map +1 -1
- package/dist/wgpuCache.d.ts.map +1 -1
- package/dist/wgpuCache.js +19 -16
- package/dist/wgpuCache.js.map +1 -1
- package/dist/wgpuClipContours.js +3 -3
- package/dist/wgpuClipContours.js.map +1 -1
- package/dist/wgpuClipRectangle.js +3 -3
- package/dist/wgpuClipRectangle.js.map +1 -1
- package/dist/wgpuColorAdjustmentMaterialFeature.d.ts.map +1 -1
- package/dist/wgpuColorAdjustmentMaterialFeature.js +156 -67
- package/dist/wgpuColorAdjustmentMaterialFeature.js.map +1 -1
- package/dist/wgpuMeshShapeRenderer.d.ts +4 -0
- package/dist/wgpuMeshShapeRenderer.d.ts.map +1 -0
- package/dist/wgpuMeshShapeRenderer.js +92 -0
- package/dist/wgpuMeshShapeRenderer.js.map +1 -0
- package/dist/wgpuNode2D.js +2 -2
- package/dist/wgpuNode2D.js.map +1 -1
- package/dist/wgpuParticleEmitter2D.d.ts.map +1 -1
- package/dist/wgpuParticleEmitter2D.js +26 -10
- package/dist/wgpuParticleEmitter2D.js.map +1 -1
- package/dist/wgpuQuadBatch.d.ts +1 -1
- package/dist/wgpuQuadBatch.d.ts.map +1 -1
- package/dist/wgpuQuadBatch.js +18 -13
- package/dist/wgpuQuadBatch.js.map +1 -1
- package/dist/wgpuQuadBatchWriter.d.ts +12 -0
- package/dist/wgpuQuadBatchWriter.d.ts.map +1 -0
- package/dist/{wgpuSpriteBatch.js → wgpuQuadBatchWriter.js} +97 -72
- package/dist/wgpuQuadBatchWriter.js.map +1 -0
- package/dist/wgpuRasterShapeRenderer.d.ts +4 -0
- package/dist/wgpuRasterShapeRenderer.d.ts.map +1 -0
- package/dist/wgpuRasterShapeRenderer.js +110 -0
- package/dist/wgpuRasterShapeRenderer.js.map +1 -0
- package/dist/wgpuRichText.d.ts.map +1 -1
- package/dist/wgpuRichText.js +7 -4
- package/dist/wgpuRichText.js.map +1 -1
- package/dist/wgpuScale9Shape.d.ts +1 -3
- package/dist/wgpuScale9Shape.d.ts.map +1 -1
- package/dist/wgpuScale9Shape.js +36 -33
- package/dist/wgpuScale9Shape.js.map +1 -1
- package/dist/wgpuShape.d.ts +2 -1
- package/dist/wgpuShape.d.ts.map +1 -1
- package/dist/wgpuShape.js +19 -153
- package/dist/wgpuShape.js.map +1 -1
- package/dist/wgpuShapeData.d.ts +6 -0
- package/dist/wgpuShapeData.d.ts.map +1 -0
- package/dist/wgpuShapeData.js +81 -0
- package/dist/wgpuShapeData.js.map +1 -0
- package/dist/wgpuShapeMesh.d.ts +2 -1
- package/dist/wgpuShapeMesh.d.ts.map +1 -1
- package/dist/wgpuShapeMesh.js +74 -62
- package/dist/wgpuShapeMesh.js.map +1 -1
- package/dist/wgpuShapeRasterizer.d.ts +4 -0
- package/dist/wgpuShapeRasterizer.d.ts.map +1 -0
- package/dist/wgpuShapeRasterizer.js +11 -0
- package/dist/wgpuShapeRasterizer.js.map +1 -0
- package/dist/wgpuSprite.d.ts +3 -2
- package/dist/wgpuSprite.d.ts.map +1 -1
- package/dist/wgpuSprite.js +67 -25
- package/dist/wgpuSprite.js.map +1 -1
- package/dist/wgpuStandardMaterial.d.ts +1 -1
- package/dist/wgpuStandardMaterial.js +3 -3
- package/dist/wgpuStandardMaterial.js.map +1 -1
- package/dist/wgpuTextLabel.d.ts.map +1 -1
- package/dist/wgpuTextLabel.js +15 -12
- package/dist/wgpuTextLabel.js.map +1 -1
- package/dist/wgpuTilemap.d.ts.map +1 -1
- package/dist/wgpuTilemap.js +19 -18
- package/dist/wgpuTilemap.js.map +1 -1
- package/package.json +22 -18
- package/src/enableWgpuColorAdjustmentGuards.test.ts +4 -4
- package/src/enableWgpuStrokePathTessellation.test.ts +23 -0
- package/src/wgpuBitmapText.test.ts +2 -2
- package/src/wgpuCache.test.ts +14 -11
- package/src/wgpuColorAdjustmentMaterialFeature.test.ts +52 -46
- package/src/wgpuMeshShapeRenderer.test.ts +167 -0
- package/src/wgpuParticleEmitter2D.test.ts +16 -7
- package/src/wgpuQuadBatch.test.ts +3 -3
- package/src/{wgpuSpriteBatch.test.ts → wgpuQuadBatchWriter.test.ts} +79 -70
- package/src/wgpuRasterShapeRenderer.test.ts +156 -0
- package/src/wgpuScale9Shape.test.ts +0 -13
- package/src/wgpuShape.test.ts +169 -15
- package/src/wgpuShapeData.test.ts +97 -0
- package/src/wgpuShapeMesh.test.ts +170 -15
- package/src/wgpuShapeRasterizer.test.ts +36 -0
- package/src/wgpuSprite.test.ts +45 -10
- package/src/wgpuStandardMaterial.test.ts +3 -3
- package/src/wgpuTextLabel.test.ts +7 -7
- package/src/wgpuTilemap.test.ts +4 -4
- package/src/wgpuVelocity.test.ts +3 -3
- package/dist/wgpuBitmap.d.ts +0 -4
- package/dist/wgpuBitmap.d.ts.map +0 -1
- package/dist/wgpuBitmap.js +0 -84
- package/dist/wgpuBitmap.js.map +0 -1
- package/dist/wgpuRenderTargetNode2D.d.ts +0 -11
- package/dist/wgpuRenderTargetNode2D.d.ts.map +0 -1
- package/dist/wgpuRenderTargetNode2D.js +0 -100
- package/dist/wgpuRenderTargetNode2D.js.map +0 -1
- package/dist/wgpuSpriteBatch.d.ts +0 -12
- package/dist/wgpuSpriteBatch.d.ts.map +0 -1
- package/dist/wgpuSpriteBatch.js.map +0 -1
- package/dist/wgpuSpriteRenderer.d.ts +0 -3
- package/dist/wgpuSpriteRenderer.d.ts.map +0 -1
- package/dist/wgpuSpriteRenderer.js +0 -55
- package/dist/wgpuSpriteRenderer.js.map +0 -1
- package/dist/wgpuVideo.d.ts +0 -6
- package/dist/wgpuVideo.d.ts.map +0 -1
- package/dist/wgpuVideo.js +0 -63
- package/dist/wgpuVideo.js.map +0 -1
- package/src/wgpuBitmap.test.ts +0 -40
- package/src/wgpuRenderTargetNode2D.test.ts +0 -267
- package/src/wgpuSpriteRenderer.test.ts +0 -63
- package/src/wgpuVideo.test.ts +0 -59
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { createImageResource } from '@flighthq/image/contract';
|
|
2
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
|
|
3
|
+
import { createWgpuRendererData, getWgpuRendererData } from './wgpuRendererData';
|
|
4
|
+
// Allocates the rasterization surface on first use, matching scene2d-gl. A shape whose fills all
|
|
5
|
+
// tessellate never touches this, so a scene drawn entirely through the mesh path carries no canvases.
|
|
6
|
+
export function acquireWgpuShapeRasterSurface(data) {
|
|
7
|
+
const existing = data.surface;
|
|
8
|
+
if (existing !== null)
|
|
9
|
+
return existing;
|
|
10
|
+
const canvas = document.createElement('canvas');
|
|
11
|
+
canvas.width = 1;
|
|
12
|
+
canvas.height = 1;
|
|
13
|
+
const surface = {
|
|
14
|
+
canvas,
|
|
15
|
+
ctx: canvas.getContext('2d'),
|
|
16
|
+
image: createImageResource(canvas),
|
|
17
|
+
};
|
|
18
|
+
data.surface = surface;
|
|
19
|
+
return surface;
|
|
20
|
+
}
|
|
21
|
+
// Shared by all three shape strategies so a node keeps one cache whichever one draws it. Both halves
|
|
22
|
+
// start empty: nothing is allocated until a strategy needs it.
|
|
23
|
+
export function createWgpuShapeData(_state, _source) {
|
|
24
|
+
return createWgpuRendererData({
|
|
25
|
+
surface: null,
|
|
26
|
+
lastContentId: -1,
|
|
27
|
+
lastPixelRatio: 0,
|
|
28
|
+
lastW: 0,
|
|
29
|
+
lastH: 0,
|
|
30
|
+
meshVersion: -1,
|
|
31
|
+
meshes: null,
|
|
32
|
+
meshBuffers: {
|
|
33
|
+
vertexBuffers: [],
|
|
34
|
+
vertexCapacities: [],
|
|
35
|
+
indexBuffers: [],
|
|
36
|
+
indexCapacities: [],
|
|
37
|
+
uniformBuffers: [],
|
|
38
|
+
bindGroups: [],
|
|
39
|
+
colorScaleBiasUniformBuffers: [],
|
|
40
|
+
colorScaleBiasBindGroups: [],
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Destroy the GPU texture the batch uploaded for this shape's canvas, plus the mesh path's per-shape
|
|
45
|
+
// vertex/index/uniform buffers, when the shape is torn down. A shape that only ever tessellated has no
|
|
46
|
+
// surface and so no texture to free.
|
|
47
|
+
export function destroyWgpuShapeData(state, data) {
|
|
48
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
49
|
+
const shapeData = getWgpuShapeData(data);
|
|
50
|
+
if (shapeData === null)
|
|
51
|
+
return;
|
|
52
|
+
const surface = shapeData.surface;
|
|
53
|
+
if (surface !== null) {
|
|
54
|
+
const entry = runtime.textureSourcePremultipliedTextureCache.get(surface.image);
|
|
55
|
+
if (entry !== undefined) {
|
|
56
|
+
entry.texture.destroy();
|
|
57
|
+
runtime.textureSourcePremultipliedTextureCache.delete(surface.image);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const b = shapeData.meshBuffers;
|
|
61
|
+
for (const buffer of b.vertexBuffers)
|
|
62
|
+
buffer.destroy();
|
|
63
|
+
for (const buffer of b.indexBuffers)
|
|
64
|
+
buffer.destroy();
|
|
65
|
+
for (const buffer of b.uniformBuffers)
|
|
66
|
+
buffer.destroy();
|
|
67
|
+
for (const buffer of b.colorScaleBiasUniformBuffers)
|
|
68
|
+
buffer.destroy();
|
|
69
|
+
b.vertexBuffers.length = 0;
|
|
70
|
+
b.vertexCapacities.length = 0;
|
|
71
|
+
b.indexBuffers.length = 0;
|
|
72
|
+
b.indexCapacities.length = 0;
|
|
73
|
+
b.uniformBuffers.length = 0;
|
|
74
|
+
b.bindGroups.length = 0;
|
|
75
|
+
b.colorScaleBiasUniformBuffers.length = 0;
|
|
76
|
+
b.colorScaleBiasBindGroups.length = 0;
|
|
77
|
+
}
|
|
78
|
+
export function getWgpuShapeData(data) {
|
|
79
|
+
return getWgpuRendererData(data);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=wgpuShapeData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuShapeData.js","sourceRoot":"","sources":["../src/wgpuShapeData.ts"],"names":[],"mappings":"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"}
|
package/dist/wgpuShapeMesh.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { RenderProxy2D, WgpuRenderState, WgpuShapeMesh, WgpuShapeMeshBuffers } from '@flighthq/types/contract';
|
|
1
|
+
import type { RenderProxy2D, WgpuRenderState, WgpuShapeMesh, WgpuShapeMeshBuffers, WgpuShapeMeshPipeline } from '@flighthq/types/contract';
|
|
2
|
+
export declare function drawWgpuShapeMeshBatch(state: WgpuRenderState, renderProxy: RenderProxy2D, meshes: readonly WgpuShapeMesh[], buffers: WgpuShapeMeshBuffers, pipelineEntry: WgpuShapeMeshPipeline, uniformBuffers: GPUBuffer[], bindGroups: GPUBindGroup[], uniformData: Float32Array): void;
|
|
2
3
|
export declare function drawWgpuShapeMeshes(state: WgpuRenderState, renderProxy: RenderProxy2D, meshes: readonly WgpuShapeMesh[], buffers: WgpuShapeMeshBuffers): void;
|
|
3
4
|
//# sourceMappingURL=wgpuShapeMesh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuShapeMesh.d.ts","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,oBAAoB,
|
|
1
|
+
{"version":3,"file":"wgpuShapeMesh.d.ts","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAuBlC,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,aAAa,EAC1B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,qBAAqB,EACpC,cAAc,EAAE,SAAS,EAAE,EAC3B,UAAU,EAAE,YAAY,EAAE,EAC1B,WAAW,EAAE,YAAY,GACxB,IAAI,CAgDN;AAKD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,aAAa,EAC1B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAiBN"}
|
package/dist/wgpuShapeMesh.js
CHANGED
|
@@ -1,42 +1,37 @@
|
|
|
1
1
|
import { getWgpuBlendState, getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
|
|
2
|
-
import {
|
|
2
|
+
import { flushWgpuQuadBatchWriter } from './wgpuQuadBatchWriter';
|
|
3
3
|
// Wgpu tessellated solid-fill path for Shape — the counterpart to webglShapeMesh, replacing the
|
|
4
4
|
// canvas-raster-to-texture shortcut (resolution-bound, so circles go jagged when scaled up). Each fill
|
|
5
5
|
// region is tessellated to a triangle mesh (CPU, cached by content version in webgpuShape) and drawn here
|
|
6
6
|
// with a flat-color pipeline, transformed by the node world transform in the vertex shader so it stays
|
|
7
|
-
// crisp at any zoom. Gradient/
|
|
8
|
-
//
|
|
7
|
+
// crisp at any zoom. Gradient/texture styles and pathological stroke centerlines still take the raster
|
|
8
|
+
// path.
|
|
9
9
|
//
|
|
10
10
|
// The fill is gated by any active contour clip: the pipeline compares stencil 'equal' currentMaskDepth
|
|
11
11
|
// (set per draw via setStencilReference) and writes nothing back, so at depth 0 the cleared stencil (0)
|
|
12
12
|
// passes everywhere and inside a clip only the clip's stamped region passes. Blend state is immutable
|
|
13
13
|
// in WebGPU, so the pipeline cache is keyed by the node's fixed-function BlendMode and target format.
|
|
14
14
|
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
// every mesh, so it is uploaded once into a single uniform region per mesh alongside that mesh's color.
|
|
23
|
-
export function drawWgpuShapeMeshes(state, renderProxy, meshes, buffers) {
|
|
15
|
+
// The shape-stroke-ring-fallback functional scene exercises this path through the headless software
|
|
16
|
+
// adapter and keeps its closed-ring pixels in parity with Canvas and WebGL.
|
|
17
|
+
// Draws the shape's tessellated fill meshes through `pipelineEntry`. `uniformData` already carries any
|
|
18
|
+
// pipeline-specific tail after the shared matrix + color fields; the driver writes only those common
|
|
19
|
+
// fields. Supplying distinct uniform/bind-group arrays lets the opt-in color-adjustment feature own a
|
|
20
|
+
// larger uniform without taxing or invalidating the lean path's 64-byte bindings.
|
|
21
|
+
export function drawWgpuShapeMeshBatch(state, renderProxy, meshes, buffers, pipelineEntry, uniformBuffers, bindGroups, uniformData) {
|
|
24
22
|
if (meshes.length === 0)
|
|
25
23
|
return;
|
|
26
24
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
27
|
-
|
|
25
|
+
flushWgpuQuadBatchWriter(state);
|
|
28
26
|
const pass = runtime.renderPass;
|
|
29
27
|
if (pass === null)
|
|
30
28
|
return;
|
|
31
|
-
const pipelineEntry = ensureShapeMeshPipeline(state, renderProxy.blendMode);
|
|
32
29
|
const device = state.device;
|
|
33
30
|
const queue = device.queue;
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
shapeMeshMatrix(state, renderProxy);
|
|
31
|
+
// Writes the projection·world matrix into uniform columns 0..11; per-mesh color fills 12..15 in
|
|
32
|
+
// the loop. Any pipeline-specific tail starts at 16 and is left untouched.
|
|
33
|
+
shapeMeshMatrix(state, renderProxy, uniformData);
|
|
38
34
|
pass.setPipeline(pipelineEntry.pipeline);
|
|
39
|
-
pass.setBindGroup(0, buffers.bindGroup);
|
|
40
35
|
// The cleared stencil is 0, so at depth 0 'equal 0' passes everywhere; inside a contour clip only its
|
|
41
36
|
// stamped region equals currentMaskDepth, so the fill is confined to the clip.
|
|
42
37
|
pass.setStencilReference(runtime.currentMaskDepth);
|
|
@@ -48,24 +43,39 @@ export function drawWgpuShapeMeshes(state, renderProxy, meshes, buffers) {
|
|
|
48
43
|
const a = mesh.alpha * nodeAlpha;
|
|
49
44
|
if (a <= 0)
|
|
50
45
|
continue;
|
|
51
|
-
|
|
52
|
-
const
|
|
46
|
+
ensureShapeMeshUniform(state, pipelineEntry, uniformBuffers, bindGroups, i, uniformData.byteLength);
|
|
47
|
+
const vertexBuffer = ensureShapeMeshVertexBuffer(state, buffers, i, mesh.vertices.byteLength);
|
|
48
|
+
const indexBuffer = ensureShapeMeshIndexBuffer(state, buffers, i, mesh.indices.byteLength);
|
|
53
49
|
queue.writeBuffer(vertexBuffer, 0, mesh.vertices.buffer, mesh.vertices.byteOffset, mesh.vertices.byteLength);
|
|
54
50
|
writeShapeMeshIndices(queue, indexBuffer, mesh.indices);
|
|
55
51
|
// Premultiplied color (r*a, g*a, b*a, a) for the one / one-minus-src-alpha target blend.
|
|
56
52
|
const r = ((mesh.color >> 16) & 0xff) / 255;
|
|
57
53
|
const g = ((mesh.color >> 8) & 0xff) / 255;
|
|
58
54
|
const b = (mesh.color & 0xff) / 255;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
queue.writeBuffer(
|
|
55
|
+
uniformData[12] = r * a;
|
|
56
|
+
uniformData[13] = g * a;
|
|
57
|
+
uniformData[14] = b * a;
|
|
58
|
+
uniformData[15] = a;
|
|
59
|
+
queue.writeBuffer(uniformBuffers[i], 0, uniformData.buffer, uniformData.byteOffset, uniformData.byteLength);
|
|
60
|
+
pass.setBindGroup(0, bindGroups[i]);
|
|
64
61
|
pass.setVertexBuffer(0, vertexBuffer);
|
|
65
62
|
pass.setIndexBuffer(indexBuffer, 'uint16');
|
|
66
63
|
pass.drawIndexed(mesh.indices.length);
|
|
67
64
|
}
|
|
68
65
|
}
|
|
66
|
+
// Draws the shape's tessellated fill meshes. Delegates to the registered color-adjustment feature only
|
|
67
|
+
// for a resolved ColorScaleBias; a full color matrix remains outside this bounded fold. Otherwise the
|
|
68
|
+
// lean flat-color pipeline and 64-byte uniform stay unchanged and carry no adjustment shader code.
|
|
69
|
+
export function drawWgpuShapeMeshes(state, renderProxy, meshes, buffers) {
|
|
70
|
+
if (meshes.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
const fold = getWgpuRenderStateRuntime(state).wgpuColorAdjustmentMaterialFeature;
|
|
73
|
+
if (fold?.drawShapeMeshes !== undefined && renderProxy.colorMatrix == null && renderProxy.colorScaleBias != null) {
|
|
74
|
+
fold.drawShapeMeshes(state, renderProxy, meshes, buffers);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
drawWgpuShapeMeshBatch(state, renderProxy, meshes, buffers, ensureShapeMeshPipeline(state, renderProxy.blendMode), buffers.uniformBuffers, buffers.bindGroups, _shapeMeshUniformScratch);
|
|
78
|
+
}
|
|
69
79
|
const SHAPE_MESH_WGSL = /* wgsl */ `
|
|
70
80
|
struct ShapeMeshUniforms { matrix : mat3x3f, color : vec4f }
|
|
71
81
|
@group(0) @binding(0) var<uniform> u : ShapeMeshUniforms;
|
|
@@ -78,37 +88,39 @@ struct ShapeMeshUniforms { matrix : mat3x3f, color : vec4f }
|
|
|
78
88
|
// mat3x3f occupies 48 bytes (three vec3 columns each padded to 16), then a vec4f color (16 bytes): 64.
|
|
79
89
|
const SHAPE_MESH_UNIFORM_BYTES = 64;
|
|
80
90
|
const SHAPE_MESH_UNIFORM_FLOATS = SHAPE_MESH_UNIFORM_BYTES / 4;
|
|
81
|
-
function ensureShapeMeshIndexBuffer(state, buffers, byteLength) {
|
|
91
|
+
function ensureShapeMeshIndexBuffer(state, buffers, meshIndex, byteLength) {
|
|
82
92
|
// Index buffers must be a multiple of 4 bytes for COPY_DST writes; round up the requested size.
|
|
83
93
|
const size = Math.max(4, (byteLength + 3) & ~3);
|
|
84
|
-
|
|
85
|
-
|
|
94
|
+
let buffer = buffers.indexBuffers[meshIndex];
|
|
95
|
+
if (buffer === undefined || (buffers.indexCapacities[meshIndex] ?? 0) < size) {
|
|
96
|
+
if (buffer !== undefined) {
|
|
86
97
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
87
|
-
(runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(
|
|
98
|
+
(runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(buffer);
|
|
88
99
|
}
|
|
89
|
-
|
|
100
|
+
buffer = state.device.createBuffer({
|
|
90
101
|
size,
|
|
91
102
|
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
92
103
|
});
|
|
93
|
-
buffers.
|
|
104
|
+
buffers.indexBuffers[meshIndex] = buffer;
|
|
105
|
+
buffers.indexCapacities[meshIndex] = size;
|
|
94
106
|
}
|
|
95
|
-
return
|
|
107
|
+
return buffer;
|
|
96
108
|
}
|
|
97
109
|
// Lazily builds (once per shape) the uniform buffer + bind group, then returns the scratch float view the
|
|
98
110
|
// caller fills with the matrix (uploaded once) and per-mesh color. The matrix columns are written here so
|
|
99
111
|
// every draw shares them; only color (floats 12..15) changes per mesh.
|
|
100
|
-
function ensureShapeMeshUniform(state, pipelineEntry,
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
size:
|
|
112
|
+
function ensureShapeMeshUniform(state, pipelineEntry, uniformBuffers, bindGroups, meshIndex, byteLength) {
|
|
113
|
+
if (uniformBuffers[meshIndex] === undefined) {
|
|
114
|
+
const uniformBuffer = state.device.createBuffer({
|
|
115
|
+
size: byteLength,
|
|
104
116
|
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
105
117
|
});
|
|
106
|
-
|
|
118
|
+
uniformBuffers[meshIndex] = uniformBuffer;
|
|
119
|
+
bindGroups[meshIndex] = state.device.createBindGroup({
|
|
107
120
|
layout: pipelineEntry.bindGroupLayout,
|
|
108
|
-
entries: [{ binding: 0, resource: { buffer:
|
|
121
|
+
entries: [{ binding: 0, resource: { buffer: uniformBuffer } }],
|
|
109
122
|
});
|
|
110
123
|
}
|
|
111
|
-
return _shapeMeshUniformScratch;
|
|
112
124
|
}
|
|
113
125
|
function ensureShapeMeshPipeline(state, blendMode) {
|
|
114
126
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
@@ -158,45 +170,45 @@ function ensureShapeMeshPipeline(state, blendMode) {
|
|
|
158
170
|
cache.set(key, entry);
|
|
159
171
|
return entry;
|
|
160
172
|
}
|
|
161
|
-
function ensureShapeMeshVertexBuffer(state, buffers, byteLength) {
|
|
173
|
+
function ensureShapeMeshVertexBuffer(state, buffers, meshIndex, byteLength) {
|
|
162
174
|
const size = Math.max(8, byteLength);
|
|
163
|
-
|
|
164
|
-
|
|
175
|
+
let buffer = buffers.vertexBuffers[meshIndex];
|
|
176
|
+
if (buffer === undefined || (buffers.vertexCapacities[meshIndex] ?? 0) < size) {
|
|
177
|
+
if (buffer !== undefined) {
|
|
165
178
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
166
|
-
(runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(
|
|
179
|
+
(runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(buffer);
|
|
167
180
|
}
|
|
168
|
-
|
|
181
|
+
buffer = state.device.createBuffer({
|
|
169
182
|
size,
|
|
170
183
|
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
171
184
|
});
|
|
172
|
-
buffers.
|
|
185
|
+
buffers.vertexBuffers[meshIndex] = buffer;
|
|
186
|
+
buffers.vertexCapacities[meshIndex] = size;
|
|
173
187
|
}
|
|
174
|
-
return
|
|
188
|
+
return buffer;
|
|
175
189
|
}
|
|
176
190
|
// Column-major mat3x3f = projection · worldTransform, mapping shape-local points to clip space exactly as
|
|
177
191
|
// webgpuClipContours/webgpuDraw build it (so the fill lands in identical clip space). Each column is
|
|
178
192
|
// padded to 4 floats (vec3 -> vec4 std140-style layout). Writes into the shared scratch view; the color
|
|
179
193
|
// (floats 12..15) is filled per mesh by the caller.
|
|
180
|
-
function shapeMeshMatrix(state, renderProxy) {
|
|
194
|
+
function shapeMeshMatrix(state, renderProxy, out) {
|
|
181
195
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
182
196
|
const viewport = runtime.renderTargetViewport ?? state.canvas;
|
|
183
197
|
const iw = 2 / (viewport.width || 1);
|
|
184
198
|
const ih = 2 / (viewport.height || 1);
|
|
185
199
|
const t = renderProxy.transform2D;
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
m[11] = 0;
|
|
199
|
-
return m;
|
|
200
|
+
out[0] = t.a * iw;
|
|
201
|
+
out[1] = -t.b * ih;
|
|
202
|
+
out[2] = 0;
|
|
203
|
+
out[3] = 0;
|
|
204
|
+
out[4] = t.c * iw;
|
|
205
|
+
out[5] = -t.d * ih;
|
|
206
|
+
out[6] = 0;
|
|
207
|
+
out[7] = 0;
|
|
208
|
+
out[8] = t.tx * iw - 1;
|
|
209
|
+
out[9] = -t.ty * ih + 1;
|
|
210
|
+
out[10] = 1;
|
|
211
|
+
out[11] = 0;
|
|
200
212
|
}
|
|
201
213
|
// Uploads uint16 indices to the index buffer. writeBuffer requires the byte count to be a multiple of 4,
|
|
202
214
|
// but a mesh with an odd index count (e.g. a single triangle, 3 indices = 6 bytes) is not; pad the upload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuShapeMesh.js","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAS9F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wgpuShapeMesh.js","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuRenderState, ShapeRasterizer } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getWgpuShapeRasterizer(state: WgpuRenderState): ShapeRasterizer | null;
|
|
3
|
+
export declare function registerWgpuShapeRasterizer(state: WgpuRenderState, rasterizer: ShapeRasterizer | null): void;
|
|
4
|
+
//# sourceMappingURL=wgpuShapeRasterizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuShapeRasterizer.d.ts","sourceRoot":"","sources":["../src/wgpuShapeRasterizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEjF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,GAAG,IAAI,CAErF;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE5G"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
|
|
2
|
+
export function getWgpuShapeRasterizer(state) {
|
|
3
|
+
return getWgpuRenderStateRuntime(state).shapeRasterizer ?? null;
|
|
4
|
+
}
|
|
5
|
+
// Installs the fallback that draws fills the mesh path cannot express. Registration is the opt-in: a
|
|
6
|
+
// state without one draws its solid shapes and reports the rest as a registry miss, and nothing here
|
|
7
|
+
// reaches for a rasterizer the caller did not name. Pass null to remove one.
|
|
8
|
+
export function registerWgpuShapeRasterizer(state, rasterizer) {
|
|
9
|
+
getWgpuRenderStateRuntime(state).shapeRasterizer = rasterizer;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wgpuShapeRasterizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuShapeRasterizer.js","sourceRoot":"","sources":["../src/wgpuShapeRasterizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,UAAU,sBAAsB,CAAC,KAAsB;IAC3D,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;AAClE,CAAC;AAED,qGAAqG;AACrG,qGAAqG;AACrG,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B,CAAC,KAAsB,EAAE,UAAkC;IACpG,yBAAyB,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC;AAChE,CAAC"}
|
package/dist/wgpuSprite.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
1
|
+
import type { RenderProxy2D, Scene2DRenderer, WgpuRenderState } from '@flighthq/types/contract';
|
|
2
|
+
export declare function drawWgpuSprite(state: WgpuRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare const defaultWgpuSpriteRenderer: Scene2DRenderer;
|
|
3
4
|
//# sourceMappingURL=wgpuSprite.d.ts.map
|
package/dist/wgpuSprite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuSprite.d.ts","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuSprite.d.ts","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAU,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAWxG,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CA8DvF;AAED,eAAO,MAAM,yBAAyB,EAAE,eAKvC,CAAC"}
|
package/dist/wgpuSprite.js
CHANGED
|
@@ -1,28 +1,70 @@
|
|
|
1
|
-
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
import { getWgpuRenderStateRuntime, resolveWgpuMaterialRenderer, resolveWgpuShader, resolveWgpuTexture, } from '@flighthq/render-wgpu/contract';
|
|
2
|
+
import { SCENE2D_WORKING_COLOR_SPACE } from '@flighthq/render/contract';
|
|
3
|
+
import { createSpriteRendererData, isSpriteRendererDirty } from '@flighthq/scene2d/contract';
|
|
4
|
+
import { getTextureHeight, getTextureWidth, hasTextureSource } from '@flighthq/texture/contract';
|
|
5
|
+
import { BatchFormat } from '@flighthq/types/contract';
|
|
6
|
+
import { ensureWgpuQuadBatchResources, flushWgpuQuadBatchWriter, packWgpuQuadBatchMaterialInstance, prepareWgpuQuadBatchWrite, recordWgpuQuadBatchColorScaleBias, } from './wgpuQuadBatchWriter';
|
|
7
|
+
export function drawWgpuSprite(state, renderProxy) {
|
|
8
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
9
|
+
if (runtime.renderPass === null)
|
|
10
|
+
return;
|
|
11
|
+
const texture = renderProxy.source.data.texture;
|
|
12
|
+
if (texture === null || texture.dimension !== '2d' || !hasTextureSource(texture))
|
|
13
|
+
return;
|
|
14
|
+
const shader = resolveWgpuShader(state, renderProxy);
|
|
15
|
+
if (shader !== null) {
|
|
16
|
+
flushWgpuQuadBatchWriter(state);
|
|
17
|
+
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
18
|
+
if (resolveWgpuTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE) === null)
|
|
19
|
+
return;
|
|
20
|
+
shader.bind(state, renderProxy);
|
|
21
|
+
return;
|
|
25
22
|
}
|
|
26
|
-
|
|
23
|
+
const width = Math.max(0, getTextureWidth(texture)) * Math.abs(texture.uvScale.x);
|
|
24
|
+
const height = Math.max(0, getTextureHeight(texture)) * Math.abs(texture.uvScale.y);
|
|
25
|
+
if (width <= 0 || height <= 0)
|
|
26
|
+
return;
|
|
27
|
+
const material = renderProxy.material;
|
|
28
|
+
const materialRenderer = resolveWgpuMaterialRenderer(state, material);
|
|
29
|
+
if (materialRenderer === null)
|
|
30
|
+
return;
|
|
31
|
+
const textureEntry = resolveWgpuTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE);
|
|
32
|
+
if (textureEntry === null)
|
|
33
|
+
return;
|
|
34
|
+
ensureWgpuQuadBatchResources(state);
|
|
35
|
+
let u0 = texture.uvOffset.x;
|
|
36
|
+
let v0 = texture.uvOffset.y;
|
|
37
|
+
let u1 = u0 + texture.uvScale.x;
|
|
38
|
+
let v1 = v0 + texture.uvScale.y;
|
|
39
|
+
if (texture.flipX)
|
|
40
|
+
[u0, u1] = [u1, u0];
|
|
41
|
+
if (texture.flipY)
|
|
42
|
+
[v0, v1] = [v1, v0];
|
|
43
|
+
const instanceIndex = runtime.quadBatchWriterCount;
|
|
44
|
+
const base = prepareWgpuQuadBatchWrite(state, textureEntry, texture.sampler, renderProxy.blendMode, material, materialRenderer, 1);
|
|
45
|
+
const data = runtime.quadBatchWriterInstanceData;
|
|
46
|
+
const transform = renderProxy.transform2D;
|
|
47
|
+
data[base] = transform.a;
|
|
48
|
+
data[base + 1] = transform.b;
|
|
49
|
+
data[base + 2] = transform.c;
|
|
50
|
+
data[base + 3] = transform.d;
|
|
51
|
+
data[base + 4] = transform.tx;
|
|
52
|
+
data[base + 5] = transform.ty;
|
|
53
|
+
data[base + 6] = width;
|
|
54
|
+
data[base + 7] = height;
|
|
55
|
+
data[base + 8] = u0;
|
|
56
|
+
data[base + 9] = v0;
|
|
57
|
+
data[base + 10] = u1;
|
|
58
|
+
data[base + 11] = v1;
|
|
59
|
+
data[base + 12] = renderProxy.alpha;
|
|
60
|
+
packWgpuQuadBatchMaterialInstance(state, renderProxy.materialData, instanceIndex);
|
|
61
|
+
recordWgpuQuadBatchColorScaleBias(state, renderProxy.colorMatrix ?? renderProxy.colorScaleBias, instanceIndex);
|
|
62
|
+
runtime.quadBatchWriterCount++;
|
|
27
63
|
}
|
|
64
|
+
export const defaultWgpuSpriteRenderer = {
|
|
65
|
+
format: BatchFormat.Quad,
|
|
66
|
+
createData: createSpriteRendererData,
|
|
67
|
+
isDirty: isSpriteRendererDirty,
|
|
68
|
+
submit: drawWgpuSprite,
|
|
69
|
+
};
|
|
28
70
|
//# sourceMappingURL=wgpuSprite.js.map
|
package/dist/wgpuSprite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuSprite.js","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"wgpuSprite.js","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { WgpuMaterialRenderer, WgpuRenderState } from '@flighthq/types/contract';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function registerWgpuStandardMaterial(state: WgpuRenderState): void;
|
|
3
3
|
export declare const standardWgpuMaterialRenderer: WgpuMaterialRenderer;
|
|
4
4
|
//# sourceMappingURL=wgpuStandardMaterial.d.ts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { registerWgpuMaterialRenderer } from '@flighthq/render-wgpu/contract';
|
|
2
2
|
import { StandardMaterialKind } from '@flighthq/types/contract';
|
|
3
|
-
import { getWgpuQuadBatchPreludeWGSL } from './
|
|
3
|
+
import { getWgpuQuadBatchPreludeWGSL } from './wgpuQuadBatchWriter';
|
|
4
4
|
// Registers the bundled default material under StandardMaterialKind. It is a bundled material like any
|
|
5
5
|
// other — no privileged status in the render path; a node with no material renders only if a renderer
|
|
6
6
|
// is registered for StandardMaterialKind. A user can copy this file and register their own default.
|
|
7
|
-
export function
|
|
7
|
+
export function registerWgpuStandardMaterial(state) {
|
|
8
8
|
registerWgpuMaterialRenderer(state, StandardMaterialKind, standardWgpuMaterialRenderer);
|
|
9
9
|
}
|
|
10
10
|
// Textured quad with per-instance alpha and no other effect. The batch holds no shader of its own, so
|
|
11
|
-
// even the plain path is just a registered material — this module IS the base
|
|
11
|
+
// even the plain path is just a registered material — this module IS the base quad-batch writer shader.
|
|
12
12
|
export const standardWgpuMaterialRenderer = {
|
|
13
13
|
instanceFloatCount: 0,
|
|
14
14
|
getShaderModule(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuStandardMaterial.js","sourceRoot":"","sources":["../src/wgpuStandardMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"wgpuStandardMaterial.js","sourceRoot":"","sources":["../src/wgpuStandardMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,uGAAuG;AACvG,sGAAsG;AACtG,oGAAoG;AACpG,MAAM,UAAU,4BAA4B,CAAC,KAAsB;IACjE,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,CAAC,CAAC;AAC1F,CAAC;AAED,sGAAsG;AACtG,wGAAwG;AACxG,MAAM,CAAC,MAAM,4BAA4B,GAAyB;IAChE,kBAAkB,EAAE,CAAC;IACrB,eAAe,CAAC,KAAsB;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC7C,IAAI,EAAE,2BAA2B,EAAE,GAAG,sBAAsB;SAC7D,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBzC,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuTextLabel.d.ts","sourceRoot":"","sources":["../src/wgpuTextLabel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EAIf,aAAa,EAKb,eAAe,EAChB,MAAM,0BAA0B,CAAC;AA0DlC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"wgpuTextLabel.d.ts","sourceRoot":"","sources":["../src/wgpuTextLabel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EAIf,aAAa,EAKb,eAAe,EAChB,MAAM,0BAA0B,CAAC;AA0DlC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAsH1F;AAED,eAAO,MAAM,4BAA4B,EAAE,eAK1C,CAAC"}
|