Name SGIX_swap_barrier Name Strings GLX_SGIX_swap_barrier Version $Date: 1996/07/22 06:38:40 $ $Revision: 1.12 $ Number 92 Dependencies SGIX_swap_control affects the definition of this extension SGI_cushion affects the definition of this extension SGIX_swap_group is required Overview This extension provides the capability to sychronize the buffer swaps of different swap groups. A swap group is bound to a _swap_barrier_. The buffer swaps of each swap group using that barrier will wait until every swap group using that barrier is ready to swap (where readiness is defined below), after which time all buffer swaps of all groups using that barrier will take place concurrently. This extension extends the set of conditions that must be met before a buffer swap can take place. Issues * Should we have a query for the maximum number of supported barriers? New Procedures and Functions void BindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier); Bool QueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max); New Tokens None Additions to the GLX Specification Add to section 3.2.6, Double Buffering: BindSwapBarrierSGIX binds the swap group that contains to . Subsequent buffer swaps for that group will be subject to this binding, until the group is unbound from . If is zero, the group is unbound from its current barrier, if any. QueryMaxSwapBarriersSGIX returns in the maximum number of barriers supported by an implementation on . QueryMaxSwapBarriersSGIX returns True if it success and False if it fails. If it fails, is unchanged. Before a buffer swap can take place, a set of conditions must be satisfied. The conditions are defined in terms of the notions of when a drawable is ready to swap and when a group is ready to swap. Any GLX drawable that is not a window is always ready. When a window is unmapped, it is always ready. When a window is mapped, it is ready when all of the following are true: 1. A buffer swap command has been issued for it. 2. Its swap interval has elapsed. A group is ready when the following is true: 1. All windows in the group are ready. All of the following must be satisfied before a buffer swap for a window can take place: 1. The window is ready. 2. If the window belongs to a group, the group is ready. 3. If the window belongs to a group and that group is bound to a barrier, all groups using that barrier are ready. Buffer swaps for all windows in a swap group will take place concurrently after the conditions are satisfied for every window in the group. Buffer swaps for all groups using a barrier will take place concurrently after the conditions are satisfied for every window of every group using the barrier, if and only if the vertical retraces of the screens of all the groups are synchronized. If they are not synchronized, there is no guarantee of concurrency between groups. Both BindSwapBarrierSGIX and QueryMaxSwapBarrierSGIX are part of the X stream. An implementation may support a limited number of swap barriers, and may have restrictions on where the users of a barrier can reside. For example, an implementation may allow the users to reside on different screens, displays, or even hosts. Errors BindSwapBarrierSGIX generates BadValue if is already bound to another swap group or if is not a valid name of a barrier. BindSwapBarrierSGIX generates BadGLXDrawable if is an invalid GLX drawable. QueryMaxSwapBarrierSGIX generates BadValue if is not a valid screen. New State Initial Get Value Get Command Type Value Attrib --------- ----------- ---- ------- ------ ?? New Implementation Dependent State None