summary refs log tree commit diff
path: root/bin/gfb.c
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2018-02-05 14:47:19 -0500
committerJune McEnroe <programble@gmail.com>2018-02-05 14:47:19 -0500
commita150d3d2eaaa4411d7cdc625c198c76d71a9638f (patch)
treeb5b9963bcd000bd759e2e4e0f9f78901289a1cfe /bin/gfb.c
parentRewrite gfxx bit handling (diff)
downloadsrc-a150d3d2eaaa4411d7cdc625c198c76d71a9638f.tar.gz
src-a150d3d2eaaa4411d7cdc625c198c76d71a9638f.zip
Double-buffer gfb frontend
Still not vsync (seems like a newer DRM-fbdev implementation handles
FBIO_WAITFORVSYNC but my kernel doesn't), but avoids flicker from
clearing to black for each frame.
Diffstat (limited to '')
-rw-r--r--bin/gfb.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/bin/gfb.c b/bin/gfb.c
index 1cd56ac8..3606bb05 100644
--- a/bin/gfb.c
+++ b/bin/gfb.c
@@ -19,6 +19,7 @@
 #include <linux/fb.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sysexits.h>
@@ -75,8 +76,10 @@ int main(int argc, char *argv[]) {
     error = tcsetattr(STDERR_FILENO, TCSADRAIN, &term);
     if (error) err(EX_IOERR, "tcsetattr");
 
+    uint32_t back[info.xres * info.yres];
     for (;;) {
-        draw(buf, info.xres, info.yres);
+        draw(back, info.xres, info.yres);
+        memcpy(buf, back, size);
 
         char in;
         ssize_t len = read(STDERR_FILENO, &in, 1);