Arranging Multiple Stages for Best Performance
The arrangement of your displays in the Displays Preference Pane (Mac OS) or the Displays Control Panel (Windows) can greatly impact performance when rendering to multiple Stages, especially true on Windows.
To get the best possible performance from Isadora when rendering to multiple stages, it is important that all the stages are the same resolution and that you align their top or left edges. This article explains why this is important and gives specific examples of good and bad display arrangements.
For all of these examples, we're assuming that Isadora's User Interface is on the main display 1. The alignment of this display in relation to the others has no impact on performance; you can place it in any relationship you wish to the displays used as Isadora Stages.
When Isadora creates the output stages, it attempts to combine contiguous areas of the screen into one OpenGL context. For example, if you are using three Stages, and they are assigned to displays 2, 3 and 4, this would be the optimum arrangement.
In this case, all outputs are the same size (1920x1080) and the top edges of all three outputs are aligned. When the displays are organized like this, Isadora can create one large OpenGL context that spans displays 2, 3 and 4. Why is this important? Because, after rendering each frame, one must perform an operating called "swapping," which brings the makes the new image visible. To prevent "tearing" (glitching) of the image, OpenGL has to wait for something called "monitor synchronization." On a 60Hz Monitor, this can take as long as 16.7 mS, which is 1/2 of a frame at 30 fps. By combining all the outputs in this way, Isadora this waiting period is never more than the maximum. (Isadora attempts to align its rendering frequency so that the time spent waiting for the swap is as small as possible, but heavy patches can disturb this alignment.)
Now consider this monitor arrangement:
Because the edges of displays 2, and 3 are aligned, Isadora creates a single context for those two displays. But because display 4 is not aligned with 2 and 3, it creates a second context. When it renders the stages, it now must "swap" these two contexts separately. In the worst case scenario, Isadora would have wait 33.4 mS (16.7 x 2) which is the duration of one frame at 30 fps. This can lead to a noticeable slow down of the frame rate.
The same result can occur when one of the stages is not the same resolution as the others. This arrangement would also result in two OpenGL contexts:
Similarly, you will get a second context if you put the user interface display (1) between the first and second stages.
Finally consider this monitor arrangement, which is the worst case scenario:
Because the top/bottom edges of displays 2, 3 and 4 are not aligned, must instead create three separate OpenGL output contexts. When it renders the Stages, it now must "swap" each one separately. In this case, Isadora might wait as long as 50.1 mS (16.7 x 3) on a 60Hz monitor, which is now longer than the duration of a single frame. This can have a drastic effect on your frame rate.
Great, thanks so much for that: the explanation is really helpful.
I would suggest this is promoted to a KB article.
Knowledge base article already created under "Best Practices."
sorry. I don't know either.
@mark just to add a note to this, I get substantially better playback performance with monitors plugged in. Showing stage previews on my laptop monitor for example, I get half the frame rate and 1/4 of the cycles compared with having screens attached.