@flighthq/displayobject-wgpu 0.1.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/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/moduleMockTestHelper.d.ts +15 -0
- package/dist/moduleMockTestHelper.d.ts.map +1 -0
- package/dist/moduleMockTestHelper.js +25 -0
- package/dist/moduleMockTestHelper.js.map +1 -0
- package/dist/wgpuBitmap.d.ts +4 -0
- package/dist/wgpuBitmap.d.ts.map +1 -0
- package/dist/wgpuBitmap.js +80 -0
- package/dist/wgpuBitmap.js.map +1 -0
- package/dist/wgpuCache.d.ts +31 -0
- package/dist/wgpuCache.d.ts.map +1 -0
- package/dist/wgpuCache.js +232 -0
- package/dist/wgpuCache.js.map +1 -0
- package/dist/wgpuClip.d.ts +3 -0
- package/dist/wgpuClip.d.ts.map +1 -0
- package/dist/wgpuClip.js +44 -0
- package/dist/wgpuClip.js.map +1 -0
- package/dist/wgpuClipContours.d.ts +4 -0
- package/dist/wgpuClipContours.d.ts.map +1 -0
- package/dist/wgpuClipContours.js +174 -0
- package/dist/wgpuClipContours.js.map +1 -0
- package/dist/wgpuClipRectangle.d.ts +4 -0
- package/dist/wgpuClipRectangle.d.ts.map +1 -0
- package/dist/wgpuClipRectangle.js +80 -0
- package/dist/wgpuClipRectangle.js.map +1 -0
- package/dist/wgpuColorTransformMaterial.d.ts +5 -0
- package/dist/wgpuColorTransformMaterial.d.ts.map +1 -0
- package/dist/wgpuColorTransformMaterial.js +97 -0
- package/dist/wgpuColorTransformMaterial.js.map +1 -0
- package/dist/wgpuDefaultMaterial.d.ts +4 -0
- package/dist/wgpuDefaultMaterial.d.ts.map +1 -0
- package/dist/wgpuDefaultMaterial.js +46 -0
- package/dist/wgpuDefaultMaterial.js.map +1 -0
- package/dist/wgpuDisplayObject.d.ts +5 -0
- package/dist/wgpuDisplayObject.d.ts.map +1 -0
- package/dist/wgpuDisplayObject.js +41 -0
- package/dist/wgpuDisplayObject.js.map +1 -0
- package/dist/wgpuMaterials.d.ts +15 -0
- package/dist/wgpuMaterials.d.ts.map +1 -0
- package/dist/wgpuMaterials.js +34 -0
- package/dist/wgpuMaterials.js.map +1 -0
- package/dist/wgpuParticleEmitter.d.ts +4 -0
- package/dist/wgpuParticleEmitter.d.ts.map +1 -0
- package/dist/wgpuParticleEmitter.js +288 -0
- package/dist/wgpuParticleEmitter.js.map +1 -0
- package/dist/wgpuQuadBatch.d.ts +7 -0
- package/dist/wgpuQuadBatch.d.ts.map +1 -0
- package/dist/wgpuQuadBatch.js +85 -0
- package/dist/wgpuQuadBatch.js.map +1 -0
- package/dist/wgpuRegistration.d.ts +19 -0
- package/dist/wgpuRegistration.d.ts.map +1 -0
- package/dist/wgpuRegistration.js +53 -0
- package/dist/wgpuRegistration.js.map +1 -0
- package/dist/wgpuRenderStats.d.ts +20 -0
- package/dist/wgpuRenderStats.d.ts.map +1 -0
- package/dist/wgpuRenderStats.js +50 -0
- package/dist/wgpuRenderStats.js.map +1 -0
- package/dist/wgpuRendererData.d.ts +26 -0
- package/dist/wgpuRendererData.d.ts.map +1 -0
- package/dist/wgpuRendererData.js +29 -0
- package/dist/wgpuRendererData.js.map +1 -0
- package/dist/wgpuRichText.d.ts +9 -0
- package/dist/wgpuRichText.d.ts.map +1 -0
- package/dist/wgpuRichText.js +163 -0
- package/dist/wgpuRichText.js.map +1 -0
- package/dist/wgpuScale9Mapper.d.ts +3 -0
- package/dist/wgpuScale9Mapper.d.ts.map +1 -0
- package/dist/wgpuScale9Mapper.js +42 -0
- package/dist/wgpuScale9Mapper.js.map +1 -0
- package/dist/wgpuScale9Shape.d.ts +9 -0
- package/dist/wgpuScale9Shape.d.ts.map +1 -0
- package/dist/wgpuScale9Shape.js +123 -0
- package/dist/wgpuScale9Shape.js.map +1 -0
- package/dist/wgpuShape.d.ts +4 -0
- package/dist/wgpuShape.d.ts.map +1 -0
- package/dist/wgpuShape.js +157 -0
- package/dist/wgpuShape.js.map +1 -0
- package/dist/wgpuShapeMesh.d.ts +9 -0
- package/dist/wgpuShapeMesh.d.ts.map +1 -0
- package/dist/wgpuShapeMesh.js +204 -0
- package/dist/wgpuShapeMesh.js.map +1 -0
- package/dist/wgpuSprite.d.ts +3 -0
- package/dist/wgpuSprite.d.ts.map +1 -0
- package/dist/wgpuSprite.js +28 -0
- package/dist/wgpuSprite.js.map +1 -0
- package/dist/wgpuSpriteBatch.d.ts +18 -0
- package/dist/wgpuSpriteBatch.d.ts.map +1 -0
- package/dist/wgpuSpriteBatch.js +320 -0
- package/dist/wgpuSpriteBatch.js.map +1 -0
- package/dist/wgpuSpriteRenderer.d.ts +3 -0
- package/dist/wgpuSpriteRenderer.d.ts.map +1 -0
- package/dist/wgpuSpriteRenderer.js +51 -0
- package/dist/wgpuSpriteRenderer.js.map +1 -0
- package/dist/wgpuTextInput.d.ts +4 -0
- package/dist/wgpuTextInput.d.ts.map +1 -0
- package/dist/wgpuTextInput.js +44 -0
- package/dist/wgpuTextInput.js.map +1 -0
- package/dist/wgpuTextLabel.d.ts +4 -0
- package/dist/wgpuTextLabel.d.ts.map +1 -0
- package/dist/wgpuTextLabel.js +157 -0
- package/dist/wgpuTextLabel.js.map +1 -0
- package/dist/wgpuTilemap.d.ts +3 -0
- package/dist/wgpuTilemap.d.ts.map +1 -0
- package/dist/wgpuTilemap.js +76 -0
- package/dist/wgpuTilemap.js.map +1 -0
- package/dist/wgpuVelocity.d.ts +23 -0
- package/dist/wgpuVelocity.d.ts.map +1 -0
- package/dist/wgpuVelocity.js +365 -0
- package/dist/wgpuVelocity.js.map +1 -0
- package/dist/wgpuVideo.d.ts +6 -0
- package/dist/wgpuVideo.d.ts.map +1 -0
- package/dist/wgpuVideo.js +63 -0
- package/dist/wgpuVideo.js.map +1 -0
- package/package.json +52 -0
- package/src/wgpuBitmap.test.ts +40 -0
- package/src/wgpuCache.test.ts +230 -0
- package/src/wgpuClip.test.ts +15 -0
- package/src/wgpuClipContours.test.ts +101 -0
- package/src/wgpuClipRectangle.test.ts +45 -0
- package/src/wgpuColorTransformMaterial.test.ts +62 -0
- package/src/wgpuDefaultMaterial.test.ts +21 -0
- package/src/wgpuDisplayObject.test.ts +36 -0
- package/src/wgpuMaterials.test.ts +44 -0
- package/src/wgpuParticleEmitter.test.ts +34 -0
- package/src/wgpuQuadBatch.test.ts +69 -0
- package/src/wgpuRegistration.test.ts +115 -0
- package/src/wgpuRenderStats.test.ts +89 -0
- package/src/wgpuRendererData.test.ts +29 -0
- package/src/wgpuRichText.test.ts +100 -0
- package/src/wgpuScale9Mapper.test.ts +20 -0
- package/src/wgpuScale9Shape.test.ts +97 -0
- package/src/wgpuShape.test.ts +95 -0
- package/src/wgpuShapeMesh.test.ts +124 -0
- package/src/wgpuSprite.test.ts +19 -0
- package/src/wgpuSpriteBatch.test.ts +180 -0
- package/src/wgpuSpriteRenderer.test.ts +38 -0
- package/src/wgpuTextInput.test.ts +37 -0
- package/src/wgpuTextLabel.test.ts +113 -0
- package/src/wgpuTilemap.test.ts +47 -0
- package/src/wgpuVelocity.test.ts +147 -0
- package/src/wgpuVideo.test.ts +59 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
|
|
3
|
+
// Draws the shape's tessellated fill meshes. Flushes the sprite batch first (these go through a separate
|
|
4
|
+
// pipeline). Uploads each mesh's geometry and premultiplied color into the shape's reusable per-shape
|
|
5
|
+
// buffers (grown by recreating when a mesh needs more room) and issues one indexed draw per mesh, gated
|
|
6
|
+
// by the active contour-clip stencil. The shared `matrix` (projection · worldTransform) is identical for
|
|
7
|
+
// every mesh, so it is uploaded once into a single uniform region per mesh alongside that mesh's color.
|
|
8
|
+
export function drawWgpuShapeMeshes(state, renderProxy, meshes, buffers) {
|
|
9
|
+
if (meshes.length === 0)
|
|
10
|
+
return;
|
|
11
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
12
|
+
flushWgpuSpriteBatch(state);
|
|
13
|
+
const pass = runtime.renderPass;
|
|
14
|
+
if (pass === null)
|
|
15
|
+
return;
|
|
16
|
+
const pipelineEntry = ensureShapeMeshPipeline(state);
|
|
17
|
+
const device = state.device;
|
|
18
|
+
const queue = device.queue;
|
|
19
|
+
const uniform = ensureShapeMeshUniform(state, pipelineEntry, buffers);
|
|
20
|
+
// Writes the projection·world matrix into uniform columns 0..11 (it shares the same scratch array);
|
|
21
|
+
// the per-mesh color fills 12..15 in the loop below. Same matrix for every mesh of this shape.
|
|
22
|
+
shapeMeshMatrix(state, renderProxy);
|
|
23
|
+
pass.setPipeline(pipelineEntry.pipeline);
|
|
24
|
+
pass.setBindGroup(0, buffers.bindGroup);
|
|
25
|
+
// The cleared stencil is 0, so at depth 0 'equal 0' passes everywhere; inside a contour clip only its
|
|
26
|
+
// stamped region equals currentMaskDepth, so the fill is confined to the clip.
|
|
27
|
+
pass.setStencilReference(runtime.currentMaskDepth);
|
|
28
|
+
const nodeAlpha = renderProxy.alpha;
|
|
29
|
+
for (let i = 0; i < meshes.length; i++) {
|
|
30
|
+
const mesh = meshes[i];
|
|
31
|
+
if (mesh.indices.length === 0)
|
|
32
|
+
continue;
|
|
33
|
+
const a = mesh.alpha * nodeAlpha;
|
|
34
|
+
if (a <= 0)
|
|
35
|
+
continue;
|
|
36
|
+
const vertexBuffer = ensureShapeMeshVertexBuffer(state, buffers, mesh.vertices.byteLength);
|
|
37
|
+
const indexBuffer = ensureShapeMeshIndexBuffer(state, buffers, mesh.indices.byteLength);
|
|
38
|
+
queue.writeBuffer(vertexBuffer, 0, mesh.vertices.buffer, mesh.vertices.byteOffset, mesh.vertices.byteLength);
|
|
39
|
+
writeShapeMeshIndices(queue, indexBuffer, mesh.indices);
|
|
40
|
+
// Premultiplied color (r*a, g*a, b*a, a) for the one / one-minus-src-alpha target blend.
|
|
41
|
+
const r = ((mesh.color >> 16) & 0xff) / 255;
|
|
42
|
+
const g = ((mesh.color >> 8) & 0xff) / 255;
|
|
43
|
+
const b = (mesh.color & 0xff) / 255;
|
|
44
|
+
uniform[12] = r * a;
|
|
45
|
+
uniform[13] = g * a;
|
|
46
|
+
uniform[14] = b * a;
|
|
47
|
+
uniform[15] = a;
|
|
48
|
+
queue.writeBuffer(buffers.uniformBuffer, 0, uniform.buffer, uniform.byteOffset, uniform.byteLength);
|
|
49
|
+
pass.setVertexBuffer(0, vertexBuffer);
|
|
50
|
+
pass.setIndexBuffer(indexBuffer, 'uint16');
|
|
51
|
+
pass.drawIndexed(mesh.indices.length);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const SHAPE_MESH_WGSL = /* wgsl */ `
|
|
55
|
+
struct ShapeMeshUniforms { matrix : mat3x3f, color : vec4f }
|
|
56
|
+
@group(0) @binding(0) var<uniform> u : ShapeMeshUniforms;
|
|
57
|
+
@vertex fn vs_main(@location(0) position : vec2f) -> @builtin(position) vec4f {
|
|
58
|
+
let p = u.matrix * vec3f(position, 1.0);
|
|
59
|
+
return vec4f(p.x, p.y, 0.0, 1.0);
|
|
60
|
+
}
|
|
61
|
+
@fragment fn fs_main() -> @location(0) vec4f { return u.color; }
|
|
62
|
+
`;
|
|
63
|
+
// mat3x3f occupies 48 bytes (three vec3 columns each padded to 16), then a vec4f color (16 bytes): 64.
|
|
64
|
+
const SHAPE_MESH_UNIFORM_BYTES = 64;
|
|
65
|
+
const SHAPE_MESH_UNIFORM_FLOATS = SHAPE_MESH_UNIFORM_BYTES / 4;
|
|
66
|
+
function ensureShapeMeshIndexBuffer(state, buffers, byteLength) {
|
|
67
|
+
// Index buffers must be a multiple of 4 bytes for COPY_DST writes; round up the requested size.
|
|
68
|
+
const size = Math.max(4, (byteLength + 3) & ~3);
|
|
69
|
+
if (buffers.indexBuffer === null || buffers.indexCapacity < size) {
|
|
70
|
+
buffers.indexBuffer?.destroy();
|
|
71
|
+
buffers.indexBuffer = state.device.createBuffer({
|
|
72
|
+
size,
|
|
73
|
+
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
74
|
+
});
|
|
75
|
+
buffers.indexCapacity = size;
|
|
76
|
+
}
|
|
77
|
+
return buffers.indexBuffer;
|
|
78
|
+
}
|
|
79
|
+
// Lazily builds (once per shape) the uniform buffer + bind group, then returns the scratch float view the
|
|
80
|
+
// caller fills with the matrix (uploaded once) and per-mesh color. The matrix columns are written here so
|
|
81
|
+
// every draw shares them; only color (floats 12..15) changes per mesh.
|
|
82
|
+
function ensureShapeMeshUniform(state, pipelineEntry, buffers) {
|
|
83
|
+
if (buffers.uniformBuffer === null) {
|
|
84
|
+
buffers.uniformBuffer = state.device.createBuffer({
|
|
85
|
+
size: SHAPE_MESH_UNIFORM_BYTES,
|
|
86
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
87
|
+
});
|
|
88
|
+
buffers.bindGroup = state.device.createBindGroup({
|
|
89
|
+
layout: pipelineEntry.bindGroupLayout,
|
|
90
|
+
entries: [{ binding: 0, resource: { buffer: buffers.uniformBuffer } }],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return _shapeMeshUniformScratch;
|
|
94
|
+
}
|
|
95
|
+
function ensureShapeMeshPipeline(state) {
|
|
96
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
97
|
+
const format = runtime.currentColorFormat ?? state.format;
|
|
98
|
+
const cache = runtime.shapeMeshPipelines ?? (runtime.shapeMeshPipelines = new Map());
|
|
99
|
+
const existing = cache.get(format);
|
|
100
|
+
if (existing !== undefined)
|
|
101
|
+
return existing;
|
|
102
|
+
const device = state.device;
|
|
103
|
+
const module = device.createShaderModule({ code: SHAPE_MESH_WGSL });
|
|
104
|
+
const bindGroupLayout = device.createBindGroupLayout({
|
|
105
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } }],
|
|
106
|
+
});
|
|
107
|
+
const layout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });
|
|
108
|
+
const vertexBuffers = [
|
|
109
|
+
{ arrayStride: 8, attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x2' }] },
|
|
110
|
+
];
|
|
111
|
+
const pipeline = device.createRenderPipeline({
|
|
112
|
+
layout,
|
|
113
|
+
vertex: { module, entryPoint: 'vs_main', buffers: vertexBuffers },
|
|
114
|
+
fragment: {
|
|
115
|
+
module,
|
|
116
|
+
entryPoint: 'fs_main',
|
|
117
|
+
targets: [
|
|
118
|
+
{
|
|
119
|
+
format,
|
|
120
|
+
// Premultiplied alpha — the geometry already carries premultiplied color.
|
|
121
|
+
blend: {
|
|
122
|
+
color: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
123
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
129
|
+
depthStencil: {
|
|
130
|
+
format: 'depth24plus-stencil8',
|
|
131
|
+
depthWriteEnabled: false,
|
|
132
|
+
depthCompare: 'always',
|
|
133
|
+
// Gate the fill by any active contour clip without disturbing the stencil (writeMask 0).
|
|
134
|
+
stencilFront: { compare: 'equal', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' },
|
|
135
|
+
stencilBack: { compare: 'equal', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' },
|
|
136
|
+
stencilReadMask: 0xff,
|
|
137
|
+
stencilWriteMask: 0x00,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const entry = { pipeline, bindGroupLayout };
|
|
141
|
+
cache.set(format, entry);
|
|
142
|
+
return entry;
|
|
143
|
+
}
|
|
144
|
+
function ensureShapeMeshVertexBuffer(state, buffers, byteLength) {
|
|
145
|
+
const size = Math.max(8, byteLength);
|
|
146
|
+
if (buffers.vertexBuffer === null || buffers.vertexCapacity < size) {
|
|
147
|
+
buffers.vertexBuffer?.destroy();
|
|
148
|
+
buffers.vertexBuffer = state.device.createBuffer({
|
|
149
|
+
size,
|
|
150
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
151
|
+
});
|
|
152
|
+
buffers.vertexCapacity = size;
|
|
153
|
+
}
|
|
154
|
+
return buffers.vertexBuffer;
|
|
155
|
+
}
|
|
156
|
+
// Column-major mat3x3f = projection · worldTransform, mapping shape-local points to clip space exactly as
|
|
157
|
+
// webgpuClipContours/webgpuDraw build it (so the fill lands in identical clip space). Each column is
|
|
158
|
+
// padded to 4 floats (vec3 -> vec4 std140-style layout). Writes into the shared scratch view; the color
|
|
159
|
+
// (floats 12..15) is filled per mesh by the caller.
|
|
160
|
+
function shapeMeshMatrix(state, renderProxy) {
|
|
161
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
162
|
+
const viewport = runtime.renderTargetViewport ?? state.canvas;
|
|
163
|
+
const iw = 2 / (viewport.width || 1);
|
|
164
|
+
const ih = 2 / (viewport.height || 1);
|
|
165
|
+
const t = renderProxy.transform2D;
|
|
166
|
+
const m = _shapeMeshUniformScratch;
|
|
167
|
+
m[0] = t.a * iw;
|
|
168
|
+
m[1] = -t.b * ih;
|
|
169
|
+
m[2] = 0;
|
|
170
|
+
m[3] = 0;
|
|
171
|
+
m[4] = t.c * iw;
|
|
172
|
+
m[5] = -t.d * ih;
|
|
173
|
+
m[6] = 0;
|
|
174
|
+
m[7] = 0;
|
|
175
|
+
m[8] = t.tx * iw - 1;
|
|
176
|
+
m[9] = -t.ty * ih + 1;
|
|
177
|
+
m[10] = 1;
|
|
178
|
+
m[11] = 0;
|
|
179
|
+
return m;
|
|
180
|
+
}
|
|
181
|
+
// Uploads uint16 indices to the index buffer. writeBuffer requires the byte count to be a multiple of 4,
|
|
182
|
+
// but a mesh with an odd index count (e.g. a single triangle, 3 indices = 6 bytes) is not; pad the upload
|
|
183
|
+
// up through the scratch in that case (the trailing index is never drawn — drawIndexed uses indices.length).
|
|
184
|
+
// Even-length data, whose byte length is already a multiple of 4, uploads directly with no copy.
|
|
185
|
+
function writeShapeMeshIndices(queue, indexBuffer, indices) {
|
|
186
|
+
const byteLength = indices.byteLength;
|
|
187
|
+
if ((byteLength & 3) === 0) {
|
|
188
|
+
queue.writeBuffer(indexBuffer, 0, indices.buffer, indices.byteOffset, byteLength);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const paddedBytes = (byteLength + 3) & ~3;
|
|
192
|
+
const wordCount = paddedBytes >> 1;
|
|
193
|
+
if (_shapeMeshIndexScratch.length < wordCount)
|
|
194
|
+
_shapeMeshIndexScratch = new Uint16Array(wordCount);
|
|
195
|
+
_shapeMeshIndexScratch.set(indices);
|
|
196
|
+
queue.writeBuffer(indexBuffer, 0, _shapeMeshIndexScratch.buffer, 0, paddedBytes);
|
|
197
|
+
}
|
|
198
|
+
// Shared scratch for one uniform upload (matrix columns 0..11, color 12..15). Single-threaded render
|
|
199
|
+
// loop, so one scratch is safe; the buffer is written before each draw via writeBuffer.
|
|
200
|
+
const _shapeMeshUniformScratch = new Float32Array(SHAPE_MESH_UNIFORM_FLOATS);
|
|
201
|
+
// Grown-on-demand scratch for odd-length index uploads (see writeShapeMeshIndices). Single-threaded render
|
|
202
|
+
// loop, so one shared scratch is safe; it is written immediately before each writeBuffer.
|
|
203
|
+
let _shapeMeshIndexScratch = new Uint16Array(0);
|
|
204
|
+
//# sourceMappingURL=wgpuShapeMesh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuShapeMesh.js","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuSprite.d.ts","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAItE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAwBpF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { getDisplayObjectRuntime } from '@flighthq/displayobject';
|
|
2
|
+
import { getRenderProxy2D, isRenderProxyVisible } from '@flighthq/render';
|
|
3
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
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 = getDisplayObjectRuntime(current).children;
|
|
19
|
+
if (children !== null) {
|
|
20
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
21
|
+
tempStack[stackLength++] = children[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
flushWgpuSpriteBatch(state);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=wgpuSprite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuSprite.js","sourceRoot":"","sources":["../src/wgpuSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,KAAsB,EAAE,MAAqB;IAC5E,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,CAAkB,CAAC;QAC1D,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,uBAAuB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YAC3D,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,CAAkB,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Material, MaterialData, WgpuMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
import { BlendMode } from '@flighthq/types';
|
|
3
|
+
export declare const SPRITE_INSTANCE_FLOATS = 13;
|
|
4
|
+
export declare function ensureWgpuQuadBatchResources(state: WgpuRenderState): WgpuQuadBatchResources;
|
|
5
|
+
export interface WgpuQuadBatchResources {
|
|
6
|
+
instanceBindGroupLayout: GPUBindGroupLayout;
|
|
7
|
+
materialBindGroupLayout: GPUBindGroupLayout;
|
|
8
|
+
basePipelineLayout: GPUPipelineLayout;
|
|
9
|
+
materialPipelineLayout: GPUPipelineLayout;
|
|
10
|
+
pipelines: WeakMap<GPUShaderModule, Map<string, GPURenderPipeline>>;
|
|
11
|
+
}
|
|
12
|
+
export declare function flushWgpuSpriteBatch(state: WgpuRenderState): void;
|
|
13
|
+
export declare function getWgpuQuadBatchPipeline(state: WgpuRenderState, resources: WgpuQuadBatchResources, module: GPUShaderModule, hasMaterialData: boolean, blendMode: BlendMode | null): GPURenderPipeline;
|
|
14
|
+
export declare function getWgpuQuadBatchPreludeWGSL(): string;
|
|
15
|
+
export declare function packWgpuSpriteBatchMaterialInstance(state: WgpuRenderState, materialData: MaterialData | null, instanceIndex: number): void;
|
|
16
|
+
export declare function prepareWgpuSpriteBatchWrite(state: WgpuRenderState, texture: CanvasImageSource, blendMode: BlendMode | null, material: Material | null, materialRenderer: WgpuMaterialRenderer, maxInstances: number): number;
|
|
17
|
+
export declare function resetWgpuSpriteBatchBufferPool(state: WgpuRenderState): void;
|
|
18
|
+
//# sourceMappingURL=wgpuSpriteBatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuSpriteBatch.d.ts","sourceRoot":"","sources":["../src/wgpuSpriteBatch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAkDzC,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,sBAAsB,CAwC3F;AAED,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,kBAAkB,CAAC;IAC5C,uBAAuB,EAAE,kBAAkB,CAAC;IAC5C,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,sBAAsB,EAAE,iBAAiB,CAAC;IAE1C,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACrE;AAcD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAiEjE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,sBAAsB,EACjC,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,OAAO,EACxB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,iBAAiB,CAkDnB;AAKD,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAKD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,MAAM,GACpB,IAAI,CAaN;AAOD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,gBAAgB,EAAE,oBAAoB,EACtC,YAAY,EAAE,MAAM,GACnB,MAAM,CA+BR;AAKD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE3E"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { bindWgpuTexture } from '@flighthq/render-wgpu';
|
|
2
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
3
|
+
import { BlendMode } from '@flighthq/types';
|
|
4
|
+
// Base per-instance layout (13 floats = 52 bytes). This is a fixed contract material shaders read
|
|
5
|
+
// from the instance storage buffer; it carries no material concern (no color transform). A material
|
|
6
|
+
// that needs per-instance data writes it into a parallel material storage buffer instead.
|
|
7
|
+
// [0-3] a, b, c, d — world-space 2D matrix
|
|
8
|
+
// [4-5] tx, ty — world-space translation
|
|
9
|
+
// [6-7] width, height — region size in pixels
|
|
10
|
+
// [8-11] u0,v0,u1,v1 — atlas UV rect
|
|
11
|
+
// [12] alpha — per-instance alpha
|
|
12
|
+
export const SPRITE_INSTANCE_FLOATS = 13;
|
|
13
|
+
const SPRITE_INSTANCE_STRIDE = SPRITE_INSTANCE_FLOATS * 4;
|
|
14
|
+
// Shared WGSL prelude for sprite-batch material shaders: the base Uniforms and InstanceData structs,
|
|
15
|
+
// the standard bind-group bindings (@group(0) uniform, @group(1) texture/sampler, @group(2)
|
|
16
|
+
// instances), and a quadBaseVertex helper that expands one instance corner into clip-space position,
|
|
17
|
+
// UV, and alpha. A material module appends its own @group(3) material buffer (when it uses one), a
|
|
18
|
+
// VertexOut struct, vs_main, and fs_main. The base path knows nothing about what a material does
|
|
19
|
+
// with this — color transform and any other effect live entirely in the material's own module.
|
|
20
|
+
const QUAD_BATCH_PRELUDE_WGSL = /* wgsl */ `
|
|
21
|
+
struct Uniforms {
|
|
22
|
+
matrix : mat3x3f,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
struct InstanceData {
|
|
26
|
+
a : f32, b : f32, c : f32, d : f32,
|
|
27
|
+
tx : f32, ty : f32,
|
|
28
|
+
width : f32, height : f32,
|
|
29
|
+
u0 : f32, v0 : f32, u1 : f32, v1 : f32,
|
|
30
|
+
alpha : f32,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@group(0) @binding(0) var<uniform> uni : Uniforms;
|
|
34
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
35
|
+
@group(1) @binding(1) var smp : sampler;
|
|
36
|
+
@group(2) @binding(0) var<storage, read> instances : array<InstanceData>;
|
|
37
|
+
|
|
38
|
+
struct BaseVertex {
|
|
39
|
+
position : vec4f,
|
|
40
|
+
uv : vec2f,
|
|
41
|
+
alpha : f32,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fn quadBaseVertex(vi : u32, ii : u32) -> BaseVertex {
|
|
45
|
+
let inst = instances[ii];
|
|
46
|
+
let xi = (vi == 1u || vi == 2u || vi == 4u);
|
|
47
|
+
let yi = (vi == 2u || vi == 4u || vi == 5u);
|
|
48
|
+
let lx = select(0.0, inst.width, xi);
|
|
49
|
+
let ly = select(0.0, inst.height, yi);
|
|
50
|
+
let wx = inst.a * lx + inst.c * ly + inst.tx;
|
|
51
|
+
let wy = inst.b * lx + inst.d * ly + inst.ty;
|
|
52
|
+
let p = uni.matrix * vec3f(wx, wy, 1.0);
|
|
53
|
+
var bv : BaseVertex;
|
|
54
|
+
bv.position = vec4f(p.x, p.y, 0.0, 1.0);
|
|
55
|
+
bv.uv = vec2f(select(inst.u0, inst.u1, xi), select(inst.v0, inst.v1, yi));
|
|
56
|
+
bv.alpha = inst.alpha;
|
|
57
|
+
return bv;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
export function ensureWgpuQuadBatchResources(state) {
|
|
61
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
62
|
+
const existing = _quadBatchResources.get(state.device);
|
|
63
|
+
if (existing !== undefined)
|
|
64
|
+
return existing;
|
|
65
|
+
const { device } = state;
|
|
66
|
+
const { uniformBindGroupLayout, textureBindGroupLayout } = runtime;
|
|
67
|
+
const instanceBindGroupLayout = device.createBindGroupLayout({
|
|
68
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'read-only-storage' } }],
|
|
69
|
+
});
|
|
70
|
+
// Generic per-instance material buffer (array<f32>); the same layout serves every material that
|
|
71
|
+
// appends per-instance data, so the batch — not the material — owns it.
|
|
72
|
+
const materialBindGroupLayout = device.createBindGroupLayout({
|
|
73
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'read-only-storage' } }],
|
|
74
|
+
});
|
|
75
|
+
const basePipelineLayout = device.createPipelineLayout({
|
|
76
|
+
bindGroupLayouts: [uniformBindGroupLayout, textureBindGroupLayout, instanceBindGroupLayout],
|
|
77
|
+
});
|
|
78
|
+
const materialPipelineLayout = device.createPipelineLayout({
|
|
79
|
+
bindGroupLayouts: [
|
|
80
|
+
uniformBindGroupLayout,
|
|
81
|
+
textureBindGroupLayout,
|
|
82
|
+
instanceBindGroupLayout,
|
|
83
|
+
materialBindGroupLayout,
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
const resources = {
|
|
87
|
+
instanceBindGroupLayout,
|
|
88
|
+
materialBindGroupLayout,
|
|
89
|
+
basePipelineLayout,
|
|
90
|
+
materialPipelineLayout,
|
|
91
|
+
pipelines: new WeakMap(),
|
|
92
|
+
};
|
|
93
|
+
_quadBatchResources.set(device, resources);
|
|
94
|
+
return resources;
|
|
95
|
+
}
|
|
96
|
+
const _quadBatchResources = new WeakMap();
|
|
97
|
+
const NORMAL_BLEND = {
|
|
98
|
+
color: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
99
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
100
|
+
};
|
|
101
|
+
const ADD_BLEND = {
|
|
102
|
+
color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' },
|
|
103
|
+
alpha: { srcFactor: 'one', dstFactor: 'one', operation: 'add' },
|
|
104
|
+
};
|
|
105
|
+
export function flushWgpuSpriteBatch(state) {
|
|
106
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
107
|
+
const count = runtime.spriteBatchCount;
|
|
108
|
+
if (count === 0 || runtime.renderPass === null) {
|
|
109
|
+
resetWgpuSpriteBatch(state);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const texture = runtime.spriteBatchTexture;
|
|
113
|
+
const blendMode = runtime.spriteBatchBlendMode;
|
|
114
|
+
const renderer = runtime.spriteBatchMaterialRenderer;
|
|
115
|
+
const floats = runtime.spriteBatchMaterialFloats;
|
|
116
|
+
resetWgpuSpriteBatch(state);
|
|
117
|
+
const resources = ensureWgpuQuadBatchResources(state);
|
|
118
|
+
// Claim a distinct pool slot for this flush. The canvas pass is submitted once at end of frame, so
|
|
119
|
+
// a buffer shared across flushes would be rewritten before any draw reads it, leaving every draw
|
|
120
|
+
// reading the last flush's data. A per-flush slot keeps each draw's instances intact until submit.
|
|
121
|
+
const slot = acquireWgpuSpriteBatchBufferSlot(state);
|
|
122
|
+
const instanceBytes = count * SPRITE_INSTANCE_STRIDE;
|
|
123
|
+
if (slot.instanceBuffer === null || slot.instanceCapacity < instanceBytes) {
|
|
124
|
+
const capacity = Math.max(instanceBytes, slot.instanceCapacity * 2, SPRITE_INSTANCE_STRIDE * 256);
|
|
125
|
+
slot.instanceBuffer = createWgpuSpriteBatchBuffer(state, capacity);
|
|
126
|
+
slot.instanceCapacity = capacity;
|
|
127
|
+
}
|
|
128
|
+
state.device.queue.writeBuffer(slot.instanceBuffer, 0, runtime.spriteBatchInstanceData.buffer, 0, instanceBytes);
|
|
129
|
+
if (floats > 0) {
|
|
130
|
+
const materialBytes = count * floats * 4;
|
|
131
|
+
if (slot.materialBuffer === null || slot.materialCapacity < materialBytes) {
|
|
132
|
+
const capacity = Math.max(materialBytes, slot.materialCapacity * 2, floats * 4 * 256);
|
|
133
|
+
slot.materialBuffer = createWgpuSpriteBatchBuffer(state, capacity);
|
|
134
|
+
slot.materialCapacity = capacity;
|
|
135
|
+
}
|
|
136
|
+
state.device.queue.writeBuffer(slot.materialBuffer, 0, runtime.spriteBatchMaterialData.buffer, 0, materialBytes);
|
|
137
|
+
}
|
|
138
|
+
state.applyBlendMode?.(state, blendMode);
|
|
139
|
+
const textureEntry = bindWgpuTexture(state, texture);
|
|
140
|
+
const uniformOffset = writeWgpuSpriteBatchUniforms(state);
|
|
141
|
+
const instanceBindGroup = state.device.createBindGroup({
|
|
142
|
+
layout: resources.instanceBindGroupLayout,
|
|
143
|
+
entries: [{ binding: 0, resource: { buffer: slot.instanceBuffer } }],
|
|
144
|
+
});
|
|
145
|
+
const module = renderer.getShaderModule(state);
|
|
146
|
+
const pipeline = getWgpuQuadBatchPipeline(state, resources, module, floats > 0, blendMode);
|
|
147
|
+
const pass = runtime.renderPass;
|
|
148
|
+
pass.setPipeline(pipeline);
|
|
149
|
+
pass.setBindGroup(0, runtime.uniformBindGroup, [uniformOffset]);
|
|
150
|
+
pass.setBindGroup(1, textureEntry.bindGroup);
|
|
151
|
+
pass.setBindGroup(2, instanceBindGroup);
|
|
152
|
+
if (floats > 0) {
|
|
153
|
+
const materialBindGroup = state.device.createBindGroup({
|
|
154
|
+
layout: resources.materialBindGroupLayout,
|
|
155
|
+
entries: [{ binding: 0, resource: { buffer: slot.materialBuffer } }],
|
|
156
|
+
});
|
|
157
|
+
pass.setBindGroup(3, materialBindGroup);
|
|
158
|
+
}
|
|
159
|
+
if (runtime.currentMaskDepth > 0)
|
|
160
|
+
pass.setStencilReference(runtime.currentMaskDepth);
|
|
161
|
+
pass.draw(6, count, 0, 0);
|
|
162
|
+
}
|
|
163
|
+
export function getWgpuQuadBatchPipeline(state, resources, module, hasMaterialData, blendMode) {
|
|
164
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
165
|
+
let perModule = resources.pipelines.get(module);
|
|
166
|
+
if (perModule === undefined) {
|
|
167
|
+
perModule = new Map();
|
|
168
|
+
resources.pipelines.set(module, perModule);
|
|
169
|
+
}
|
|
170
|
+
const stencilMode = runtime.maskWriteMode ? 'maskwrite' : runtime.currentMaskDepth > 0 ? 'masked' : 'normal';
|
|
171
|
+
// The pipeline bakes its color-attachment format, so key on the current target format too (rgba16float
|
|
172
|
+
// inside an HDR effect target vs the canvas format).
|
|
173
|
+
const format = runtime.currentColorFormat ?? state.format;
|
|
174
|
+
const key = `${blendMode ?? 'null'}-${stencilMode}-${format}`;
|
|
175
|
+
const cached = perModule.get(key);
|
|
176
|
+
if (cached !== undefined)
|
|
177
|
+
return cached;
|
|
178
|
+
const { device } = state;
|
|
179
|
+
const blend = blendMode === BlendMode.Add ? ADD_BLEND : NORMAL_BLEND;
|
|
180
|
+
const isMaskWrite = stencilMode === 'maskwrite';
|
|
181
|
+
let stencilFace;
|
|
182
|
+
if (isMaskWrite) {
|
|
183
|
+
stencilFace = { compare: 'always', passOp: 'replace', failOp: 'keep', depthFailOp: 'keep' };
|
|
184
|
+
}
|
|
185
|
+
else if (stencilMode === 'masked') {
|
|
186
|
+
stencilFace = { compare: 'equal', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' };
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
stencilFace = { compare: 'always', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' };
|
|
190
|
+
}
|
|
191
|
+
const pipeline = device.createRenderPipeline({
|
|
192
|
+
layout: hasMaterialData ? resources.materialPipelineLayout : resources.basePipelineLayout,
|
|
193
|
+
vertex: { module, entryPoint: 'vs_main' },
|
|
194
|
+
fragment: {
|
|
195
|
+
module,
|
|
196
|
+
entryPoint: 'fs_main',
|
|
197
|
+
targets: [{ format, blend: isMaskWrite ? undefined : blend, writeMask: isMaskWrite ? 0 : GPUColorWrite.ALL }],
|
|
198
|
+
},
|
|
199
|
+
depthStencil: {
|
|
200
|
+
format: 'depth24plus-stencil8',
|
|
201
|
+
depthWriteEnabled: false,
|
|
202
|
+
depthCompare: 'always',
|
|
203
|
+
stencilFront: stencilFace,
|
|
204
|
+
stencilBack: stencilFace,
|
|
205
|
+
stencilReadMask: 0xff,
|
|
206
|
+
stencilWriteMask: isMaskWrite ? 0xff : 0x00,
|
|
207
|
+
},
|
|
208
|
+
primitive: { topology: 'triangle-list' },
|
|
209
|
+
});
|
|
210
|
+
perModule.set(key, pipeline);
|
|
211
|
+
return pipeline;
|
|
212
|
+
}
|
|
213
|
+
// Returns the shared WGSL prelude a material shader prepends before its own VertexOut/vs_main/fs_main
|
|
214
|
+
// (and optional @group(3) material buffer). Exposed so a user-authored material can build on the same
|
|
215
|
+
// base instance contract the bundled materials use.
|
|
216
|
+
export function getWgpuQuadBatchPreludeWGSL() {
|
|
217
|
+
return QUAD_BATCH_PRELUDE_WGSL;
|
|
218
|
+
}
|
|
219
|
+
// Writes one instance's per-instance material floats into the parallel material buffer at the
|
|
220
|
+
// instance's slot. No-op for materials with no per-instance data (floats === 0 / no packInstance),
|
|
221
|
+
// so the base path never assumes any particular material contributes here.
|
|
222
|
+
export function packWgpuSpriteBatchMaterialInstance(state, materialData, instanceIndex) {
|
|
223
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
224
|
+
const floats = runtime.spriteBatchMaterialFloats;
|
|
225
|
+
if (floats === 0)
|
|
226
|
+
return;
|
|
227
|
+
const renderer = runtime.spriteBatchMaterialRenderer;
|
|
228
|
+
if (renderer === null || renderer.packInstance === undefined)
|
|
229
|
+
return;
|
|
230
|
+
renderer.packInstance(state, runtime.spriteBatchMaterial, materialData, runtime.spriteBatchMaterialData, instanceIndex * floats);
|
|
231
|
+
}
|
|
232
|
+
// Ensures the sprite batch can accept up to `maxInstances` more instances for the given texture,
|
|
233
|
+
// blend mode, and material. Flushes when any of the three changes (material by reference) or
|
|
234
|
+
// capacity is exceeded. Returns the float index in spriteBatchInstanceData where the caller writes
|
|
235
|
+
// base instance data; the caller increments the runtime's spriteBatchCount and calls
|
|
236
|
+
// packWgpuSpriteBatchMaterialInstance per instance.
|
|
237
|
+
export function prepareWgpuSpriteBatchWrite(state, texture, blendMode, material, materialRenderer, maxInstances) {
|
|
238
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
239
|
+
if (texture !== runtime.spriteBatchTexture ||
|
|
240
|
+
blendMode !== runtime.spriteBatchBlendMode ||
|
|
241
|
+
material !== runtime.spriteBatchMaterial) {
|
|
242
|
+
flushWgpuSpriteBatch(state);
|
|
243
|
+
}
|
|
244
|
+
runtime.spriteBatchTexture = texture;
|
|
245
|
+
runtime.spriteBatchBlendMode = blendMode;
|
|
246
|
+
runtime.spriteBatchMaterial = material;
|
|
247
|
+
runtime.spriteBatchMaterialRenderer = materialRenderer;
|
|
248
|
+
const floats = materialRenderer.instanceFloatCount;
|
|
249
|
+
runtime.spriteBatchMaterialFloats = floats;
|
|
250
|
+
const needed = (runtime.spriteBatchCount + maxInstances) * SPRITE_INSTANCE_FLOATS;
|
|
251
|
+
if (needed > runtime.spriteBatchInstanceData.length) {
|
|
252
|
+
const newSize = Math.max(needed, runtime.spriteBatchInstanceData.length * 2, SPRITE_INSTANCE_FLOATS * 256);
|
|
253
|
+
runtime.spriteBatchInstanceData = new Float32Array(newSize);
|
|
254
|
+
}
|
|
255
|
+
if (floats > 0) {
|
|
256
|
+
const materialNeeded = (runtime.spriteBatchCount + maxInstances) * floats;
|
|
257
|
+
if (materialNeeded > runtime.spriteBatchMaterialData.length) {
|
|
258
|
+
const newSize = Math.max(materialNeeded, runtime.spriteBatchMaterialData.length * 2, floats * 256);
|
|
259
|
+
runtime.spriteBatchMaterialData = new Float32Array(newSize);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return runtime.spriteBatchCount * SPRITE_INSTANCE_FLOATS;
|
|
263
|
+
}
|
|
264
|
+
// Resets the per-frame buffer-pool cursor so the next frame reclaims slots from the start. Must be
|
|
265
|
+
// called once at the start of each frame's batch work — the screen frame via renderWgpuBackground,
|
|
266
|
+
// and the offscreen cache bake via refreshWgpuRenderCache (the bake flushes on its own state).
|
|
267
|
+
export function resetWgpuSpriteBatchBufferPool(state) {
|
|
268
|
+
getWgpuRenderStateRuntime(state).spriteBatchBufferCursor = 0;
|
|
269
|
+
}
|
|
270
|
+
// Claims the next per-frame pool slot, allocating one if the frame has more flushes than any prior
|
|
271
|
+
// frame. The cursor is reset to 0 each frame by resetWgpuSpriteBatchBufferPool.
|
|
272
|
+
function acquireWgpuSpriteBatchBufferSlot(state) {
|
|
273
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
274
|
+
const pool = runtime.spriteBatchBufferPool;
|
|
275
|
+
let slot = pool[runtime.spriteBatchBufferCursor];
|
|
276
|
+
if (slot === undefined) {
|
|
277
|
+
slot = { instanceBuffer: null, instanceCapacity: 0, materialBuffer: null, materialCapacity: 0 };
|
|
278
|
+
pool[runtime.spriteBatchBufferCursor] = slot;
|
|
279
|
+
}
|
|
280
|
+
runtime.spriteBatchBufferCursor++;
|
|
281
|
+
return slot;
|
|
282
|
+
}
|
|
283
|
+
function createWgpuSpriteBatchBuffer(state, size) {
|
|
284
|
+
return state.device.createBuffer({ size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });
|
|
285
|
+
}
|
|
286
|
+
function resetWgpuSpriteBatch(state) {
|
|
287
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
288
|
+
runtime.spriteBatchCount = 0;
|
|
289
|
+
runtime.spriteBatchTexture = null;
|
|
290
|
+
runtime.spriteBatchBlendMode = null;
|
|
291
|
+
runtime.spriteBatchMaterial = null;
|
|
292
|
+
runtime.spriteBatchMaterialRenderer = null;
|
|
293
|
+
runtime.spriteBatchMaterialFloats = 0;
|
|
294
|
+
}
|
|
295
|
+
// Writes the NDC viewport matrix into the uniform ring (the only uniform the batch shader reads) and
|
|
296
|
+
// advances the ring offset. Returns the byte offset for the dynamic bind-group binding.
|
|
297
|
+
function writeWgpuSpriteBatchUniforms(state) {
|
|
298
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
299
|
+
const uniformOffset = runtime.uniformOffset;
|
|
300
|
+
const floatBase = uniformOffset >> 2;
|
|
301
|
+
const { uniformData } = runtime;
|
|
302
|
+
const viewport = runtime.renderTargetViewport ?? state.canvas;
|
|
303
|
+
const iw = 2 / viewport.width;
|
|
304
|
+
const ih = 2 / viewport.height;
|
|
305
|
+
uniformData[floatBase + 0] = iw;
|
|
306
|
+
uniformData[floatBase + 1] = 0;
|
|
307
|
+
uniformData[floatBase + 2] = 0;
|
|
308
|
+
uniformData[floatBase + 3] = 0;
|
|
309
|
+
uniformData[floatBase + 4] = 0;
|
|
310
|
+
uniformData[floatBase + 5] = -ih;
|
|
311
|
+
uniformData[floatBase + 6] = 0;
|
|
312
|
+
uniformData[floatBase + 7] = 0;
|
|
313
|
+
uniformData[floatBase + 8] = -1;
|
|
314
|
+
uniformData[floatBase + 9] = 1;
|
|
315
|
+
uniformData[floatBase + 10] = 1;
|
|
316
|
+
uniformData[floatBase + 11] = 0;
|
|
317
|
+
runtime.uniformOffset += runtime.uniformStride;
|
|
318
|
+
return uniformOffset;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=wgpuSpriteBatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuSpriteBatch.js","sourceRoot":"","sources":["../src/wgpuSpriteBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuSpriteRenderer.d.ts","sourceRoot":"","sources":["../src/wgpuSpriteRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,cAAc,EAAmB,MAAM,iBAAiB,CAAC;AAqD9F,eAAO,MAAM,yBAAyB,EAAE,cAIvC,CAAC"}
|