@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.
Files changed (144) hide show
  1. package/dist/index.d.ts +29 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +29 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/moduleMockTestHelper.d.ts +15 -0
  6. package/dist/moduleMockTestHelper.d.ts.map +1 -0
  7. package/dist/moduleMockTestHelper.js +25 -0
  8. package/dist/moduleMockTestHelper.js.map +1 -0
  9. package/dist/wgpuBitmap.d.ts +4 -0
  10. package/dist/wgpuBitmap.d.ts.map +1 -0
  11. package/dist/wgpuBitmap.js +80 -0
  12. package/dist/wgpuBitmap.js.map +1 -0
  13. package/dist/wgpuCache.d.ts +31 -0
  14. package/dist/wgpuCache.d.ts.map +1 -0
  15. package/dist/wgpuCache.js +232 -0
  16. package/dist/wgpuCache.js.map +1 -0
  17. package/dist/wgpuClip.d.ts +3 -0
  18. package/dist/wgpuClip.d.ts.map +1 -0
  19. package/dist/wgpuClip.js +44 -0
  20. package/dist/wgpuClip.js.map +1 -0
  21. package/dist/wgpuClipContours.d.ts +4 -0
  22. package/dist/wgpuClipContours.d.ts.map +1 -0
  23. package/dist/wgpuClipContours.js +174 -0
  24. package/dist/wgpuClipContours.js.map +1 -0
  25. package/dist/wgpuClipRectangle.d.ts +4 -0
  26. package/dist/wgpuClipRectangle.d.ts.map +1 -0
  27. package/dist/wgpuClipRectangle.js +80 -0
  28. package/dist/wgpuClipRectangle.js.map +1 -0
  29. package/dist/wgpuColorTransformMaterial.d.ts +5 -0
  30. package/dist/wgpuColorTransformMaterial.d.ts.map +1 -0
  31. package/dist/wgpuColorTransformMaterial.js +97 -0
  32. package/dist/wgpuColorTransformMaterial.js.map +1 -0
  33. package/dist/wgpuDefaultMaterial.d.ts +4 -0
  34. package/dist/wgpuDefaultMaterial.d.ts.map +1 -0
  35. package/dist/wgpuDefaultMaterial.js +46 -0
  36. package/dist/wgpuDefaultMaterial.js.map +1 -0
  37. package/dist/wgpuDisplayObject.d.ts +5 -0
  38. package/dist/wgpuDisplayObject.d.ts.map +1 -0
  39. package/dist/wgpuDisplayObject.js +41 -0
  40. package/dist/wgpuDisplayObject.js.map +1 -0
  41. package/dist/wgpuMaterials.d.ts +15 -0
  42. package/dist/wgpuMaterials.d.ts.map +1 -0
  43. package/dist/wgpuMaterials.js +34 -0
  44. package/dist/wgpuMaterials.js.map +1 -0
  45. package/dist/wgpuParticleEmitter.d.ts +4 -0
  46. package/dist/wgpuParticleEmitter.d.ts.map +1 -0
  47. package/dist/wgpuParticleEmitter.js +288 -0
  48. package/dist/wgpuParticleEmitter.js.map +1 -0
  49. package/dist/wgpuQuadBatch.d.ts +7 -0
  50. package/dist/wgpuQuadBatch.d.ts.map +1 -0
  51. package/dist/wgpuQuadBatch.js +85 -0
  52. package/dist/wgpuQuadBatch.js.map +1 -0
  53. package/dist/wgpuRegistration.d.ts +19 -0
  54. package/dist/wgpuRegistration.d.ts.map +1 -0
  55. package/dist/wgpuRegistration.js +53 -0
  56. package/dist/wgpuRegistration.js.map +1 -0
  57. package/dist/wgpuRenderStats.d.ts +20 -0
  58. package/dist/wgpuRenderStats.d.ts.map +1 -0
  59. package/dist/wgpuRenderStats.js +50 -0
  60. package/dist/wgpuRenderStats.js.map +1 -0
  61. package/dist/wgpuRendererData.d.ts +26 -0
  62. package/dist/wgpuRendererData.d.ts.map +1 -0
  63. package/dist/wgpuRendererData.js +29 -0
  64. package/dist/wgpuRendererData.js.map +1 -0
  65. package/dist/wgpuRichText.d.ts +9 -0
  66. package/dist/wgpuRichText.d.ts.map +1 -0
  67. package/dist/wgpuRichText.js +163 -0
  68. package/dist/wgpuRichText.js.map +1 -0
  69. package/dist/wgpuScale9Mapper.d.ts +3 -0
  70. package/dist/wgpuScale9Mapper.d.ts.map +1 -0
  71. package/dist/wgpuScale9Mapper.js +42 -0
  72. package/dist/wgpuScale9Mapper.js.map +1 -0
  73. package/dist/wgpuScale9Shape.d.ts +9 -0
  74. package/dist/wgpuScale9Shape.d.ts.map +1 -0
  75. package/dist/wgpuScale9Shape.js +123 -0
  76. package/dist/wgpuScale9Shape.js.map +1 -0
  77. package/dist/wgpuShape.d.ts +4 -0
  78. package/dist/wgpuShape.d.ts.map +1 -0
  79. package/dist/wgpuShape.js +157 -0
  80. package/dist/wgpuShape.js.map +1 -0
  81. package/dist/wgpuShapeMesh.d.ts +9 -0
  82. package/dist/wgpuShapeMesh.d.ts.map +1 -0
  83. package/dist/wgpuShapeMesh.js +204 -0
  84. package/dist/wgpuShapeMesh.js.map +1 -0
  85. package/dist/wgpuSprite.d.ts +3 -0
  86. package/dist/wgpuSprite.d.ts.map +1 -0
  87. package/dist/wgpuSprite.js +28 -0
  88. package/dist/wgpuSprite.js.map +1 -0
  89. package/dist/wgpuSpriteBatch.d.ts +18 -0
  90. package/dist/wgpuSpriteBatch.d.ts.map +1 -0
  91. package/dist/wgpuSpriteBatch.js +320 -0
  92. package/dist/wgpuSpriteBatch.js.map +1 -0
  93. package/dist/wgpuSpriteRenderer.d.ts +3 -0
  94. package/dist/wgpuSpriteRenderer.d.ts.map +1 -0
  95. package/dist/wgpuSpriteRenderer.js +51 -0
  96. package/dist/wgpuSpriteRenderer.js.map +1 -0
  97. package/dist/wgpuTextInput.d.ts +4 -0
  98. package/dist/wgpuTextInput.d.ts.map +1 -0
  99. package/dist/wgpuTextInput.js +44 -0
  100. package/dist/wgpuTextInput.js.map +1 -0
  101. package/dist/wgpuTextLabel.d.ts +4 -0
  102. package/dist/wgpuTextLabel.d.ts.map +1 -0
  103. package/dist/wgpuTextLabel.js +157 -0
  104. package/dist/wgpuTextLabel.js.map +1 -0
  105. package/dist/wgpuTilemap.d.ts +3 -0
  106. package/dist/wgpuTilemap.d.ts.map +1 -0
  107. package/dist/wgpuTilemap.js +76 -0
  108. package/dist/wgpuTilemap.js.map +1 -0
  109. package/dist/wgpuVelocity.d.ts +23 -0
  110. package/dist/wgpuVelocity.d.ts.map +1 -0
  111. package/dist/wgpuVelocity.js +365 -0
  112. package/dist/wgpuVelocity.js.map +1 -0
  113. package/dist/wgpuVideo.d.ts +6 -0
  114. package/dist/wgpuVideo.d.ts.map +1 -0
  115. package/dist/wgpuVideo.js +63 -0
  116. package/dist/wgpuVideo.js.map +1 -0
  117. package/package.json +52 -0
  118. package/src/wgpuBitmap.test.ts +40 -0
  119. package/src/wgpuCache.test.ts +230 -0
  120. package/src/wgpuClip.test.ts +15 -0
  121. package/src/wgpuClipContours.test.ts +101 -0
  122. package/src/wgpuClipRectangle.test.ts +45 -0
  123. package/src/wgpuColorTransformMaterial.test.ts +62 -0
  124. package/src/wgpuDefaultMaterial.test.ts +21 -0
  125. package/src/wgpuDisplayObject.test.ts +36 -0
  126. package/src/wgpuMaterials.test.ts +44 -0
  127. package/src/wgpuParticleEmitter.test.ts +34 -0
  128. package/src/wgpuQuadBatch.test.ts +69 -0
  129. package/src/wgpuRegistration.test.ts +115 -0
  130. package/src/wgpuRenderStats.test.ts +89 -0
  131. package/src/wgpuRendererData.test.ts +29 -0
  132. package/src/wgpuRichText.test.ts +100 -0
  133. package/src/wgpuScale9Mapper.test.ts +20 -0
  134. package/src/wgpuScale9Shape.test.ts +97 -0
  135. package/src/wgpuShape.test.ts +95 -0
  136. package/src/wgpuShapeMesh.test.ts +124 -0
  137. package/src/wgpuSprite.test.ts +19 -0
  138. package/src/wgpuSpriteBatch.test.ts +180 -0
  139. package/src/wgpuSpriteRenderer.test.ts +38 -0
  140. package/src/wgpuTextInput.test.ts +37 -0
  141. package/src/wgpuTextLabel.test.ts +113 -0
  142. package/src/wgpuTilemap.test.ts +47 -0
  143. package/src/wgpuVelocity.test.ts +147 -0
  144. package/src/wgpuVideo.test.ts +59 -0
