第 21 章:兼容性规范
VFP 的兼容性目标是让旧读取器安全处理新文件,让新读取器稳定读取旧文件,并避免任何版本在不知情的情况下错误解释权威体素数据。
21.1 主版本与次版本
主版本变更表示可能影响 Header、Footer、Directory、META、PAL0、CHIX、VOX0 或其核心解释的破坏性变化。读取器遇到更高主版本必须拒绝文件,除非它显式实现该主版本。
次版本只能新增可安全忽略的能力,例如新可选 Tag、可选缓存或更严格的验证说明。若次版本引入无法被旧读取器安全忽略的权威语义,必须提高主版本。VFP 1.3 的目录 flags 和 reserved 已冻结为零,不能把未来语义塞入未使用位。MATL v1 是可选 palette-bound 扩展:旧 Reader 忽略后保留 PAL0 基础色显示。
21.2 未知数据处理
| 未知内容 | 旧读取器行为 |
|---|---|
| 未知四字符 Tag,目录属性与范围有效 | 跳过整个 Section,可记录 Warning |
| 已知必需区段的未知 Codec | 拒绝资产 |
| 可选区段的未知 Codec | 忽略该区段 |
任意目录项的 flags 非零 | 拒绝;VFP 1.3 不定义 flags 扩展位。 |
Header/Footer/目录项的 reserved 非零 | 拒绝;合规 Writer 必须写零。 |
写入器不得在 VFP 1.3 文件中填充未来版本字段或私有数据;自定义数据必须使用 XEXT,不能占用未分配 Tag、flags 或 reserved 字段。
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 规范化输入。对 MATL 等可选扩展,冻结的是其已发布版本的记录布局与降级规则;新字段必须使用新的版本化记录,不能占用 v1 保留字节。
本章总结
兼容性不是“尽量读出来”,而是“要么正确读取,要么安全拒绝”。VFP 通过版本、DIR0、严格目录字段和缓存降级,保证长期演进不牺牲资产真实性。