@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.
Files changed (128) hide show
  1. package/dist/contract.d.ts +8 -6
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +8 -6
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableWgpuColorAdjustmentGuards.js +2 -2
  6. package/dist/enableWgpuColorAdjustmentGuards.js.map +1 -1
  7. package/dist/enableWgpuStrokePathTessellation.d.ts +3 -0
  8. package/dist/enableWgpuStrokePathTessellation.d.ts.map +1 -0
  9. package/dist/enableWgpuStrokePathTessellation.js +8 -0
  10. package/dist/enableWgpuStrokePathTessellation.js.map +1 -0
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/wgpuBitmapText.d.ts.map +1 -1
  16. package/dist/wgpuBitmapText.js +20 -16
  17. package/dist/wgpuBitmapText.js.map +1 -1
  18. package/dist/wgpuCache.d.ts.map +1 -1
  19. package/dist/wgpuCache.js +19 -16
  20. package/dist/wgpuCache.js.map +1 -1
  21. package/dist/wgpuClipContours.js +3 -3
  22. package/dist/wgpuClipContours.js.map +1 -1
  23. package/dist/wgpuClipRectangle.js +3 -3
  24. package/dist/wgpuClipRectangle.js.map +1 -1
  25. package/dist/wgpuColorAdjustmentMaterialFeature.d.ts.map +1 -1
  26. package/dist/wgpuColorAdjustmentMaterialFeature.js +156 -67
  27. package/dist/wgpuColorAdjustmentMaterialFeature.js.map +1 -1
  28. package/dist/wgpuMeshShapeRenderer.d.ts +4 -0
  29. package/dist/wgpuMeshShapeRenderer.d.ts.map +1 -0
  30. package/dist/wgpuMeshShapeRenderer.js +92 -0
  31. package/dist/wgpuMeshShapeRenderer.js.map +1 -0
  32. package/dist/wgpuNode2D.js +2 -2
  33. package/dist/wgpuNode2D.js.map +1 -1
  34. package/dist/wgpuParticleEmitter2D.d.ts.map +1 -1
  35. package/dist/wgpuParticleEmitter2D.js +26 -10
  36. package/dist/wgpuParticleEmitter2D.js.map +1 -1
  37. package/dist/wgpuQuadBatch.d.ts +1 -1
  38. package/dist/wgpuQuadBatch.d.ts.map +1 -1
  39. package/dist/wgpuQuadBatch.js +18 -13
  40. package/dist/wgpuQuadBatch.js.map +1 -1
  41. package/dist/wgpuQuadBatchWriter.d.ts +12 -0
  42. package/dist/wgpuQuadBatchWriter.d.ts.map +1 -0
  43. package/dist/{wgpuSpriteBatch.js → wgpuQuadBatchWriter.js} +97 -72
  44. package/dist/wgpuQuadBatchWriter.js.map +1 -0
  45. package/dist/wgpuRasterShapeRenderer.d.ts +4 -0
  46. package/dist/wgpuRasterShapeRenderer.d.ts.map +1 -0
  47. package/dist/wgpuRasterShapeRenderer.js +110 -0
  48. package/dist/wgpuRasterShapeRenderer.js.map +1 -0
  49. package/dist/wgpuRichText.d.ts.map +1 -1
  50. package/dist/wgpuRichText.js +7 -4
  51. package/dist/wgpuRichText.js.map +1 -1
  52. package/dist/wgpuScale9Shape.d.ts +1 -3
  53. package/dist/wgpuScale9Shape.d.ts.map +1 -1
  54. package/dist/wgpuScale9Shape.js +36 -33
  55. package/dist/wgpuScale9Shape.js.map +1 -1
  56. package/dist/wgpuShape.d.ts +2 -1
  57. package/dist/wgpuShape.d.ts.map +1 -1
  58. package/dist/wgpuShape.js +19 -153
  59. package/dist/wgpuShape.js.map +1 -1
  60. package/dist/wgpuShapeData.d.ts +6 -0
  61. package/dist/wgpuShapeData.d.ts.map +1 -0
  62. package/dist/wgpuShapeData.js +81 -0
  63. package/dist/wgpuShapeData.js.map +1 -0
  64. package/dist/wgpuShapeMesh.d.ts +2 -1
  65. package/dist/wgpuShapeMesh.d.ts.map +1 -1
  66. package/dist/wgpuShapeMesh.js +74 -62
  67. package/dist/wgpuShapeMesh.js.map +1 -1
  68. package/dist/wgpuShapeRasterizer.d.ts +4 -0
  69. package/dist/wgpuShapeRasterizer.d.ts.map +1 -0
  70. package/dist/wgpuShapeRasterizer.js +11 -0
  71. package/dist/wgpuShapeRasterizer.js.map +1 -0
  72. package/dist/wgpuSprite.d.ts +3 -2
  73. package/dist/wgpuSprite.d.ts.map +1 -1
  74. package/dist/wgpuSprite.js +67 -25
  75. package/dist/wgpuSprite.js.map +1 -1
  76. package/dist/wgpuStandardMaterial.d.ts +1 -1
  77. package/dist/wgpuStandardMaterial.js +3 -3
  78. package/dist/wgpuStandardMaterial.js.map +1 -1
  79. package/dist/wgpuTextLabel.d.ts.map +1 -1
  80. package/dist/wgpuTextLabel.js +15 -12
  81. package/dist/wgpuTextLabel.js.map +1 -1
  82. package/dist/wgpuTilemap.d.ts.map +1 -1
  83. package/dist/wgpuTilemap.js +19 -18
  84. package/dist/wgpuTilemap.js.map +1 -1
  85. package/package.json +22 -18
  86. package/src/enableWgpuColorAdjustmentGuards.test.ts +4 -4
  87. package/src/enableWgpuStrokePathTessellation.test.ts +23 -0
  88. package/src/wgpuBitmapText.test.ts +2 -2
  89. package/src/wgpuCache.test.ts +14 -11
  90. package/src/wgpuColorAdjustmentMaterialFeature.test.ts +52 -46
  91. package/src/wgpuMeshShapeRenderer.test.ts +167 -0
  92. package/src/wgpuParticleEmitter2D.test.ts +16 -7
  93. package/src/wgpuQuadBatch.test.ts +3 -3
  94. package/src/{wgpuSpriteBatch.test.ts → wgpuQuadBatchWriter.test.ts} +79 -70
  95. package/src/wgpuRasterShapeRenderer.test.ts +156 -0
  96. package/src/wgpuScale9Shape.test.ts +0 -13
  97. package/src/wgpuShape.test.ts +169 -15
  98. package/src/wgpuShapeData.test.ts +97 -0
  99. package/src/wgpuShapeMesh.test.ts +170 -15
  100. package/src/wgpuShapeRasterizer.test.ts +36 -0
  101. package/src/wgpuSprite.test.ts +45 -10
  102. package/src/wgpuStandardMaterial.test.ts +3 -3
  103. package/src/wgpuTextLabel.test.ts +7 -7
  104. package/src/wgpuTilemap.test.ts +4 -4
  105. package/src/wgpuVelocity.test.ts +3 -3
  106. package/dist/wgpuBitmap.d.ts +0 -4
  107. package/dist/wgpuBitmap.d.ts.map +0 -1
  108. package/dist/wgpuBitmap.js +0 -84
  109. package/dist/wgpuBitmap.js.map +0 -1
  110. package/dist/wgpuRenderTargetNode2D.d.ts +0 -11
  111. package/dist/wgpuRenderTargetNode2D.d.ts.map +0 -1
  112. package/dist/wgpuRenderTargetNode2D.js +0 -100
  113. package/dist/wgpuRenderTargetNode2D.js.map +0 -1
  114. package/dist/wgpuSpriteBatch.d.ts +0 -12
  115. package/dist/wgpuSpriteBatch.d.ts.map +0 -1
  116. package/dist/wgpuSpriteBatch.js.map +0 -1
  117. package/dist/wgpuSpriteRenderer.d.ts +0 -3
  118. package/dist/wgpuSpriteRenderer.d.ts.map +0 -1
  119. package/dist/wgpuSpriteRenderer.js +0 -55
  120. package/dist/wgpuSpriteRenderer.js.map +0 -1
  121. package/dist/wgpuVideo.d.ts +0 -6
  122. package/dist/wgpuVideo.d.ts.map +0 -1
  123. package/dist/wgpuVideo.js +0 -63
  124. package/dist/wgpuVideo.js.map +0 -1
  125. package/src/wgpuBitmap.test.ts +0 -40
  126. package/src/wgpuRenderTargetNode2D.test.ts +0 -267
  127. package/src/wgpuSpriteRenderer.test.ts +0 -63
  128. 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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"}
