[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: http://greggman.com/downloads/examples/webgl/lessons/resources/webgl-preservedrawingbuffer-true.html 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 https://jsfiddle.net/greggman/boffbn3k/
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 https://www.khronos.org/registry/webgl/sdk/tests/conformance/context/context-attribute-preserve-drawing-buffer.html?webglVersion=1&quiet=0
*crickets*
<rdar://problem/27317599>
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.