Files
MapLibreParticleLab/docs/50_Step记录/STEP-044_Android_OpenGL粒子数量容量基线_v3.md
OpenAI Codex 7af12e7d62
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: close Android particle capacity validation
2026-09-03 17:21:44 +08:00

2.7 KiB
Raw Permalink Blame History

STEP-044 Android OpenGL 粒子数量容量基线 v3

  • 关闭日期:2026-09-03
  • 状态:CLOSED / PASS
  • 验收方式:用户完成 Android OpenGL x86_64 实机验证;Codex 本收尾未执行 Android Gradle、ADB、安装或设备操作。

基线与历史缺口

  • c0d1ad43c49ed6d526c3fd8b982c04840326d0d0,feat: add Android particle capacity baseline:完成 State A/B 容量扩展,但 Trail/render 仍只消费少量固定 State sample。因此该提交只能证明 N 个 State 同时 simulation,原 Android 容量验收曾正确暂停;它不是 40-03 的最终完成状态。
  • a0aae48ec8cb8a379909b88df1aeef45663f2985,feat: draw all raster particle states:正式 Trail/render 改为消费全部有效 State,建立 effectiveParticleCount=N -> trailDrawCount=N 的 full particle draw,使容量测试具备真实意义。

最终链路

State A/B N 个有效 texel -> GPU simulation -> N 个 full particle Trail point draw -> Trail A/B -> Composite。

particle index 在 resource create 或 count change 时一次性映射 State texel;稳定帧 vertex shader 直接从当前 State write texture 读取位置。没有每 frame CPU particle loop、GPU→CPU readback、第二 simulation 或 overlay。

Android 实机证据

所有下列日志均确认 fullParticleDraw=true。

档位 State Grid effectiveParticleCount trailDrawCount 结果
256 16×16 256 256 PASS
1K 32×32 1024 1024 PASS
4K 64×64 4096 4096 PASS
16K 128×128 16384 16384 PASS
64K 256×256 65536 65536 PASS
1M 1024×1024 1048576 1048576 PASS;用户确认运行 OK

T-FULL-01~03

  • T-FULL-01:256 State → draw 256,PASS。
  • T-FULL-02:1K State → draw 1024,PASS。
  • T-FULL-03:256 → 1K → 256:State grid 与 draw count 正确变化,full draw resources 正确释放/重建,无 stale resource、crash、由数量切换引起的 Field upload 或 Style reload,PASS。

40-02 语义保持

实际日志证明 count change 只作用 State/draw resources。MIX 继续是 property-only,不触发 Field upload 或 simulation reset;时间窗 Field reuse 继续工作,simulationRebuild=false、trailCleared=false。40-02 已冻结语义未被破坏。

最终结论

当前 Android OpenGL 正式 GPU 粒子链已实际验证 1,048,576 个 full-draw 粒子可正常运行。已验证容量 ≥ 1M;该容量已经满足 MapLibreParticleLab / NavSea 当前实际需求,本阶段不继续测试 2M / 4M / 8M 或寻找理论压力边界。

1M 是本验证设备上的已验证容量,不是硬编码产品默认值、所有 Android 设备保证值或理论最大容量。