int main(int argc, char *argv[]) { dpy = XOpenDisplay(NULL); if(dpy == NULL) { printf("cannot connect to X server\n\n"); return 0; } root = DefaultRootWindow(dpy); vi = glXChooseVisual(dpy, 0, att); if(vi == NULL) { printf("no appropriate visual found\n\n"); return 0; } else { printf("visual %p selected\n", (void *)vi->visualid); /* %p creates hexadecimal output like in glxinfo */ } cmap = XCreateColormap(dpy, root, vi->visual, AllocNone); swa.colormap = cmap; swa.event_mask = ExposureMask | KeyPressMask; win = XCreateWindow(dpy, root, 0, 0, 600, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa); XMapWindow(dpy, win); XStoreName(dpy, win, "OpenGL Color Cube Example"); glc = glXCreateContext(dpy, vi, NULL, GL_TRUE); glXMakeCurrent(dpy, win, glc); glEnable(GL_DEPTH_TEST); // Define "Close Window" Atom WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", False); XSetWMProtocols(dpy, win, &WM_DELETE_WINDOW, 1); while(1) { XNextEvent(dpy, &xev); if(xev.type == Expose) { XGetWindowAttributes(dpy, win, &gwa); glViewport(0, 0, gwa.width, gwa.height); DrawAQuad(); glXSwapBuffers(dpy, win); } else if(xev.type == KeyPress || xev.type == ClientMessage) { glXMakeCurrent(dpy, None, NULL); glXDestroyContext(dpy, glc); XDestroyWindow(dpy, win); XCloseDisplay(dpy); break; } } return 0; }
int main(int argc, char *argv[]) { dpy = XOpenDisplay(NULL); if(dpy == NULL) { printf("\n\tcannot connect to X server\n\n"); exit(0); } root = DefaultRootWindow(dpy); vi = glXChooseVisual(dpy, 0, att); if(vi == NULL) { printf("\n\tno appropriate visual found\n\n"); exit(0); } else { printf("\n\tvisual %p selected\n", (void *)vi->visualid); /* %p creates hexadecimal output like in glxinfo */ } cmap = XCreateColormap(dpy, root, vi->visual, AllocNone); swa.colormap = cmap; swa.event_mask = ExposureMask | KeyPressMask; win = XCreateWindow(dpy, root, 0, 0, 600, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa); XMapWindow(dpy, win); XStoreName(dpy, win, "VERY SIMPLE APPLICATION"); glc = glXCreateContext(dpy, vi, NULL, GL_TRUE); glXMakeCurrent(dpy, win, glc); glEnable(GL_DEPTH_TEST); while(1) { XNextEvent(dpy, &xev); if(xev.type == Expose) { XGetWindowAttributes(dpy, win, &gwa); glViewport(0, 0, gwa.width, gwa.height); DrawAQuad(); glXSwapBuffers(dpy, win); } else if(xev.type == KeyPress) { glXMakeCurrent(dpy, None, NULL); glXDestroyContext(dpy, glc); XDestroyWindow(dpy, win); XCloseDisplay(dpy); exit(0); } } /* this closes while(1) { */ } /* this is the } which closes int main(int argc, char *argv[]) { */
int main(int argc, char *argv[]) { puts("Press any key to continue"); bytes_read = getline(&user_input, &nbytes, stdin); dpy = XOpenDisplay(NULL); if (dpy == NULL) { printf("\n\tcannot connect to X server\n\n"); exit(0); } root = DefaultRootWindow(dpy); vi = glXChooseVisual(dpy, 0, att); if (vi == NULL) { printf("\n\tno appropriate visual found\n\n"); exit(0); } else { printf("\n\tvisual %p selected\n", (void *) vi->visualid); /* %p creates hexadecimal output like in glxinfo */ } CreateWindow(&cmap, &swa, &win, dpy, "First Window"); glc = glXCreateContext(dpy, vi, NULL, GL_TRUE); glXMakeCurrent(dpy, win, glc); printf("GL_VENDOR: %s\n", (char*)glGetString(GL_VENDOR)); printf("GL_RENDERER: %s\n", (char*)glGetString(GL_RENDERER)); printf("GL_VERSION: %s\n", (char*)glGetString(GL_VERSION)); printf("GL_SHADING_LANGUAGE_VERSION: %s\n", (char*)glGetString(GL_SHADING_LANGUAGE_VERSION)); printf("GL_EXTENSIONS: %s\n", (char*)glGetString(GL_SHADING_LANGUAGE_VERSION)); glEnable(GL_DEPTH_TEST); while (1) { XNextEvent(dpy, &xev); if (xev.type == Expose) { XGetWindowAttributes(dpy, win, &gwa); glViewport(0, 0, gwa.width, gwa.height); DrawAQuad(); glXSwapBuffers(dpy, win); puts("Press Enter to finish"); bytes_read = getline(&user_input, &nbytes, stdin); glXMakeCurrent(dpy, None, NULL); glXDestroyContext(dpy, glc); XDestroyWindow(dpy, win); XCloseDisplay(dpy); exit(0); } } }