- From: Rik Cabanier <cabanier@gmail.com>
- Date: Wed, 13 Feb 2013 04:49:55 +1100
- To: Ashley Gullen <ashley@scirra.com>
- Cc: "whatwg@whatwg.org" <whatwg@whatwg.org>, "public-canvas-api@w3.org" <public-canvas-api@w3.org>, "public-html@w3.org" <public-html@w3.org>, Jay Munro <jaymunro@microsoft.com>
Is there an implementation report on this? If browsers stabilized on this feature, it might be time to drop the prefix. On Tue, Feb 12, 2013 at 7:30 AM, Ashley Gullen <ashley@scirra.com> wrote: > I would re-emphasise this is important for many game applications. Here's > an image showing the effect it can have from a recent blog post I wrote: > https://www.scirra.com/images/sampling-point-linear.png > For a game in this style it is essential to be able to force > nearest-neighbour. Games in that "retro" style are often unplayable > because they look so awful if they get bilinear interpolation forced on > them. On the other hand, modern hi-res style games which intend to use > bilinear interpolation only look marginally worse if they get > nearest-neighbour. So I think the existing spec was fine as it was: > imageSmoothingEnabled = false means "require nearest-neighbour > interpolation", imageSmoothingEnabled = true means "any smoothing > algorithm, or nearest-neighbour". > > I would also emphasise this should definitely also apply to patterns, for > the same reason: games are likely to use a pattern to render tiles, and > those should be rendered with the same interpolation as everything else. > > Ashley > > > > On 8 February 2013 12:25, Rik Cabanier <cabanier@gmail.com> wrote: > >> I agree we should bring it back. >> >> Personally, it would be nice that have a more formal definition of what >> smoothing actually means so user agents can implement it similarly. >> >> Rik >> >> On Tue, Feb 5, 2013 at 7:14 AM, Jay Munro <jaymunro@microsoft.com> wrote: >> >> > For CR, we took the imageSmoothingEnable feature out because it hadn't >> > been given a chance to be discussed by the working group. For level 2, >> I'm >> > adding it back in, but asking for any discussion that needs to be made >> > first. >> > >> > Silence will be taken to mean there is no objection, but positive >> > responses are encouraged. If I don't hear any objections by Monday Feb >> 11, >> > I'll check it in. >> > >> > The following is the pending check in: >> > >> > >> > @@ -40677,6 +40677,10 @@ dictionary <dfn>TrackEventInit</dfn> : >> > <span>EventInit</span> { >> > // compositing >> > attribute unrestricted double <span >> > title="dom-context-2d-globalAlpha">globalAlpha</span>; // (default 1.0) >> > attribute DOMString <span >> > >> title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</span>; >> > // (default source-over) >> > + >> > + // image smoothing >> > + attribute boolean <span >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</span>; >> > // (default true) >> > + >> > <!-- >> > // v7 we've also received requests for: >> > - turning off antialiasing to avoid seams when patterns are painted >> > next to each other >> > @@ -40945,7 +40949,8 @@ interface <dfn>Path</dfn> { >> > >> > >> title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</code>, >> > <code >> > title="dom-context-2d-font">font</code>, <code >> > title="dom-context-2d-textAlign">textAlign</code>, <code >> > - title="dom-context-2d-textBaseline">textBaseline</code>.</li> >> > + title="dom-context-2d-textBaseline">textBaseline</code>, <code >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code>.</li> >> > </ul> >> > >> > <p class="note">The <span>current default path</span> and the >> > @@ -43416,10 +43421,16 @@ try { >> > >> > <p>If the original image data is a bitmap image, the value painted >> > at a point in the area of the repetitions is computed by filtering >> > - the original image data. The user agent may use any filtering >> > + the original image data. If the <code >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code> >> > + then the user agent may use any filtering >> > algorithm (for example bilinear interpolation or nearest-neighbor). >> > - When the filtering algorithm requires a pixel value from outside the >> > - original image data, it must instead use the value from wrapping the >> > + If the <code >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code> >> > + attribute is set to false, the image must be rendered using >> > + nearest-neighbor interpolation. When such the filtering algorithm >> > + requires a pixel value from outside the original image data, it >> > + must instead use the value from wrapping the >> > pixel's coordinates to the original image's dimensions. (That is, >> > the filter uses 'repeat' behavior, regardless of the value of >> > <var title="">repetition</var>.) >> > @@ -44539,6 +44550,18 @@ v6DVT (also check for '- -' bits in the part >> > above) --> >> > <p class="note">This specification does not define the algorithm to >> > use when scaling the image, if necessary.</p> >> > >> > + <p>If the <code >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code> >> > + attribute is set to true, then the user agent should attempt to >> > + apply a smoothing algorithm to the image data when it is scaled. >> > + Otherwise, the image must be rendered using nearest-neighbor >> > + interpolation.</p> >> > + >> > + <p class="note">This specification does not define the precise >> > + algorithm to use when scaling an image when the <code >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code> >> > + attribute is set to true.</p> >> > + >> > <p class="note">When a canvas is drawn onto itself, the <span>drawing >> > model</span> requires the source to be copied before the image is >> drawn >> > back onto the canvas, so it is possible to copy parts of a canvas >> > @@ -46040,6 +46063,36 @@ function AddCloud(data, x, y) { ... }</pre> >> > >> > </div> >> > >> > + <h6>Image smoothing</h6> >> > + >> > + <dl class="domintro"> >> > + >> > + <dt><var title="">context</var> . <code >> > >> title="dom-context-2d-imageSmoothingEnabled">imageSmoothingEnabled</code> [ >> > = <var title="">value</var> ]</dt> >> > + >> > + <dd> >> > + >> > + <p>Returns whether pattern fills and the <code >> > + title="dom-context-2d-drawImage">drawImage()</code> method will >> > + attempt to smooth images if they have to rescale them (as opposed >> > + to just rendering the images with "big pixels").</p> >> > + >> > + <p>Can be set, to change whether images are smoothed (true) or not >> > + (false).</p> >> > + >> > + </dd> >> > + >> > + </dl> >> > + >> > + <div class="impl"> >> > + >> > + <p>The <dfn >> > + >> > >> title="dom-context-2d-imageSmoothingEnabled"><code>imageSmoothingEnabled</code></dfn> >> > + attribute, on getting, must return the last value it was set to. On >> > + setting, it must be set to the new value. When the >> > + <code>CanvasRenderingContext2D</code> object is created, the >> > + attribute must be set to true.</p> >> > + >> > + </div> >> > >> > >> > >> > >> > >> > >> > >> > >
Received on Tuesday, 12 February 2013 17:50:20 UTC