- From: Rik Cabanier <cabanier@gmail.com>
- Date: Fri, 14 Jun 2013 11:39:12 -0700
- To: Ashley Gullen <ashley@scirra.com>
- Cc: "public-canvas-api@w3.org" <public-canvas-api@w3.org>
- Message-ID: <CAGN7qDCAC0p4+NnYzapAgt+aJM8aO_6KrGmjcdWG+PXS_6ZGGQ@mail.gmail.com>
If you nest layers, there would always be a need for more than 1 but that is not usually a problem. Keeping an extra canvas around just-in-case also seems inefficient since it will need the same dimensions as your whole canvas. Reusing canvas objects will also make it harder for a browser to optimize/pipeline the drawing. This is such a common idiom. Why would we force developers to write complex and error prone code if a simple API change can do the same? On Fri, Jun 14, 2013 at 10:13 AM, Ashley Gullen <ashley@scirra.com> wrote: > IMO this looks like something that belongs to a framework rather than the > web platform. I don't see why you'd ever need "lots of temporary canvas > objects", it should only ever require one, which probably has a low enough > overhead to not need to worry about too much. > > Ashley > > > On 14 June 2013 04:57, Rik Cabanier <cabanier@gmail.com> wrote: > >> Last year, I requested if grouping could be added to canvas. >> The API would look like this: >> >> void beginLayer(); >> void beginLayer(unsigned long x, unsigned long y, unsigned long w, >> unsigned >> long h); >> void endLayer(); >> >> >> When you call beginLayer, you inherit everything from the graphics state >> except shadows, opacity and the current compositing mode. Those will reset >> to their initial value. >> At endLayer time, the graphics state will be restored and you will draw >> the >> content of the group. >> >> so for instance, if you want multiply blend with opacity of .5 >> >> ctx.globalAlpha = .5; >> ctx.globalCompositeOperation = "multiply"; >> ctx.beginLayer(); >> ... // drawing >> ctx.endLayer(); >> >> This would cause everything between begin/endLayer to be drawn normally. >> This result is then blended and composited at endLayer time. >> >> Last year, people argued that you could achieve the same effect by using a >> temporary canvas so this API is not really needed. >> I would like to see if people are more open to this API now. >> Reasons to have it: >> - it is easily achievable with existing graphics libraries. >> - it is a very common idiom. You can cut down on the amount of JS needed. >> - if you want to avoid antialiasing issue, you need to carefully set the >> CTM on the temporary canvas and remove the CTM from the current canvas >> - creating a temporary canvas has a higher overhead than simply starting a >> layer. >> - creating lots of temporary canvas objects creates memory overhead >> - is polyfillable for older canvas implementations >> >> Rik >> > >
Received on Friday, 14 June 2013 18:39:39 UTC