W3C home > Mailing lists > Public > whatwg@whatwg.org > January 2013

Re: [whatwg] Canvas in Workers

From: Stephen White <senorblanco@chromium.org>
Date: Wed, 9 Jan 2013 14:50:03 -0500
Message-ID: <CAPeKFThOCLSdE+JEDZGsbaiZgMPPtpRHcf8+vLvXQGCOXLcC5Q@mail.gmail.com>
To: Gregg Tavares <gman@google.com>
Cc: Rick Waldron <waldron.rick@gmail.com>, Elliott Sprehn <esprehn@chromium.org>, Ian Hickson <ian@hixie.ch>, WHAT Working Group <whatwg@whatwg.org>
On Thu, Jan 3, 2013 at 7:46 PM, Gregg Tavares <gman@google.com> wrote:

> On Tue, Dec 11, 2012 at 9:04 AM, Ian Hickson <ian@hixie.ch> wrote:
>
> > On Tue, 11 Dec 2012, Gregg Tavares (社ç~T¨) wrote:
> > >
> > > discussion seems to have died down here but I'd like to bring up
> another
> > > issue
> > >
> > > In WebGL land we have creation attributes on the drawingbuffer made
> for a
> > > canvas. Example
> > >
> > >     gl = canvas.getContext("webgl", { preserveDrawingBuffer: false });
> > >
> > > We're working out the details on how to set those options for the case
> > > where we have 1 context and multiple canvases.
> > >
> > > The particular option above would apparently be a huge perf win for
> > > canvas 2d for mobile. Which suggests that whatever API is decided on it
> > > would be nice if it worked for both APIs the same.
> >
> > What does it do?
> >
>
> Effectively it makes the canvas double buffered.
>
> Right now by 2d canvases are effectively single buffered. At the
> appropriate time a copy
> of the canvas is made and passed to the compositor. This copy is slow,
> especially on
> mobile.
>

Currently, to lower the VRAM footprint and improve performance, we don't do
a copy in 2d canvas.  We temporarily transfer ownership of the texture to
the compositor at commit time, and block the renderer until the composite
is complete.  That may change, however.

Stephen


>
> Apple requested that for WebGL the default be for double buffering. When
> double buffered, when the canvas is composited (when the current JavaScript
> event exits)
> the canvas's buffer is given to the compositor and the canvas is given a
> new buffer (or
> an old one). That new buffer is cleared, meaning the contents is gone. It's
> up to the app to
> draw stuff into again. If nothing is drawn the compositor will continue to
> use the
> buffer it acquired earlier.
>
> In WebGL you can opt into the slower "copy" path. For Canvas 2D while the
> default
> has to remain the slow "copy" path it would be nice to be able to opt into
> the faster
> "swap" double buffered path.
>
>
>
>
>
>
>
> >
> > In the 2D canvas, whenever you bind to a new canvas, the context is reset
> > to its default state, the context's hit region list is reset, and the
> > context's bitmap is reset. The next time the context is flushed, the
> > canvas itself is always reset (since flushing the context causes the
> > bitmap and hit region list to be pushed to the canvas, replacing whatever
> > was there before).
> >
> > --
> > Ian Hickson               U+1047E                )\._.,--....,'``.    fL
> > http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
> > Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
> >
>
Received on Wednesday, 9 January 2013 19:58:59 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 30 January 2013 18:48:12 GMT