OK, I guess I'll make you suffer some more, actually triple buffering is clearer (it's pretty straigh forward AND elegant solution) to me in the way it works. I understand why you have to choose finite values for frame rate when you v-lock a game.
(Basically synch has happen at a multiple of 1/60 second). You can't exceed this value (whereas triple buffering allows any value from zero (bothering
) till 60 fps).
What I don't get is why the frame rate would have to go all way down from say 30 to 20. (I don't exactly don't get it it's more like it sounds weird to me).
I'll take the most likely case say the game is locked/synched @30 fps.
Basically One new frame is supposed to be ready every 33ms (if the display refresh rate is 60Hz then every frame is displayed twice). Then if a new frame is not ready there is different choices about what to do (if I understand the mechanic properly):
1. the frame is dropped (thus the previous frame will be displayed to more times)
2. the frame is granted extra time to complete.Say on extra refresh of the display (16ms).
Basically it's equal to switch v-sync/lock @20fps (one new frame is displayed every three refresh of the display). Thus as you state the render can only run at 60/(x+1) frame per second. In our case 20fps. If you allow your frame more extra time to complete (33ms) then it's the same as lock your render @15 fps, right?
So far, so good. The interesting part is what happens next? The most logic possibility is that the next frame is handle in the standard fashion that is with v-sync/v-lock @30fps.
So basically if v-sync is never "released" (not sure this is the proper term) the render could fluctuate between successive 30fps, 20fps, 15fps modes but on an extend period of time you render can fluctuate anywhere between 15fps to 30fps depending on how many frames failed to complete in time. If the render never manage to deliver a frame every 33ms then the game runs @20fps, but it's really unlikely to happens.
3. you give up on v-sync/lock and you display the unfinished frame and you have a torn frame.
It looks like when the render runs good enough it's the option devs on the 360 favors as it allows for a more consistent frame rate and doesn't induce extra input lag and frees some few MB of RAM.