fix(sdk+launcher): 图标不渲染真根因(agent-219) — meow_ui_img.c scale_buf cover 采样把乘写成除(÷缩放比→采到源图左上角透明区,全丢); 改乘+居中裁剪偏移修正; 宿主旧测试用纯色图掩盖了该bug。+ main_menu App退出/结构变化重绘时 fb_pan_buf0_force 无条件pan回buffer0(防App翻页留buffer1致菜单残帧)
meow_ui.a→3e0ee8f7 launcher→9d0efc2f hello→9609ea6e files→90f5cf07 ncm→be8be221(均已上卡); 真机截图证据 .tmp/meowbug/fix1.png+fix_b2_after.png
This commit is contained in:
1 parent
05a19a9ea3
commit
ab4da09e75
45 files changed
+1926
-147
No files matched your search
@@ -339,6 +339,7 @@ static meow_img *menu_app_icon_load(const struct app *a)
|
||||
snprintf(p, sizeof p, "/usr/data/mnt/sd_0/%s", a->icon);
|
||||
img = meow_img_load_file(p);
|
||||
}
|
||||
logmsg("icon: %s -> %s %s", a->id[0] ? a->id : a->name, p, img ? "OK" : "FAIL"); /* M2.87 排查 */
|
||||
return img;
|
||||
}
|
||||
|
||||
@@ -1574,14 +1575,23 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state,
|
||||
need_menu_paint = 1;
|
||||
dirty = 0;
|
||||
}
|
||||
/* Bug2 残帧防护 (agent-x):App 退出/结构变化触发全帧重画时,用 fb_pan_buf0_force()
|
||||
* 无条件把 LCDC pan 回 buffer0(菜单/所有 app 都画 buffer0 且从不自己 pan)。仅
|
||||
* fb_norm_buf0() 会在缓存的 fb_active_yoffset==0 时短路——若 App 运行期把物理
|
||||
* yoffset 留到了 buffer1(如其内部双缓冲翻页),缓存仍为 0 导致真正的 re-pan 从未
|
||||
* 发出,重画后的菜单落在 buffer0 而 LCDC 仍显示 buffer1 的 App 残帧(=菜单区残帧)。
|
||||
* 只在真重画(need_menu_paint)时 force-pan,不每圈 ioctl;重复 pan 到同一 yoffset
|
||||
* 是硬件 no-op,无频闪(fb_pan_buf0_force 注释)。 */
|
||||
if (need_menu_paint) {
|
||||
draw_menu(apps, napps, state, cursor, toast_ms, toast); /* 全画 SDK back_buf(RAM,快) */
|
||||
fb_pan_buf0_force(); /* 真重画 → 无条件 pan 回 buffer0(防 App 残留 buffer1) */
|
||||
need_menu_paint = 0;
|
||||
} else {
|
||||
fb_norm_buf0(); /* 无重画 → 短路;yoffset 非 0 才 pan */
|
||||
}
|
||||
/* A-1/A-2:呈现统一走 SDK meow_ui_flush()(内含帧率门控;无脏返回,门控未达期保留脏
|
||||
* 待下一轮)。fb_norm_buf0 确保 LCDC 显示 buffer0(yoffset 非 0 才 pan,短路无开销)。
|
||||
* 不再用 launcher 的 g_ndirty/g_dirty_full 做呈现门——SDK present 自会 no-op 于空脏。 */
|
||||
fb_norm_buf0(); /* Bug 3:确保 LCDC 显示 buffer0 */
|
||||
meow_ui_flush(); /* M2.16 无闪烁 + M2.16 帧率门控归口 SDK */
|
||||
if (toast_ms > 0) {
|
||||
toast_ms -= POLL_MS;
|
||||
|
||||
Reference in new issue
Block a user