Textures are useful for storing not only loads of data, not just pixel colors as we generally tend to think of them, but also for multiple sets of pixels in both the x and y directions and RGBA channels. We can actually pack multiple images into a single RGBA texture and use each of the R, G, B, and A components as individual textures themselves by extracting each of these components from the shader code.
The result of packing individual grayscale images into a single RGBA texture can be seen in the following screenshot:
Why is this helpful? Well, in terms of the amount of actual memory that your application takes up, textures are a large portion of your application's size. We can, of course, reduce the size of the image, but then we would lose details in how it can be represented. So, to begin reducing the size of your application, we can look...