split camera frame state out into a separate class so it can be reused
single renderer for the whole camera
use the naive frame transform, not the interpolated one

I only roughly understand why this is ok. I think still works sanely
because all the incoming positions are already interpolated. regardless,
it works, and will simplify things for me soon
take a state ticket instead of making direct GL calls