Mercurial > MadButterfly
diff include/mb_graph_engine_openvg.h @ 589:d733e198bb25 openvg
Move functions from mb_graph_engine_openvg.h to the C file
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Wed, 30 Jun 2010 18:06:36 +0800 |
parents | e9923024f65e |
children | b714f0c9992e |
line wrap: on
line diff
--- a/include/mb_graph_engine_openvg.h Wed Jun 30 17:45:30 2010 +0800 +++ b/include/mb_graph_engine_openvg.h Wed Jun 30 18:06:36 2010 +0800 @@ -141,198 +141,19 @@ vgLoadMatrix(vg_mtx); } -static int -_openvg_find_confg(mb_img_fmt_t fmt, int w, int h, - EGLConfig *config) { - EGLDisplay display; - EGLint attrib_list[16]; - EGLConfig configs[1]; - EGLint nconfigs; - int i = 0; - EGLBoolean r; - - switch(fmt) { - case MB_IFMT_ARGB32: - attrib_list[i++] = EGL_RED_SIZE; - attrib_list[i++] = 8; - attrib_list[i++] = EGL_GREEN_SIZE; - attrib_list[i++] = 8; - attrib_list[i++] = EGL_BLUE_SIZE; - attrib_list[i++] = 8; - attrib_list[i++] = EGL_ALPHA_SIZE; - attrib_list[i++] = 8; - break; - - case MB_IFMT_RGB24: - attrib_list[i++] = EGL_RED_SIZE; - attrib_list[i++] = 8; - attrib_list[i++] = EGL_GREEN_SIZE; - attrib_list[i++] = 8; - attrib_list[i++] = EGL_BLUE_SIZE; - attrib_list[i++] = 8; - break; - - case MB_IFMT_A8: - attrib_list[i++] = EGL_ALPHA_SIZE; - attrib_list[i++] = 8; - break; - - case MB_IFMT_A1: - attrib_list[i++] = EGL_ALPHA_SIZE; - attrib_list[i++] = 1; - break; - - case MB_IFMT_RGB16_565: - attrib_list[i++] = EGL_RED_SIZE; - attrib_list[i++] = 5; - attrib_list[i++] = EGL_GREEN_SIZE; - attrib_list[i++] = 6; - attrib_list[i++] = EGL_BLUE_SIZE; - attrib_list[i++] = 5; - break; - - default: - return -1; - } - - attrib_list[i++] = EGL_SURFACE_TYPE; - attrib_list[i++] = EGL_PBUFFER_BIT; -#if 0 - attrib_list[i++] = EGL_MAX_PBUFFER_WIDTH; - attrib_list[i++] = w; - attrib_list[i++] = EGL_MAX_PBUFFER_HEIGHT; - attrib_list[i++] = h; -#endif - - attrib_list[i++] = EGL_NONE; - - display = _VG_DISPLAY(); - r = eglChooseConfig(display, attrib_list, configs, 1, &nconfigs); - if(!r) - return -1; - - *config = configs[0]; - - return 0; -} - #define EGL_GLX 1 #ifdef EGL_GLX #include <X11/Xlib.h> #include <X11/Xutil.h> -static int -_get_img_fmt_from_xvisual(Display *display, Visual *visual) { - VisualID visual_id; - XVisualInfo temp; - XVisualInfo *infos; - int n; - int fmt = -1; - - visual_id = XVisualIDFromVisual(visual); - temp.visualid = visual_id; - infos = XGetVisualInfo(display, VisualIDMask, &temp, &n); - if(n != 1) - return -1; - - switch(infos->depth) { - case 32: - fmt = MB_IFMT_ARGB32; - break; - - case 24: - fmt = MB_IFMT_RGB24; - break; - - case 16: - fmt = MB_IFMT_RGB16_565; - break; - - case 8: - fmt = MB_IFMT_A8; - break; - - case 1: - fmt = MB_IFMT_A1; - break; - } - - return fmt; -} - -/*! \brief Create an EGL window surface for X11. - * - * This function is compiled only for GLX enabled. - */ -static mbe_surface_t * -mbe_vg_win_surface_create(Display *display, Drawable drawable, - Visual *visual, int width, int height) { - EGLDisplay egl_disp; - EGLSurface egl_surface; - mbe_surface_t *surface; - EGLConfig config; - EGLint attrib_list[2] = {EGL_NONE}; - int fmt; - int r; - - fmt = _get_img_fmt_from_xvisual(display, visual); - if(fmt == -1) - return NULL; - - r = _openvg_find_confg(fmt, width, height, &config); - if(r != 0) - return NULL; - - egl_disp = eglGetDisplay(display); - if(egl_disp == EGL_NO_DISPLAY || egl_disp != _VG_DISPLAY()) - return NULL; - - egl_surface = eglCreateWindowSurface(egl_disp, config, drawable, - attrib_list); - - surface = (mbe_surface_t *)malloc(sizeof(mbe_surface_t)); - if(surface == NULL) { - eglDestroySurface(egl_disp, egl_surface); - return NULL; - } - - surface->surface = egl_surface; - - return surface; -} - +extern mbe_surface_t *mbe_vg_win_surface_create(Display *display, + Drawable drawable, + Visual *visual, + int width, int height); #endif -static mbe_surface_t * -mbe_image_surface_create(mb_img_fmt_t fmt, int w, int h) { - EGLSurface surface; - EGLDisplay display; - EGLConfig config; - EGLint attrib_list[2] = {EGL_NONE}; - mbe_surface_t *mbe_surface; - int r; - - - r = _openvg_find_confg(fmt, w, h, &config); - if(r != 0) - return NULL; - - display = _VG_DISPLAY(); - /* Some implementation does not support pbuffer. - * We need use some other surface to replace this one. - */ - surface = eglCreatePbufferSurface(display, config, attrib_list); - if(surface == EGL_NO_SURFACE) - return NULL; - - mbe_surface = (mbe_surface_t *)malloc(sizeof(mbe_surface_t)); - if(mbe_surface == NULL) - return NULL; - mbe_surface->surface = surface; - mbe_surface->asso_mbe = NULL; - - return mbe_surface; -} +extern mbe_surface_t *mbe_image_surface_create(mb_img_fmt_t fmt, + int w, int h); static void mbe_surface_destroy(mbe_surface_t *surface) { @@ -347,29 +168,7 @@ free(surface); } -static mbe_t * -mbe_create(mbe_surface_t *surface) { - EGLDisplay display; - EGLConfig config; - EGLContext ctx, shared; - EGLint attrib_list[2] = {EGL_NONE}; - mbe_t *canvas; - - display = _VG_DISPLAY(); - ctx = eglCreateContext(display, config, shared, attrib_list); - if(ctx == EGL_NO_CONTEXT) - return NULL; - - canvas = (mbe_t *)malloc(sizeof(mbe_t)); - if(canvas == NULL) - return NULL; - - canvas->src = NULL; - canvas->tgt = surface; - canvas->ctx = ctx; - - return canvas; -} +extern mbe_t *mbe_create(mbe_surface_t *surface); /* @} */