static gfx_ctx_proc_t gfx_ctx_vc_get_proc_address(const char *symbol) { #ifdef HAVE_EGL return egl_get_proc_address(symbol); #else return NULL; #endif }
static gfx_ctx_proc_t android_gfx_ctx_get_proc_address(const char *symbol) { switch (android_api) { case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: #ifdef HAVE_EGL return egl_get_proc_address(symbol); #else break; #endif case GFX_CTX_NONE: default: break; } return NULL; }
static gfx_ctx_proc_t gfx_ctx_opendingux_get_proc_address(const char *symbol) { #ifdef HAVE_EGL return egl_get_proc_address(symbol); #endif }
static bool gfx_ctx_vc_image_buffer_init(void *data, const video_info_t *video) { EGLBoolean result; vc_ctx_data_t *vc = (vc_ctx_data_t*)data; EGLint pbufsurface_list[] = { EGL_WIDTH, vc->res, EGL_HEIGHT, vc->res, EGL_NONE }; /* Don't bother, we just use VGImages for our EGLImage anyway. */ if (vc_api == GFX_CTX_OPENVG_API) return false; peglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC)egl_get_proc_address("eglCreateImageKHR"); peglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC)egl_get_proc_address("eglDestroyImageKHR"); if ( !peglCreateImageKHR || !peglDestroyImageKHR || !gfx_ctx_vc_egl_query_extension(vc, "KHR_image") ) return false; vc->res = video->input_scale * RARCH_SCALE_BASE; eglBindAPI(EGL_OPENVG_API); vc->pbuff_surf = eglCreatePbufferSurface(vc->egl.dpy, vc->egl.config, pbufsurface_list); if (vc->pbuff_surf == EGL_NO_SURFACE) { RARCH_ERR("[VideoCore:EGLImage] failed to create PbufferSurface\n"); goto fail; } vc->eglimage_ctx = eglCreateContext(vc->egl.dpy, vc->egl.config, NULL, NULL); if (vc->eglimage_ctx == EGL_NO_CONTEXT) { RARCH_ERR("[VideoCore:EGLImage] failed to create context\n"); goto fail; } /* Test to make sure we can switch context. */ result = eglMakeCurrent(vc->egl.dpy, vc->pbuff_surf, vc->pbuff_surf, vc->eglimage_ctx); if (result == EGL_FALSE) { RARCH_ERR("[VideoCore:EGLImage] failed to make context current\n"); goto fail; } gfx_ctx_vc_bind_api(NULL, vc_api, 0, 0); eglMakeCurrent(vc->egl.dpy, vc->egl.surf, vc->egl.surf, vc->egl.ctx); vc->smooth = video->smooth; return true; fail: if (vc->pbuff_surf != EGL_NO_SURFACE) { eglDestroySurface(vc->egl.dpy, vc->pbuff_surf); vc->pbuff_surf = EGL_NO_SURFACE; } if (vc->eglimage_ctx != EGL_NO_CONTEXT) { eglDestroyContext(vc->egl.dpy, vc->eglimage_ctx); vc->pbuff_surf = EGL_NO_CONTEXT; } gfx_ctx_vc_bind_api(NULL, vc_api, 0, 0); eglMakeCurrent(vc->egl.dpy, vc->egl.surf, vc->egl.surf, vc->egl.ctx); return false; }
static gfx_ctx_proc_t gfx_ctx_mali_fbdev_get_proc_address(const char *symbol) { #ifdef HAVE_EGL return egl_get_proc_address(symbol); #endif }