nuclear@2: #include "opengl.h" nuclear@2: #include "logger.h" nuclear@2: nuclear@2: extern Display *dpy; nuclear@2: extern Window root_win; nuclear@2: extern int screen_num; nuclear@2: extern int root_width, root_height; nuclear@2: nuclear@2: GLXContext create_gl(Window xwin) nuclear@2: { nuclear@2: static int glxattr[] = { nuclear@2: GLX_USE_GL, 1, nuclear@2: GLX_RGBA, nuclear@2: GLX_DOUBLEBUFFER, nuclear@2: GLX_RED_SIZE, 8, nuclear@2: GLX_GREEN_SIZE, 8, nuclear@2: GLX_BLUE_SIZE, 8, nuclear@2: GLX_DEPTH_SIZE, 16, nuclear@2: None nuclear@2: }; nuclear@2: nuclear@2: XVisualInfo *vis_info = glXChooseVisual(dpy, screen_num, glxattr); nuclear@2: if(!vis_info) { nuclear@2: log_error("failed to find suitable GLX visual\n"); nuclear@2: return 0; nuclear@2: } nuclear@2: nuclear@2: GLXContext ctx = glXCreateContext(dpy, vis_info, 0, True); nuclear@2: if(!ctx) { nuclear@2: log_error("failed to create OpenGL context\n"); nuclear@2: XFree(vis_info); nuclear@2: return 0; nuclear@2: } nuclear@2: XFree(vis_info); nuclear@2: nuclear@2: if(!glXMakeCurrent(dpy, xwin, ctx)) { nuclear@2: log_error("failed to attach OpenGL context to window\n"); nuclear@2: glXDestroyContext(dpy, ctx); nuclear@2: return 0; nuclear@2: } nuclear@2: return ctx; nuclear@2: } nuclear@2: nuclear@2: void destroy_gl(GLXContext ctx) nuclear@2: { nuclear@2: glXMakeCurrent(dpy, 0, 0); nuclear@2: glXDestroyContext(dpy, ctx); nuclear@2: }