W3C home > Mailing lists > Public > public-webapps@w3.org > April to June 2012

Re: exposing CANVAS or something like it to Web Workers

From: 勤 <gman@google.com>
Date: Mon, 14 May 2012 17:55:44 -0700
Message-ID: <CAKZ+BNpPMrBSfa7F70DGzDGTANmMy=CFCYNP-JHbon4kmHdghw@mail.gmail.com>
To: Boris Zbarsky <bzbarsky@mit.edu>
Cc: public-webapps@w3.org
On Mon, May 14, 2012 at 5:12 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:

> On 5/14/12 8:03 PM, Gregg Tavares (勤) wrote:
>
>> var canvasSurface = new CanvasSurface();
>> var ctx = canvasSurface.getContext("2d")**;
>> var pic = new Picture;
>> pic.src = "http://someplace.com/**someimage.jpg<http://someplace.com/someimage.jpg>
>> ";
>> pic.onload = function() {
>>    ctx.drawImage(pic, 0, );
>> }
>>
>> Let's assume you can instantiate these things in either the page or a
>> worker. Nether can be transfered.
>>
>> Would that work? What problems would that have?
>>
>
> Two things that come to mind immediately:
>
> 1)  Various canvas 2d context methods depend on the styles of the canvas
> to define how they actually behave.  Clearly this would need some sort of
> changes for Workers anyway; the question is what those changes would need
> to be.
>

Which methods are these?



>
> 2)  How (or maybe whether) this should work with pic.src = "
> http://someplace.com/**someimage.svg <http://someplace.com/someimage.svg>"
> is an interesting question.
>
> 3)  This leaves open the question of how to get data from the worker back
> to the main thread to paint there.
>

I feel that's a somewhat orthogonal issue to getting a Canvas or
CanvasSurface in a worker. At least for the WebGL case, WebGL already
defines ways to share data safely between contexts so that use case is
already covered.

For a 2d context I can certainly imagine lots of ways. Some fast, some slow

slow) pass the result of toDataURL back

slow) pass an ImageData.data back (transfer of ownership)

fast) some how use a CanvasSurface as the source of a video tag

maybe there are some other ideas? But, even if we didn't resolve this, it's
still massively useful, at least for WebGL, to be able to instantiate a
WebGL context in a worker.





>
> #1 is an issue with any proposal that puts a 2d context in a worker.
>
> #2 is only an issue if we do the image loads in workers somehow; if we
> wanted to just rasterize the SVG and pass the resulting data to the worker
> there would be no problem, obviously.
>
> For #3, being able to transfer a canvas context from the page to a worker
> but leave it painting to the canvas may still be desirable...
>
> -Boris
>
>
Received on Tuesday, 15 May 2012 00:56:14 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:52 GMT