Bug 159608 - preserveDrawingBuffer=true wrongly double-buffers on current iOS h/w
Summary: preserveDrawingBuffer=true wrongly double-buffers on current iOS h/w
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebGL (show other bugs)
Version: Other
Hardware: iPhone / iPad iOS 9.2
: P2 Normal
Assignee: Dean Jackson
Keywords: InRadar
Depends on:
Blocks: 183151
  Show dependency treegraph
Reported: 2016-07-10 03:52 PDT by Reuben Scratton
Modified: 2020-05-08 16:03 PDT (History)
3 users (show)

See Also:

webgl preservedrawingbuffer issue ios safari demonstration (956 bytes, text/html)
2016-07-12 23:12 PDT, Gregg Tavares
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Reuben Scratton 2016-07-10 03:52:43 PDT
[F.A.O. Dean Jackson]

Using preserveDrawingBuffer=true on iOS wrongly expects that rendering is done to two alternating backbuffers, i.e. normal double-buffering. As far as I can tell other WebGL implementations treat preserveDrawingBuffer=true as rendering to a single backbuffer which is then copied to the front buffer rather than swapped. 

Here is a simple demo of preserveDrawingBuffer=true written by Gregg Tavares:


This demo looks fine on all desktop browsers and Android but flickers dreadfully on mobile Safari on iOS 9.x and 8.x because of the unexpected double-buffering.

I reported the issue to Gregg and he advised me to report it here, marked for the attention of Dean.
Comment 1 Gregg Tavares 2016-07-12 23:12:52 PDT
Created attachment 283491 [details]
webgl preservedrawingbuffer issue ios safari demonstration

Can also go here

Comment 2 Gregg Tavares 2016-07-12 23:18:12 PDT
I don't remember if I'm supposed to report this stuff but I also filed it as an apple bug 27317599

Also the conformance test fails on iOS

Comment 3 Reuben Scratton 2016-08-16 15:21:57 PDT
Comment 4 Dean Jackson 2016-08-19 12:13:54 PDT
Comment 5 Kenneth Russell 2020-05-08 14:31:17 PDT
This bug might be fixed with the fix for Bug 183151, or it might have been fixed since it was filed.
Comment 6 Dean Jackson 2020-05-08 16:01:44 PDT
This doesn't reproduce on current tip-of-tree iOS, but I think that's because we're now using the same compositing/back-buffer approach as macOS (now that both are using ANGLE).
Comment 7 Kenneth Russell 2020-05-08 16:03:30 PDT
Great. Thanks Dean for confirming. It looked to me like the antialias:true path for preserveDrawingBuffer:true was working correctly, and that's what this test case uses. Closing as WontFix - no longer reproducible.