2.8 KiB
40-03 Android OpenGL 粒子数量容量基线 Codex 完成报告 v3
最终状态
40-03:CLOSED / PASS
原目标是在正式 RasterArraySource -> RasterParticleLayer -> GPU simulation -> Trail -> Composite 链中建立有真实绘制意义的 Android OpenGL 粒子容量基线。
从 State-only 到 Full Particle Draw
首次容量实现提交 c0d1ad43c49ed6d526c3fd8b982c04840326d0d0 仅将 State A/B 扩展为 256 至 1M。首次 Android 验证发现 Trail/render 只消费少量固定 State sample;所以它不代表 N 个模拟粒子同时被绘制,容量验收暂停。
Full Particle Draw 提交 a0aae48ec8cb8a379909b88df1aeef45663f2985 修正此缺口:每个 particle index 一一映射 State texel,静态 draw resources 仅在创建/count rebuild 时生成,vertex shader 直接从当前 State write texture 读取位置。正式 Trail 在同一 Trail A/B write target 先 fade、再 draw N 个 point,Composite 沿用既有 Trail write 输入。因此最终契约为:State N -> draw N -> Trail -> Composite。
没有每 frame CPU particle loop、GPU→CPU readback、CPU position upload、旁路 overlay 或第二 simulation。
用户 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(256→draw 256)、T-FULL-02(1K→draw 1024)和 T-FULL-03(256→1K→256)全部 PASS。T-FULL-03 中 State grid/draw count 变更、full draw resource 释放重建和 reset/reseed 均正确;无 stale resource、crash、由 count change 引起的 Field upload 或 Style reload,MIX 未改变。
40-02 的既有语义保持:MIX 仍为 property-only,不触发 Field upload 或 simulation reset;时间窗 Field reuse 仍记录 simulationRebuild=false、trailCleared=false。
容量结论与边界
Android OpenGL full particle draw 已通过,已实际验证 1,048,576 个粒子可正常运行,已验证容量 ≥ 1M。项目当前没有继续压测 2M/4M/8M 的实际需求;40-03 不是理论 GPU 极限研究,故在满足需求后关闭。
1M 仅是本次验证环境的已验证容量,不是产品硬编码默认值、全部 Android 设备保证值或理论最大容量。
本收尾边界
- Android 设备验证由用户完成。
- Codex 本收尾未执行 Android Gradle、ADB、APK 安装或设备操作。
- 未修改功能代码、未加入/执行 Jest,未夹带 APK packaging 或其他阶段工作。
文档自检 git diff --check 通过后,本报告与 STEP-044 v3、开发记录一同提交。