Command-1 toggles to and from full-screen-in-a-window, Command-2 toggles to and from full-screen with setFullScreen. Random geometry is drawn every frame. Frames per second are printfed. Be sure to toggle out of the current full-screen mode before toggling to the other one, or weird stuff happens.

So, unless I find a way to speed up method 1, it looks like this is a tradeoff between convenience and speed. In some cases, being able to display windows over a full-screen context may be more valuable than a few extra frames per second.

Some hardware is able to re-tile the framebuffer in real fullscreen GL contexts for faster hardware write access. So in general, if you want the best performance, you should be capturing the display and using a fullscreen context, not a top-level window.