Add support for the alpha option to the canvas context options

RESOLVED FIXED in mozilla30

Status

()

defect
RESOLVED FIXED
5 years ago
5 years ago

People

(Reporter: cabanier, Assigned: cabanier)

Tracking

(Blocks 1 bug, {dev-doc-complete, relnote})

unspecified
mozilla30
Points:
---
Dependency tree / graph
Bug Flags:
in-testsuite +

Firefox Tracking Flags

(relnote-firefox 30+, relnote-b2g ?)

Details

Attachments

(1 attachment, 6 obsolete attachments)

Assignee

Description

5 years ago
WhatWG proposal is here: http://wiki.whatwg.org/wiki/CanvasOpaque

Summary
The proposed API is to allow developers to request an opaque backing store for 2D Canvas. This mirrors existing functionality in WebGL. From the discussions on WhatWG and webkit-dev, Mozilla has expressed public support, and has provided feedback to guide the proposal into its current form.

Chrome has already implemented this feature and it is being used by some Google products
Chrome bug: https://code.google.com/p/chromium/issues/detail?id=234297
Assignee

Updated

5 years ago
Assignee: nobody → cabanier
Assignee

Updated

5 years ago
Blocks: 631640
Assignee

Updated

5 years ago
Attachment #8389608 - Flags: review?(roc)
Assignee

Comment 2

5 years ago
- Fixed logic so size is set before the options.
- changed interface so context is queried for opaque-ness
- made sure that if context is opaque, it is always created (since it should display as black)
Attachment #8389608 - Attachment is obsolete: true
Attachment #8389608 - Flags: review?(roc)
Attachment #8390088 - Flags: review?(roc)
Comment on attachment 8390088 [details] [diff] [review]
Added implementation + test case

Review of attachment 8390088 [details] [diff] [review]:
-----------------------------------------------------------------

::: content/canvas/src/CanvasRenderingContext2D.cpp
@@ +1065,5 @@
>      // Use software when there is going to be a lot of readback
>      mForceSoftware = attributes.mWillReadFrequently;
>    }
>  
> +  SetIsOpaque(attributes.mAlpha == false);

!attributes.mAlpha

::: content/canvas/test/test_canvas.html
@@ +21582,5 @@
> +<script type="text/javascript">
> +
> +function test_opaque() {
> +  var c = document.getElementById("c688");
> +  var ctx = c.getContext("2d", {alpha: true});

Shouldn't this be "alpha:false"?
Attachment #8390088 - Flags: review?(roc) → review-
Assignee

Comment 4

5 years ago
Comment on attachment 8390088 [details] [diff] [review]
Added implementation + test case

Review of attachment 8390088 [details] [diff] [review]:
-----------------------------------------------------------------

::: content/canvas/test/test_canvas.html
@@ +21582,5 @@
> +<script type="text/javascript">
> +
> +function test_opaque() {
> +  var c = document.getElementById("c688");
> +  var ctx = c.getContext("2d", {alpha: true});

yes!
How did this pass the try bots? I will run them again.
Assignee

Comment 5

5 years ago
Fixed test case.
Also fixed getImageData as not all platforms set the alpha channel to 255.
Attachment #8390088 - Attachment is obsolete: true
Attachment #8390713 - Flags: review?(roc)
Assignee

Comment 7

5 years ago
removed obsolete comment
Attachment #8390713 - Attachment is obsolete: true
Attachment #8390713 - Flags: review?(roc)
Attachment #8390979 - Flags: review?(roc)
Assignee

Updated

5 years ago
Keywords: dev-doc-needed
Assignee

Updated

5 years ago
Keywords: checkin-needed
patching file content/canvas/src/CanvasRenderingContext2D.cpp
bad hunk #3 @@ -3802,16 +3808,41 @@ CanvasRenderingContext2D::GetImageDataAr
 (17 16 41 41)
Keywords: checkin-needed
Assignee

Comment 9

5 years ago
Attachment #8390979 - Attachment is obsolete: true
Assignee

Updated

5 years ago
Keywords: checkin-needed
Assignee

Comment 13

5 years ago
Attachment #8391277 - Attachment is obsolete: true
Assignee

Comment 15

5 years ago
successful try run: https://tbpl.mozilla.org/?tree=Try&rev=fc25121a3260
everything is green this time. Sorry about not noticing the failures earlier.
Attachment #8391801 - Attachment is obsolete: true
Assignee

Updated

5 years ago
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/e25f1c48cf0c
Status: NEW → RESOLVED
Last Resolved: 5 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
Rik, thanks for implementing this!
Assignee

Updated

5 years ago
relnote-firefox: --- → ?
relnote-b2g: --- → ?
Keywords: relnote
Assignee

Comment 20

5 years ago
See http://blogs.adobe.com/webplatform/2014/04/01/new-canvas-features/ for a description of the feature.
Added in the release notes with the title "Support for the alpha option to the canvas context options"
Is the performance of the code following this comment important?:

      // XXX Is there some useful swizzle MMX we can use here?

http://dxr.mozilla.org/mozilla-central/source/content/canvas/src/CanvasRenderingContext2D.cpp#3918

I just happened to notice it when auditing code for an unrelated reason. The answer: yes. I came up with one back in grad school (late in the last millenium), though I've never done anything with it. There are probably better ways now with MMX2 or something, but I just thought I'd check.
Actually, I'm not sure my algorithm will apply here. This looks like a simpler problem. Well, with an extra conversion to unpremultiplied alpha.
Assignee

Comment 24

5 years ago
(In reply to Steve Fink [:sfink] from comment #23)
> Actually, I'm not sure my algorithm will apply here. This looks like a
> simpler problem. Well, with an extra conversion to unpremultiplied alpha.

Yes, it seems that there should be a routine somewhere in the codebase that can do this quickly.

Of course, storing premultiplied data is wrong to begin with so this shouldn't be necessary :-)
You need to log in before you can comment on or make changes to this bug.