On 3/20/12 6:36 PM, Glenn Maynard wrote:
The drawing calls that happen after would need to be buffered (or
otherwise flush the queue, akin to calling glFinish), so the operations
still happen in order.

The former seems like it could get pretty expensive and the latter would negate the benefits of making it async, imo.

putImageData being async makes sense, too, for the same reason: it
avoids having to flush drawing commands earlier in the queue, which
helps keep putImageData from blocking.

I don't see why it needs to block at all. At least in Gecko the putImageData basically just becomes a drawing command itself; you send it over to the graphics card and forget about it.

what happens if the argument passed to putImageData is modified before
it's written?

You have to copy it, yes. Which you may have to do anyway, because imagedata is not premultiplied and for most drawing you want premultiplied data.

You'd either need a mechanism to detect changes, so you
can make a copy (eg. a copy-on-write mechanism for ArrayBuffer--though
that sort of sounds useful in its own right), or to just say that any
changes to made to the buffer before the async operation completes will
be reflected in the copy.

That seems unfortunately racy.  Also unnecessary, imo.

-Boris

Reply via email to