bloodbob said:Espically your description of method three really sounds like there should be a condintional.
There was a conditional in my first implementation, since I was optimizing for the minimum channel, so I only redistributed the bits whenever the range got smaller than the minimum channel. Optimizing for the maximum channel instead makes it possible to redistribute all the time, well, at least as long as the final bitdepths for RGB is the same as range (it's possible to move RGB into a separate lower precision texture, like RGB8 or DXT1 while keeping range in L16).