feat: initial DX12 foundation framework
This commit is contained in:
46
docs/架构分析/Id机制分析.md
Normal file
46
docs/架构分析/Id机制分析.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Id 机制分析
|
||||
|
||||
## 作用定位
|
||||
|
||||
`Engine/Common/Id.h` 是整个运行时句柄系统的基础。
|
||||
核心目标是用一个 `u32` 同时表达:
|
||||
|
||||
- 资源在数组中的索引;
|
||||
- 该索引的生命周期代数(generation)。
|
||||
|
||||
## 位布局
|
||||
|
||||
- `id_type = u32`
|
||||
- 高位:generation(`generation_bits = 8`)
|
||||
- 低位:index(`index_bit = 24`)
|
||||
|
||||
对应关键常量与工具:
|
||||
|
||||
- `index_mask`:提取低位索引
|
||||
- `generation_mask`:提取高位代数
|
||||
- `invalid_id`:无效句柄哨兵值
|
||||
|
||||
## 核心函数语义
|
||||
|
||||
- `is_valid(id)`:判断是否不是无效值
|
||||
- `index(id)`:提取索引位
|
||||
- `generation(id)`:提取代数位
|
||||
- `new_generation(id)`:索引不变,代数递增
|
||||
|
||||
## 运行时价值
|
||||
|
||||
它主要解决“删除后旧句柄仍被外部持有”的问题:
|
||||
|
||||
1. 对象删除后,槽位可复用;
|
||||
2. 复用时代数 +1;
|
||||
3. 旧句柄的 generation 与当前 generation 不一致;
|
||||
4. 存活校验失败,避免误访问新对象。
|
||||
|
||||
## 强类型策略
|
||||
|
||||
`DEFINE_TYPED_ID(name)`:
|
||||
|
||||
- Debug:生成包装类型,增强类型隔离;
|
||||
- Release:退化为 `id::id_type`,零额外开销。
|
||||
|
||||
这是“开发期安全 + 发布期性能”的组合设计。
|
||||
Reference in New Issue
Block a user