I worry about storing the underlying colors as `ubyte` because of precision issues, though... what about just converting to/from `ubyte` when moving to/from the GPU?