[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.
Created attachment 283491 [details]
webgl preservedrawingbuffer issue ios safari demonstration
Can also go here
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
This bug might be fixed with the fix for Bug 183151, or it might have been fixed since it was filed.
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).
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.