Files
Aethera/render_3D/DATOVIZ_MIGRATION_AUDIT.md
T
2026-08-22 00:57:37 +08:00

61 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Datoviz 迁移与封装审计
## 线程与数据边界
Renderive 负责状态发布、实时数据交换、oneTBB CPU 数据准备、事件入口、帧调度和像素帧发布。Datoviz 的 scene/visual mutation、FramePlan emission、DRP2 execution、GPU submission 与 readback 全部归单一 `Render_Domain` 所有。
当前帧数据流:
```text
Scene / Renderable state ----+
Point bulk data -------------+-- frame publication snapshot
|
+-- oneTBB Flow Graph: per-renderable CPU prepare
| |
Kernel Event -----------------+ +-- immutable Prepared_Point
|
v
Render_Domain (single thread)
|
Datoviz apply / emit / DRP2 / GPU
|
externally owned Frame_3D
```
oneTBB worker 不调用 `dvz_*`。Datoviz FramePlan 继续负责 GPU upload/render/copy/readback 依赖,Renderive RenderPlan 只负责应用级 CPU prepare 依赖和末端单一 render node。
## 帧快照
- `Scene_Base::publish_frame_state(Abstract_Frame&)` 在 frame-control 的发布边界交换 Scene、Renderable 与实时数据。
- `Frame_Render_Snapshot` 保存对应帧的 Scene 状态、Renderable 元数据和类型安全的大数据共享快照。
- Manual、Low Latency、Playback 保存同一类快照;Playback 出队不会读取后来版本的数据。
- oneTBB prepare 只从帧快照读取输入并发布不可变 prepared output。
- Scene render node 等待所有末端 prepare 依赖,然后在 `Render_Domain` 串行消费 prepared output。
## Point 封装
- `Point_Visual` 的小状态由 Renderable 状态策略管理。
- 点集的唯一权威来源是 `Multi_Double_Buffer_Strategy`;帧只持有已发布版本的不可变共享快照。
- positions、colors、sizes、sigma、angles、radii、normals 等派生数组只存在于 `Prepared_Point`,不保存为 Visual 成员。
- `Point_Scene` 复用 Kernel `Scene3D_Context`、frame-control、RenderPlan、oneTBB Flow Graph、capture 和 observer。
- Pointer、wheel、key 直接保留 Kernel Event 语义并投递到 `Render_Domain`,没有第二套输入命令或收集队列。
- 后端只应用 prepared data,并负责 Datoviz/Vulkan 资源和写入调用方持有的 `Frame_3D`
## 唯一状态源检查
| 数据 | 权威来源 | 帧内读取 |
| --- | --- | --- |
| Point 样式、变换、可见性 | `Point_Visual` 状态策略 | 发布帧快照 |
| Point 大批量数据 | `Point_Visual` 双缓冲策略 | 不可变共享快照 |
| viewport、clear color、visual family | `Scene3D_Context` 状态策略 | 发布帧快照 |
| 输入 | Kernel Event | `Render_Domain` 直接处理 |
| CPU 派生数组 | 当前帧 oneTBB prepare | `Prepared_Point` |
| Datoviz/Vulkan 资源 | `Datoviz_Visual_Backend` | 仅 `Render_Domain` |
| 输出像素 | 最近完成的 render node | `Point_Scene::latest_frame()` |
## 验证
- Renderive CTestKernel、render2D、render3D、Datoviz、Qt、Web 全套通过。
- Point 状态/并发快照、真实 Vulkan 渲染、resize、事件和 Playback 历史顺序均有测试覆盖。
- `webapp_gallery` Vitest、TypeScript 和 Vite production build 通过。