title: Unity - native texture formats explained
body: <p>I have read the following <a href="https://docs.unity3d.com/Manual/class-TextureImporterOverride.html" rel="nofollow noreferrer">here</a>:</p>
  
  <blockquote>
    <p>When you use a Texture compression format that is not supported on the
    target platform, the Textures are decompressed to RGBA 32 and stored
    in memory alongside the compressed Textures. When this happens, time
    is lost decompressing Textures, and memory is lost because you are
    storing them twice. In addition, all platforms have different
    hardware, and are optimised to work most efficiently with specific
    compression formats; choosing non-compatible formats can impact your
    game’s performance. The table below shows supported platforms for each
    compression format.</p>
  </blockquote>
  
  <p>Let's discuss a specific case. Say I stored a <code>.png</code> file on a disc and packaged my game from Android. Now I play that game on an Android device whose GPU requires <code>ETC2</code> as native texture format. Am I correct that when I enter the game the following should happen:</p>
  
  <ol>
  <li>Read PNG file from disk to RAM (RAM is used for storing PNG file data)</li>
  <li>Decompress PNG to RGBA32 (RAM is used for both PNG and for decompressed data)</li>
  <li>Compress RGBA32 to ETC2 and upload to GPU (on RAM if I have a texture cash, then I might deallocate memory for PNG file data but I need to store RGBA32 for future reuse or at least I need to store ETC2)</li>
  </ol>
  
  <p>This means I am doing lots of conversions between PNG->RBGA32->ETC2 and during that conversions I not only use CPU resource but also significantly utilize RAM. My question - did I correctly understood what happens when one does not package with native texture formats for targeted platform?</p>