IMHO, Instead of making multiple versions API (GL2, GL3, GL4, GLES, GLES2 and other), can use profiles - one API, many profiles. Like this:
GL_CONTEXT_GL2_HARDWARE_PROFILE_BIT_ARB - for DX9 hardware
GL_CONTEXT_GL3_HARDWARE_PROFILE_BIT_ARB - for DX10(.1) hardware
GL_CONTEXT_GL4_HARDWARE_PROFILE_BIT_ARB - for DX11 hardware
GL_CONTEXT_GLES_HARDWARE_PROFILE_BIT_ARB - for embedded systems
GL_CONTEXT_GLES2_HARDWARE_PROFILE_BIT_ARB - for embedded systems
For next release opengl api, some profiles may be deprecated, or supplemented other new features.
For example, OpenGL 4.1:
added ARB_texture_barrier functional in core for GL_CONTEXT_GL3_HARDWARE_PROFILE_BIT_ARB and GL_CONTEXT_GL4_HARDWARE_PROFILE_BIT_ARB profiles.
Or something like this.![]()



