Image units are binding points for OpenGL textures, separate from texture image units, that allow arbitrary read/write and atomic access, not available with textures.
The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures.
This can allow for a number of powerful features, including relatively cheap order-independent transparency.
If you think that this is a great feature, remember that there is no such thing as a free lunch. The cost of using image load/store is that all of its write operations are not automatically coherent. By using image load/store, you take on the responsibility to manage what OpenGL would normally manage for you using regular texture reads/FBO writes.
This extension provides GLSL built-in functions allowing shaders to loadfrom, store to, and perform atomic read-modify-write operations to asingle level of a texture object from any shader stage.These built-infunctions are named imageLoad(), imageStore(), and imageAtomic*(),respectively, and accept integer texel coordinates to identify the texelaccessed.The extension adds the notion of "image units" to the OpenGLAPI, to which texture levels are bound for access by the GLSL built-infunctions.To allow shaders to specify the image unit to access, GLSLprovides a new set of data types ("image*") similar to samplers.Eachimage variable is assigned an integer value to identify an image unit toaccess, which is specified using Uniform*() APIs in a manner similar tosamplers.