nuclear@3: #include nuclear@3: #include nuclear@3: #include "wsys.h" nuclear@3: nuclear@3: struct window { nuclear@3: Window win; nuclear@3: GLXContext ctx; nuclear@3: struct window *next; nuclear@3: }; nuclear@3: nuclear@3: static int init(void); nuclear@3: static void shutdown(void); nuclear@3: static int set_vidmode(int xsz, int ysz, int bpp); nuclear@3: static int get_vidmode(int *xsz, int *ysz, int *bpp); nuclear@3: static int create_window(int xsz, int ysz, unsigned int flags); nuclear@3: static void close_window(int id); nuclear@3: nuclear@3: static struct wsys_module ws = { nuclear@3: "x11-glx", 0, nuclear@3: init, nuclear@3: shutdown, nuclear@3: set_vidmode, nuclear@3: get_vidmode, nuclear@3: create_window, nuclear@3: close_window, nuclear@3: 0 nuclear@3: }; nuclear@3: nuclear@3: static Display *dpy; nuclear@3: static int scr; nuclear@3: static struct window *winlist; nuclear@3: nuclear@3: nuclear@3: void sgl_register_x11(void) nuclear@3: { nuclear@3: sgl_register_module(&ws); nuclear@3: } nuclear@3: nuclear@3: static int init(void) nuclear@3: { nuclear@3: winlist = 0; nuclear@3: nuclear@3: if(!(dpy = XOpenDisplay(0))) { nuclear@3: return -1; nuclear@3: } nuclear@3: scr = DefaultScreen(dpy); nuclear@3: nuclear@3: return 0; nuclear@3: } nuclear@3: nuclear@3: static void shutdown(void) nuclear@3: { nuclear@3: while(winlist) { nuclear@3: struct window *win = winlist; nuclear@3: winlist = winlist->next; nuclear@3: nuclear@3: glXDestroyContext(dpy, win->ctx); nuclear@3: XCloseWindow(dpy, win->win); nuclear@3: free(win); nuclear@3: } nuclear@3: XCloseDisplay(dpy); nuclear@3: dpy = 0; nuclear@3: } nuclear@3: nuclear@3: static int set_vidmode(int xsz, int ysz, int bpp) nuclear@3: { nuclear@3: /* TODO */ nuclear@3: } nuclear@3: nuclear@3: static int get_vidmode(int *xsz, int *ysz, int *bpp) nuclear@3: { nuclear@3: /* TODO */ nuclear@3: } nuclear@3: nuclear@3: static int create_window(int xsz, int ysz, unsigned int flags) nuclear@3: { nuclear@3: } nuclear@3: nuclear@3: static void close_window(int id) nuclear@3: { nuclear@3: struct window dummy, *win, *prev; nuclear@3: dummy.next = winlist; nuclear@3: nuclear@3: prev = &dummy; nuclear@3: win = prev->next; nuclear@3: nuclear@3: while(win) { nuclear@3: if(win->win == id) { nuclear@3: glXDestroyContext(dpy, win->ctx); nuclear@3: XCloseWindow(dpy, win->win); nuclear@3: prev->next = win->next; nuclear@3: free(win); nuclear@3: return; nuclear@3: } nuclear@3: win = win->next; nuclear@3: } nuclear@3: }