653ad8902f
Root cause: LVGL9 canvas = lv_image backed by draw_buf with image cache. Mutating raw uint16_t* buffer without lv_image_cache_drop + lv_draw_buf_invalidate_cache leaves stale texture (gray/black). Only label (FPS) updated via lv_label_set_text_fmt, so symptom = FPS counter works, game invisible. Fix: - fb_native typed uint16_t* raw RGB565, not lv_color16_t bitfield (endian bug) - keep lv_draw_buf_t* from lv_canvas_get_draw_buf() - each frame after gb_run_frame(): invalidate_cache + cache_drop + invalidate - initial buffer fill check pattern removed, added lines_drawn debug in FPS label - forward-decl lv_image_cache_drop (not in public SDK headers but firmware exports it) - requires firmware feature/gameboy-canvas-full-api: lv_draw_buf_invalidate_cache, lv_image_cache_drop, lv_canvas_get_draw_buf, lv_image_set_scale/pivot, display resolution SDK 0.8.0-dev built with IDF 5.5.2 - 0 undefined beyond firmware exports. Builds to 50K GameBoy.app Also preserves mDNS browse API from parent branch (Mdns.h/cpp, tt_mdns.h/cpp) which sits on top of 60764979 'kidsOS-XXXX' mdns init.