However I could not help to notice some shortcomings of their implementation, and I'd like to expand upon those in this post.
- Update: iOS 9.3
- Update: iOS 8 Beta 3
- Update: iOS 8 Beta 2
- WebGL capabilities
- Hardcoded constraints on iOS
- Missing Extensions
It has been a while since checking back with this blog post.
Still open tickets:
Resolved tickets not merged to iOS
Most of the closed tickets for extensions are now merged into that beta. Still outstanding are the same ones that aren't implemented since Beta 2 (see below.
iOS 8 Beta 2 did not improve the current WebGL implementation over iOS 8 Beta 1. I assume the changes in webkit have yet to be merged.
Webkit has also yet to implement these tickets:
- Hardcoded constraints 133745
- WEBGL_color_buffer_float 133632
- EXT_color_buffer_half_float 133639
- EXT_blend_minmax 128974
- WEBGL_draw_buffers 133634
- EXT_frag_depth 133635
- EXT_sRGB 109332
In hardware accelerated realtime graphics it is important to get as close to the machine as possible. Apple certainly understands that with the release of Metal.
This is also true in WebGL, where differing hardware characteristics such as numbers of textures that can be used, the amount of uniforms or the support for some extended functionality and so forth is exposed to the application programmer.
You can learn more about the ways in which WebGL implementations may differ at the links below.
Apples iOS WebGL implementation has some fixed parameters, disregarding the actual device capabilities. The table below lists these parameters both as they appear natively and as they appear to WebGL, discrepancies are highlighted red.
|iPod touch 5th gen||iPad mini retina|
As you can see, an iPad mini retina is treated to the same constraints as an iPod touch 5th gen. Even though in reality the iPad mini retina has vastly expanded capabilities.
The following extensions are present on a Nexus4 and on the iOS devices natively, but not in WebGL.
|both iPod and iPad||Nexus 4|
The extensions below are supported natively (either as ES 2.0 extension or as ES 3.0 core functionality), but they are missing from WebGL.
|both iPod and iPad|
The following extensions are supported by the iPad mini retina natively, but not in WebGL.
|iPad mini retina|
- Running the WebGL conformance test crashed the mobile safari tab after about a dozen test suites.
- Update: This has been fixed with ticket 133388. The argument to canvas.getContext of "preserveDrawingBuffer:false" is only honored for the color buffer, but not for the depth buffer (you have to manually clear it).