diff options
author | David Robillard <d@drobilla.net> | 2022-04-21 17:53:38 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-04-21 17:53:38 -0400 |
commit | a16cd4b851d30a8b9389de6085b391e77f0a349e (patch) | |
tree | c2a078cb12a7b1206d8b3b1466ef05e93580c71f /src/x11_gl.c | |
parent | 64e784e77b45cdbcd4ce17187c9fa4259b0ddefb (diff) | |
download | pugl-a16cd4b851d30a8b9389de6085b391e77f0a349e.tar.gz pugl-a16cd4b851d30a8b9389de6085b391e77f0a349e.tar.bz2 pugl-a16cd4b851d30a8b9389de6085b391e77f0a349e.zip |
Improve error handling
Diffstat (limited to 'src/x11_gl.c')
-rw-r--r-- | src/x11_gl.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/x11_gl.c b/src/x11_gl.c index 934fc18..1ebe829 100644 --- a/src/x11_gl.c +++ b/src/x11_gl.c @@ -98,14 +98,18 @@ puglX11GlConfigure(PuglView* view) return PUGL_SUCCESS; } +PUGL_WARN_UNUSED_RESULT static PuglStatus puglX11GlEnter(PuglView* view, const PuglExposeEvent* PUGL_UNUSED(expose)) { PuglX11GlSurface* surface = (PuglX11GlSurface*)view->impl->surface; - glXMakeCurrent(view->impl->display, view->impl->win, surface->ctx); - return PUGL_SUCCESS; + + return glXMakeCurrent(view->impl->display, view->impl->win, surface->ctx) + ? PUGL_SUCCESS + : PUGL_FAILURE; } +PUGL_WARN_UNUSED_RESULT static PuglStatus puglX11GlLeave(PuglView* view, const PuglExposeEvent* expose) { @@ -113,9 +117,8 @@ puglX11GlLeave(PuglView* view, const PuglExposeEvent* expose) glXSwapBuffers(view->impl->display, view->impl->win); } - glXMakeCurrent(view->impl->display, None, NULL); - - return PUGL_SUCCESS; + return glXMakeCurrent(view->impl->display, None, NULL) ? PUGL_SUCCESS + : PUGL_FAILURE; } static PuglStatus @@ -125,6 +128,7 @@ puglX11GlCreate(PuglView* view) PuglX11GlSurface* const surface = (PuglX11GlSurface*)impl->surface; Display* const display = impl->display; GLXFBConfig fb_config = surface->fb_config; + PuglStatus st = PUGL_SUCCESS; const int ctx_attrs[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, @@ -171,7 +175,9 @@ puglX11GlCreate(PuglView* view) (const uint8_t*)"glXSwapIntervalEXT"); // Note that some drivers (NVidia) require the context to be entered here - puglX11GlEnter(view, NULL); + if ((st = puglX11GlEnter(view, NULL))) { + return st; + } // Set the swap interval if the user requested a specific value if (view->hints[PUGL_SWAP_INTERVAL] != PUGL_DONT_CARE) { @@ -184,15 +190,17 @@ puglX11GlCreate(PuglView* view) GLX_SWAP_INTERVAL_EXT, (unsigned int*)&view->hints[PUGL_SWAP_INTERVAL]); - puglX11GlLeave(view, NULL); + if ((st = puglX11GlLeave(view, NULL))) { + return st; + } } - glXGetConfig(impl->display, - impl->vi, - GLX_DOUBLEBUFFER, - &view->hints[PUGL_DOUBLE_BUFFER]); - - return PUGL_SUCCESS; + return !glXGetConfig(impl->display, + impl->vi, + GLX_DOUBLEBUFFER, + &view->hints[PUGL_DOUBLE_BUFFER]) + ? PUGL_SUCCESS + : PUGL_UNKNOWN_ERROR; } static void |