- From: 勤 <gman@google.com>
- Date: Mon, 14 May 2012 17:03:39 -0700
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: Glenn Maynard <glenn@zewt.org>, Anne van Kesteren <annevk@annevk.nl>, Web Applications Working Group WG <public-webapps@w3.org>
- Message-ID: <CAKZ+BNoX6tLcoOBnENi=M5EgMjyd841-ep3sg=ep5KsmBTe5jQ@mail.gmail.com>
On Mon, May 14, 2012 at 4:42 PM, Jonas Sicking <jonas@sicking.cc> wrote: > On Mon, May 14, 2012 at 3:28 PM, Glenn Maynard <glenn@zewt.org> wrote: > > On Mon, May 14, 2012 at 3:01 PM, Gregg Tavares (勤) <gman@google.com > > wrote: > > > >> I'd like to work on exposing something like CANVAS to web workers. > >> > >> Ideally how over it works I'd like to be able to > >> > >> *) get a 2d context in a web worker > > > > > > I'd recommend not trying to tackle 2d and 3d contexts at once, and only > > worrying about WebGL to start. > > > > Another issue: rendering in a worker thread onto a canvas which is > displayed > > in the main thread. This needs to be solved in a way that doesn't cause > the > > asynchronous nature of what's happening to be visible to scripts. > toDataURL > > and toBlob would probably need to be prohibited on the canvas element. > I'm > > not sure what the actual API would look like. > > If/when we do this, I think it should be done in such a way that the > main window can't access the canvas object at all. Similar to what > happens when an ArrayBuffer is transferred to a Worker using > structured cloning. Once a canvas is transferred to a Worker, any > access to it should throw or return null/0/"". If you want to transfer > pixel data to the main thread, it seems less racy to do that by > getting the pixel data in the Worker which owns the canvas and then > transfer that to the main thread using postMessage. > How about separating the canvasy parts of canvas from canvas and the imagy parts of image from image. In other words, Imagine canvas is implemented like this class Canvas : public HTMLElement { private: CanvasSurface* m_surface; // everything about canvas that is not HTMLElement }; And that Image is similarly implemented as class Image : public HTMLElement { private: Picture* m_picture; // everything about Image that is not HTMLElement } now imagine you can instantiate inner implementation of these things. The parts that are not HTMLElement var canvasSurface = new CanvasSurface(); var ctx = canvasSurface.getContext("2d"); var pic = new Picture; pic.src = "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? > > > This would also require some > > equivalent to requestAnimationFrame in the worker thread. > > Agreed! > > / Jonas >
Received on Tuesday, 15 May 2012 00:04:09 UTC