Context
The framebuffer layer has skeets_framebuffer_mark_dirty() and skeets_framebuffer_flush() infrastructure in src/platform/framebuffer.h/cpp, but the main rendering loop in src/kobo/main.cpp never uses it. Instead, it does explicit refresh_region() calls for stat lines and full-screen refreshes for everything else.
Feed/thread stat updates already use localized partial GC16 refreshes (render_feed_stats_only / render_thread_stats_only), but view-level redraws (scroll, view switch, image load) still trigger full-screen flashing refreshes.
Sub-tasks
Impact
Reducing unnecessary full-screen e-ink flashing will significantly improve the reading experience — less flickering during scroll, image loads, and interaction toggles.
References
- Dirty region infrastructure:
src/platform/framebuffer.h/cpp
- Current refresh calls:
src/kobo/main.cpp
- KOReader waveform reference: uses REAGL for partial updates, DU for fast scroll, GC16 for full
Context
The framebuffer layer has
skeets_framebuffer_mark_dirty()andskeets_framebuffer_flush()infrastructure insrc/platform/framebuffer.h/cpp, but the main rendering loop insrc/kobo/main.cppnever uses it. Instead, it does explicitrefresh_region()calls for stat lines and full-screen refreshes for everything else.Feed/thread stat updates already use localized partial GC16 refreshes (
render_feed_stats_only/render_thread_stats_only), but view-level redraws (scroll, view switch, image load) still trigger full-screen flashing refreshes.Sub-tasks
skeets_framebuffer_mark_dirty()during draw operationsskeets_framebuffer_flush()at end of each render pass instead of explicit refresh callsImpact
Reducing unnecessary full-screen e-ink flashing will significantly improve the reading experience — less flickering during scroll, image loads, and interaction toggles.
References
src/platform/framebuffer.h/cppsrc/kobo/main.cpp