Open
Description
The commit 980bd4c supports Linux framebuffer backend, but the behavior is weird on my machine.
Typical laptop with an intel processor.
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 39 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Vendor ID: GenuineIntel
Model name: 12th Gen Intel(R) Core(TM) i3-1215U
The root case is that some hardware require a cache synchronization when using the framebuffer.
Problem:
- Mismatch width and height and 3 windows are drawn(in the screenshot).
- Some updates (use
twin_screen_damage
to mark the field to be updated) are not apply immediately on computer screen.
One possible fix is in a1091150/mado@fbe9e00, the code is copied from FOSDEM 2020 - Back to the Linux Framebuffer! and sync_cache.c
After the below commit, another problem appeared is that the whole screen is not rendered when startup. To fix this, simply use twin_screen_damage
to mark the whole scrreen to be damaged, shown in the following code(a1091150/mado@977463a).
static bool twin_fbdev_work(void *closure)
{
twin_screen_t *screen = SCREEN(closure);
static bool run_once = true;
if (run_once) {
run_once = false;
twin_screen_damage(screen, 0, 0, screen->width, screen->height);
}
if (twin_screen_damaged(screen))
twin_screen_update(screen);
//...
}