sgl
annotate src/wsys_x11.c @ 3:1b6c5dadb460
started hacking the X11 module
author | John Tsiombikas <nuclear@siggraph.org> |
---|---|
date | Wed, 11 May 2011 09:09:43 +0300 |
parents | |
children | 648f8604d2b2 |
rev | line source |
---|---|
nuclear@3 | 1 #include <X11/Xlib.h> |
nuclear@3 | 2 #include <GL/glx.h> |
nuclear@3 | 3 #include "wsys.h" |
nuclear@3 | 4 |
nuclear@3 | 5 struct window { |
nuclear@3 | 6 Window win; |
nuclear@3 | 7 GLXContext ctx; |
nuclear@3 | 8 struct window *next; |
nuclear@3 | 9 }; |
nuclear@3 | 10 |
nuclear@3 | 11 static int init(void); |
nuclear@3 | 12 static void shutdown(void); |
nuclear@3 | 13 static int set_vidmode(int xsz, int ysz, int bpp); |
nuclear@3 | 14 static int get_vidmode(int *xsz, int *ysz, int *bpp); |
nuclear@3 | 15 static int create_window(int xsz, int ysz, unsigned int flags); |
nuclear@3 | 16 static void close_window(int id); |
nuclear@3 | 17 |
nuclear@3 | 18 static struct wsys_module ws = { |
nuclear@3 | 19 "x11-glx", 0, |
nuclear@3 | 20 init, |
nuclear@3 | 21 shutdown, |
nuclear@3 | 22 set_vidmode, |
nuclear@3 | 23 get_vidmode, |
nuclear@3 | 24 create_window, |
nuclear@3 | 25 close_window, |
nuclear@3 | 26 0 |
nuclear@3 | 27 }; |
nuclear@3 | 28 |
nuclear@3 | 29 static Display *dpy; |
nuclear@3 | 30 static int scr; |
nuclear@3 | 31 static struct window *winlist; |
nuclear@3 | 32 |
nuclear@3 | 33 |
nuclear@3 | 34 void sgl_register_x11(void) |
nuclear@3 | 35 { |
nuclear@3 | 36 sgl_register_module(&ws); |
nuclear@3 | 37 } |
nuclear@3 | 38 |
nuclear@3 | 39 static int init(void) |
nuclear@3 | 40 { |
nuclear@3 | 41 winlist = 0; |
nuclear@3 | 42 |
nuclear@3 | 43 if(!(dpy = XOpenDisplay(0))) { |
nuclear@3 | 44 return -1; |
nuclear@3 | 45 } |
nuclear@3 | 46 scr = DefaultScreen(dpy); |
nuclear@3 | 47 |
nuclear@3 | 48 return 0; |
nuclear@3 | 49 } |
nuclear@3 | 50 |
nuclear@3 | 51 static void shutdown(void) |
nuclear@3 | 52 { |
nuclear@3 | 53 while(winlist) { |
nuclear@3 | 54 struct window *win = winlist; |
nuclear@3 | 55 winlist = winlist->next; |
nuclear@3 | 56 |
nuclear@3 | 57 glXDestroyContext(dpy, win->ctx); |
nuclear@3 | 58 XCloseWindow(dpy, win->win); |
nuclear@3 | 59 free(win); |
nuclear@3 | 60 } |
nuclear@3 | 61 XCloseDisplay(dpy); |
nuclear@3 | 62 dpy = 0; |
nuclear@3 | 63 } |
nuclear@3 | 64 |
nuclear@3 | 65 static int set_vidmode(int xsz, int ysz, int bpp) |
nuclear@3 | 66 { |
nuclear@3 | 67 /* TODO */ |
nuclear@3 | 68 } |
nuclear@3 | 69 |
nuclear@3 | 70 static int get_vidmode(int *xsz, int *ysz, int *bpp) |
nuclear@3 | 71 { |
nuclear@3 | 72 /* TODO */ |
nuclear@3 | 73 } |
nuclear@3 | 74 |
nuclear@3 | 75 static int create_window(int xsz, int ysz, unsigned int flags) |
nuclear@3 | 76 { |
nuclear@3 | 77 } |
nuclear@3 | 78 |
nuclear@3 | 79 static void close_window(int id) |
nuclear@3 | 80 { |
nuclear@3 | 81 struct window dummy, *win, *prev; |
nuclear@3 | 82 dummy.next = winlist; |
nuclear@3 | 83 |
nuclear@3 | 84 prev = &dummy; |
nuclear@3 | 85 win = prev->next; |
nuclear@3 | 86 |
nuclear@3 | 87 while(win) { |
nuclear@3 | 88 if(win->win == id) { |
nuclear@3 | 89 glXDestroyContext(dpy, win->ctx); |
nuclear@3 | 90 XCloseWindow(dpy, win->win); |
nuclear@3 | 91 prev->next = win->next; |
nuclear@3 | 92 free(win); |
nuclear@3 | 93 return; |
nuclear@3 | 94 } |
nuclear@3 | 95 win = win->next; |
nuclear@3 | 96 } |
nuclear@3 | 97 } |