// FIXME 2: this BLATANTLY belongs elsewhere static void xrInitializeLoaderKHR_noop() //FIXME: does it really return void? { printf("STUB: xrInitializeLoaderKHR_noop called\n"); } struct XrGraphicsBindingOpenGLESAndroidKHR { XrStructureType type; const void* next; EGLDisplay display; EGLConfig config; EGLContext context; }; XrResult bionic_xrCreateSession(XrInstance instance, XrSessionCreateInfo *createInfo, XrSession *session) { // TODO: check the type and handle Vulkan struct XrGraphicsBindingOpenGLESAndroidKHR *android_bind = createInfo->next; XrGraphicsBindingEGLMNDX egl_bind = {XR_TYPE_GRAPHICS_BINDING_EGL_MNDX}; egl_bind.getProcAddress = eglGetProcAddress; egl_bind.display = android_bind->display; egl_bind.config = android_bind->config; egl_bind.context = android_bind->context; createInfo->next = &egl_bind; xrCreateSession(instance, createInfo, session); } XrResult bionic_xrGetInstanceProcAddr(XrInstance instance, const char *name, PFN_xrVoidFunction *func) { if(!strcmp(name, "xrInitializeLoaderKHR")) { *func = xrInitializeLoaderKHR_noop; return (XrResult)xrInitializeLoaderKHR_noop; //TODO: is this correct return value? } else { return xrGetInstanceProcAddr(instance, name, func); } } void * bionic_xrCreateInstance(XrInstanceCreateInfo *createInfo, XrInstance *instance) { const char* enabled_exts[2] = {"XR_KHR_opengl_es_enable", "XR_MNDX_egl_enable"}; createInfo->enabledExtensionCount = 2; createInfo->enabledExtensionNames = enabled_exts; xrCreateInstance(createInfo, instance); }