2.9 KiB
2.9 KiB
Task 12d-fix 报告:修 gpr_poc view 空窗 + 控制台乱码
状态
DONE。两 bug 均修复,构建通过(Community vcvars64 直驱 ninja,exit 0),离屏自检通过。
提交短哈希
1495d0e(feat/vtk-3d-view 分支)
改动文件
仅 tools/gpr_poc/main.cpp(+70 -1)。
Bug 1:概览空窗(LOD 策略错)
- 根因:
view每帧viewRefreshBlocks无脑走分块路径,相机概览时pickLevel选 level1(696 块)被 budget=64 砍到 64/696(9% 稀疏)→ 看着空。 - 修复:
viewRefreshBlocks按相机选中 level 分流(同 12c renderLOD 已验):- 相机选中 level0(最近、要全分辨率,X=44476 无法成单纹理)→ 分块 + budget(核外 LRU,原路径不变)。
- 相机选中 level≥1(概览/中远)→
wholeVolumeLevelFor从 picked 起向粗找第一个“整卷各轴 ≤16384”的层(本数据 level0/1 的 X=44476/22238>16384 → 升 level2),用buildLevelImage整卷重组单张 image,单块喂 mapper(忽略 budget,粗层本就小)。整卷 image 按 level 缓存,仅 level 变化时重组。
- 效果:概览不再是 64/696 稀疏块,而是 1 个整卷块渲染完整体。
Bug 2:控制台中文乱码(GBK)
- 修复:
main()入口#ifdef _WIN32下SetConsoleOutputCP(CP_UTF8);(含<windows.h>)。保留全文件已有中文输出,全子命令受益。
离屏自检结果(view --smoke,tmp\store_lod_001)
修复前:
[view] 预热: level=1 视野块=696/696 驻留=64 渲染块=64 ← 64/696 稀疏
修复后:
[view] 预热: level=1 视野块=696/696 驻留=64 渲染块=1 ← 整卷单块(升 level2)
=== view --smoke 离屏冒烟 ===
近观 level=1 → 拉远 level=3 → 再拉近 level=1
LOD 随缩放切换 : 是 ✔ (blocksFar=1)
纹理维度错误 : 否
渲出非空像素 : 是 (近=1024000 远拉近=1024000)
smoke 结果 : OK ✔ 不崩
- 概览渲染块 64 → 1(整卷):核心修复,整卷完整渲染而非 9% 稀疏。
- 渲出非空像素:是(1024000,无纹理错、不崩)。注:该视角整卷与原稀疏块均填满帧,像素计数饱和,故区分性证据是“渲染块 64→1(整卷)”。
- 编码正常:
=== view --smoke 离屏冒烟 ===等中文在 UTF-8 控制台正确显示,无 GBK 乱码。
提交干净性确认
git diff --cached --stat提交前确认 index 仅含tools/gpr_poc/main.cpp,无 chart/scatter/quill/rangeslider/Dialog/FormK 等并行会话文件。- 仅
git add tools/gpr_poc/main.cpp(及本报告),绝无git add -A。
给用户的重跑命令
真窗口交互(开窗即见完整粗层体,滚轮拉近变清晰/分块):
build\release\tools\gpr_poc\gpr_poc.exe view tmp\store_lod_001 --exagg 8 --opacity 0.6
离屏自检:
build\release\tools\gpr_poc\gpr_poc.exe view tmp\store_lod_001 --exagg 8 --opacity 0.6 --smoke