| @@ -34,6 +34,7 @@ | |||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include <string.h> | #include <string.h> | ||||
| #include <stdarg.h> | |||||
| #include <X11/Xlib.h> | #include <X11/Xlib.h> | ||||
| #include <X11/Xutil.h> | #include <X11/Xutil.h> | ||||
| @@ -52,25 +53,25 @@ | |||||
| // Regular log entry (low frequency) | // Regular log entry (low frequency) | ||||
| // | // | ||||
| // #define Dlog_verbose if(1);else printf | // #define Dlog_verbose if(1);else printf | ||||
| #define Dlog if(0);else printf | |||||
| #define Dlog if(0);else lglw_log | |||||
| // | // | ||||
| // Verbose log entry | // 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 | // 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 | // 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 | // Print to stdout | ||||
| @@ -228,9 +229,16 @@ static uint32_t loc_millisec_delta (lglw_int_t *lglw) { | |||||
| static FILE *logfile; | static FILE *logfile; | ||||
| void lglw_log(const char *logData, ...) { | 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); | 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"); | Dlog_v("lglw:loc_create_hidden_window: 5\n"); | ||||
| lglw->ctx = glXCreateContext(lglw->xdsp, lglw->vi, None, True); | 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"); | Dlog_v("lglw:loc_create_hidden_window: 6\n"); | ||||
| if(NULL == lglw->ctx) | if(NULL == lglw->ctx) | ||||
| { | { | ||||
| @@ -431,7 +444,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||||
| break; | break; | ||||
| case Expose: | case Expose: | ||||
| Dlog_v("lglw:loc_eventProc: xev Expose\n"); | |||||
| Dlog_vv("lglw:loc_eventProc: xev Expose\n"); | |||||
| loc_handle_queued_mouse_warp(lglw); | loc_handle_queued_mouse_warp(lglw); | ||||
| eventHandled = LGLW_FALSE; | eventHandled = LGLW_FALSE; | ||||
| if(NULL != lglw->redraw.cbk) | 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) | 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; | lglw->parent_xwnd = (0 == _parentHWNDOrNull) ? DefaultRootWindow(lglw->xdsp) : (Window)_parentHWNDOrNull; | ||||
| Dlog_v("lglw:lglw_window_open: 2 lglw=%p\n", lglw); | 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"); | Dlog_v("lglw:lglw_window_close: 3\n"); | ||||
| if(lglw->win.b_owner) | if(lglw->win.b_owner) | ||||
| { | { | ||||
| XUnmapWindow(lglw->xdsp, lglw->win.xwnd); | |||||
| XDestroyWindow(lglw->xdsp, lglw->win.xwnd); | XDestroyWindow(lglw->xdsp, lglw->win.xwnd); | ||||
| lglw->win.b_owner = LGLW_FALSE; | lglw->win.b_owner = LGLW_FALSE; | ||||
| } | } | ||||
| XSync(lglw->xdsp, False); | XSync(lglw->xdsp, False); | ||||
| lglw->win.xwnd = 0; | lglw->win.xwnd = 0; | ||||
| lglw->win.mapped = LGLW_FALSE; | 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"); | 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_bool_t r = LGLW_FALSE; | ||||
| LGLW(_lglw); | 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) | 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; | r = lglw->win.mapped; | ||||
| } | } | ||||
| Dlog_vvv("lglw:lglw_window_is_visible: EXIT\n"); | |||||
| // Dlog_vvv("lglw:lglw_window_is_visible: EXIT\n"); | |||||
| return r; | 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("[---] 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; | XEvent xev; | ||||
| int queued = XPending(lglw->xdsp); | 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) | while(queued) | ||||
| { | { | ||||
| XNextEvent(lglw->xdsp, &xev); | XNextEvent(lglw->xdsp, &xev); | ||||