forked from 1b-agent/opencadstudio-upstream
feat(pipeline): per-instance visibility for batched hatches (Phase 4-B, step 4)
Adds a dedicated `visibility: array<u32>` storage buffer (binding 4) alongside the existing batched hatch buffers. Vertex shader reads `visibility[v.instance_index]` — 0 → emit an out-of-NDC clip position so the GPU rasterizer clips the primitive before the fragment stage runs. `compute_hatch_lod` now drives this buffer instead of (or alongside, for the per-hatch fallback) `hatch_skip_flags`. Walks a per-instance CPU AABB mirror that the builder fills at upload time (`instance_aabbs`), applies the same `aabb_below_pixel` (sub-pixel LOD) OR `aabb_offscreen` (frustum cull) rule the legacy path used, and pushes the resulting 0/1 flags via `queue.write_buffer` on a separate 4 B-per-hatch buffer — ~40 KB per pan tick for 10 k hatches, far cheaper than re-writing the 112 B-per-instance data. Step 5 will remove the legacy `gpu_hatches` Vec, the per-hatch draw loop, and `hatch_skip_flags` once the batched path has soaked. Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
1 parent
cfe53bd789
commit
398eee551d
4 files changed
+99
-19
No files matched your search
+1
-1
@@ -147,7 +147,7 @@ impl shader::Primitive for Primitive {
|
||||
pipeline.compute_hatch_scissors(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_wipeout_scissors(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_image_scissors(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_hatch_lod(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_hatch_lod(queue, self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_wipeout_lod(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
pipeline.compute_mesh_lod(self.uniforms.view_proj, clip_size.width, clip_size.height);
|
||||
if self.show_viewcube {
|
||||
|
||||
Reference in new issue
Block a user