gl: Don't restore the viewport on function exit
Doing so involves retrieving the current viewport from OpenGL which as with any glGet operation, is expensive.
This means that the various sinks need to reset the viewport on draw.
In the process, fix resizing on cocoa.