| @@ -34,6 +34,7 @@ | |||
| #include <stdlib.h> | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #include <stdarg.h> | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xutil.h> | |||
| @@ -52,25 +53,25 @@ | |||
| // Regular log entry (low frequency) | |||
| // | |||
| // #define Dlog_verbose if(1);else printf | |||
| #define Dlog if(0);else printf | |||
| #define Dlog if(0);else lglw_log | |||
| // | |||
| // Verbose log entry | |||
| // | |||
| // #define Dlog_v if(1);else printf | |||
| #define Dlog_v if(0);else printf | |||
| // #define Dlog_v if(1);else lglw_log | |||
| #define Dlog_v if(0);else lglw_log | |||
| // | |||
| // Very-verbose log entry | |||
| // | |||
| // #define Dlog_vv if(1);else printf | |||
| #define Dlog_vv if(0);else printf | |||
| // #define Dlog_vv if(1);else lglw_log | |||
| #define Dlog_vv if(0);else lglw_log | |||
| // | |||
| // Very-very-verbose log entry | |||
| // | |||
| #define Dlog_vvv if(1);else printf | |||
| // #define Dlog_vvv if(0);else printf | |||
| #define Dlog_vvv if(0);else lglw_log | |||
| // #define Dlog_vvv if(0);else lglw_log | |||
| // | |||
| // Print to stdout | |||
| @@ -228,9 +229,16 @@ static uint32_t loc_millisec_delta (lglw_int_t *lglw) { | |||
| static FILE *logfile; | |||
| void lglw_log(const char *logData, ...) { | |||
| fprintf(logfile, logData); | |||
| static char buf[16*1024]; | |||
| va_list va; | |||
| va_start(va, logData); | |||
| vsprintf(buf, logData, va); | |||
| va_end(va); | |||
| printf(buf); | |||
| //fprintf(logfile, logData); | |||
| fputs(buf, logfile); | |||
| fflush(logfile); | |||
| printf(logData); | |||
| // printf(logData); | |||
| } | |||
| @@ -353,6 +361,11 @@ static lglw_bool_t loc_create_hidden_window(lglw_int_t *lglw, int32_t _w, int32_ | |||
| Dlog_v("lglw:loc_create_hidden_window: 5\n"); | |||
| lglw->ctx = glXCreateContext(lglw->xdsp, lglw->vi, None, True); | |||
| if(NULL == lglw->ctx) | |||
| { | |||
| Dlog("lglw: FAILED to create context!!!\n"); | |||
| } | |||
| Dlog_v("lglw:loc_create_hidden_window: 6\n"); | |||
| if(NULL == lglw->ctx) | |||
| { | |||
| @@ -431,7 +444,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case Expose: | |||
| Dlog_v("lglw:loc_eventProc: xev Expose\n"); | |||
| Dlog_vv("lglw:loc_eventProc: xev Expose\n"); | |||
| loc_handle_queued_mouse_warp(lglw); | |||
| eventHandled = LGLW_FALSE; | |||
| if(NULL != lglw->redraw.cbk) | |||
| @@ -1172,7 +1185,7 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| if(NULL != lglw) | |||
| { | |||
| Dlog_v("lglw:lglw_window_open: 1, %p, %i \n", (Window)_parentHWNDOrNull, (Window)_parentHWNDOrNull); | |||
| Dlog_v("lglw:lglw_window_open: 1, %p, %i p=(%d; %d) s=(%d; %d)\n", (Window)_parentHWNDOrNull, (Window)_parentHWNDOrNull, _x, _y, _w, _h); | |||
| lglw->parent_xwnd = (0 == _parentHWNDOrNull) ? DefaultRootWindow(lglw->xdsp) : (Window)_parentHWNDOrNull; | |||
| Dlog_v("lglw:lglw_window_open: 2 lglw=%p\n", lglw); | |||
| @@ -1342,12 +1355,24 @@ void lglw_window_close (lglw_t _lglw) { | |||
| Dlog_v("lglw:lglw_window_close: 3\n"); | |||
| if(lglw->win.b_owner) | |||
| { | |||
| XUnmapWindow(lglw->xdsp, lglw->win.xwnd); | |||
| XDestroyWindow(lglw->xdsp, lglw->win.xwnd); | |||
| lglw->win.b_owner = LGLW_FALSE; | |||
| } | |||
| XSync(lglw->xdsp, False); | |||
| lglw->win.xwnd = 0; | |||
| lglw->win.mapped = LGLW_FALSE; | |||
| { | |||
| XEvent xev; | |||
| int queued = XPending(lglw->xdsp); | |||
| Dlog_vvv("lglw:lglw_window_close: consume %d pending events\n", queued); | |||
| while(queued) | |||
| { | |||
| XNextEvent(lglw->xdsp, &xev); | |||
| queued--; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| Dlog_v("lglw:lglw_window_close: EXIT\n"); | |||
| @@ -1389,14 +1414,14 @@ lglw_bool_t lglw_window_is_visible(lglw_t _lglw) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| Dlog_vvv("lglw:lglw_window_is_visible: 1\n"); | |||
| // Dlog_vvv("lglw:lglw_window_is_visible: 1\n"); | |||
| if(NULL != lglw && 0 != lglw->win.xwnd) | |||
| { | |||
| Dlog_vvv("lglw:lglw_window_is_visible: 2\n"); | |||
| // Dlog_vvv("lglw:lglw_window_is_visible: 2\n"); | |||
| r = lglw->win.mapped; | |||
| } | |||
| Dlog_vvv("lglw:lglw_window_is_visible: EXIT\n"); | |||
| // Dlog_vvv("lglw:lglw_window_is_visible: EXIT\n"); | |||
| return r; | |||
| } | |||
| @@ -1478,6 +1503,7 @@ void lglw_glcontext_push(lglw_t _lglw) { | |||
| { | |||
| Dlog("[---] lglw_glcontext_push: glXMakeCurrent() failed. win.xwnd=%p hidden.xwnd=%p ctx=%p glGetError()=%d\n", lglw->win.xwnd, lglw->hidden.xwnd, lglw->ctx, glGetError()); | |||
| } | |||
| // Dlog_vvv("lglw:lglw_glcontext_push: LEAVE\n"); | |||
| } | |||
| } | |||
| @@ -2142,7 +2168,8 @@ void lglw_events(lglw_t _lglw) { | |||
| { | |||
| XEvent xev; | |||
| int queued = XPending(lglw->xdsp); | |||
| Dlog_v("lglw:lglw_events: (events: %i)\n", queued); | |||
| if(queued > 0) | |||
| Dlog_vvv("lglw:lglw_events: (events: %i)\n", queued); | |||
| while(queued) | |||
| { | |||
| XNextEvent(lglw->xdsp, &xev); | |||