@@ -0,0 +1,288 @@
1
+ import { noopRendererData } from '@flighthq/render';
2
+ import { bindWgpuTexture } from '@flighthq/render-wgpu';
3
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
4
+ import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
5
+ // Per-instance layout in the instance buffer (14 floats = 56 bytes):
6
+ // 0: px, 1: py, 2: cosScale, 3: sinScale
7
+ // 4: r, 5: g, 6: b, 7: alpha
8
+ // 8: u0, 9: v0, 10: u1, 11: v1
9
+ // 12: width, 13: height
10
+ const INSTANCE_FLOATS = 14;
11
+ const INSTANCE_STRIDE = INSTANCE_FLOATS * 4;
12
+ // WGSL for the particle instanced shader
13
+ const PARTICLE_SHADER_SRC = /* wgsl */ `
14
+ struct Uniforms {
15
+ matrix : mat3x3f,
16
+ alpha : f32,
17
+ hasColorTransform : u32,
18
+ _pad0 : f32,
19
+ _pad1 : f32,
20
+ colorMultiplier : vec4f,
21
+ colorOffset : vec4f,
22
+ x0 : f32, y0 : f32, x1 : f32, y1 : f32,
23
+ u0 : f32, v0 : f32, u1 : f32, v1 : f32,
24
+ }
25
+
26
+ struct InstanceData {
27
+ px : f32, py : f32,
28
+ cosScale : f32, sinScale : f32,
29
+ r : f32, g : f32, b : f32, alpha : f32,
30
+ u0 : f32, v0 : f32, u1 : f32, v1 : f32,
31
+ width : f32, height : f32,
32
+ }
33
+
34
+ @group(0) @binding(0) var<uniform> uni : Uniforms;
35
+ @group(1) @binding(0) var tex : texture_2d<f32>;
36
+ @group(1) @binding(1) var smp : sampler;
37
+ @group(2) @binding(0) var<storage, read> instances : array<InstanceData>;
38
+
39
+ struct VertexOut {
40
+ @builtin(position) position : vec4f,
41
+ @location(0) uv : vec2f,
42
+ @location(1) color : vec4f,
43
+ }
44
+
45
+ @vertex
46
+ fn vs_main(
47
+ @builtin(vertex_index) vi : u32,
48
+ @builtin(instance_index) ii : u32,
49
+ ) -> VertexOut {
50
+ let inst = instances[ii];
51
+ let xi = (vi == 1u || vi == 2u || vi == 4u);
52
+ let yi = (vi == 2u || vi == 4u || vi == 5u);
53
+ let lx = select(0.0, inst.width, xi);
54
+ let ly = select(0.0, inst.height, yi);
55
+ // Rotate and translate in world space
56
+ let rx = inst.cosScale * lx - inst.sinScale * ly + inst.px;
57
+ let ry = inst.sinScale * lx + inst.cosScale * ly + inst.py;
58
+ let p = uni.matrix * vec3f(rx, ry, 1.0);
59
+ let u = select(inst.u0, inst.u1, xi);
60
+ let v = select(inst.v0, inst.v1, yi);
61
+ var out : VertexOut;
62
+ out.position = vec4f(p.x, p.y, 0.0, 1.0);
63
+ out.uv = vec2f(u, v);
64
+ out.color = vec4f(inst.r, inst.g, inst.b, inst.alpha);
65
+ return out;
66
+ }
67
+
68
+ @fragment
69
+ fn fs_main(in : VertexOut) -> @location(0) vec4f {
70
+ let tex_color = textureSample(tex, smp, in.uv);
71
+ let out_color = vec4f(tex_color.rgb * in.color.rgb, tex_color.a) * in.color.a;
72
+ if (out_color.a <= 0.0) { discard; }
73
+ return out_color;
74
+ }
75
+ `;
76
+ const _particleResources = new WeakMap();
77
+ function ensureParticleResources(state) {
78
+ const existing = _particleResources.get(state.device);
79
+ if (existing !== undefined)
80
+ return existing;
81
+ const runtime = getWgpuRenderStateRuntime(state);
82
+ const { device } = state;
83
+ const { uniformBindGroupLayout, textureBindGroupLayout } = runtime;
84
+ const instanceBindGroupLayout = device.createBindGroupLayout({
85
+ entries: [
86
+ {
87
+ binding: 0,
88
+ visibility: GPUShaderStage.VERTEX,
89
+ buffer: { type: 'read-only-storage' },
90
+ },
91
+ ],
92
+ });
93
+ const pipelineLayout = device.createPipelineLayout({
94
+ bindGroupLayouts: [uniformBindGroupLayout, textureBindGroupLayout, instanceBindGroupLayout],
95
+ });
96
+ const module = device.createShaderModule({ code: PARTICLE_SHADER_SRC });
97
+ const resources = {
98
+ pipelines: new Map(),
99
+ pipelineLayout,
100
+ module,
101
+ instanceBindGroupLayout,
102
+ };
103
+ _particleResources.set(device, resources);
104
+ return resources;
105
+ }
106
+ // Returns the particle pipeline for the current target's color format, building and caching it on demand.
107
+ function getParticlePipeline(state, resources) {
108
+ const format = getWgpuRenderStateRuntime(state).currentColorFormat ?? state.format;
109
+ const existing = resources.pipelines.get(format);
110
+ if (existing !== undefined)
111
+ return existing;
112
+ const pipeline = state.device.createRenderPipeline({
113
+ layout: resources.pipelineLayout,
114
+ vertex: { module: resources.module, entryPoint: 'vs_main' },
115
+ fragment: {
116
+ module: resources.module,
117
+ entryPoint: 'fs_main',
118
+ targets: [
119
+ {
120
+ format,
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
+ depthStencil: {
129
+ format: 'depth24plus-stencil8',
130
+ depthWriteEnabled: false,
131
+ depthCompare: 'always',
132
+ stencilFront: { compare: 'always', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' },
133
+ stencilBack: { compare: 'always', passOp: 'keep', failOp: 'keep', depthFailOp: 'keep' },
134
+ stencilReadMask: 0xff,
135
+ stencilWriteMask: 0x00,
136
+ },
137
+ primitive: { topology: 'triangle-list' },
138
+ });
139
+ resources.pipelines.set(format, pipeline);
140
+ return pipeline;
141
+ }
142
+ function ensureParticleInstanceBuffer(state, count) {
143
+ const runtime = getWgpuRenderStateRuntime(state);
144
+ const needed = count * INSTANCE_STRIDE;
145
+ if (runtime.particleInstanceCapacity >= needed && runtime.particleInstanceBuffer !== null)
146
+ return;
147
+ // Defer the old buffer's destruction: another emitter earlier this frame may have recorded a draw
148
+ // referencing it, and the frame's submit is deferred to submitWgpuRenderPass.
149
+ if (runtime.particleInstanceBuffer !== null) {
150
+ (runtime.retiredBuffers ?? (runtime.retiredBuffers = [])).push(runtime.particleInstanceBuffer);
151
+ }
152
+ const newCapacity = Math.max(needed, (runtime.particleInstanceCapacity || 0) * 2);
153
+ runtime.particleInstanceBuffer = state.device.createBuffer({
154
+ size: Math.max(newCapacity, INSTANCE_STRIDE),
155
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
156
+ });
157
+ runtime.particleInstanceCapacity = newCapacity;
158
+ runtime.particleInstanceData = new Float32Array(newCapacity / 4);
159
+ }
160
+ export function drawWgpuParticleEmitter(state, renderProxy) {
161
+ const runtime = getWgpuRenderStateRuntime(state);
162
+ if (runtime.renderPass === null)
163
+ return;
164
+ const source = renderProxy.source;
165
+ const { atlas, alphas, colors, ids, particleCount, transforms } = source.data;
166
+ if (atlas === null || atlas.image === null || atlas.image.source === null || particleCount === 0)
167
+ return;
168
+ const resources = ensureParticleResources(state);
169
+ ensureParticleInstanceBuffer(state, particleCount);
170
+ state.applyBlendMode?.(state, renderProxy.blendMode);
171
+ const textureEntry = bindWgpuTexture(state, atlas.image.source);
172
+ const regions = atlas.regions;
173
+ const numRegions = regions.length;
174
+ const nodeAlpha = renderProxy.alpha;
175
+ const iw = 1 / (atlas.image.width || 1);
176
+ const ih = 1 / (atlas.image.height || 1);
177
+ const instanceData = runtime.particleInstanceData;
178
+ let drawCount = 0;
179
+ let base = 0;
180
+ for (let i = 0; i < particleCount; i++) {
181
+ const id = ids[i];
182
+ if (id < 0 || id >= numRegions)
183
+ continue;
184
+ const region = regions[id];
185
+ if (region.width <= 0 || region.height <= 0)
186
+ continue;
187
+ const tt = i * 4;
188
+ const px = transforms[tt];
189
+ const py = transforms[tt + 1];
190
+ const rotation = transforms[tt + 2];
191
+ const scale = transforms[tt + 3];
192
+ const cosR = Math.cos(rotation) * scale;
193
+ const sinR = Math.sin(rotation) * scale;
194
+ const ct = i * 3;
195
+ const hasColors = colors != null && colors.length > ct + 2;
196
+ instanceData[base + 0] = px;
197
+ instanceData[base + 1] = py;
198
+ instanceData[base + 2] = cosR;
199
+ instanceData[base + 3] = sinR;
200
+ instanceData[base + 4] = hasColors ? colors[ct] : 1;
201
+ instanceData[base + 5] = hasColors ? colors[ct + 1] : 1;
202
+ instanceData[base + 6] = hasColors ? colors[ct + 2] : 1;
203
+ instanceData[base + 7] = nodeAlpha * alphas[i];
204
+ instanceData[base + 8] = region.x * iw;
205
+ instanceData[base + 9] = region.y * ih;
206
+ instanceData[base + 10] = (region.x + region.width) * iw;
207
+ instanceData[base + 11] = (region.y + region.height) * ih;
208
+ instanceData[base + 12] = region.width;
209
+ instanceData[base + 13] = region.height;
210
+ base += INSTANCE_FLOATS;
211
+ drawCount++;
212
+ }
213
+ if (drawCount === 0)
214
+ return;
215
+ const { device } = state;
216
+ // Upload instance data
217
+ device.queue.writeBuffer(runtime.particleInstanceBuffer, 0, instanceData.buffer, 0, drawCount * INSTANCE_STRIDE);
218
+ // Write uniform slot for this emitter (world transform → clip space; quad coords are unused)
219
+ const uniformOffset = runtime.uniformOffset;
220
+ const floatBase = uniformOffset >> 2;
221
+ const { uniformData, uniformDataU32, matrixArray } = runtime;
222
+ const viewport = runtime.renderTargetViewport ?? state.canvas;
223
+ const t = renderProxy.transform2D;
224
+ let iw2, ih2;
225
+ if (source.data.worldSpace) {
226
+ // Particles are already in world (pixel) space — map directly through viewport
227
+ iw2 = 2 / viewport.width;
228
+ ih2 = 2 / viewport.height;
229
+ matrixArray[0] = iw2;
230
+ matrixArray[1] = 0;
231
+ matrixArray[2] = 0;
232
+ matrixArray[3] = 0;
233
+ matrixArray[4] = -ih2;
234
+ matrixArray[5] = 0;
235
+ matrixArray[6] = -1;
236
+ matrixArray[7] = 1;
237
+ matrixArray[8] = 1;
238
+ }
239
+ else {
240
+ iw2 = 2 / viewport.width;
241
+ ih2 = 2 / viewport.height;
242
+ matrixArray[0] = t.a * iw2;
243
+ matrixArray[1] = -t.b * ih2;
244
+ matrixArray[2] = 0;
245
+ matrixArray[3] = t.c * iw2;
246
+ matrixArray[4] = -t.d * ih2;
247
+ matrixArray[5] = 0;
248
+ matrixArray[6] = t.tx * iw2 - 1;
249
+ matrixArray[7] = -t.ty * ih2 + 1;
250
+ matrixArray[8] = 1;
251
+ }
252
+ uniformData[floatBase + 0] = matrixArray[0];
253
+ uniformData[floatBase + 1] = matrixArray[1];
254
+ uniformData[floatBase + 2] = matrixArray[2];
255
+ uniformData[floatBase + 3] = 0;
256
+ uniformData[floatBase + 4] = matrixArray[3];
257
+ uniformData[floatBase + 5] = matrixArray[4];
258
+ uniformData[floatBase + 6] = matrixArray[5];
259
+ uniformData[floatBase + 7] = 0;
260
+ uniformData[floatBase + 8] = matrixArray[6];
261
+ uniformData[floatBase + 9] = matrixArray[7];
262
+ uniformData[floatBase + 10] = matrixArray[8];
263
+ uniformData[floatBase + 11] = 0;
264
+ uniformData[floatBase + 12] = 1; // alpha = 1 (per-instance handles alpha)
265
+ uniformDataU32[floatBase + 13] = 0;
266
+ for (let k = 14; k < 32; k++)
267
+ uniformData[floatBase + k] = 0;
268
+ runtime.uniformOffset += runtime.uniformStride;
269
+ // Create per-frame instance bind group
270
+ const instanceBindGroup = device.createBindGroup({
271
+ layout: resources.instanceBindGroupLayout,
272
+ entries: [{ binding: 0, resource: { buffer: runtime.particleInstanceBuffer } }],
273
+ });
274
+ const pass = runtime.renderPass;
275
+ pass.setPipeline(getParticlePipeline(state, resources));
276
+ pass.setBindGroup(0, runtime.uniformBindGroup, [uniformOffset]);
277
+ pass.setBindGroup(1, textureEntry.bindGroup);
278
+ pass.setBindGroup(2, instanceBindGroup);
279
+ pass.draw(6, drawCount, 0, 0);
280
+ }
281
+ export const defaultWgpuParticleEmitterRenderer = {
282
+ createData: noopRendererData,
283
+ submit(state, node) {
284
+ flushWgpuSpriteBatch(state);
285
+ drawWgpuParticleEmitter(state, node);
286
+ },
287
+ };
288
+ //# sourceMappingURL=wgpuParticleEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuParticleEmitter.js","sourceRoot":"","sources":["../src/wgpuParticleEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { SpriteRenderer } from '@flighthq/types';
2
+ import type { WgpuQuadBatchResources } from './wgpuSpriteBatch';
3
+ import { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline } from './wgpuSpriteBatch';
4
+ export type { WgpuQuadBatchResources };
5
+ export { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline };
6
+ export declare const defaultWgpuQuadBatchRenderer: SpriteRenderer;
7
+ //# sourceMappingURL=wgpuQuadBatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuQuadBatch.d.ts","sourceRoot":"","sources":["../src/wgpuQuadBatch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA4B,cAAc,EAAmB,MAAM,iBAAiB,CAAC;AAGjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EAIzB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,sBAAsB,EAAE,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,CAAC;AA6FlE,eAAO,MAAM,4BAA4B,EAAE,cAI1C,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { noopRendererData } from '@flighthq/render';
2
+ import { resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu';
3
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
4
+ import { BatchFormat } from '@flighthq/types';
5
+ import { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, SPRITE_INSTANCE_FLOATS, } from './wgpuSpriteBatch';
6
+ export { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline };
7
+ // Each quad writes the 13 base instance floats; any material packs its own per-instance data into the
8
+ // parallel material buffer.
9
+ const INSTANCE_STRIDE_FLOATS = SPRITE_INSTANCE_FLOATS;
10
+ function submitWgpuQuadBatch(state, quadBatch) {
11
+ const runtime = getWgpuRenderStateRuntime(state);
12
+ if (runtime.renderPass === null)
13
+ return;
14
+ const source = quadBatch.source;
15
+ const data = source.data;
16
+ const { atlas, instanceCount, ids, transforms } = data;
17
+ if (atlas === null || atlas.image === null || atlas.image.source === null || instanceCount === 0)
18
+ return;
19
+ const material = quadBatch.material;
20
+ const materialRenderer = resolveWgpuMaterialRenderer(state, material);
21
+ if (materialRenderer === null)
22
+ return;
23
+ const perQuadMaterialData = data.materialData;
24
+ const nodeMaterialData = quadBatch.materialData;
25
+ const startCount = runtime.spriteBatchCount;
26
+ const base = prepareWgpuSpriteBatchWrite(state, atlas.image.source, quadBatch.blendMode, material, materialRenderer, instanceCount);
27
+ const regions = atlas.regions;
28
+ const numRegions = regions.length;
29
+ const iw = 1 / (atlas.image.width || 1);
30
+ const ih = 1 / (atlas.image.height || 1);
31
+ const instanceData = runtime.spriteBatchInstanceData;
32
+ const isVector2 = data.transformType === 'vector2';
33
+ const pt = quadBatch.transform2D;
34
+ const pa = pt.a, pb = pt.b, pc = pt.c, pd = pt.d, ptx = pt.tx, pty = pt.ty;
35
+ const alpha = quadBatch.alpha;
36
+ let writeBase = base;
37
+ let drawCount = 0;
38
+ for (let i = 0; i < instanceCount; i++) {
39
+ const id = ids[i];
40
+ if (id < 0 || id >= numRegions)
41
+ continue;
42
+ const region = regions[id];
43
+ if (region.width <= 0 || region.height <= 0)
44
+ continue;
45
+ if (isVector2) {
46
+ const dx = transforms[i * 2], dy = transforms[i * 2 + 1];
47
+ instanceData[writeBase] = pa;
48
+ instanceData[writeBase + 1] = pb;
49
+ instanceData[writeBase + 2] = pc;
50
+ instanceData[writeBase + 3] = pd;
51
+ instanceData[writeBase + 4] = pa * dx + pc * dy + ptx;
52
+ instanceData[writeBase + 5] = pb * dx + pd * dy + pty;
53
+ }
54
+ else {
55
+ const offset = i * 6;
56
+ const la = transforms[offset], lb = transforms[offset + 1];
57
+ const lc = transforms[offset + 2], ld = transforms[offset + 3];
58
+ const ltx = transforms[offset + 4], lty = transforms[offset + 5];
59
+ instanceData[writeBase] = pa * la + pc * lb;
60
+ instanceData[writeBase + 1] = pb * la + pd * lb;
61
+ instanceData[writeBase + 2] = pa * lc + pc * ld;
62
+ instanceData[writeBase + 3] = pb * lc + pd * ld;
63
+ instanceData[writeBase + 4] = pa * ltx + pc * lty + ptx;
64
+ instanceData[writeBase + 5] = pb * ltx + pd * lty + pty;
65
+ }
66
+ instanceData[writeBase + 6] = region.width;
67
+ instanceData[writeBase + 7] = region.height;
68
+ instanceData[writeBase + 8] = region.x * iw;
69
+ instanceData[writeBase + 9] = region.y * ih;
70
+ instanceData[writeBase + 10] = (region.x + region.width) * iw;
71
+ instanceData[writeBase + 11] = (region.y + region.height) * ih;
72
+ instanceData[writeBase + 12] = alpha;
73
+ const md = perQuadMaterialData?.[i] ?? nodeMaterialData;
74
+ packWgpuSpriteBatchMaterialInstance(state, md, startCount + drawCount);
75
+ writeBase += INSTANCE_STRIDE_FLOATS;
76
+ drawCount++;
77
+ }
78
+ runtime.spriteBatchCount += drawCount;
79
+ }
80
+ export const defaultWgpuQuadBatchRenderer = {
81
+ format: BatchFormat.Quad,
82
+ createData: noopRendererData,
83
+ submit: submitWgpuQuadBatch,
84
+ };
85
+ //# sourceMappingURL=wgpuQuadBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuQuadBatch.js","sourceRoot":"","sources":["../src/wgpuQuadBatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { WgpuRenderState } from '@flighthq/types';
2
+ /**
3
+ * Registers all built-in display-object kind renderers and the default material on `state` in one
4
+ * call. Registers: bitmap, shape, scale9shape, quadbatch, tilemap, particle emitter, text label,
5
+ * rich text, video, display object (plain container), and the render-cache renderer. Also calls
6
+ * `registerDefaultWgpuMaterial` so the batch pipeline resolves the default material immediately.
7
+ *
8
+ * This is a thin convenience wrapper around the individual `registerRenderer` calls — tree-shaking
9
+ * is unchanged: apps that import only one kind's renderer still pull no extra weight. The function
10
+ * itself can be tree-shaken when not called.
11
+ */
12
+ export declare function registerWgpuDisplayObjectRenderers(state: WgpuRenderState): void;
13
+ /**
14
+ * Registers all built-in sprite-graph kind renderers and the default material on `state` in one
15
+ * call. Registers: sprite, quad-batch, tilemap, and particle emitter. Also calls
16
+ * `registerDefaultWgpuMaterial`. Use this when only drawing sprite-graph nodes, not display objects.
17
+ */
18
+ export declare function registerWgpuSpriteRenderers(state: WgpuRenderState): void;
19
+ //# sourceMappingURL=wgpuRegistration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRegistration.d.ts","sourceRoot":"","sources":["../src/wgpuRegistration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA8BvD;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAc/E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAMxE"}
@@ -0,0 +1,53 @@
1
+ import { registerRenderer } from '@flighthq/render';
2
+ import { BitmapKind, DisplayObjectKind, ParticleEmitterKind, QuadBatchKind, RenderCacheKind, RichTextKind, Scale9ShapeKind, ShapeKind, SpriteKind, TextLabelKind, TilemapKind, VideoKind, } from '@flighthq/types';
3
+ import { defaultWgpuBitmapRenderer } from './wgpuBitmap';
4
+ import { defaultWgpuRenderCacheRenderer } from './wgpuCache';
5
+ import { registerDefaultWgpuMaterial } from './wgpuDefaultMaterial';
6
+ import { defaultWgpuDisplayObjectRenderer } from './wgpuDisplayObject';
7
+ import { defaultWgpuParticleEmitterRenderer } from './wgpuParticleEmitter';
8
+ import { defaultWgpuQuadBatchRenderer } from './wgpuQuadBatch';
9
+ import { defaultWgpuRichTextRenderer } from './wgpuRichText';
10
+ import { defaultWgpuScale9ShapeRenderer } from './wgpuScale9Shape';
11
+ import { defaultWgpuShapeRenderer } from './wgpuShape';
12
+ import { defaultWgpuSpriteRenderer } from './wgpuSpriteRenderer';
13
+ import { defaultWgpuTextLabelRenderer } from './wgpuTextLabel';
14
+ import { defaultWgpuTilemapRenderer } from './wgpuTilemap';
15
+ import { defaultWgpuVideoRenderer } from './wgpuVideo';
16
+ /**
17
+ * Registers all built-in display-object kind renderers and the default material on `state` in one
18
+ * call. Registers: bitmap, shape, scale9shape, quadbatch, tilemap, particle emitter, text label,
19
+ * rich text, video, display object (plain container), and the render-cache renderer. Also calls
20
+ * `registerDefaultWgpuMaterial` so the batch pipeline resolves the default material immediately.
21
+ *
22
+ * This is a thin convenience wrapper around the individual `registerRenderer` calls — tree-shaking
23
+ * is unchanged: apps that import only one kind's renderer still pull no extra weight. The function
24
+ * itself can be tree-shaken when not called.
25
+ */
26
+ export function registerWgpuDisplayObjectRenderers(state) {
27
+ registerDefaultWgpuMaterial(state);
28
+ registerRenderer(state, BitmapKind, defaultWgpuBitmapRenderer);
29
+ registerRenderer(state, DisplayObjectKind, defaultWgpuDisplayObjectRenderer);
30
+ registerRenderer(state, ParticleEmitterKind, defaultWgpuParticleEmitterRenderer);
31
+ registerRenderer(state, QuadBatchKind, defaultWgpuQuadBatchRenderer);
32
+ registerRenderer(state, RichTextKind, defaultWgpuRichTextRenderer);
33
+ registerRenderer(state, Scale9ShapeKind, defaultWgpuScale9ShapeRenderer);
34
+ registerRenderer(state, ShapeKind, defaultWgpuShapeRenderer);
35
+ registerRenderer(state, SpriteKind, defaultWgpuSpriteRenderer);
36
+ registerRenderer(state, TextLabelKind, defaultWgpuTextLabelRenderer);
37
+ registerRenderer(state, TilemapKind, defaultWgpuTilemapRenderer);
38
+ registerRenderer(state, RenderCacheKind, defaultWgpuRenderCacheRenderer);
39
+ registerRenderer(state, VideoKind, defaultWgpuVideoRenderer);
40
+ }
41
+ /**
42
+ * Registers all built-in sprite-graph kind renderers and the default material on `state` in one
43
+ * call. Registers: sprite, quad-batch, tilemap, and particle emitter. Also calls
44
+ * `registerDefaultWgpuMaterial`. Use this when only drawing sprite-graph nodes, not display objects.
45
+ */
46
+ export function registerWgpuSpriteRenderers(state) {
47
+ registerDefaultWgpuMaterial(state);
48
+ registerRenderer(state, ParticleEmitterKind, defaultWgpuParticleEmitterRenderer);
49
+ registerRenderer(state, QuadBatchKind, defaultWgpuQuadBatchRenderer);
50
+ registerRenderer(state, SpriteKind, defaultWgpuSpriteRenderer);
51
+ registerRenderer(state, TilemapKind, defaultWgpuTilemapRenderer);
52
+ }
53
+ //# sourceMappingURL=wgpuRegistration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRegistration.js","sourceRoot":"","sources":["../src/wgpuRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,UAAU,kCAAkC,CAAC,KAAsB;IACvE,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC/D,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;IAC7E,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,EAAE,kCAAkC,CAAC,CAAC;IACjF,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,4BAA4B,CAAC,CAAC;IACrE,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,2BAA2B,CAAC,CAAC;IACnE,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,8BAA8B,CAAC,CAAC;IACzE,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAC7D,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC/D,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,4BAA4B,CAAC,CAAC;IACrE,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC;IACjE,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,8BAA8B,CAAC,CAAC;IACzE,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAsB;IAChE,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,EAAE,kCAAkC,CAAC,CAAC;IACjF,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,4BAA4B,CAAC,CAAC;IACrE,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC/D,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { WgpuRenderState, WgpuRenderStats } from '@flighthq/types';
2
+ /**
3
+ * Returns a snapshot of the current frame's GPU draw statistics for `state`. The returned object
4
+ * reflects counts accumulated since the last `resetWgpuRenderStats` call. Returns zeroed stats
5
+ * when no counting has been done on this state.
6
+ */
7
+ export declare function getWgpuRenderStats(state: WgpuRenderState): WgpuRenderStats;
8
+ /**
9
+ * Records one batch flush: increments `drawCallCount` by 1, `instanceCount` by `instances`, and
10
+ * `batchFlushCount` by 1. Called by the batch flush path when stats are enabled.
11
+ */
12
+ export declare function recordWgpuBatchFlush(state: WgpuRenderState, instances: number): void;
13
+ /**
14
+ * Records one texture upload (a canvas-to-GPU upload): increments `textureUploadCount` by 1.
15
+ * Called by the texture upload paths when stats are enabled.
16
+ */
17
+ export declare function recordWgpuTextureUpload(state: WgpuRenderState): void;
18
+ /** Resets all GPU draw statistics for `state` to zero. Call at the start of each frame. */
19
+ export declare function resetWgpuRenderStats(state: WgpuRenderState): void;
20
+ //# sourceMappingURL=wgpuRenderStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRenderStats.d.ts","sourceRoot":"","sources":["../src/wgpuRenderStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAE1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAMpF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAIpE;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAMjE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Returns a snapshot of the current frame's GPU draw statistics for `state`. The returned object
3
+ * reflects counts accumulated since the last `resetWgpuRenderStats` call. Returns zeroed stats
4
+ * when no counting has been done on this state.
5
+ */
6
+ export function getWgpuRenderStats(state) {
7
+ return ensureWgpuRenderStatsMutable(state);
8
+ }
9
+ /**
10
+ * Records one batch flush: increments `drawCallCount` by 1, `instanceCount` by `instances`, and
11
+ * `batchFlushCount` by 1. Called by the batch flush path when stats are enabled.
12
+ */
13
+ export function recordWgpuBatchFlush(state, instances) {
14
+ const entry = _stats.get(state);
15
+ if (entry === undefined)
16
+ return;
17
+ entry.drawCallCount++;
18
+ entry.instanceCount += instances;
19
+ entry.batchFlushCount++;
20
+ }
21
+ /**
22
+ * Records one texture upload (a canvas-to-GPU upload): increments `textureUploadCount` by 1.
23
+ * Called by the texture upload paths when stats are enabled.
24
+ */
25
+ export function recordWgpuTextureUpload(state) {
26
+ const entry = _stats.get(state);
27
+ if (entry === undefined)
28
+ return;
29
+ entry.textureUploadCount++;
30
+ }
31
+ /** Resets all GPU draw statistics for `state` to zero. Call at the start of each frame. */
32
+ export function resetWgpuRenderStats(state) {
33
+ const entry = ensureWgpuRenderStatsMutable(state);
34
+ entry.batchFlushCount = 0;
35
+ entry.drawCallCount = 0;
36
+ entry.instanceCount = 0;
37
+ entry.textureUploadCount = 0;
38
+ }
39
+ function ensureWgpuRenderStatsMutable(state) {
40
+ let entry = _stats.get(state);
41
+ if (entry === undefined) {
42
+ entry = { batchFlushCount: 0, drawCallCount: 0, instanceCount: 0, textureUploadCount: 0 };
43
+ _stats.set(state, entry);
44
+ }
45
+ return entry;
46
+ }
47
+ // Per-state mutable stats accumulator. Populated by the batch flush and per-kind submit paths.
48
+ // Stored in a WeakMap so it is GC'd with the state and never leaks.
49
+ const _stats = new WeakMap();
50
+ //# sourceMappingURL=wgpuRenderStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRenderStats.js","sourceRoot":"","sources":["../src/wgpuRenderStats.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,OAAO,4BAA4B,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAsB,EAAE,SAAiB;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,KAAK,CAAC,aAAa,EAAE,CAAC;IACtB,KAAK,CAAC,aAAa,IAAI,SAAS,CAAC;IACjC,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAC7B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IACzD,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;IACxB,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;IACxB,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAsB;IAC1D,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAID,+FAA+F;AAC/F,oEAAoE;AACpE,MAAM,MAAM,GAAG,IAAI,OAAO,EAA6C,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { RendererData } from '@flighthq/types';
2
+ /**
3
+ * Casts `data` to `RendererData` for storage in a renderer's `createData` return value.
4
+ * Use in `createData` implementations to avoid the repeated `as unknown as RendererData` double cast:
5
+ *
6
+ * ```ts
7
+ * function createWgpuFooData(...): RendererData {
8
+ * return createWgpuRendererData<WgpuFooData>({ ... });
9
+ * }
10
+ * ```
11
+ */
12
+ export declare function createWgpuRendererData<T extends object>(data: T): RendererData;
13
+ /**
14
+ * Casts `RendererData` back to `T` for reading inside `submit`/`destroyData` implementations.
15
+ * Use in renderer callbacks to avoid the repeated `as unknown as WgpuFooData` double cast:
16
+ *
17
+ * ```ts
18
+ * function drawWgpuFoo(state: WgpuRenderState, renderProxy: RenderProxy2D): void {
19
+ * const data = getWgpuRendererData<WgpuFooData>(renderProxy.rendererData);
20
+ * if (data === null) return;
21
+ * ...
22
+ * }
23
+ * ```
24
+ */
25
+ export declare function getWgpuRendererData<T extends object>(data: RendererData | null): T | null;
26
+ //# sourceMappingURL=wgpuRendererData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRendererData.d.ts","sourceRoot":"","sources":["../src/wgpuRendererData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAE9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAEzF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Casts `data` to `RendererData` for storage in a renderer's `createData` return value.
3
+ * Use in `createData` implementations to avoid the repeated `as unknown as RendererData` double cast:
4
+ *
5
+ * ```ts
6
+ * function createWgpuFooData(...): RendererData {
7
+ * return createWgpuRendererData<WgpuFooData>({ ... });
8
+ * }
9
+ * ```
10
+ */
11
+ export function createWgpuRendererData(data) {
12
+ return data;
13
+ }
14
+ /**
15
+ * Casts `RendererData` back to `T` for reading inside `submit`/`destroyData` implementations.
16
+ * Use in renderer callbacks to avoid the repeated `as unknown as WgpuFooData` double cast:
17
+ *
18
+ * ```ts
19
+ * function drawWgpuFoo(state: WgpuRenderState, renderProxy: RenderProxy2D): void {
20
+ * const data = getWgpuRendererData<WgpuFooData>(renderProxy.rendererData);
21
+ * if (data === null) return;
22
+ * ...
23
+ * }
24
+ * ```
25
+ */
26
+ export function getWgpuRendererData(data) {
27
+ return data;
28
+ }
29
+ //# sourceMappingURL=wgpuRendererData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuRendererData.js","sourceRoot":"","sources":["../src/wgpuRendererData.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAmB,IAAO;IAC9D,OAAO,IAA+B,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAmB,IAAyB;IAC7E,OAAO,IAA2B,CAAC;AACrC,CAAC"}