[whatwg] Canvas v5 API additions

Ian Hickson ian at hixie.ch
Thu May 31 19:04:59 PDT 2012

On Thu, 29 Mar 2012, Ashley Gullen wrote:
> On 28 March 2012 22:41, Ian Hickson <ian at hixie.ch> wrote:
> > On Sat, 29 Oct 2011, Ashley Gullen wrote:
> > >
> > > I had a quick go with setting ctx.mozImageSmoothingEnabled = false.  
> > > It works great with drawImage.  However it does not appear to affect 
> > > repeated patterns. This makes for quite a strange effect where the 
> > > game's sprites are pixellated but the tiled backgrounds are bilinear 
> > > filtered.  So it's half way there.
> >
> > This matches what the spec has done; you can make it also affect 
> > patterns if you like by first drawing the image scaled to another 
> > canvas and then using that as the pattern (so the pattern doesn't have 
> > to be scaled).
> >
> > If you just have everything scaled, though, you might be better off 
> > just drawing everything to the canvas without any scaling and then 
> > just scaling the whole thing once per frame, either by stretching the 
> > canvas and relying on CSS to turn off smoothing, or by using 
> > drawImage().
> Why would anyone want to turn off smoothing for just drawImage and not 
> repeat patterns?  Our games use repeat patterns to draw tiled textures 
> as a quicker way to render a grid of drawImage, so why not make them 
> work the same?  If I wasn't clear, in the quoted post I thought the fact 
> mozImageSmoothingEnabled did not affect repeat patterns was a bug.

Fair enough. Since nobody has given a reason why patterns would ignore 
imageSmoothingEnabled, and your argument seems reasonable, I've changed 
the spec to require that it affect both.

> IMO the smoothing property should affect everything (perhaps even the 
> aliased lines request that was brought up).  Things like a retro 
> pixel-style game will want a simple option to deliberately 
> alias/nearest-neighbour everything on the canvas, and having the 
> smoothing option affect some things but not others seems to just be an 
> inconvenience.

I haven't added anything yet for different kinds of line drawing.

On Thu, 29 Mar 2012, Ashley Gullen wrote:
> Thanks.  Having looked at the changes, I think it might be more 
> appropriate to put this as a third global option, e.g. "globalAlpha", 
> "globalCompositeOperation" and "globalSmoothingEnabled" (default true, 
> because I think most implementations currently do smoothing).  I think 
> the option should definitely affect all rendering on the canvas (images, 
> patterns, lines, possibly text?) since applications like retro games 
> need a simple switch to affect everything, and the name 
> "globalSmoothingEnabled" should better imply it will affect everything.

I think the use case of "just do everything at a lower quality" isn't 
really well handled by just disabling anti-aliasing, especially as we go 
forward into really high-resolution screens. If you want something to look 
like it was rendered at 320x240 or something, then render it at that 
resolution using a canvas with those dimensions and then scale it to 
another canvas using imageSmoothing disabled.

(Might still not work since the 320x480 canvas could itself be backed 
with a high res store...)

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