W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2013

Re: exposing CANVAS or something like it to Web Workers

From: (wrong string) 社用 <gman@google.com>
Date: Wed, 2 Jan 2013 14:52:45 -0800
Message-ID: <CAKZ+BNrZ619hCkZcU-4HzhRqFzozLwrPFcFLXEgNkQg=dr9iaQ@mail.gmail.com>
To: Ian Hickson <ian@hixie.ch>
Cc: Charles Pritchard <chuck@jumis.com>, Web Applications Working Group WG <public-webapps@w3.org>
Another issue as come up and that is one of being able
to synchronize updates of a canvas in
worker with changes in the main page.

For a real world example see Google's MapsGL
(http://support.google.com/maps/bin/answer.py?hl=en&answer=1630790)

Apparently MapsGL uses 2 canvases and/or some DOM objects overlayed on top
of each other.
Dragging the mouse moves objects in all of those layers and they need to
move simultaneously
to have a good UX.

You can imagine issues if a canvas is being rendering to from a worker. How
would the user
guarantee that changes from the worker are synchronized with changes to the
DOM in the
main thread?

Similarly, let's say you have 2 canvases and are rendering to both in a
worker.  Does

   context1.commit();
   context2.commit();

guarantee you'll see both commits together?

Random thoughts

*) Leave things the way they are and add another mechanism for syncing?

In other words, by default things are not sync. Through some other API or
settings the user can opt
into getting synchronization

*) Look at OpenGL "swap groups" as inspiration for an API?

http://www.opengl.org/registry/specs/NV/wgl_swap_group.txt
http://www.opengl.org/registry/specs/NV/glx_swap_group.txt

*) Consider an 'oncommit' or 'onswap' event on 'Window'?

The idea being you want to give the main thread a chance to update stuff
(DOM elements) in response
to a worker having called 'commit' on a canvas.

Of course not sure how that would work if you have 2 workers each rendering
to a different canvas.

Note: I haven't thought through these issues at all and I've personally not
had to deal with them but it
seems clear from the MapsGL example that a solution will be needed for some
subset of apps to have
a good UX. I know for example there's game engine that has API to keep DOM
elements located
relative to game objects being rendered in a canvas to make it easy to give
HTML based stats on
the game objects as opposed to having to render the stats manually with
canvas.















On Fri, Nov 16, 2012 at 8:35 PM, Ian Hickson <ian@hixie.ch> wrote:

> On Fri, 16 Nov 2012, Charles Pritchard wrote:
> > >
> > >
> > >
> http://lists.w3.org/Archives/Public/public-whatwg-archive/2012Nov/0199.html
> >
> > Seems like we might use requestAnimationFrame in the main thread to
> > postMessage to the worker as an alternative to using setInterval in
> > workers for repaints.
>
> The idea in due course is to just expose rAF in workers. Please do read
> the e-mail above, which actually mentions that.
>
> --
> Ian Hickson               U+1047E                )\._.,--....,'``.    fL
> http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
> Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
>
>
Received on Wednesday, 2 January 2013 22:53:12 GMT

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