Always wanted to put my hands on an OpenGL ES 3 Android device. Here are the results of testing VAO on Google Nexus 10 (Android 4.3 with OpenGL ES 3) and Samsung Galaxy Nexus (Android 4.3 with OpenGL ES 2 and OES_vertex_array_object extension).
1. First, the old Samsung Galaxy Nexus.
The extensions list claims the OES_vertex_array_object extension is supported. So, I load the entry points:
#define BIND_EXT( VarName, Type, Bind1, Bind2 )\ VarName = (Type)GetGLProc( API, Bind1 );\ if ( !VarName ) VarName = (Type)GetGLProc( API, Bind2 ); BIND_EXT( API->glBindVertexArray, PFNGLBINDVERTEXARRAYPROC, "glBindVertexArray", "glBindVertexArrayOES" ); BIND_EXT( API->glDeleteVertexArrays, PFNGLDELETEVERTEXARRAYSPROC, "glDeleteVertexArrays", "glDeleteVertexArraysOES" ); BIND_EXT( API->glGenVertexArrays, PFNGLGENVERTEXARRAYSPROC, "glGenVertexArrays", "glGenVertexArraysOES" );
Just in case, I check for the presence of actual functions.
bool IsVAOSupported = API->glBindVertexArray && API->glDeleteVertexArrays && API->glGenVertexArrays;
It looks fine, so we start rendering using VAO in hope everything will go as expected. Nope, it doesn’t:
E/libEGL: called unimplemented OpenGL ES API.
Pfff, stop saying “Yes, we support VAO!”.
2. Here goes the Google Nexus 10 (with an awesome 2560×1600 10-inch touchscreen).
I/LEngine: OpenGL version : OpenGL ES 3.0 I/LEngine: OpenGL vendor : ARM I/LEngine: OpenGL renderer : Mali-T604 I/LEngine: GLSL version : OpenGL ES GLSL ES 3.00
VAO just works using the same code path, which is used on a desktop OpenGL 3.2.