@@ -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,EAErB,MAAM,0BAA0B,CAAC;AAyBlC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,aAAa,EAC1B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAiDN"}
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"}
@@ -1,42 +1,37 @@
1
1
  import { getWgpuBlendState, getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
2
- import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
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/bitmap fills and strokes still take the raster path (getShapeFillRegions
8
- // returns null).
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
- // Cannot be visually captured headless (no GPU adapter); the unit test asserts the pipeline/draw/uniform
16
- // call shape against the mock device. Mirror this against the verified webgl result when a GPU is
17
- // available.
18
- // Draws the shape's tessellated fill meshes. Flushes the sprite batch first (these go through a separate
19
- // pipeline). Uploads each mesh's geometry and premultiplied color into the shape's reusable per-shape
20
- // buffers (grown by recreating when a mesh needs more room) and issues one indexed draw per mesh, gated
21
- // by the active contour-clip stencil. The shared `matrix` (projection · worldTransform) is identical for
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
- flushWgpuSpriteBatch(state);
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
- const uniform = ensureShapeMeshUniform(state, pipelineEntry, buffers);
35
- // Writes the projection·world matrix into uniform columns 0..11 (it shares the same scratch array);
36
- // the per-mesh color fills 12..15 in the loop below. Same matrix for every mesh of this shape.
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
- const vertexBuffer = ensureShapeMeshVertexBuffer(state, buffers, mesh.vertices.byteLength);
52
- const indexBuffer = ensureShapeMeshIndexBuffer(state, buffers, mesh.indices.byteLength);
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
- uniform[12] = r * a;
60
- uniform[13] = g * a;
61
- uniform[14] = b * a;
62
- uniform[15] = a;
63
- queue.writeBuffer(buffers.uniformBuffer, 0, uniform.buffer, uniform.byteOffset, uniform.byteLength);
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
- if (buffers.indexBuffer === null || buffers.indexCapacity < size) {
85
- if (buffers.indexBuffer !== null) {
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(buffers.indexBuffer);
98
+ (runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(buffer);
88
99
  }
89
- buffers.indexBuffer = state.device.createBuffer({
100
+ buffer = state.device.createBuffer({
90
101
  size,
91
102
  usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
92
103
  });
93
- buffers.indexCapacity = size;
104
+ buffers.indexBuffers[meshIndex] = buffer;
105
+ buffers.indexCapacities[meshIndex] = size;
94
106
  }
95
- return buffers.indexBuffer;
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, buffers) {
101
- if (buffers.uniformBuffer === null) {
102
- buffers.uniformBuffer = state.device.createBuffer({
103
- size: SHAPE_MESH_UNIFORM_BYTES,
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
- buffers.bindGroup = state.device.createBindGroup({
118
+ uniformBuffers[meshIndex] = uniformBuffer;
119
+ bindGroups[meshIndex] = state.device.createBindGroup({
107
120
  layout: pipelineEntry.bindGroupLayout,
108
- entries: [{ binding: 0, resource: { buffer: buffers.uniformBuffer } }],
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
- if (buffers.vertexBuffer === null || buffers.vertexCapacity < size) {
164
- if (buffers.vertexBuffer !== null) {
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(buffers.vertexBuffer);
179
+ (runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(buffer);
167
180
  }
168
- buffers.vertexBuffer = state.device.createBuffer({
181
+ buffer = state.device.createBuffer({
169
182
  size,
170
183
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
171
184
  });
172
- buffers.vertexCapacity = size;
185
+ buffers.vertexBuffers[meshIndex] = buffer;
186
+ buffers.vertexCapacities[meshIndex] = size;
173
187
  }
174
- return buffers.vertexBuffer;
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
- const m = _shapeMeshUniformScratch;
187
- m[0] = t.a * iw;
188
- m[1] = -t.b * ih;
189
- m[2] = 0;
190
- m[3] = 0;
191
- m[4] = t.c * iw;
192
- m[5] = -t.d * ih;
193
- m[6] = 0;
194
- m[7] = 0;
195
- m[8] = t.tx * iw - 1;
196
- m[9] = -t.ty * ih + 1;
197
- m[10] = 1;
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":"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"}
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,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,gGAAgG;AAChG,uGAAuG;AACvG,0GAA0G;AAC1G,uGAAuG;AACvG,uGAAuG;AACvG,QAAQ;AACR,EAAE;AACF,uGAAuG;AACvG,wGAAwG;AACxG,sGAAsG;AACtG,sGAAsG;AACtG,EAAE;AACF,oGAAoG;AACpG,4EAA4E;AAE5E,uGAAuG;AACvG,qGAAqG;AACrG,sGAAsG;AACtG,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CACpC,KAAsB,EACtB,WAA0B,EAC1B,MAAgC,EAChC,OAA6B,EAC7B,aAAoC,EACpC,cAA2B,EAC3B,UAA0B,EAC1B,WAAyB;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAE3B,gGAAgG;IAChG,2EAA2E;IAC3E,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,sGAAsG;IACtG,+EAA+E;IAC/E,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAErB,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QACpG,MAAM,YAAY,GAAG,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3F,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7G,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAExD,yFAAyF;QACzF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QACpC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QAE5G,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,sGAAsG;AACtG,mGAAmG;AACnG,MAAM,UAAU,mBAAmB,CACjC,KAAsB,EACtB,WAA0B,EAC1B,MAAgC,EAChC,OAA6B;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,IAAI,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,kCAAkC,CAAC;IACjF,IAAI,IAAI,EAAE,eAAe,KAAK,SAAS,IAAI,WAAW,CAAC,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACjH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,sBAAsB,CACpB,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACP,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,EACrD,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,UAAU,EAClB,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;CAQlC,CAAC;AAEF,uGAAuG;AACvG,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,yBAAyB,GAAG,wBAAwB,GAAG,CAAC,CAAC;AAE/D,SAAS,0BAA0B,CACjC,KAAsB,EACtB,OAA6B,EAC7B,SAAiB,EACjB,UAAkB;IAElB,gGAAgG;IAChG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;YACjC,IAAI;YACJ,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,QAAQ;SACtD,CAAC,CAAC;QACH,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0GAA0G;AAC1G,0GAA0G;AAC1G,uEAAuE;AACvE,SAAS,sBAAsB,CAC7B,KAAsB,EACtB,aAAoC,EACpC,cAA2B,EAC3B,UAA0B,EAC1B,SAAiB,EACjB,UAAkB;IAElB,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,cAAc,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;QAC1C,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;YACnD,MAAM,EAAE,aAAa,CAAC,eAAe;YACrC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAsB,EAAE,SAAqC;IAC5F,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACnD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;KACpH,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACpF,MAAM,aAAa,GAA4B;QAC7C,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE;KACxF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC3C,MAAM;QACN,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE;QACjE,QAAQ,EAAE;YACR,MAAM;YACN,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE;gBACP;oBACE,MAAM;oBACN,oFAAoF;oBACpF,oCAAoC;oBACpC,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC;iBACpC;aACF;SACF;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC1D,YAAY,EAAE;YACZ,MAAM,EAAE,sBAAsB;YAC9B,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,QAAQ;YACtB,yFAAyF;YACzF,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;YACvF,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;YACtF,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;SACvB;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAA0B,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IACnE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAsB,EACtB,OAA6B,EAC7B,SAAiB,EACjB,UAAkB;IAElB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;YACjC,IAAI;YACJ,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ;SACvD,CAAC,CAAC;QACH,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAC1C,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0GAA0G;AAC1G,qGAAqG;AACrG,wGAAwG;AACxG,oDAAoD;AACpD,SAAS,eAAe,CAAC,KAAsB,EAAE,WAA0B,EAAE,GAAiB;IAC5F,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC;IAClC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,yGAAyG;AACzG,0GAA0G;AAC1G,6GAA6G;AAC7G,iGAAiG;AACjG,SAAS,qBAAqB,CAAC,KAAe,EAAE,WAAsB,EAAE,OAA8B;IACpG,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC;IACnC,IAAI,sBAAsB,CAAC,MAAM,GAAG,SAAS;QAAE,sBAAsB,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IACnG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;AACnF,CAAC;AAED,qGAAqG;AACrG,wFAAwF;AACxF,MAAM,wBAAwB,GAAG,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;AAE7E,2GAA2G;AAC3G,0FAA0F;AAC1F,IAAI,sBAAsB,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
@@ -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"}
@@ -1,3 +1,4 @@
1
- import type { Node2D, WgpuRenderState } from '@flighthq/types/contract';
2
- export declare function renderWgpuSprite(state: WgpuRenderState, source: Node2D): void;
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
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuSprite.d.ts","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAwB7E"}
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"}
@@ -1,28 +1,70 @@
1
- import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
2
- import { getRenderProxy2D, isRenderProxyVisible } from '@flighthq/render/contract';
3
- import { getNode2DRuntime } from '@flighthq/scene2d/contract';
4
- import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
5
- export function renderWgpuSprite(state, source) {
6
- const tempStack = getWgpuRenderStateRuntime(state).tempStack;
7
- let stackLength = 1;
8
- tempStack[0] = source;
9
- while (stackLength > 0) {
10
- const current = tempStack[--stackLength];
11
- if (!current.enabled)
12
- continue;
13
- const data = getRenderProxy2D(state, current);
14
- if (data === undefined || !isRenderProxyVisible(data))
15
- continue;
16
- data.renderer?.submit(state, data);
17
- if (data.traverseChildren) {
18
- const children = getNode2DRuntime(current).children;
19
- if (children !== null) {
20
- for (let i = children.length - 1; i >= 0; i--) {
21
- tempStack[stackLength++] = children[i];
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
- flushWgpuSpriteBatch(state);
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
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuSprite.js","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,KAAsB,EAAE,MAAc;IACrE,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAEtB,OAAO,WAAW,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,WAAW,CAAW,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,SAAS;QAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,SAAS;QAEhE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"}
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 registerStandardWgpuMaterial(state: WgpuRenderState): void;
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 './wgpuSpriteBatch';
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 registerStandardWgpuMaterial(state) {
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 sprite-batch shader.
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,mBAAmB,CAAC;AAEhE,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,mGAAmG;AACnG,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
+ {"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,CA4G1F;AAED,eAAO,MAAM,4BAA4B,EAAE,eAK1C,CAAC"}
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"}