61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# 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 CTest:Kernel、render2D、render3D、Datoviz、Qt、Web 全套通过。
|
||
- Point 状态/并发快照、真实 Vulkan 渲染、resize、事件和 Playback 历史顺序均有测试覆盖。
|
||
- `webapp_gallery` Vitest、TypeScript 和 Vite production build 通过。
|