Added graceful renderer and audio thread destruction, fixes #47

This commit is contained in:
Jarcode
2018-09-09 07:54:51 -07:00
parent d4b333e48c
commit 11a6137370
5 changed files with 57 additions and 4 deletions

View File

@@ -160,6 +160,7 @@ Bool (*glXMakeCurrent) (Display* dpy, GLXDrawable drawable,
GLXDrawable (*glXGetCurrentDrawable) (void);
__GLXextFuncPtr (*glXGetProcAddressARB) (const GLubyte *);
void (*glXSwapBuffers) (Display* dpy, GLXDrawable drawable);
void (*glXDestroyContext) (Display* dpy, GLXContext ctx);
extern struct gl_wcb wcb_glx;
@@ -222,6 +223,7 @@ static void init(void) {
resolve(glXGetCurrentDrawable);
resolve(glXGetProcAddressARB);
resolve(glXSwapBuffers);
resolve(glXDestroyContext);
intern(_MOTIF_WM_HINTS, false);
intern(WM_DELETE_WINDOW, true);
@@ -481,6 +483,16 @@ static double get_timert(void) {
return (double) tv.tv_sec + ((double) tv.tv_nsec / 1000000000.0D);
}
static void destroy(struct glxwin* w) {
glXMakeCurrent(display, None, NULL); /* release context */
glXDestroyContext(display, w->context);
XDestroyWindow(display, w->w);
}
static void terminate(void) {
XCloseDisplay(display);
}
static double get_time (struct glxwin* w) { return get_timert() - w->time; }
static void set_time (struct glxwin* w, double time) { w->time = get_timert() - time; }
static Display* get_x11_display(struct glxwin* w) { return display; }