@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
@@ -1,14 +1,14 @@
1
1
  import { computeRgbHexString } from '@flighthq/color/contract';
2
- import { createImageResource, setImageResourceSource } from '@flighthq/image/contract';
2
+ import { createImageResource, invalidateImageResource } from '@flighthq/image/contract';
3
3
  import { getNodeLocalContentRevision } from '@flighthq/node/contract';
4
- import { resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu/contract';
4
+ import { bindWgpuImageResourceTexture, resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu/contract';
5
5
  import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
6
6
  import { computeTextFormatFontString } from '@flighthq/text/contract';
7
7
  import { getTextLabelRuntime } from '@flighthq/text/contract';
8
8
  import { computeTextLayout, createTextFormatRange, getTextLayoutResult } from '@flighthq/textlayout/contract';
9
9
  import { BatchFormat } from '@flighthq/types/contract';
10
+ import { ensureWgpuQuadBatchResources, packWgpuQuadBatchMaterialInstance, prepareWgpuQuadBatchWrite, recordWgpuQuadBatchColorScaleBias, } from './wgpuQuadBatchWriter';
10
11
  import { createWgpuRendererData, getWgpuRendererData } from './wgpuRendererData';
11
- import { ensureWgpuQuadBatchResources, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, recordWgpuSpriteBatchColorScaleBias, } from './wgpuSpriteBatch';
12
12
  function createWgpuTextLabelData(_state, _source) {
13
13
  const canvas = document.createElement('canvas');
14
14
  canvas.width = 1;
@@ -32,10 +32,10 @@ function destroyWgpuTextLabelData(state, data) {
32
32
  const textLabelData = getWgpuRendererData(data);
33
33
  if (textLabelData === null)
34
34
  return;
35
- const entry = runtime.imageResourcePremultipliedTextureCache.get(textLabelData.image);
35
+ const entry = runtime.textureSourcePremultipliedTextureCache.get(textLabelData.image);
36
36
  if (entry !== undefined) {
37
37
  entry.texture.destroy();
38
- runtime.imageResourcePremultipliedTextureCache.delete(textLabelData.image);
38
+ runtime.textureSourcePremultipliedTextureCache.delete(textLabelData.image);
39
39
  }
40
40
  }
41
41
  export function drawWgpuTextLabel(state, renderProxy) {
@@ -110,7 +110,7 @@ export function drawWgpuTextLabel(state, renderProxy) {
110
110
  }
111
111
  // Bump the resource version so the batch's version-aware cache re-uploads (recreating the GPU texture,
112
112
  // which covers a physical-size change too).
113
- setImageResourceSource(textData.image, textData.canvas);
113
+ invalidateImageResource(textData.image);
114
114
  textData.logW = w;
115
115
  textData.logH = h;
116
116
  textData.lastPW = pw;
@@ -119,9 +119,12 @@ export function drawWgpuTextLabel(state, renderProxy) {
119
119
  if (textData.logW <= 0 || textData.logH <= 0)
120
120
  return;
121
121
  ensureWgpuQuadBatchResources(state);
122
- const startCount = runtime.spriteBatchCount;
123
- const base = prepareWgpuSpriteBatchWrite(state, textData.image, renderProxy.blendMode, material, materialRenderer, 1);
124
- const d = runtime.spriteBatchInstanceData;
122
+ const textureEntry = bindWgpuImageResourceTexture(state, textData.image, false, true);
123
+ if (textureEntry === null)
124
+ return;
125
+ const startCount = runtime.quadBatchWriterCount;
126
+ const base = prepareWgpuQuadBatchWrite(state, textureEntry, null, renderProxy.blendMode, material, materialRenderer, 1);
127
+ const d = runtime.quadBatchWriterInstanceData;
125
128
  const t = renderProxy.transform2D;
126
129
  d[base] = t.a;
127
130
  d[base + 1] = t.b;
@@ -136,9 +139,9 @@ export function drawWgpuTextLabel(state, renderProxy) {
136
139
  d[base + 10] = 1;
137
140
  d[base + 11] = 1;
138
141
  d[base + 12] = renderProxy.alpha;
139
- packWgpuSpriteBatchMaterialInstance(state, renderProxy.materialData, startCount);
140
- recordWgpuSpriteBatchColorScaleBias(state, renderProxy.colorMatrix ?? renderProxy.colorScaleBias, startCount);
141
- runtime.spriteBatchCount++;
142
+ packWgpuQuadBatchMaterialInstance(state, renderProxy.materialData, startCount);
143
+ recordWgpuQuadBatchColorScaleBias(state, renderProxy.colorMatrix ?? renderProxy.colorScaleBias, startCount);
144
+ runtime.quadBatchWriterCount++;
142
145
  }
143
146
  export const defaultWgpuTextLabelRenderer = {
144
147
  format: BatchFormat.Quad,
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuTextLabel.js","sourceRoot":"","sources":["../src/wgpuTextLabel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgpuTextLabel.js","sourceRoot":"","sources":["../src/wgpuTextLabel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuTilemap.d.ts","sourceRoot":"","sources":["../src/wgpuTilemap.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAqGlC,eAAO,MAAM,0BAA0B,EAAE,cAIxC,CAAC"}
1
+ {"version":3,"file":"wgpuTilemap.d.ts","sourceRoot":"","sources":["../src/wgpuTilemap.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAsGlC,eAAO,MAAM,0BAA0B,EAAE,cAIxC,CAAC"}
@@ -1,21 +1,19 @@
1
- import { hasImageResourcePixels } from '@flighthq/image/contract';
2
- import { resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu/contract';
1
+ import { resolveWgpuMaterialRenderer, resolveWgpuTexture } from '@flighthq/render-wgpu/contract';
3
2
  import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
3
+ import { SCENE2D_WORKING_COLOR_SPACE } from '@flighthq/render/contract';
4
4
  import { noopRendererData } from '@flighthq/render/contract';
5
+ import { getTextureHeight, getTextureWidth, hasTextureSource } from '@flighthq/texture/contract';
5
6
  import { BatchFormat } from '@flighthq/types/contract';
6
- import { packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, recordWgpuSpriteBatchColorScaleBias, SPRITE_INSTANCE_FLOATS, } from './wgpuSpriteBatch';
7
+ import { packWgpuQuadBatchMaterialInstance, prepareWgpuQuadBatchWrite, recordWgpuQuadBatchColorScaleBias, QUAD_BATCH_INSTANCE_FLOATS, } from './wgpuQuadBatchWriter';
7
8
  // Each tile writes the 13 base instance floats; any material packs its own per-instance data.
8
- const INSTANCE_STRIDE_FLOATS = SPRITE_INSTANCE_FLOATS;
9
+ const INSTANCE_STRIDE_FLOATS = QUAD_BATCH_INSTANCE_FLOATS;
9
10
  function submitWgpuTilemap(state, tilemapNode) {
10
11
  const runtime = getWgpuRenderStateRuntime(state);
11
12
  if (runtime.renderPass === null)
12
13
  return;
13
14
  const source = tilemapNode.source;
14
- const { columns, rows, tileset, tiles } = source.data;
15
- if (tileset === null)
16
- return;
17
- const atlas = tileset.atlas;
18
- if (atlas === null || atlas.image === null || !hasImageResourcePixels(atlas.image))
15
+ const { atlas, columns, rows, tileHeight, tileWidth, tiles } = source.data;
16
+ if (atlas === null || atlas.texture === null || !hasTextureSource(atlas.texture))
19
17
  return;
20
18
  if (columns === 0 || rows === 0)
21
19
  return;
@@ -23,19 +21,22 @@ function submitWgpuTilemap(state, tilemapNode) {
23
21
  const materialRenderer = resolveWgpuMaterialRenderer(state, material);
24
22
  if (materialRenderer === null)
25
23
  return;
24
+ const texture = atlas.texture;
25
+ const textureEntry = resolveWgpuTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE);
26
+ if (textureEntry === null)
27
+ return;
26
28
  const nodeMaterialData = tilemapNode.materialData;
27
29
  // Per-tile color adjustments, overriding the node-level tint for the tiles that carry one.
28
30
  const perTileColorScaleBias = source.data.materialData;
29
31
  const nodeColorScaleBias = tilemapNode.colorScaleBias;
30
32
  const nodeColorMatrix = tilemapNode.colorMatrix;
31
- const startCount = runtime.spriteBatchCount;
32
- const base = prepareWgpuSpriteBatchWrite(state, atlas.image, tilemapNode.blendMode, material, materialRenderer, columns * rows);
33
+ const startCount = runtime.quadBatchWriterCount;
34
+ const base = prepareWgpuQuadBatchWrite(state, textureEntry, texture.sampler, tilemapNode.blendMode, material, materialRenderer, columns * rows);
33
35
  const regions = atlas.regions;
34
36
  const numRegions = regions.length;
35
- const { tileHeight, tileWidth } = tileset;
36
- const iw = 1 / (atlas.image.width || 1);
37
- const ih = 1 / (atlas.image.height || 1);
38
- const instanceData = runtime.spriteBatchInstanceData;
37
+ const iw = 1 / Math.max(1, getTextureWidth(texture));
38
+ const ih = 1 / Math.max(1, getTextureHeight(texture));
39
+ const instanceData = runtime.quadBatchWriterInstanceData;
39
40
  const pt = tilemapNode.transform2D;
40
41
  const pa = pt.a, pb = pt.b, pc = pt.c, pd = pt.d, ptx = pt.tx, pty = pt.ty;
41
42
  const alpha = tilemapNode.alpha;
@@ -64,17 +65,17 @@ function submitWgpuTilemap(state, tilemapNode) {
64
65
  instanceData[writeBase + 10] = (region.x + region.width) * iw;
65
66
  instanceData[writeBase + 11] = (region.y + region.height) * ih;
66
67
  instanceData[writeBase + 12] = alpha;
67
- packWgpuSpriteBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
68
+ packWgpuQuadBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
68
69
  // Per-tile tint overrides the node-level tint (null → the node's, itself possibly null → untinted).
69
70
  const colorScaleBias = perTileColorScaleBias?.[row * columns + col] ??
70
71
  nodeColorMatrix ??
71
72
  nodeColorScaleBias;
72
- recordWgpuSpriteBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
73
+ recordWgpuQuadBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
73
74
  writeBase += INSTANCE_STRIDE_FLOATS;
74
75
  drawCount++;
75
76
  }
76
77
  }
77
- runtime.spriteBatchCount += drawCount;
78
+ runtime.quadBatchWriterCount += drawCount;
78
79
  }
79
80
  export const defaultWgpuTilemapRenderer = {
80
81
  format: BatchFormat.Quad,
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuTilemap.js","sourceRoot":"","sources":["../src/wgpuTilemap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgpuTilemap.js","sourceRoot":"","sources":["../src/wgpuTilemap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/scene2d-wgpu",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.3.0",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,27 +38,29 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/color": "0.3.0-next.906.07cea63",
40
- "@flighthq/scene2d": "0.3.0-next.906.07cea63",
41
- "@flighthq/scene2d-canvas": "0.3.0-next.906.07cea63",
42
- "@flighthq/geometry": "0.3.0-next.906.07cea63",
43
- "@flighthq/image": "0.3.0-next.906.07cea63",
44
- "@flighthq/log": "0.3.0-next.906.07cea63",
45
- "@flighthq/node": "0.3.0-next.906.07cea63",
46
- "@flighthq/path": "0.3.0-next.906.07cea63",
47
- "@flighthq/render": "0.3.0-next.906.07cea63",
48
- "@flighthq/render-wgpu": "0.3.0-next.906.07cea63",
49
- "@flighthq/shape": "0.3.0-next.906.07cea63",
50
- "@flighthq/text": "0.3.0-next.906.07cea63",
51
- "@flighthq/textinput": "0.3.0-next.906.07cea63",
52
- "@flighthq/textlayout": "0.3.0-next.906.07cea63",
53
- "@flighthq/types": "0.3.0-next.906.07cea63",
54
- "@flighthq/velocity": "0.3.0-next.906.07cea63"
41
+ "@flighthq/color": "0.3.0",
42
+ "@flighthq/scene2d": "0.3.0",
43
+ "@flighthq/scene2d-canvas": "0.3.0",
44
+ "@flighthq/geometry": "0.3.0",
45
+ "@flighthq/image": "0.3.0",
46
+ "@flighthq/log": "0.3.0",
47
+ "@flighthq/node": "0.3.0",
48
+ "@flighthq/path": "0.3.0",
49
+ "@flighthq/render": "0.3.0",
50
+ "@flighthq/render-wgpu": "0.3.0",
51
+ "@flighthq/shape": "0.3.0",
52
+ "@flighthq/text": "0.3.0",
53
+ "@flighthq/textinput": "0.3.0",
54
+ "@flighthq/textlayout": "0.3.0",
55
+ "@flighthq/texture": "0.3.0",
56
+ "@flighthq/types": "0.3.0",
57
+ "@flighthq/velocity": "0.3.0"
55
58
  },
56
59
  "devDependencies": {
57
60
  "@flighthq/bitmaptext": "*",
58
61
  "@flighthq/particleemitter": "*",
59
- "@flighthq/sprite": "*",
62
+ "@flighthq/quadbatch": "*",
63
+ "@flighthq/tilemap": "*",
60
64
  "@webgpu/types": "*",
61
65
  "typescript": "^5.3.0"
62
66
  },
@@ -7,7 +7,7 @@ import {
7
7
  areWgpuColorAdjustmentGuardsEnabled,
8
8
  enableWgpuColorAdjustmentGuards,
9
9
  } from './enableWgpuColorAdjustmentGuards';
10
- import { recordWgpuSpriteBatchColorScaleBias } from './wgpuSpriteBatch';
10
+ import { recordWgpuQuadBatchColorScaleBias } from './wgpuQuadBatchWriter';
11
11
 
12
12
  beforeAll(() => {
13
13
  installWgpuMock();
@@ -42,7 +42,7 @@ describe('enableWgpuColorAdjustmentGuards', () => {
42
42
  addLogSink(sink.sink);
43
43
  try {
44
44
  enableWgpuColorAdjustmentGuards(state);
45
- recordWgpuSpriteBatchColorScaleBias(state, ct(), 0);
45
+ recordWgpuQuadBatchColorScaleBias(state, ct(), 0);
46
46
  const entries = getMemoryLogSinkEntries(sink);
47
47
  expect(entries.length).toBe(1);
48
48
  const data = entries[0].data as Record<string, unknown>;
@@ -58,7 +58,7 @@ describe('enableWgpuColorAdjustmentGuards', () => {
58
58
  addLogSink(sink.sink);
59
59
  try {
60
60
  enableWgpuColorAdjustmentGuards(state);
61
- recordWgpuSpriteBatchColorScaleBias(state, null, 0);
61
+ recordWgpuQuadBatchColorScaleBias(state, null, 0);
62
62
  expect(getMemoryLogSinkEntries(sink).length).toBe(0);
63
63
  } finally {
64
64
  removeLogSink(sink.sink);
@@ -78,7 +78,7 @@ describe('enableWgpuColorAdjustmentGuards', () => {
78
78
  record: () => {},
79
79
  resolveFlush: () => null,
80
80
  };
81
- recordWgpuSpriteBatchColorScaleBias(state, ct(), 0);
81
+ recordWgpuQuadBatchColorScaleBias(state, ct(), 0);
82
82
  expect(getMemoryLogSinkEntries(sink).length).toBe(0);
83
83
  } finally {
84
84
  removeLogSink(sink.sink);
@@ -0,0 +1,23 @@
1
+ import { tessellateStrokePath } from '@flighthq/path/contract';
2
+ import {
3
+ createWgpuRenderStateForTest,
4
+ getWgpuRenderStateRuntime,
5
+ installWgpuMock,
6
+ } from '@flighthq/render-wgpu/contract';
7
+
8
+ import { enableWgpuStrokePathTessellation } from './enableWgpuStrokePathTessellation';
9
+
10
+ beforeAll(() => {
11
+ installWgpuMock();
12
+ });
13
+
14
+ describe('enableWgpuStrokePathTessellation', () => {
15
+ it('installs the full stroke tessellator on the render state', async () => {
16
+ const state = await createWgpuRenderStateForTest();
17
+ expect(getWgpuRenderStateRuntime(state).strokeTessellator).toBeNull();
18
+
19
+ enableWgpuStrokePathTessellation(state);
20
+
21
+ expect(getWgpuRenderStateRuntime(state).strokeTessellator).toBe(tessellateStrokePath);
22
+ });
23
+ });
@@ -4,7 +4,7 @@ import { createWgpuRenderStateForTest, installWgpuMock } from '@flighthq/render-
4
4
  import { getRenderProxy2D, prepareScene2DRender } from '@flighthq/render/contract';
5
5
 
6
6
  import { defaultWgpuBitmapTextRenderer } from './wgpuBitmapText';
7
- import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
7
+ import { flushWgpuQuadBatchWriter } from './wgpuQuadBatchWriter';
8
8
 
9
9
  beforeAll(() => {
10
10
  installWgpuMock();
@@ -29,7 +29,7 @@ describe('defaultWgpuBitmapTextRenderer.submit', () => {
29
29
 
30
30
  expect(() => {
31
31
  defaultWgpuBitmapTextRenderer.submit(state, renderProxy);
32
- flushWgpuSpriteBatch(state as never);
32
+ flushWgpuQuadBatchWriter(state as never);
33
33
  }).not.toThrow();
34
34
  submitWgpuRenderPass(state);
35
35
  });
@@ -8,10 +8,10 @@ import { EntityRuntimeKey } from '@flighthq/types/contract';
8
8
  import { scopeModuleMocks } from './moduleMockTestHelper';
9
9
  import type * as WgpuCacheModule from './wgpuCache';
10
10
  import type * as WgpuNode2DModule from './wgpuNode2D';
11
- import type * as WgpuSpriteBatchModule from './wgpuSpriteBatch';
11
+ import type * as WgpuQuadBatchWriterModule from './wgpuQuadBatchWriter';
12
12
 
13
13
  // The GPU render-target lifecycle (@flighthq/render-wgpu) and the two local collaborators
14
- // ./wgpuSpriteBatch and ./wgpuNode2D are stubbed so cache orchestration can be unit-tested
14
+ // ./wgpuQuadBatchWriter and ./wgpuNode2D are stubbed so cache orchestration can be unit-tested
15
15
  // without a real GPU pipeline: createWgpuRenderTarget returns a plain descriptor, and the composite,
16
16
  // batch-flush, and subtree-render calls become spies for the call and ordering assertions below.
17
17
  // The mocks are scoped to this file's dynamic import of ./wgpuCache and unmocked in afterAll, so
@@ -33,18 +33,18 @@ let destroyWgpuRenderTarget: typeof WgpuRenderWgpuModule.destroyWgpuRenderTarget
33
33
  let drawWgpuRenderTargetResult: typeof WgpuRenderWgpuModule.drawWgpuRenderTargetResult;
34
34
  let submitWgpuRenderPass: typeof WgpuRenderWgpuModule.submitWgpuRenderPass;
35
35
  let renderWgpuScene2D: typeof WgpuNode2DModule.renderWgpuScene2D;
36
- let flushWgpuSpriteBatch: typeof WgpuSpriteBatchModule.flushWgpuSpriteBatch;
36
+ let flushWgpuQuadBatchWriter: typeof WgpuQuadBatchWriterModule.flushWgpuQuadBatchWriter;
37
37
 
38
38
  // EntityRuntimeKey (Symbol.for) and RenderCacheKind (a string) are identity-stable across the
39
39
  // registry reset scopeModuleMocks performs, and cache adapters are stored on the state, not module-
40
40
  // level, so the statically-imported @flighthq/render still interoperates with the re-evaluated
41
41
  // subject even though the subject re-imports @flighthq/render under the reset.
42
- scopeModuleMocks(['./wgpuSpriteBatch', '@flighthq/render-wgpu', './wgpuNode2D']);
42
+ scopeModuleMocks(['./wgpuQuadBatchWriter', '@flighthq/render-wgpu', './wgpuNode2D']);
43
43
 
44
44
  beforeAll(async () => {
45
- vi.doMock('./wgpuSpriteBatch', async (importOriginal) => {
46
- const actual = await importOriginal<typeof WgpuSpriteBatchModule>();
47
- return { ...actual, flushWgpuSpriteBatch: vi.fn() };
45
+ vi.doMock('./wgpuQuadBatchWriter', async (importOriginal) => {
46
+ const actual = await importOriginal<typeof WgpuQuadBatchWriterModule>();
47
+ return { ...actual, flushWgpuQuadBatchWriter: vi.fn() };
48
48
  });
49
49
  vi.doMock('@flighthq/render-wgpu/contract', async (importOriginal) => {
50
50
  const actual = await importOriginal<typeof WgpuRenderWgpuModule>();
@@ -95,7 +95,7 @@ beforeAll(async () => {
95
95
  getWgpuRenderStateRuntime,
96
96
  submitWgpuRenderPass,
97
97
  } = await import('@flighthq/render-wgpu/contract'));
98
- ({ flushWgpuSpriteBatch } = await import('./wgpuSpriteBatch'));
98
+ ({ flushWgpuQuadBatchWriter } = await import('./wgpuQuadBatchWriter'));
99
99
  ({ renderWgpuScene2D } = await import('./wgpuNode2D'));
100
100
  ({
101
101
  createWgpuCacheState,
@@ -126,6 +126,8 @@ function makeCacheNode(source: unknown): any {
126
126
  describe('createWgpuCacheState', () => {
127
127
  it('copies renderers and shares the GPU device but keeps its own node map', () => {
128
128
  const screen = fakeScreen();
129
+ const resolver = vi.fn();
130
+ getWgpuRenderStateRuntime(screen).colorAdjustmentResolver = resolver;
129
131
  enableWgpuRenderCache(screen);
130
132
  const cacheState = createWgpuCacheState(screen);
131
133
  expect(getWgpuRenderStateRuntime(cacheState).rendererMap.get(RenderCacheKind)).toBe(defaultWgpuRenderCacheRenderer);
@@ -133,6 +135,7 @@ describe('createWgpuCacheState', () => {
133
135
  expect(getWgpuRenderStateRuntime(cacheState).renderProxyMap).not.toBe(
134
136
  getWgpuRenderStateRuntime(screen).renderProxyMap,
135
137
  );
138
+ expect(getWgpuRenderStateRuntime(cacheState).colorAdjustmentResolver).toBe(resolver);
136
139
  });
137
140
  });
138
141
 
@@ -160,11 +163,11 @@ describe('defaultWgpuRenderCacheRenderer', () => {
160
163
  useRenderCache(state, obj, cache);
161
164
  ensureWgpuRenderCacheTarget(state, cache, 16, 16);
162
165
  defaultWgpuRenderCacheRenderer.submit(state, makeCacheNode(obj));
163
- // The composite draws an immediate quad outside the sprite batch; geometry submitted earlier in
166
+ // The composite draws an immediate quad outside the quad-batch writer; geometry submitted earlier in
164
167
  // the walk must be drained first, or the immediate quad interleaves with the un-flushed batch's
165
168
  // instance buffer and bind-group state and corrupts it.
166
- expect(flushWgpuSpriteBatch).toHaveBeenCalledWith(state);
167
- expect((flushWgpuSpriteBatch as any).mock.invocationCallOrder[0]).toBeLessThan(
169
+ expect(flushWgpuQuadBatchWriter).toHaveBeenCalledWith(state);
170
+ expect((flushWgpuQuadBatchWriter as any).mock.invocationCallOrder[0]).toBeLessThan(
168
171
  (drawWgpuRenderTargetResult as any).mock.invocationCallOrder[0],
169
172
  );
170
173
  });
@@ -1,15 +1,15 @@
1
- import { createImageResource } from '@flighthq/image/contract';
2
1
  import { renderWgpuBackground, submitWgpuRenderPass } from '@flighthq/render-wgpu/contract';
3
2
  import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
4
3
  import { createWgpuRenderStateForTest, installWgpuMock } from '@flighthq/render-wgpu/contract';
4
+ import { areColorAdjustmentsEnabled } from '@flighthq/render/contract';
5
5
  import type { ColorScaleBias } from '@flighthq/types/contract';
6
6
 
7
7
  import { registerWgpuColorAdjustmentMaterialFeature } from './wgpuColorAdjustmentMaterialFeature';
8
8
  import {
9
- flushWgpuSpriteBatch,
10
- prepareWgpuSpriteBatchWrite,
11
- recordWgpuSpriteBatchColorScaleBias,
12
- } from './wgpuSpriteBatch';
9
+ flushWgpuQuadBatchWriter,
10
+ prepareWgpuQuadBatchWrite,
11
+ recordWgpuQuadBatchColorScaleBias,
12
+ } from './wgpuQuadBatchWriter';
13
13
  import { standardWgpuMaterialRenderer } from './wgpuStandardMaterial';
14
14
 
15
15
  beforeAll(() => {
@@ -50,8 +50,10 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
50
50
  const state = await createWgpuRenderStateForTest();
51
51
  const runtime = getWgpuRenderStateRuntime(state);
52
52
  registerWgpuColorAdjustmentMaterialFeature(state);
53
+ expect(areColorAdjustmentsEnabled(state)).toBe(true);
53
54
  expect(runtime.wgpuColorAdjustmentMaterialFeature).toBeDefined();
54
55
  expect(runtime.wgpuColorAdjustmentMaterialFeature).not.toBeNull();
56
+ expect(runtime.wgpuColorAdjustmentMaterialFeature?.drawShapeMeshes).toBeTypeOf('function');
55
57
  });
56
58
 
57
59
  it('is idempotent', async () => {
@@ -67,11 +69,11 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
67
69
  const state = await createWgpuRenderStateForTest();
68
70
  const runtime = getWgpuRenderStateRuntime(state);
69
71
  registerWgpuColorAdjustmentMaterialFeature(state);
70
- recordWgpuSpriteBatchColorScaleBias(state, null, 0);
71
- recordWgpuSpriteBatchColorScaleBias(state, null, 1);
72
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_NONE);
73
- expect(runtime.spriteBatchColorTintData).toBeUndefined();
74
- expect(runtime.spriteBatchColorScaleBiasData).toBeUndefined();
72
+ recordWgpuQuadBatchColorScaleBias(state, null, 0);
73
+ recordWgpuQuadBatchColorScaleBias(state, null, 1);
74
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_NONE);
75
+ expect(runtime.quadBatchWriterColorTintData).toBeUndefined();
76
+ expect(runtime.quadBatchWriterColorScaleBiasData).toBeUndefined();
75
77
  });
76
78
 
77
79
  it('uses one whole-batch uniform when every instance shares one tint', async () => {
@@ -79,33 +81,33 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
79
81
  const runtime = getWgpuRenderStateRuntime(state);
80
82
  registerWgpuColorAdjustmentMaterialFeature(state);
81
83
  const tint = ct(0.5);
82
- recordWgpuSpriteBatchColorScaleBias(state, tint, 0);
83
- recordWgpuSpriteBatchColorScaleBias(state, tint, 1);
84
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_UNIFORM);
85
- expect(runtime.spriteBatchUniformColorScaleBias).toBe(tint);
84
+ recordWgpuQuadBatchColorScaleBias(state, tint, 0);
85
+ recordWgpuQuadBatchColorScaleBias(state, tint, 1);
86
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_UNIFORM);
87
+ expect(runtime.quadBatchWriterUniformColorScaleBias).toBe(tint);
86
88
  });
87
89
 
88
90
  it('promotes varying multiply-only tints to packed RGBA8 without splitting', async () => {
89
91
  const state = await createWgpuRenderStateForTest();
90
92
  const runtime = getWgpuRenderStateRuntime(state);
91
93
  registerWgpuColorAdjustmentMaterialFeature(state);
92
- recordWgpuSpriteBatchColorScaleBias(state, ct(0.5), 0);
93
- recordWgpuSpriteBatchColorScaleBias(state, ct(0.25), 1);
94
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
95
- expect(Array.from(new Uint8Array(runtime.spriteBatchColorTintData!.buffer, 0, 8))).toEqual([
94
+ recordWgpuQuadBatchColorScaleBias(state, ct(0.5), 0);
95
+ recordWgpuQuadBatchColorScaleBias(state, ct(0.25), 1);
96
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
97
+ expect(Array.from(new Uint8Array(runtime.quadBatchWriterColorTintData!.buffer, 0, 8))).toEqual([
96
98
  128, 255, 255, 255, 64, 255, 255, 255,
97
99
  ]);
98
- expect(runtime.spriteBatchColorScaleBiasData).toBeUndefined();
100
+ expect(runtime.quadBatchWriterColorScaleBiasData).toBeUndefined();
99
101
  });
100
102
 
101
103
  it('promotes with identity fill when a tinted instance follows an untinted one', async () => {
102
104
  const state = await createWgpuRenderStateForTest();
103
105
  const runtime = getWgpuRenderStateRuntime(state);
104
106
  registerWgpuColorAdjustmentMaterialFeature(state);
105
- recordWgpuSpriteBatchColorScaleBias(state, null, 0);
106
- recordWgpuSpriteBatchColorScaleBias(state, ct(0.5), 1);
107
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
108
- expect(Array.from(new Uint8Array(runtime.spriteBatchColorTintData!.buffer, 0, 8))).toEqual([
107
+ recordWgpuQuadBatchColorScaleBias(state, null, 0);
108
+ recordWgpuQuadBatchColorScaleBias(state, ct(0.5), 1);
109
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
110
+ expect(Array.from(new Uint8Array(runtime.quadBatchWriterColorTintData!.buffer, 0, 8))).toEqual([
109
111
  255, 255, 255, 255, 128, 255, 255, 255,
110
112
  ]);
111
113
  });
@@ -115,13 +117,17 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
115
117
  registerWgpuColorAdjustmentMaterialFeature(state);
116
118
  renderWgpuBackground(state);
117
119
  const runtime = getWgpuRenderStateRuntime(state);
118
- const tex = createImageResource(document.createElement('img'));
119
- prepareWgpuSpriteBatchWrite(state, tex, null, null, standardWgpuMaterialRenderer, 2);
120
- recordWgpuSpriteBatchColorScaleBias(state, ct(0.5), 0);
121
- recordWgpuSpriteBatchColorScaleBias(state, ct(0.5), 1);
122
- runtime.spriteBatchCount = 2;
123
- flushWgpuSpriteBatch(state);
124
- expect(Array.from(new Uint8Array(runtime.spriteBatchColorTintData!.buffer, 0, 8))).toEqual([
120
+ const tex = {
121
+ bindGroup: {} as GPUBindGroup,
122
+ texture: {} as GPUTexture,
123
+ view: {} as GPUTextureView,
124
+ };
125
+ prepareWgpuQuadBatchWrite(state, tex, null, null, null, standardWgpuMaterialRenderer, 2);
126
+ recordWgpuQuadBatchColorScaleBias(state, ct(0.5), 0);
127
+ recordWgpuQuadBatchColorScaleBias(state, ct(0.5), 1);
128
+ runtime.quadBatchWriterCount = 2;
129
+ flushWgpuQuadBatchWriter(state);
130
+ expect(Array.from(new Uint8Array(runtime.quadBatchWriterColorTintData!.buffer, 0, 8))).toEqual([
125
131
  128, 255, 255, 255, 128, 255, 255, 255,
126
132
  ]);
127
133
  submitWgpuRenderPass(state);
@@ -131,10 +137,10 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
131
137
  const state = await createWgpuRenderStateForTest();
132
138
  const runtime = getWgpuRenderStateRuntime(state);
133
139
  registerWgpuColorAdjustmentMaterialFeature(state);
134
- recordWgpuSpriteBatchColorScaleBias(state, null, 0);
135
- recordWgpuSpriteBatchColorScaleBias(state, { tint: 0x12345678 }, 1);
136
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
137
- expect(Array.from(new Uint8Array(runtime.spriteBatchColorTintData!.buffer, 4, 4))).toEqual([
140
+ recordWgpuQuadBatchColorScaleBias(state, null, 0);
141
+ recordWgpuQuadBatchColorScaleBias(state, { tint: 0x12345678 }, 1);
142
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_PACKED_TINT);
143
+ expect(Array.from(new Uint8Array(runtime.quadBatchWriterColorTintData!.buffer, 4, 4))).toEqual([
138
144
  0x12, 0x34, 0x56, 0x78,
139
145
  ]);
140
146
  });
@@ -143,23 +149,23 @@ describe('registerWgpuColorAdjustmentMaterialFeature', () => {
143
149
  const state = await createWgpuRenderStateForTest();
144
150
  const runtime = getWgpuRenderStateRuntime(state);
145
151
  registerWgpuColorAdjustmentMaterialFeature(state);
146
- recordWgpuSpriteBatchColorScaleBias(state, { tint: 0x808080ff }, 0);
147
- recordWgpuSpriteBatchColorScaleBias(state, ct(1, 1, 1, 1, 1), 1);
148
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_PER_INSTANCE);
149
- expect(runtime.spriteBatchColorScaleBiasData![0]).toBeCloseTo(128 / 255);
150
- expect(runtime.spriteBatchColorScaleBiasData![12]).toBe(1);
152
+ recordWgpuQuadBatchColorScaleBias(state, { tint: 0x808080ff }, 0);
153
+ recordWgpuQuadBatchColorScaleBias(state, ct(1, 1, 1, 1, 1), 1);
154
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_PER_INSTANCE);
155
+ expect(runtime.quadBatchWriterColorScaleBiasData![0]).toBeCloseTo(128 / 255);
156
+ expect(runtime.quadBatchWriterColorScaleBiasData![12]).toBe(1);
151
157
  });
152
158
 
153
159
  it('widens to a 20-float matrix stream only when channel mixing appears', async () => {
154
160
  const state = await createWgpuRenderStateForTest();
155
161
  const runtime = getWgpuRenderStateRuntime(state);
156
162
  registerWgpuColorAdjustmentMaterialFeature(state);
157
- recordWgpuSpriteBatchColorScaleBias(state, { tint: 0x808080ff }, 0);
158
- recordWgpuSpriteBatchColorScaleBias(state, MIX_RED_GREEN, 1);
159
- expect(runtime.spriteBatchColorScaleBiasMode).toBe(CT_MODE_MATRIX);
160
- expect(runtime.spriteBatchColorMatrixData![0]).toBeCloseTo(128 / 255);
161
- expect(runtime.spriteBatchColorMatrixData![20]).toBe(1);
162
- expect(runtime.spriteBatchColorMatrixData![21]).toBe(0.5);
163
- expect(runtime.spriteBatchColorMatrixData![36]).toBe(0.25);
163
+ recordWgpuQuadBatchColorScaleBias(state, { tint: 0x808080ff }, 0);
164
+ recordWgpuQuadBatchColorScaleBias(state, MIX_RED_GREEN, 1);
165
+ expect(runtime.quadBatchWriterColorScaleBiasMode).toBe(CT_MODE_MATRIX);
166
+ expect(runtime.quadBatchWriterColorMatrixData![0]).toBeCloseTo(128 / 255);
167
+ expect(runtime.quadBatchWriterColorMatrixData![20]).toBe(1);
168
+ expect(runtime.quadBatchWriterColorMatrixData![21]).toBe(0.5);
169
+ expect(runtime.quadBatchWriterColorMatrixData![36]).toBe(0.25);
164
170
  });
165
171
  });