[cairo] Cairo + Python + OpenGL = Unacceptable performance?

Clemens Nylandsted Klokmose clemensklokmose at gmail.com
Thu Oct 11 04:41:59 PDT 2007


Hello,I have been fiddling some time with implementing a prototype for a
research project in Cairo in combination with Python and OpenGL.
I have finally got it running, but the performance is very poor.
I have a (changing) XML structure (in elementtree) that I need
re-rendered continuously.


I have a thread creating a new cairo image all the time, looking something
like below, where Tree is the structure I draw and ViewManger.draw() does
the drawing.


def redraw():
    global Tree
    global surface
    global surfacedata
    global writing_texture

    while 1:
        surface1 = cairo.ImageSurface(cairo.FORMAT_ARGB32,
int(Tree.getroot().get("width")),
int(Tree.getroot().get("height")))
        ctx = cairo.Context(surface1)
        ctx.set_source_rgba(0, 0, 0, 1)
        ctx.set_tolerance(0.1)
        ctx.set_line_join(cairo.LINE_JOIN_ROUND)

        ViewManager.draw (Tree.getroot(), ctx)

        surface = ctx.get_target()
        surfacedata = str(surface.get_data())

        time.sleep(0.01)



I then in my OpenGL draw function have the texture generation:


glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, int( surface.get_width()), int(
surface.get_height()), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, surfacedata)


The overall problem is that the operation str(surface.get.data ()) takes
something around 300ms on my computer (Powerbook 1.67ghz), but it seems I
have to do this conversion in order to get glTexImage2D to eat the data. If
I just feed it with surface.get_data() (which would be the pointer to the
data, and the most natural way to do it) I get a segmentation fault.


Are there anyone who have tried to do something similar, and have found a
way to get around converting the data in memory to a string?

Thanks,
Clemens
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20071011/4aae3acd/attachment.html 


More information about the cairo mailing list