diff --git a/glx-dbl-bare/glx-dbl-bare.c b/glx-dbl-bare/glx-dbl-bare.c index bc595b6..87ccc80 100644 --- a/glx-dbl-bare/glx-dbl-bare.c +++ b/glx-dbl-bare/glx-dbl-bare.c @@ -1,9 +1,15 @@ -#include -#include -#include +#include +#include +#include +#include -static int attributeList[] = { GLX_RGBA, None }; +static int attributeList[] = { + GLX_RGBA, + GLX_DOUBLEBUFFER, + GLX_DEPTH_SIZE, 24, + None +}; static Bool WaitForNotify(Display *d, XEvent *e, char *arg) { @@ -21,11 +27,29 @@ int main(int argc, char **argv) XEvent event; /* get a connection */ - dpy = XOpenDisplay(0); + dpy = XOpenDisplay(NULL); + if (dpy == NULL) + { + fprintf(stderr, "XOpenDisplay() returned NULL\n"); + return 2; + } + /* get an appropriate visual */ vi = glXChooseVisual(dpy, DefaultScreen(dpy), attributeList); + if (vi == NULL) + { + fprintf(stderr, "glXChooseVisual() returned NULL\n"); + return 2; + } + /* create a GLX context */ - cx = glXCreateContext(dpy, vi, 0, GL_FALSE); + cx = glXCreateContext(dpy, vi, NULL, GL_TRUE); + if (cx == NULL) + { + fprintf(stderr, "glXCreateContext() returned NULL\n"); + return 2; + } + /* create a color map */ cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); @@ -36,15 +60,28 @@ int main(int argc, char **argv) swa.event_mask = StructureNotifyMask; win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 100, 100, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel|CWColormap|CWEventMask, &swa); + CWBorderPixel | CWColormap | CWEventMask, &swa); XMapWindow(dpy, win); XIfEvent(dpy, &event, WaitForNotify, (char*)win); /* connect the context to the window */ - glXMakeCurrent(dpy, win, cx); + if (glXMakeCurrent(dpy, win, cx) == GL_FALSE) + { + fprintf(stderr, "glXMakeCurrent() returned false\n"); + return 2; + } + + /* setup */ + glEnable(GL_DEPTH_TEST); + /* clear the buffer */ - glClearColor(1,1,0,1); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); + glClearColor(1, 1, 0, 1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glXSwapBuffers(dpy, win); + /* wait a while */ - sleep(10); + sleep(5); + + /* teardown */ + XFree(vi); + XCloseDisplay(dpy); }