3.5 KiB
3.5 KiB
STEP-045 Runtime Field 动态更新接口
- 状态:
CLOSED / PASS - 最终 Android 验证日期:2026-09-03
- 当前最终功能基线:
4e31163516ad77473df672e162f554223cd2f09e
目标与冻结接口
40-04 使正式 RasterParticleLayer 数据链在运行中接收新的内存 Field 时间片,不依赖 Style reload、Source/Layer recreate 或 simulation restart。
- 正式更新接口:
RasterArraySource::updateRuntimeFieldWindow(ParticleFieldSnapshot)。 - Duplicate 验证接口:
RasterArraySource::repeatRuntimeFieldWindow();它重新提交 Source 当前 T1,并经正式 update API 返回Noop。 RasterArraySource::Impl::field/nextField是正式 T0/T1 的唯一权威状态;JNI 只是薄桥,Android Validation 只触发测试动作,Kotlin 不持有正式 T0/T1。- Renderer 负责 GPU Field resource reuse/upload;
RasterParticleLayer继续负责既有 simulation、Trail 与 Composite。
Android OpenGL 最终验收:PASS
| 验收项 | 结果 | 最终证据 |
|---|---|---|
| T-RUNTIME-01 | PASS | 初始 T0=uniform-east、T1=uniform-north;MIX 0/50/100 正常,TIME_MIX_UPDATE 期间 Field upload/reset 不增加。 |
| T-RUNTIME-02 | PASS | A/B→B/C(east/north→north/vortex):FIELD_REUSE from=OLD_T1 to=NEW_T0,仅上传 vortex,simulationRebuild=false、trailCleared=false。 |
| T-RUNTIME-03 | PASS | B/C→C/D(north/vortex→vortex/nodata):再次复用 OLD_T1,仅上传 nodata,证明连续推进未写死一次。 |
| T-RUNTIME-04 | PASS | C/D 下 MIX 50/100/0:fieldUploadCount=5、resetCount=0 始终不变,MIX 保持 property-only。 |
| T-RUNTIME-05 | PASS | C/D 下连续 DUPLICATE T1:每次 FIELD_WINDOW_UPDATE_APPLIED result=NOOP 与 duplicate bridge result=NOOP;无 upload/reset/style load,T0/T1 不变。 |
| T-RUNTIME-06 | PASS | candidate 耗尽返回 FIELD_WINDOW_UPDATE_REJECTED reason=NO_PRELOADED_FIELD;随后 MIX 仍显示 C/D,fieldUploadCount=5、resetCount=0,fail-closed 成立。 |
最终运行时契约
Runtime / Validation Host
-> RasterArraySource::updateRuntimeFieldWindow(...)
-> Source-owned T0/T1
-> A/B -> B/C -> C/D
-> OLD_T1 -> NEW_T0 GPU reuse
-> upload only new T1
-> ongoing RasterParticleLayer simulation / Trail / Composite
- 正常推进不重载 Style、不重建 Layer/Source、不 reset simulation、不 clear Trail;日志确认
simulationRebuild=false、trailCleared=false。 - 初始
STYLE_LOAD reason=TIME_WINDOW是用户建立 A/B Validation window 的允许初始化行为。之后 A/B→B/C、B/C→C/D、Duplicate 和 candidate 耗尽 reject 全程styleEpoch=2不变。 - MIX property 更新产生的
LAYER_CHANGED是正常 RenderLayer change 通知,不是 Layer recreate;最终renderLayerInstanceId=1保持稳定。
未改变的冻结能力与范围外内容
40-04 未改变 U=east-positive、V=north-positive、Mercator shader 边界 dy=-v、T0/T1 GPU interpolation、MIX property-only,或 40-03 的 full particle draw(N State texels→N simulated particles→N actual particle draw)与已验证 capacity ≥ 1,048,576。
本 Step 未实现真实天气 HTTP、GRIB、Server、forecast cache、vendor/provider 协议、NavSea/React Native 正式接入、粒子形状/旋转/箭头、颜色系统、WeatherColorLayer、Vulkan、iOS/Metal、生产 Land/Ocean Mask 或 APK packaging/ZIP 技术债。
收尾边界
本收尾只更新文档和开发记录;未修改功能代码,未运行新的 Linux/OpenGL 编译、Android Gradle、ADB、实机测试或 Jest。