Files
MapLibreParticleLab/docs/50_Step记录/STEP-041_Android双时间片GPU时间插值_v1.md
OpenAI Codex b127822301
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: close GPU particle time interpolation validation
2026-09-03 13:44:45 +08:00

2.3 KiB
Raw Permalink Blame History

STEP-041 Android 双时间片 GPU 时间插值

  • 状态:CLOSED / PASS
  • 前置:STEP-040(40-01)已在 Android OpenGL 手工验收为 PASS。
  • 目标:在唯一正式链路 RasterArraySource -> RasterParticleLayer -> GPU Simulation -> Trail -> Composite 中,把单 Field 扩展为 T0/T1 两个独立 GPU Field,并在 State pass 对速度作 GPU mix。
  • 实现提交:4675a8a29dd6fc7b684bfb64913a8c9075ad8583(feat: add GPU particle time interpolation)。
  • 40-02C 最终修正:原实现的 MIX fallback、GPU identity 与 NORTH Mercator displacement 问题由 STEP-043/043A/043B 修正;Android T1--T10 已完成并全部 PASS。

本轮实现

  • RasterArraySource 支持可选 next-fixture、next-metadata、next-field,以同一 FileSource byte boundary 加载 T0/T1;两份快照必须具有相同 grid、bounds、NoData、Field 类型及 display domain。
  • RasterParticleLayer 新增常量 paint property raster-particle-time-mix(有限值,内部 clamp 至 [0,1])。它仅更新既有 UBO,不能触发 Field upload 或 State/Trail 重建。
  • RenderRasterParticleLayer 维持一套既有 State A/B、Trail A/B、Mask 与 Composite,只将 Field GPU resource 扩为 T0/T1 两个 texture slot。窗口推进时会按 generation + fixtureID + dataVersion 匹配旧 slot;A/B -> B/C 复用 B、只上传 C,并不 reset simulation/trail。完全无重叠的新窗口仍走既有安全 reset/reseed。
  • State shader 分别 decode T0/T1 RG velocity 后使用 mix(velocity0, velocity1, timeMix);没有 CPU 生成中间完整 Field。NoData alpha 在任一端无效时保持现有确定性 respawn。
  • Android Test App 新增 T0 EAST/T1 NORTH、MIX 0/50/100 与 ADVANCE B->C 入口;保留既有 ACTIVE/STATIC、mask、Camera、world-wrap 与 antimeridian 入口。

验证边界

  • Linux OpenGL 受影响 Core 与 source test object:通过。
  • shader generator、二次生成稳定性、C++ format、git diff --check:通过。
  • Codex 未运行 Android Gradle、ADB、APK 安装或设备测试;用户已在 Android x86_64 OpenGL 完成 T1--T10,全部 PASS。

不在本 Step 范围

iOS/Metal、Vulkan、网络/真实气象数据、完整 forecast cache、Jest、最终性能基线均不在本任务范围。40-02 在 T1--T10 通过前不得标记 PASS。