Closed
Bug 1126055
Opened 10 years ago
Closed 5 years ago
SkiaGL canvas result differs from Skia canvas, Quartz, D2D, Cairo when clipping regions are involved
Categories
(Core :: Graphics: Canvas2D, defect)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: djf, Unassigned)
References
Details
(Keywords: regression, Whiteboard: [gfx-noted])
Attachments
(4 files)
If I define a clipping region in a canvas and then fill that region using globalCompositeOperation "copy", it works as expected in desktop Firefox, but if I try the same code on FirefoxOS or in Firefox for Android, the clipping region is ignored and the bounding-box of the path is cleared before filling.
There is a reduced test case online at http://djf.net/bug.html.
I'll attached the code, and also screenshots from desktop and mobile demonstrating how the rendering differs.
Reporter | ||
Comment 1•10 years ago
|
||
Reporter | ||
Comment 2•10 years ago
|
||
Reporter | ||
Comment 3•10 years ago
|
||
Reporter | ||
Comment 4•10 years ago
|
||
This is another test case that produces exactly the same same bug. In this one, we don't use globalCompositeOperation=copy but instead do a clearRect with a clip region defined.
The clip region is not handled correctly and the entire bounding box of the triangle is cleared instead of just the triangle.
Again, it works correctly on desktop but fails on FirefoxOS and Android.
This testcase is online at djf.net/bug2.html
Reporter | ||
Comment 5•10 years ago
|
||
These are admittedly kind of weird test cases: I could acheive the desired effect without a clipping region or clearRect or globalCompositeOperation.
The reason I care is that I need to draw with a translucent black color instead of blue, and I need to ignore the pixels that are currently drawn in the canvas. So I either need to be able to clear the region to transparent black with clearRect() or I need to be able to use globalCompositeOperation=copy.
This is for a color picker web component I'm developing in bug 1123829.
Blocks: 1123829
Reporter | ||
Comment 6•10 years ago
|
||
Turns out that I've got an old version of Firefox Aurora (gecko 14) on my android phone... These bugs do not appear in that version. But they do appear in the current Android Firefox Beta (gecko 36). So this is a regression.
Keywords: regression
Reporter | ||
Comment 7•10 years ago
|
||
The bug is also present in the current (gecko 35) Firefox for Android. I haven't tried looking at different versions of FirefoxOS to see how far back the regression goes on that platform.
Milan: is this something that your team works on, or do you know who does work on this?
Flags: needinfo?(milan)
Comment 8•10 years ago
|
||
I think is a difference (bug) between Skia GL canvas (used on Android and B2G) and the other backends we use on the desktop (Quartz, D2D, SW, and Skia SW). Do you get the result you're looking for if you set gfx.canvas.azure.accelerated to false (the default is set in https://dxr.mozilla.org/mozilla-central/source/b2g/app/b2g.js#939)?
Flags: needinfo?(milan)
Reporter | ||
Comment 9•10 years ago
|
||
Milan: I didn't try changing that pref, but I found that if I add {willReadFrequently:true} to the canvas.getContext() call then the bug goes away. I suspect that acheives the same thing.
So I think I've got a workaround for my color picker element, and you've got confirmation that this bug is in the accelerated backend used on mobile.
Flags: needinfo?(milan)
Comment 10•10 years ago
|
||
Yes, setting willReadFrequently to true currently disables SkiaGL (as it's more expensive when the readback is part of the picture), so you end up with the Skia SW canvas, which has the results that match the rest. I'll mutate the bug to track what's left.
Flags: needinfo?(milan)
Comment 11•10 years ago
|
||
CC-ing Jeff in case one of the not-yet-upstreamed patches we have for Skia fixes this.
Summary: Rendering differs on desktop and mobile with clipping region and globalCompositeOperation='copy' → SkiaGL canvas result differs from Skia canvas, Quartz, D2D, Cairo when clipping regions are involved
Updated•10 years ago
|
Whiteboard: [gfx-noted]
Updated•5 years ago
|
You need to log in
before you can comment on or make changes to this bug.
Description
•