Summary: | cairo_paint with ARGB32 source doesn't work | ||
---|---|---|---|
Product: | cairo | Reporter: | Thomas Jones <thomas.jones> |
Component: | general | Assignee: | 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 |
Created attachment 45685 [details]
header with image data for the program to use
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[] = { ... }; 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) 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. 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.
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