Solved this awhile back. Basically, you get 2 renders and 1 update per frame.
(Pseudocode)
int Eye=0;
Update()
{
// reset to left eye for this frame
Eye=0;
}
Render()
{
// generate different content based on which view
// (eye, editor game view) is being rendering
switch(Eye){
case 0: renderLeft(); break;
case 1: renderRight(); break;
default: renderSomethingInEditor();
}
// increment to next view, will be used by next render in this frame.
++Eye;
}
Stereo rendering requires that the view/projection matrices are different for each eye. The eyes are effectively treated as separate cameras that are slightly offset to reflect the user's IPD. So, the game loop runs like this:
- Update() all GameObjects
- Render() everything for left eye
- Render() everything for right eye
- Render() Game View on primary display, if enabled.
- Goto 1
You will always get at least two renders per update in VR.