Add support for the alpha option to the canvas context options

RESOLVED FIXED in mozilla30

Status

()

RESOLVED FIXED
5 years ago
4 years ago

People

(Reporter: cabanier, Assigned: cabanier)

Tracking

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

unspecified
mozilla30
dev-doc-complete, relnote
Points:
---
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"
relnote-firefox: ? → 30+
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.