Are glTexImage2D and glTexSubImage2D the only ways to pass a buffer of pixels to a texture?
At the moment I use in a setup function glTexImage2D
In modern OpenGL there are 4 different methods to update 2D textures:
glTexImage2D - the slowest one, recreates internal data structures.
glTexSubImage2D - a bit faster, but can't change the parameters (size, pixel format) of the image.
Render-to-texture with FBO - update texture entirely on GPU, very fast. Refer to this answer for more details: https://stackoverflow.com/a/10702468/1065190
Pixel Buffer Object PBO - for fast uploads from CPU to GPU, not supported (yet) on OpenGL ES.