From dc9f1d852d3fba8ddcf7bb535810ad384900fe06 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 7 Sep 2019 14:16:19 +0200 Subject: Clean up error handling --- pugl/detail/implementation.c | 2 +- pugl/detail/mac_cairo.m | 28 ++++++++++++++-------------- pugl/detail/mac_gl.m | 24 ++++++++++++------------ pugl/detail/types.h | 12 ++++++------ pugl/detail/win.c | 18 +++++++++--------- pugl/detail/win.h | 4 ++-- pugl/detail/win_cairo.c | 4 ++-- pugl/detail/win_gl.c | 43 +++++++++++++++++++++---------------------- pugl/detail/x11.c | 20 ++++++++++++-------- pugl/detail/x11_cairo.c | 28 ++++++++++++++-------------- pugl/detail/x11_gl.c | 37 ++++++++++++++++++++----------------- pugl/pugl.h | 17 ++++++++++------- 12 files changed, 123 insertions(+), 114 deletions(-) diff --git a/pugl/detail/implementation.c b/pugl/detail/implementation.c index f1fd57a..6375444 100644 --- a/pugl/detail/implementation.c +++ b/pugl/detail/implementation.c @@ -306,7 +306,7 @@ puglSetInternalClipboard(PuglView* const view, const size_t len) { if (type && strcmp(type, "text/plain")) { - return PUGL_ERR_UNSUPPORTED_TYPE; + return PUGL_UNSUPPORTED_TYPE; } puglSetBlob(&view->clipboard, data, len); diff --git a/pugl/detail/mac_cairo.m b/pugl/detail/mac_cairo.m index fcb4f07..143fbb0 100644 --- a/pugl/detail/mac_cairo.m +++ b/pugl/detail/mac_cairo.m @@ -61,13 +61,13 @@ @end -static int +static PuglStatus puglMacCairoConfigure(PuglView* PUGL_UNUSED(view)) { - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacCairoCreate(PuglView* view) { PuglInternals* impl = view->impl; @@ -82,10 +82,10 @@ puglMacCairoCreate(PuglView* view) } impl->drawView = drawView; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacCairoDestroy(PuglView* view) { PuglCairoView* const drawView = (PuglCairoView*)view->impl->drawView; @@ -94,15 +94,15 @@ puglMacCairoDestroy(PuglView* view) [drawView release]; view->impl->drawView = nil; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacCairoEnter(PuglView* view, bool drawing) { PuglCairoView* const drawView = (PuglCairoView*)view->impl->drawView; if (!drawing) { - return 0; + return PUGL_SUCCESS; } assert(!drawView->surface); @@ -115,15 +115,15 @@ puglMacCairoEnter(PuglView* view, bool drawing) drawView->cr = cairo_create(drawView->surface); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacCairoLeave(PuglView* view, bool drawing) { PuglCairoView* const drawView = (PuglCairoView*)view->impl->drawView; if (!drawing) { - return 0; + return PUGL_SUCCESS; } assert(drawView->surface); @@ -138,16 +138,16 @@ puglMacCairoLeave(PuglView* view, bool drawing) CGContextFlush(context); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacCairoResize(PuglView* PUGL_UNUSED(view), int PUGL_UNUSED(width), int PUGL_UNUSED(height)) { // No need to resize, the surface is created for the drawing context - return 0; + return PUGL_SUCCESS; } static void* diff --git a/pugl/detail/mac_gl.m b/pugl/detail/mac_gl.m index 58d815d..b84f799 100644 --- a/pugl/detail/mac_gl.m +++ b/pugl/detail/mac_gl.m @@ -93,13 +93,13 @@ typedef NSUInteger NSWindowStyleMask; @end -static int +static PuglStatus puglMacGlConfigure(PuglView* PUGL_UNUSED(view)) { - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacGlCreate(PuglView* view) { PuglInternals* impl = view->impl; @@ -116,10 +116,10 @@ puglMacGlCreate(PuglView* view) } impl->drawView = drawView; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacGlDestroy(PuglView* view) { PuglOpenGLView* const drawView = (PuglOpenGLView*)view->impl->drawView; @@ -128,19 +128,19 @@ puglMacGlDestroy(PuglView* view) [drawView release]; view->impl->drawView = nil; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacGlEnter(PuglView* view, bool PUGL_UNUSED(drawing)) { PuglOpenGLView* const drawView = (PuglOpenGLView*)view->impl->drawView; [[drawView openGLContext] makeCurrentContext]; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacGlLeave(PuglView* view, bool drawing) { PuglOpenGLView* const drawView = (PuglOpenGLView*)view->impl->drawView; @@ -151,17 +151,17 @@ puglMacGlLeave(PuglView* view, bool drawing) [NSOpenGLContext clearCurrentContext]; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglMacGlResize(PuglView* view, int PUGL_UNUSED(width), int PUGL_UNUSED(height)) { PuglOpenGLView* const drawView = (PuglOpenGLView*)view->impl->drawView; [drawView reshape]; - return 0; + return PUGL_SUCCESS; } static void* diff --git a/pugl/detail/types.h b/pugl/detail/types.h index 4ac224b..d018be5 100644 --- a/pugl/detail/types.h +++ b/pugl/detail/types.h @@ -89,22 +89,22 @@ typedef void PuglSurface; /** Graphics backend interface. */ struct PuglBackendImpl { /** Get visual information from display and setup view as necessary. */ - int (*configure)(PuglView*); + PuglStatus (*configure)(PuglView*); /** Create surface and drawing context. */ - int (*create)(PuglView*); + PuglStatus (*create)(PuglView*); /** Destroy surface and drawing context. */ - int (*destroy)(PuglView*); + PuglStatus (*destroy)(PuglView*); /** Enter drawing context, for drawing if parameter is true. */ - int (*enter)(PuglView*, bool); + PuglStatus (*enter)(PuglView*, bool); /** Leave drawing context, after drawing if parameter is true. */ - int (*leave)(PuglView*, bool); + PuglStatus (*leave)(PuglView*, bool); /** Resize drawing context to the given width and height. */ - int (*resize)(PuglView*, int, int); + PuglStatus (*resize)(PuglView*, int, int); /** Return the puglGetContext() handle for the application, if any. */ void* (*getContext)(PuglView*); diff --git a/pugl/detail/win.c b/pugl/detail/win.c index 25780e0..90c133f 100644 --- a/pugl/detail/win.c +++ b/pugl/detail/win.c @@ -163,18 +163,18 @@ puglCreateWindow(PuglView* view, const char* title) // Register window class if necessary if (!puglRegisterWindowClass(view->world->className)) { - return PUGL_ERR_UNKNOWN; + return PUGL_REGISTRATION_FAILED; } if (!view->backend || !view->backend->configure) { - return PUGL_ERR_UNKNOWN; + return PUGL_BAD_BACKEND; } - int st = view->backend->configure(view); + PuglStatus st = view->backend->configure(view); if (st || !impl->surface) { - return PUGL_ERR_SET_FORMAT; + return PUGL_SET_FORMAT_FAILED; } else if ((st = view->backend->create(view))) { - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } if (title) { @@ -828,7 +828,7 @@ puglSetFrame(PuglView* view, const PuglRect frame) rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, (SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOZORDER))) { - return PUGL_ERR_UNKNOWN; + return PUGL_UNKNOWN_ERROR; } } @@ -896,7 +896,7 @@ puglSetClipboard(PuglView* const view, if (st) { return st; } else if (!OpenClipboard(impl->hwnd)) { - return PUGL_ERR_UNKNOWN; + return PUGL_UNKNOWN_ERROR; } // Measure string and allocate global memory for clipboard @@ -905,7 +905,7 @@ puglSetClipboard(PuglView* const view, HGLOBAL mem = GlobalAlloc(GMEM_MOVEABLE, (wlen + 1) * sizeof(wchar_t)); if (!mem) { CloseClipboard(); - return PUGL_ERR_UNKNOWN; + return PUGL_UNKNOWN_ERROR; } // Lock global memory @@ -913,7 +913,7 @@ puglSetClipboard(PuglView* const view, if (!wstr) { GlobalFree(mem); CloseClipboard(); - return PUGL_ERR_UNKNOWN; + return PUGL_UNKNOWN_ERROR; } // Convert string into global memory and set it as clipboard data diff --git a/pugl/detail/win.h b/pugl/detail/win.h index b9e554c..6d89759 100644 --- a/pugl/detail/win.h +++ b/pugl/detail/win.h @@ -104,11 +104,11 @@ puglWinCreateWindow(const PuglView* const view, CW_USEDEFAULT, CW_USEDEFAULT, wr.right-wr.left, wr.bottom-wr.top, (HWND)view->parent, NULL, NULL, NULL))) { - return PUGL_ERR_CREATE_WINDOW; + return PUGL_CREATE_WINDOW_FAILED; } else if (!(*hdc = GetDC(*hwnd))) { DestroyWindow(*hwnd); *hwnd = NULL; - return PUGL_ERR_CREATE_WINDOW; + return PUGL_CREATE_WINDOW_FAILED; } return PUGL_SUCCESS; diff --git a/pugl/detail/win_cairo.c b/pugl/detail/win_cairo.c index cbca7e8..741f4cf 100644 --- a/pugl/detail/win_cairo.c +++ b/pugl/detail/win_cairo.c @@ -51,7 +51,7 @@ puglWinCairoCreateDrawContext(PuglView* view) (st = cairo_surface_status(surface->surface)) || !(surface->cr = cairo_create(surface->surface)) || (st = cairo_status(surface->cr))) { - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } cairo_save(surface->cr); @@ -95,7 +95,7 @@ puglWinCairoConfigure(PuglView* view) DestroyWindow(impl->hwnd); impl->hwnd = NULL; impl->hdc = NULL; - return PUGL_ERR_SET_FORMAT; + return PUGL_SET_FORMAT_FAILED; } impl->surface = (PuglWinCairoSurface*)calloc( diff --git a/pugl/detail/win_gl.c b/pugl/detail/win_gl.c index b7b03a4..db8fee5 100644 --- a/pugl/detail/win_gl.c +++ b/pugl/detail/win_gl.c @@ -77,8 +77,8 @@ typedef struct { HDC hdc; } PuglFakeWindow; -static int -puglWinError(PuglFakeWindow* fakeWin, const int status) +static PuglStatus +puglWinError(PuglFakeWindow* fakeWin, const PuglStatus status) { if (fakeWin->hwnd) { ReleaseDC(fakeWin->hwnd, fakeWin->hdc); @@ -102,7 +102,7 @@ static PuglWinGlProcs puglWinGlGetProcs(void) return procs; } -static int +static PuglStatus puglWinGlConfigure(PuglView* view) { PuglInternals* impl = view->impl; @@ -140,15 +140,15 @@ puglWinGlConfigure(PuglView* view) const PuglWinPFD fakePfd = puglWinGetPixelFormatDescriptor(view->hints); const int fakePfId = ChoosePixelFormat(fakeWin.hdc, &fakePfd); if (!fakePfId) { - return puglWinError(&fakeWin, PUGL_ERR_SET_FORMAT); + return puglWinError(&fakeWin, PUGL_SET_FORMAT_FAILED); } else if (!SetPixelFormat(fakeWin.hdc, fakePfId, &fakePfd)) { - return puglWinError(&fakeWin, PUGL_ERR_SET_FORMAT); + return puglWinError(&fakeWin, PUGL_SET_FORMAT_FAILED); } // Create fake GL context to get at the functions we need HGLRC fakeRc = wglCreateContext(fakeWin.hdc); if (!fakeRc) { - return puglWinError(&fakeWin, PUGL_ERR_CREATE_CONTEXT); + return puglWinError(&fakeWin, PUGL_CREATE_CONTEXT_FAILED); } // Enter fake context and get extension functions @@ -160,7 +160,7 @@ puglWinGlConfigure(PuglView* view) UINT numFormats = 0; if (!surface->procs.wglChoosePixelFormat( fakeWin.hdc, pixelAttrs, NULL, 1u, &impl->pfId, &numFormats)) { - return puglWinError(&fakeWin, PUGL_ERR_SET_FORMAT); + return puglWinError(&fakeWin, PUGL_SET_FORMAT_FAILED); } DescribePixelFormat( @@ -177,10 +177,10 @@ puglWinGlConfigure(PuglView* view) ReleaseDC(fakeWin.hwnd, fakeWin.hdc); DestroyWindow(fakeWin.hwnd); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglWinGlCreate(PuglView* view) { PuglInternals* const impl = view->impl; @@ -205,16 +205,16 @@ puglWinGlCreate(PuglView* view) DestroyWindow(impl->hwnd); impl->hwnd = NULL; impl->hdc = NULL; - return PUGL_ERR_SET_FORMAT; + return PUGL_SET_FORMAT_FAILED; } // Create GL context if (surface->procs.wglCreateContextAttribs && !(surface->hglrc = surface->procs.wglCreateContextAttribs( impl->hdc, 0, contextAttribs))) { - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } else if (!(surface->hglrc = wglCreateContext(impl->hdc))) { - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } // Enter context and set swap interval @@ -223,10 +223,10 @@ puglWinGlCreate(PuglView* view) surface->procs.wglSwapInterval(view->hints[PUGL_SWAP_INTERVAL]); } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglWinGlDestroy(PuglView* view) { PuglWinGlSurface* surface = (PuglWinGlSurface*)view->impl->surface; @@ -237,10 +237,10 @@ puglWinGlDestroy(PuglView* view) view->impl->surface = NULL; } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglWinGlEnter(PuglView* view, bool drawing) { PuglWinGlSurface* surface = (PuglWinGlSurface*)view->impl->surface; @@ -252,10 +252,10 @@ puglWinGlEnter(PuglView* view, bool drawing) BeginPaint(view->impl->hwnd, &ps); } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglWinGlLeave(PuglView* view, bool drawing) { if (drawing) { @@ -265,16 +265,15 @@ puglWinGlLeave(PuglView* view, bool drawing) } wglMakeCurrent(NULL, NULL); - - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglWinGlResize(PuglView* PUGL_UNUSED(view), int PUGL_UNUSED(width), int PUGL_UNUSED(height)) { - return 0; + return PUGL_SUCCESS; } static void* diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c index adf8c9d..429d89f 100644 --- a/pugl/detail/x11.c +++ b/pugl/detail/x11.c @@ -127,7 +127,8 @@ puglPollEvents(PuglWorld* world, const double timeout) ret = select(nfds, &fds, NULL, NULL, &tv); } - return ret < 0 ? PUGL_ERR_UNKNOWN : ret == 0 ? PUGL_FAILURE : PUGL_SUCCESS; + return ret < 0 ? PUGL_UNKNOWN_ERROR + : ret == 0 ? PUGL_FAILURE : PUGL_SUCCESS; } static PuglView* @@ -185,10 +186,13 @@ puglCreateWindow(PuglView* view, const char* title) impl->screen = DefaultScreen(display); if (!view->backend || !view->backend->configure) { - return 1; - } else if (view->backend->configure(view) || !impl->vi) { + return PUGL_BAD_BACKEND; + } + + PuglStatus st = view->backend->configure(view); + if (st || !impl->vi) { view->backend->destroy(view); - return 2; + return st ? st : PUGL_BACKEND_FAILED; } Window xParent = view->parent ? (Window)view->parent @@ -207,8 +211,8 @@ puglCreateWindow(PuglView* view, const char* title) 0, impl->vi->depth, InputOutput, impl->vi->visual, CWColormap | CWEventMask, &attr); - if (view->backend->create(view)) { - return 3; + if ((st = view->backend->create(view))) { + return st; } XSizeHints sizeHints = getSizeHints(view); @@ -239,7 +243,7 @@ puglCreateWindow(PuglView* view, const char* title) fprintf(stderr, "warning: XCreateIC failed\n"); } - return 0; + return PUGL_SUCCESS; } PuglStatus @@ -793,7 +797,7 @@ puglSetFrame(PuglView* view, const PuglRect frame) XMoveResizeWindow(view->world->impl->display, view->impl->win, (int)frame.x, (int)frame.y, (int)frame.width, (int)frame.height)) { - return PUGL_ERR_UNKNOWN; + return PUGL_UNKNOWN_ERROR; } return PUGL_SUCCESS; diff --git a/pugl/detail/x11_cairo.c b/pugl/detail/x11_cairo.c index 550144a..0753317 100644 --- a/pugl/detail/x11_cairo.c +++ b/pugl/detail/x11_cairo.c @@ -38,7 +38,7 @@ typedef struct { cairo_t* frontCr; } PuglX11CairoSurface; -static int +static PuglStatus puglX11CairoConfigure(PuglView* view) { PuglInternals* const impl = view->impl; @@ -48,10 +48,10 @@ puglX11CairoConfigure(PuglView* view) pat.screen = impl->screen; impl->vi = XGetVisualInfo(impl->display, VisualScreenMask, &pat, &n); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11CairoCreate(PuglView* view) { PuglInternals* const impl = view->impl; @@ -77,16 +77,16 @@ puglX11CairoCreate(PuglView* view) cairo_destroy(surface.backCr); cairo_surface_destroy(surface.front); cairo_surface_destroy(surface.back); - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } impl->surface = calloc(1, sizeof(PuglX11CairoSurface)); *(PuglX11CairoSurface*)impl->surface = surface; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11CairoDestroy(PuglView* view) { PuglInternals* const impl = view->impl; @@ -98,10 +98,10 @@ puglX11CairoDestroy(PuglView* view) cairo_surface_destroy(surface->back); free(surface); impl->surface = NULL; - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11CairoEnter(PuglView* view, bool drawing) { PuglInternals* const impl = view->impl; @@ -111,10 +111,10 @@ puglX11CairoEnter(PuglView* view, bool drawing) cairo_save(surface->frontCr); } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11CairoLeave(PuglView* view, bool drawing) { PuglInternals* const impl = view->impl; @@ -126,10 +126,10 @@ puglX11CairoLeave(PuglView* view, bool drawing) cairo_restore(surface->frontCr); } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11CairoResize(PuglView* view, int width, int height) { PuglInternals* const impl = view->impl; @@ -141,13 +141,13 @@ puglX11CairoResize(PuglView* view, int width, int height) cairo_surface_destroy(surface->front); if (!(surface->front = cairo_surface_create_similar( surface->back, CAIRO_CONTENT_COLOR, width, height))) { - return PUGL_ERR_CREATE_CONTEXT; + return PUGL_CREATE_CONTEXT_FAILED; } surface->frontCr = cairo_create(surface->front); cairo_save(surface->frontCr); - return 0; + return PUGL_SUCCESS; } static void* diff --git a/pugl/detail/x11_gl.c b/pugl/detail/x11_gl.c index b6f3c51..ea93de2 100644 --- a/pugl/detail/x11_gl.c +++ b/pugl/detail/x11_gl.c @@ -39,13 +39,13 @@ typedef struct { int double_buffered; } PuglX11GlSurface; -static int +static PuglStatus puglX11GlHintValue(const int value) { return value == PUGL_DONT_CARE ? (int)GLX_DONT_CARE : value; } -static int +static PuglStatus puglX11GlGetAttrib(Display* const display, const GLXFBConfig fb_config, const int attrib) @@ -55,7 +55,7 @@ puglX11GlGetAttrib(Display* const display, return value; } -static int +static PuglStatus puglX11GlConfigure(PuglView* view) { PuglInternals* const impl = view->impl; @@ -86,7 +86,7 @@ puglX11GlConfigure(PuglView* view) GLXFBConfig* fbc = glXChooseFBConfig(display, screen, attrs, &n_fbc); if (n_fbc <= 0) { fprintf(stderr, "error: Failed to create GL context\n"); - return 1; + return PUGL_CREATE_CONTEXT_FAILED; } surface->fb_config = fbc[0]; @@ -105,10 +105,10 @@ puglX11GlConfigure(PuglView* view) XFree(fbc); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11GlCreate(PuglView* view) { PuglInternals* const impl = view->impl; @@ -131,22 +131,25 @@ puglX11GlCreate(PuglView* view) (CreateContextAttribs)glXGetProcAddress( (const GLubyte*)"glXCreateContextAttribsARB"); - impl->surface = surface; - surface->ctx = create_context(display, fb_config, 0, GL_TRUE, ctx_attrs); + surface->ctx = create_context(display, fb_config, 0, GL_TRUE, ctx_attrs); if (!surface->ctx) { surface->ctx = glXCreateNewContext(display, fb_config, GLX_RGBA_TYPE, 0, True); } + if (!surface->ctx) { + return PUGL_CREATE_CONTEXT_FAILED; + } + glXGetConfig(impl->display, impl->vi, GLX_DOUBLEBUFFER, &surface->double_buffered); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11GlDestroy(PuglView* view) { PuglX11GlSurface* surface = (PuglX11GlSurface*)view->impl->surface; @@ -155,18 +158,18 @@ puglX11GlDestroy(PuglView* view) free(surface); view->impl->surface = NULL; } - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11GlEnter(PuglView* view, bool PUGL_UNUSED(drawing)) { PuglX11GlSurface* surface = (PuglX11GlSurface*)view->impl->surface; glXMakeCurrent(view->impl->display, view->impl->win, surface->ctx); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11GlLeave(PuglView* view, bool drawing) { PuglX11GlSurface* surface = (PuglX11GlSurface*)view->impl->surface; @@ -179,15 +182,15 @@ puglX11GlLeave(PuglView* view, bool drawing) glXMakeCurrent(view->impl->display, None, NULL); - return 0; + return PUGL_SUCCESS; } -static int +static PuglStatus puglX11GlResize(PuglView* PUGL_UNUSED(view), int PUGL_UNUSED(width), int PUGL_UNUSED(height)) { - return 0; + return PUGL_SUCCESS; } static void* diff --git a/pugl/pugl.h b/pugl/pugl.h index 580e9dc..067d780 100644 --- a/pugl/pugl.h +++ b/pugl/pugl.h @@ -80,13 +80,16 @@ typedef void* PuglHandle; Return status code. */ typedef enum { - PUGL_SUCCESS, - PUGL_FAILURE, - PUGL_ERR_UNKNOWN, - PUGL_ERR_CREATE_WINDOW, - PUGL_ERR_SET_FORMAT, - PUGL_ERR_CREATE_CONTEXT, - PUGL_ERR_UNSUPPORTED_TYPE, + PUGL_SUCCESS, /**< Success */ + PUGL_FAILURE, /**< Non-fatal failure */ + PUGL_UNKNOWN_ERROR, /**< Unknown system error */ + PUGL_BAD_BACKEND, /**< Invalid or missing backend */ + PUGL_BACKEND_FAILED, /**< Backend initialisation failed */ + PUGL_REGISTRATION_FAILED, /**< Window class registration failed */ + PUGL_CREATE_WINDOW_FAILED, /**< Window creation failed */ + PUGL_SET_FORMAT_FAILED, /**< Failed to set pixel format */ + PUGL_CREATE_CONTEXT_FAILED, /**< Failed to create drawing context */ + PUGL_UNSUPPORTED_TYPE, /**< Unsupported data type */ } PuglStatus; /** -- cgit v1.2.1