An SDL_Texture represents an image in GPU memory, usable by SDL's 2D Render API. This can be
significantly more efficient than using a CPU-bound SDL_Surface if you don't need to manipulate the image
directly after loading it.
If the loaded image has transparency or a colorkey, a texture with an alpha channel will be created.
Otherwise, SDL_image will attempt to create an SDL_Texture in the most format that most reasonably
represents the image data (but in many cases, this will just end up being 32-bit RGB or 32-bit RGBA).
If closeio is true, src will be closed before returning, whether this function succeeds or not. SDL_image
reads everything it needs from src during this call in any case.
Even though this function accepts a file type, SDL_image may still try other decoders that are capable of
detecting file type from the contents of the image data, but may rely on the caller-provided type string
for formats that it cannot autodetect. If type is NULL, SDL_image will rely solely on its ability to
guess the format.
There is a separate function to read files from disk without having to deal with SDL_IOStream:
IMG_LoadTexture("filename.jpg") will call this function and manage those details for you, determining the
file type from the filename's extension.
There is also IMG_LoadTexture_IO (), which is equivalent to this function except that it will rely on
SDL_image to determine what type of data it is loading, much like passing a NULL for type.
If you would rather decode an image to an SDL_Surface (a buffer of pixels in CPU memory), call
IMG_LoadTyped_IO () instead.
When done with the returned texture, the app should dispose of it with a call to SDL_DestroyTexture().