第 21 章:兼容性规范
VFP 的兼容性目标是让旧读取器安全处理新文件,让新读取器稳定读取旧文件,并避免任何版本在不知情的情况下错误解释权威体素数据。
21.1 主版本与次版本
主版本变更表示可能影响 Header、Footer、Directory、META、PAL0、CHIX、VOX0 或其核心解释的破坏性变化。读取器遇到更高主版本必须拒绝文件,除非它显式实现该主版本。
次版本只能新增可安全忽略的能力,例如新可选 Tag、未使用 Flag 位、可选缓存或更严格的验证说明。若次版本引入无法被旧读取器安全忽略的权威语义,必须提高主版本。
21.2 未知数据处理
| 未知内容 | 旧读取器行为 |
|---|---|
| 未知可选 Tag 且未设置 REQUIRED | 忽略整个 Section,保留 Warning |
| 未知 Tag 设置 REQUIRED | 拒绝资产 |
| 已知必需区段的未知 Codec | 拒绝资产 |
| 可选区段的未知 Codec | 忽略该区段 |
| 未知 Flag 位位于必需区段 | 拒绝资产 |
| 未知 Flag 位位于可选区段 | 忽略该区段 |
| 非零 Reserved 字段 | 严格验证器报错;读取器应警告或拒绝,取决于是否会影响语义 |
写入器不得在 VFP 1.3 文件中填充未来版本字段或私有数据;私有扩展必须使用未来分配的可选 Tag,并遵守未知 Tag 规则。
21.3 缓存兼容性
读取器可以只实现最小权威读取路径,而不实现任何缓存。缓存版本、缓存顶点格式和渲染策略可以随 Minor 版本演进,只要旧读取器可以安全忽略不支持缓存并从 VOX0 重建。
缓存不得成为 VFP 兼容性的强制前提。任何产品若只发放 VBUF/PMSH/PRVW/THMB 而不提供 VOX0,就不符合 VFP 1.3。
21.4 尺寸与未来格式
VFP 1.3 固定服务于单轴不超过 255 的单体体素资产。为了支持更大模型、世界分区或更宽坐标,不得在 VFP 1.3 中私自把 uint8 字段解释为 uint16,也不得复用保留字段拼接坐标。
这类能力应通过新的主版本或独立的 VWFP 世界格式引入。VFP 资产可被 VWFP 引用、实例化或嵌入,但两者的二进制语义必须独立。
21.5 兼容性承诺
一旦 VFP 1.3 冻结,以下语义不得改变:VOX0 为唯一权威体素源、Palette Index 0 为空、坐标线性顺序、Directory/Footer 定位方式、已分配 Tag/Codec/Flag 值、Source Hash 规范化输入。
本章总结
兼容性不是“尽量读出来”,而是“要么正确读取,要么安全拒绝”。VFP 通过版本、Directory、必需标记和缓存降级,保证长期演进不牺牲资产真实性。