WAFFLE_API bool waffle_display_supports_context_api( struct waffle_display *self, int32_t context_api) { struct wcore_display *wc_self = wcore_display(self); const struct api_object *obj_list[] = { wc_self ? &wc_self->api : NULL, }; if (!api_check_entry(obj_list, 1)) return false; switch (context_api) { case WAFFLE_CONTEXT_OPENGL: case WAFFLE_CONTEXT_OPENGL_ES1: case WAFFLE_CONTEXT_OPENGL_ES2: case WAFFLE_CONTEXT_OPENGL_ES3: break; default: wcore_errorf(WAFFLE_ERROR_BAD_PARAMETER, "context_api has bad value %#x", context_api); return false; } return api_platform->vtbl->display.supports_context_api(wc_self, context_api); }
struct waffle_context* waffle_context_create( struct waffle_config *config, struct waffle_context *shared_ctx) { struct wcore_context *wc_self; struct wcore_config *wc_config = wcore_config(config); struct wcore_context *wc_shared_ctx = wcore_context(shared_ctx); const struct api_object *obj_list[2]; int len = 0; obj_list[len++] = wc_config ? &wc_config->api : NULL; if (wc_shared_ctx) obj_list[len++] = wc_shared_ctx ? &wc_shared_ctx->api : NULL; if (!api_check_entry(obj_list, len)) return NULL; wc_self = api_platform->vtbl->context.create(api_platform, wc_config, wc_shared_ctx); if (!wc_self) return NULL; return &wc_self->wfl; }
WAFFLE_API bool waffle_display_disconnect(struct waffle_display *self) { struct wcore_display *wc_self = wcore_display(self); const struct api_object *obj_list[] = { wc_self ? &wc_self->api : NULL, }; if (!api_check_entry(obj_list, 1)) return false; return api_platform->vtbl->display.destroy(wc_self); }
WAFFLE_API struct waffle_display* waffle_display_connect(const char *name) { struct wcore_display *wc_self; if (!api_check_entry(NULL, 0)) return NULL; wc_self = api_platform->vtbl->display.connect(api_platform, name); if (!wc_self) return NULL; return waffle_display(wc_self); }
bool waffle_context_destroy(struct waffle_context *self) { struct wcore_context *wc_self = wcore_context(self); const struct api_object *obj_list[] = { wc_self ? &wc_self->api : NULL, }; if (!api_check_entry(obj_list, 1)) return false; return api_platform->vtbl->context.destroy(wc_self); }
WAFFLE_API union waffle_native_display* waffle_display_get_native(struct waffle_display *self) { struct wcore_display *wc_self = wcore_display(self); const struct api_object *obj_list[] = { wc_self ? &wc_self->api : NULL, }; if (!api_check_entry(obj_list, 1)) return NULL; if (api_platform->vtbl->display.get_native) { return api_platform->vtbl->display.get_native(wc_self); } else { wcore_error(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM); return NULL; } }