diff options
author | turret <turret@duck.com> | 2023-06-29 17:20:42 -0500 |
---|---|---|
committer | turret <turret@duck.com> | 2023-06-29 17:20:42 -0500 |
commit | 7c53d95c6f5a8a1d1f67a0eb9a358f579b031391 (patch) | |
tree | 8d17549e129cc0df49f1389cfdfcb1c58f53f91a /donut.c | |
parent | f98f768869eac86701bd7291c966df46fd6df97d (diff) | |
download | donut-822c05a1a8cad0261632e15f21b7115894ca55d3.tar.gz donut-822c05a1a8cad0261632e15f21b7115894ca55d3.tar.bz2 donut-822c05a1a8cad0261632e15f21b7115894ca55d3.zip |
donut: implement double bufferingv3
Diffstat (limited to 'donut.c')
-rw-r--r-- | donut.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -28,6 +28,7 @@ #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xos.h> +#include <X11/extensions/Xdbe.h> char *argv0; #include "arg.h" @@ -121,6 +122,12 @@ int main(int argc, char **argv) { XClearWindow(dis, win); XMapRaised(dis, win); + XdbeSwapInfo swap_info = { + win, + XdbeUndefined + }; + XdbeBackBuffer back_buffer = XdbeAllocateBackBufferName(dis, win, swap_info.swap_action); + // torus rotation floats float A = 0; // x-axis float B = 0; // z-axis @@ -149,12 +156,15 @@ int main(int argc, char **argv) { for(int y = 0; height >= y; y++){ int color = (b[x + width * y] - 1 + M_SQRT2) / sqrt(8) * 255; XSetForeground(dis, gc, color << 16 | color << 8 | color); - XFillRectangle(dis, win, gc, x * SCALE, y * SCALE, SCALE, SCALE); + XFillRectangle(dis, back_buffer, gc, x * SCALE, y * SCALE, SCALE, SCALE); } } + XdbeSwapBuffers(dis, &swap_info, 1); + free(b); + XSync(dis, 1); double etime = utime(); if(etime < stime + 1000/FPS_MAX) |