GetTexSubImage2D(GLenum target, GLint level, GLint x, GLint y, GLsizei width, GLsizei height, GLvoid* texels);
and for consistency, its 1D and 3D counterparts.
I have a series of N textures I'd like to read data back from. The texture data is not available in client memory at the time I need to read it. I only need a relatively small part of each texture, so using GetTexImage() to read entire textures is very inefficient.
Binding each texture to a framebuffer object and using a ReadPixels() call, seems unnecessarily complicated (inefficient) given that a function to read an entire texture directly already exists.
For completeness it may be a good idea to add compressed versions such as:
GetCompressedTexSubImage2D(GLenum target, GLint level, GLint x, GLint y, GLsizei width, GLsizei height, GLvoid* texels);