It’s terrible how we have to use these 2D cube map face targets to upload cube map texture images, but only for non-array cubemaps. If you’ve got a cube map array with an array length of 1, you get to treat it just like an array texture of 6 layers. This is nice, neat and simple; you use glTex*3D with them, and you can upload/download an entire mipmap level all at once.
Of course, because it’s a different texture type, it has a different sampler and a different set of texture coordinates. So it’s high time that this nonsense was put to bed.
The most effective way to do this is to simply do what modern texturing APIs do with cube maps. [var]glCopyImageSubData[/var] considered [var]GL_TEXTURE_CUBE_MAP[/var] to be no different from a 1-element [var]CUBE_MAP_ARRAY[/var]. So does [var]glInvalidateTexSubImage[/var].
Since we’re not going to get another round of deprecation+removal ever again, the best solution is to simply allow [var]glTexImage3D[/var], [var]glTexSubImage3D[/var], [var]glCompressedTexImage3D[/var], [var]glCompressedTexSubImage3D[/var], [var]glCopyTexSubImage3D[/var], and [var]glGetTexImage[/var] to take [var]GL_TEXTURE_CUBE_MAP[/var]. They will treat it in the same way they do [var]CUBE_MAP_ARRAY[/var]s, just with one layer of 6 faces.
This would break no existing code, nor would it have an adverse effect on existing code. It would simply make it possible to completely avoid using those silly face targets ever again.