[whatwg] High-density canvases
Ian Hickson
ian at hixie.ch
Mon Nov 25 11:48:49 PST 2013
On Tue, 10 Sep 2013, Ian Hickson wrote:
> On Tue, 10 Sep 2013, Ian Hickson wrote:
> >
> > It would be nice to fix these all at once, and I think we can, by
> > introducing a configuration option on getContext(), in the style of
> > WebGL:
> >
> > getContext('2d', { density: 'autosize' });
> >
> > This would trigger the following behaviour: When the context is
> > created, and subsequently when the <canvas> changes size (e.g. due to
> > being sized with CSS relative units and the element they're relative
> > to changing), or when the display density changes size (e.g. due to
> > page zoom), then:
> >
> > - the width and height of the canvas bitmaps get updated to match the
> > new native size of the <canvas>, at native density.
> >
> > - the coordinate space of the canvas (context.width/context.height)
> > gets updated to match the size of the <canvas> in CSS pixel units.
> >
> > - a 'resize' event gets fired at the <canvas>.
> >
> > We would dump the *HD versions of the methods, and make the regular
> > ones go back to returning the actual raw pixels, since that would now
> > work fine and still provide HD-quality content everywhere it's
> > available.
> >
> > What do people think?
>
> Rik pointed out on IRC that it's common to have out-of-DOM canvases,
> e.g. for storing textures, which would need to track the density of the
> one in the DOM. I'd have to think about it in more detail, but in
> principle it seems some sort of slaving mechanism should be able to
> handle that too.
Proposed slaving mechanism:
var context1 = pageCanvas.getContext('2d', { density: 'autosize' });
var context2 = hiddenCanvas.getContext('2d', { density: pageCanvas });
Assuming we go with http://wiki.whatwg.org/wiki/WorkerCanvas :
If the 'density' value isn't the string 'autosize', it has to be a canvas
element or, if this is a worker, a WorkerCanvas object. Either way, that
object has to have had a context already created for it, using density set
to 'autosize'. Note that this means there's no way to have this magic
behaviour make a worker's canvases change size to match a canvas being
drawn on on the main thread. When using a WorkerCanvas, the browser takes
care of forwarding density changes from the main thread to the worker (I'm
not sure I understand the proposal properly, but I assume it autocommits
when the worker goes idle, even if the main thread is busy).
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list