[cairo] Could I use cairo with opengles in android?

Jihe Wei jihe.wei at gmail.com
Mon May 21 01:20:17 PDT 2012


Hi,Henry
i found the implementation  of the  method cairo_egl_device_create(display,
context)
is very strange,as below:
1. init attribs with EGL_WIDTH=1and EGL_HEIGHT=1
2. init config use eglChooseConfig method
3. create EGLSurface use eglCreatePbufferSurface method
4. then use eglMakeCurrent to release
5. last, return as &ctx->base.base
problems:
1.EGLSurface's width and height both were set to 1
   but the method cairo_gl_surface_create supply two parameters for setting
width and height

another thing, the code i send before
should  set  EGL_SURFACE_TYPE=EGL_PUBUFFER_BIT
not EGL_SURFACE_TYPE=EGL_WINDOW_BIT

but still nothing display in my phone.

2012/5/18 Jihe Wei <jihe.wei at gmail.com>

> Henry,
> I try swap buffer before draw and also after, both not work.
> notice:my display surface is created by
> cairo_image_surface_create_for_data, and the data comes from androidbitmap
>
> Thanks,
> Wei
>
>
> 2012/5/18 Henry (Yu) Song - SISA <hsong at sisa.samsung.com>
>
> Hi, Jihe
>>
>> Since you have the gl surface as a window surface, you can swap buffer on
>> the surface directly - cairo_gl_surface_swapbuffers (surface).
>>
>> Henry
>> ________________________________________
>> From: cairo-bounces+henry.song=samsung.com at cairographics.org[cairo-bounces+henry.song=
>> samsung.com at cairographics.org] on behalf of Jihe Wei [jihe.wei at gmail.com]
>> Sent: Friday, May 18, 2012 2:54 AM
>> To: cairo at cairographics.org
>> Subject: [cairo] Could I use cairo with opengles in android?
>>
>> Hi ,
>> I wonder where can find some samples show use cairo in android device.
>> rarely found ,so i try it myself, but seems can't render anything
>> details as below,
>>     cairo_surface_t *surface = NULL;
>>     const EGLint attribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
>> EGL_BLUE_SIZE,
>>            8, EGL_GREEN_SIZE, 8, EGL_RED_SIZE, 8, EGL_RENDERABLE_TYPE,
>>            EGL_OPENGL_ES2_BIT, EGL_NONE };
>>    const EGLint ctx_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE
>> };
>>
>>    EGLint format;
>>    EGLint numConfigs;
>>    EGLConfig config;
>>    EGLContext context;
>>    EGLint err;
>>
>>    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
>>    err = eglGetError();
>>    LOGE("eglGetDisplay err:%d", err);//return 12288
>>
>>    eglInitialize(display, 0, 0);
>>    err = eglGetError();
>>    LOGE("eglInitialize err:%d", err);//return 12288
>>
>>    eglChooseConfig(display, attribs, &config, 1, &numConfigs);
>>    err = eglGetError();
>>    LOGE("eglChooseConfig err:%d", err);
>>
>>    eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
>>
>>    context = eglCreateContext(display, config, EGL_NO_CONTEXT,
>> ctx_attribs);
>>    err = eglGetError();
>>    LOGE("eglCreateContext err:%d", err);//return 12288
>>
>>    cairo_device_t * device = cairo_egl_device_create(display, context);
>>    cairo_status_t status = cairo_device_status(device);//return success
>>
>>    surface = cairo_gl_surface_create(device, CAIRO_CONTENT_ALPHA,
>> info->width,
>>            info->height);//return CAIRO_SURFACE_TYPE_GL type
>>
>> I use another surface to display the result from surface(gl)
>>    cairo_set_operator(cr_display, CAIRO_OPERATOR_ADD);
>>    cairo_set_source_surface(cr_display, surface, 0, 0);
>>    cairo_paint(cr_display);
>>
>> Who could help to figure out? thx
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20120521/48d3b1f6/attachment.html>


More information about the cairo mailing list