From 1ec273f508989971671169876838b0c982317134 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 14 Apr 2026 21:55:14 +1000 Subject: [PATCH] =?UTF-8?q?ifcviewer:=20README=20=E2=80=94=20document=20ev?= =?UTF-8?q?ent-driven=20rendering=20and=20VBO=20quantization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the event-driven rendering bullet (zero idle cost, in-render frame timing) and roadmap entries for VBO quantization and event-driven rendering. Co-Authored-By: Claude Opus 4.6 --- src/ifcviewer/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ifcviewer/README.md b/src/ifcviewer/README.md index be4a69ec42..01ceef7ecf 100644 --- a/src/ifcviewer/README.md +++ b/src/ifcviewer/README.md @@ -78,6 +78,14 @@ engine with a Qt6 interface and OpenGL 4.5 rendering. through load. - **Non-blocking sidecar loading**: sidecars are read on a background thread; only the final GPU upload touches the main thread. +- **Event-driven rendering:** no continuous render timer. Frames are + scheduled via `QWindow::requestUpdate()` only when something changes + (camera move, streaming chunk, hover, settings). When the camera and + scene are idle the cull pass and HiZ readback are skipped entirely + and the main thread blocks in the Qt event loop — the viewer costs + zero CPU/GPU on a static scene. FPS is still reported accurately + because frame cost is measured *inside* `render()`, not as wall-clock + between frames. - **GPU object picking**: a second render pass writes object IDs into an R32UI framebuffer. Click reads back one pixel. No CPU-side raycasting. - **Multi-model support**: multiple IFCs can be loaded simultaneously. @@ -728,6 +736,8 @@ multi-million + occluders redundant rasterisation Phase 3C HiZ (done, CPU - [x] Phase 3A — screen-space contribution culling - [x] Phase 3B — distance / contribution LOD (meshoptimizer `simplifySloppy`) - [x] Phase 3C — Hierarchical-Z occlusion culling (v1, CPU-side readback) +- [x] Quantized VBO (16 B/vert, sidecar v6) +- [x] Event-driven rendering (zero idle CPU/GPU, cull skipped on still frames) - [ ] **Phase 3D — GPU-side compute-shader culling** (next; replaces the readback) - [ ] Vulkan/MoltenVK backend for macOS - [ ] Embedded Python scripting console