GLI 0.5.0 is essentially a rewrite of GLI. I realized that GLI 0.4 was pretty slow at what it did essentially because common usages would generate copies.
My idea was to define a model that could give me the best performances for image processing and could match the OpenGL way to see textures. This model is defined by a separation of the texture objects and their storages with a requirement for explicit copy of the storages. All the textures, of any kind (2D, 3D, array, cube) are effectively views of a storage and potentially of the same storage.
Hence, we can imagine an engine design where the asset loader would load storages but it's only at the rendering backend stage that the engine would have to decide how to take advantage of that storage. For example, OpenGL ES2 doesn't support texture 2d array but OpenGL 3 does. In both case the engine could store a single storage but dispatch multiple texture 2D to ES2 or a single texture 2d array to OpenGL 3 seamlessly.
GLI supports only DDS files to enforce the usage of native GPU texture formats. One of the next priority is to provide the support of KTX containers. I am also looking forward to sparse storages and more access coherent image addressing like Morton-order.
Check out the code samples to get a look at this new version and enjoy!