mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-03-31 09:07:13 +09:00
Destroy glx context on fail/deinit
This commit is contained in:
@@ -213,6 +213,7 @@ struct gsr_egl {
|
||||
Bool (*glXMakeContextCurrent)(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
|
||||
// TODO: Remove
|
||||
GLXContext (*glXCreateNewContext)(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct);
|
||||
void (*glXDestroyContext)(Display *dpy, GLXContext ctx);
|
||||
void (*glXSwapBuffers)(Display *dpy, GLXDrawable drawable);
|
||||
FUNC_glXCreateContextAttribsARB glXCreateContextAttribsARB;
|
||||
|
||||
|
||||
14
src/egl.c
14
src/egl.c
@@ -318,6 +318,12 @@ static bool gsr_egl_switch_to_glx_context(gsr_egl *self) {
|
||||
return true;
|
||||
|
||||
fail:
|
||||
if(self->glx_context) {
|
||||
self->glXMakeContextCurrent(self->x11.dpy, None, None, NULL);
|
||||
self->glXDestroyContext(self->x11.dpy, self->glx_context);
|
||||
self->glx_context = NULL;
|
||||
self->glx_fb_config = NULL;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -372,6 +378,7 @@ static bool gsr_egl_load_glx(gsr_egl *self, void *library) {
|
||||
{ (void**)&self->glXChooseFBConfig, "glXChooseFBConfig" },
|
||||
{ (void**)&self->glXMakeContextCurrent, "glXMakeContextCurrent" },
|
||||
{ (void**)&self->glXCreateNewContext, "glXCreateNewContext" },
|
||||
{ (void**)&self->glXDestroyContext, "glXDestroyContext" },
|
||||
{ (void**)&self->glXSwapBuffers, "glXSwapBuffers" },
|
||||
|
||||
{ NULL, NULL }
|
||||
@@ -567,6 +574,13 @@ void gsr_egl_unload(gsr_egl *self) {
|
||||
self->egl_display = NULL;
|
||||
}
|
||||
|
||||
if(self->glx_context) {
|
||||
self->glXMakeContextCurrent(self->x11.dpy, None, None, NULL);
|
||||
self->glXDestroyContext(self->x11.dpy, self->glx_context);
|
||||
self->glx_context = NULL;
|
||||
self->glx_fb_config = NULL;
|
||||
}
|
||||
|
||||
if(self->x11.window) {
|
||||
XDestroyWindow(self->x11.dpy, self->x11.window);
|
||||
self->x11.window = None;
|
||||
|
||||
Reference in New Issue
Block a user