Bug 36279

Summary: cairo_paint with ARGB32 source doesn't work
Product: cairo Reporter: Thomas Jones <thomas.jones>
Component: generalAssignee: Carl Worth <cworth>
Status: RESOLVED FIXED QA Contact: cairo-bugs mailing list <cairo-bugs>
Severity: normal    
Priority: medium    
Version: 1.10.2   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: source of program that demonstraits brokenness
header with image data for the program to use

Description Thomas Jones 2011-04-15 14:21:02 UTC
Created attachment 45684 [details]
source of program that demonstraits brokenness

As the summary says, happens when drawing to an image surface and possibly with xcb (in a context obtained from GTK it happens, dunno what backend is in use)


I've attached a program that shows how things are broken
Comment 1 Thomas Jones 2011-04-15 14:21:56 UTC
Created attachment 45685 [details]
header with image data for the program to use
Comment 2 Thomas Jones 2011-04-15 14:26:08 UTC
I just pulled some code and image data out of the app that I'm writing that encounters the problem and stuck it in a header, sorry for the nasty big header.


The program outputs in "surf1.png" the bottom surface, the top in "surf2.png", and finally the results of it's drawing in "test.png".

the header looks like this:

int img_width = 199, img_height = 233;
uint8_t data1[] = { ... };
uint8_t data2[] = { ... };
Comment 3 Thomas Jones 2011-04-15 18:35:30 UTC
Also, I know that it works properly on cairo 1.8.10 (with the same versions of every other package on my system, so it's definitely a cairo bug not pixman or something)
Comment 4 Benjamin Otte 2011-04-15 18:50:03 UTC
You need to call cairo_surface_mark_dirty() after memcpy()ing the data, so cairo knows that the image was modified.
Cairo 1.10 is a lot stricter in enforcing this requirement than cairo 1.8 was, which is why it probably worked with older versions.
Comment 5 Thomas Jones 2011-04-15 19:04:05 UTC
Ah I ought to have known that, at the time 1.10 came out I had meant to check my code for that sort of problem, but I never did, then I forgot about it.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.