@vgpu/render 0.0.5 → 0.0.7
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/README.md +94 -5
- package/dist/frame.d.ts +19 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +50 -0
- package/dist/frame.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/perf/frame-time-measure.d.ts +22 -0
- package/dist/perf/frame-time-measure.d.ts.map +1 -0
- package/dist/perf/frame-time-measure.js +91 -0
- package/dist/perf/frame-time-measure.js.map +1 -0
- package/dist/perf/gpu-frame-time.d.ts +49 -0
- package/dist/perf/gpu-frame-time.d.ts.map +1 -0
- package/dist/perf/gpu-frame-time.js +50 -0
- package/dist/perf/gpu-frame-time.js.map +1 -0
- package/dist/perf/index.d.ts +5 -0
- package/dist/perf/index.d.ts.map +1 -0
- package/dist/perf/index.js +3 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/pixel-diff.d.ts +27 -0
- package/dist/perf/pixel-diff.d.ts.map +1 -0
- package/dist/perf/pixel-diff.js +40 -0
- package/dist/perf/pixel-diff.js.map +1 -0
- package/dist/pipeline-descriptor.d.ts +35 -0
- package/dist/pipeline-descriptor.d.ts.map +1 -0
- package/dist/pipeline-descriptor.js +44 -0
- package/dist/pipeline-descriptor.js.map +1 -0
- package/dist/pipeline.d.ts +24 -14
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +58 -7
- package/dist/pipeline.js.map +1 -1
- package/dist/render-bundle.d.ts +24 -0
- package/dist/render-bundle.d.ts.map +1 -0
- package/dist/render-bundle.js +39 -0
- package/dist/render-bundle.js.map +1 -0
- package/dist/render-pass.d.ts +16 -1
- package/dist/render-pass.d.ts.map +1 -1
- package/dist/render-pass.js +44 -7
- package/dist/render-pass.js.map +1 -1
- package/dist/storage-buffer.d.ts +81 -0
- package/dist/storage-buffer.d.ts.map +1 -0
- package/dist/storage-buffer.js +91 -0
- package/dist/storage-buffer.js.map +1 -0
- package/dist/uniform.d.ts +55 -0
- package/dist/uniform.d.ts.map +1 -0
- package/dist/uniform.js +64 -0
- package/dist/uniform.js.map +1 -0
- package/package.json +8 -3
- package/src/Frame.docs.md +79 -0
- package/src/RenderPass.docs.md +6 -3
- package/src/createRenderPipeline.docs.md +113 -19
- package/src/perf/perf.docs.md +45 -0
- package/src/rapid-renderer.docs.md +15 -1
- package/src/render-bundle.docs.md +46 -0
- package/src/render-target/render-target-canvas.docs.md +15 -0
- package/src/storage-buffer.docs.md +102 -0
- package/src/uniform.docs.md +70 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Uniform
|
|
2
|
+
|
|
3
|
+
`Uniform` is one stable uniform buffer for a single render pass, rewritten per
|
|
4
|
+
frame and change-gated by the caller. It creates a `uniform | copy_dst` buffer,
|
|
5
|
+
a bind group layout with a single uniform binding at binding 0, and a bind group
|
|
6
|
+
wired to that buffer. `write()` uploads bytes with `queue.writeBuffer` at a fixed
|
|
7
|
+
offset — there is no dynamic offset and the bind group never changes.
|
|
8
|
+
|
|
9
|
+
## When to use `Uniform` vs `UniformPool`
|
|
10
|
+
|
|
11
|
+
Use `Uniform` for the common "globals/camera per pass" case: a single buffer you
|
|
12
|
+
overwrite each frame, where you decide when the contents actually changed.
|
|
13
|
+
|
|
14
|
+
Use `UniformPool` only when you have **many** per-draw uniforms. It is a
|
|
15
|
+
dynamic-offset ring allocator: every slot binding is marked
|
|
16
|
+
`hasDynamicOffset: true` and the whole CPU mirror is re-uploaded each frame. For
|
|
17
|
+
one stable buffer that is the wrong shape — it forces a dynamic-offset layout and
|
|
18
|
+
defeats change-gating.
|
|
19
|
+
|
|
20
|
+
## Constructor
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
new Uniform(device, {
|
|
24
|
+
size, // byte size of the uniform buffer (required)
|
|
25
|
+
label, // optional debug label for buffer, layout, and bind group
|
|
26
|
+
visibility, // GPUShaderStageFlags; defaults to VERTEX | FRAGMENT
|
|
27
|
+
bindGroupLayout, // optional pipeline-owned layout to reuse instead of creating one
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- `size`: byte size of the uniform buffer.
|
|
32
|
+
- `label`: optional debug label; suffixed `.bgl` / `.bg` for the layout and bind
|
|
33
|
+
group.
|
|
34
|
+
- `visibility`: shader stages that read binding 0. Defaults to
|
|
35
|
+
`GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT`. Ignored when
|
|
36
|
+
`bindGroupLayout` is provided.
|
|
37
|
+
- `bindGroupLayout`: reuse a pipeline-owned bind group layout instead of creating
|
|
38
|
+
one. Its binding 0 must be a uniform buffer compatible with `size`.
|
|
39
|
+
|
|
40
|
+
## Members
|
|
41
|
+
|
|
42
|
+
- `uniform.gpu`: the underlying uniform `GPUBuffer`.
|
|
43
|
+
- `uniform.buffer`: the VGPU `Buffer` wrapper around `gpu`.
|
|
44
|
+
- `uniform.bindGroup`: the `GPUBindGroup` to bind for the pass.
|
|
45
|
+
- `uniform.bindGroupLayout`: the `GPUBindGroupLayout` (created or reused).
|
|
46
|
+
- `uniform.size`: the buffer byte size.
|
|
47
|
+
- `uniform.write(data, offset = 0)`: uploads `data` via
|
|
48
|
+
`device.queue.writeBuffer(gpu, offset, data)`. No dynamic offset; the bind group
|
|
49
|
+
is unchanged. Call only when the uniform contents actually change.
|
|
50
|
+
- `uniform.destroy()` / `uniform.dispose()`: releases the backing buffer once;
|
|
51
|
+
idempotent.
|
|
52
|
+
|
|
53
|
+
## Example
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
const uniform = new Uniform(device, { size: 64, label: "globals" });
|
|
57
|
+
|
|
58
|
+
// Per frame, only when inputs changed:
|
|
59
|
+
if (dirty) uniform.write(globalsBytes);
|
|
60
|
+
|
|
61
|
+
const pipeline = createRenderPipelineFromDescriptor(device, {
|
|
62
|
+
layout: device.gpu.createPipelineLayout({ bindGroupLayouts: [uniform.bindGroupLayout] }),
|
|
63
|
+
vertex: { module, entryPoint: "vs_main" },
|
|
64
|
+
fragment: { module, entryPoint: "fs_main", targets: [{ format }] },
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
pass.setPipeline(pipeline);
|
|
68
|
+
pass.setBindGroup(0, uniform.bindGroup);
|
|
69
|
+
pass.draw(3);
|
|
70
|
+
```
|