aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-03-21 10:49:11 +0100
committerdec05eba <dec05eba@protonmail.com>2024-03-21 10:49:15 +0100
commitc2af57a978b29e536260b6bf8440827a4d8e01f7 (patch)
tree6012d2f8d50aeb5d7b72bcf83ca406012f71bb13
parent61a25c0dcc7a1c64167aa316d0e7514fbd778fea (diff)
Destroy glx context on fail/deinit
-rw-r--r--include/egl.h1
-rw-r--r--src/egl.c14
2 files changed, 15 insertions, 0 deletions
diff --git a/include/egl.h b/include/egl.h
index 1e9e0aa..afdb5a9 100644
--- a/include/egl.h
+++ b/include/egl.h
@@ -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;
diff --git a/src/egl.c b/src/egl.c
index 5f6da48..2ad4f85 100644
--- a/src/egl.c
+++ b/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;