[cairo] Possibly silly Windows question ...

jerry at chordia.co.uk jerry at chordia.co.uk
Tue Aug 27 12:32:15 PDT 2013


Revisiting Cairo after a very long spell in AGG world so please be gentle.
Assuming a cairo_surface_t is acquired using the following pattern:

//
cairo_surface_t* surface = cairo_image_surface_create
(CAIRO_FORMAT_ARGB32,width,height)
// get a cairo_t from the surface
cairo_t* ct = cairo_create (surface);
// initialize to clean state
// mythical drawing 
DrawStff(ct);
// clean up
cairo_destroy(ct);

can one then do this?

// flush may be required ...
// get raw pixel data as ARGB32
char* pixels = cairo_image_surface_get_data (surface);
// blit pixel data, args obviously elided
SetDIBitsToDevice(hDC,....,pixels);

If this is valid then does any available hardware acceleration still get
applied to the drawing operations? I'm slightly at a loss to see how it
would (?)

The motivations here are to try and:

Draw things as quickly as possible - i.e. only create surfaces when client
is resized
cache as many Cairo objects as possible to avoid the Create/Paint/Delete
pattern that crops up in the few extant Windows examples.
Only have to blit when painting is required (WM_PAINT received)

Many thanks.



More information about the cairo mailing list