Seamlessly split image between two displays

I’m attempting to render a single image that can span two monitors. Given an example screen dimension of 320x240, I am setting the viewport like this:

Monitor 1: glViewport(0, 0, 640, 240)
Monitor 2: glViewport(-320, 0, 640, 240)

This produces the result I’m looking for in that as the model moves across the monitors, it looks perfectly aligned at the split.

The issues is that I had to set the viewport width to 640 to make this work – otherwise if I just offset a 320 horizontal port left or right, the model is clipped.

So, is there a way to translate the viewport without scaling it? (I.e., perform a translation when everything is transformed from normalized device coordinates to window coordinates)?

Thanks in advance,

P.S. I suppose I could scale all of the coordinates horizontally with the Projection Matrix, but then the perspective will be off, etc., right?

OK – I think I have answered my own question. In my code for setting glFrustum, I have the following lines to determine the aspect ratio of the screen:

ratio = screenWidth / screenHeight;

If I change this to the following

viewportSizeH = (float) mCamera.screenWidth * mViewportSizeX;
viewportSizeV = (float) mCamera.screenHeight * mViewportSizeY;

ratio = viewportSizeH / (float) viewportSizeV;

Where mViewportSizeX is the horizontal scaling (in this case 2, since I was setting the viewport to double width, as indicated in my original post.)

This code works – the image is split as expected.

So my final question is this; by setting glViewport with extents that fall offscreen, am I slowing things down because things that won’t actually be seen in the window are actually being rendered?

Any further thoughts and suggestions to produce the fastest rendering is appreciated.