Hi, good question. Here is the answer from our dev team:
In rendering, textures undergo something called pre-filtering. Let's assume that the original texture resolution is 1024x1024. Then Corona creates variants of this texture in 512x512, 256x256, 128x128 and all the way down to 1x1px. We then select which variant to use depending on how close the camera is to this texture, is it seen through refraction, etc. The purpose of all of this is to prevent getting noisy results.
When using the Corona Out of Core textures option, we create all those variants and save them on the disk. Then we load into RAM only those variants which are needed during rendering.
If you manually make the textures smaller, for example 512x512 and disable OOC textures, you do not have to deal with the 1024x1024 variant anymore, but you still need to keep the 256x256, 128x128 and all the way down to 1x1px variants in RAM. Also, if your texture is close to the camera, it will get blurry.
So in short:
- with OOC on, we smartly pick the variant of the texture which is needed and only this variant is kept in RAM
- with OOC off, we lose the "smartly" part and all variants are loaded into RAM, even if we manually reduce the texture resolution
Note: the thing with storing multiple texture variants in RAM with OOC off is not specific to Corona only. It happens in any renderer.