1Name 2 3 SGIX_swap_barrier 4 5Name Strings 6 7 GLX_SGIX_swap_barrier 8 9Version 10 11 $Date: 1996/07/22 06:38:40 $ $Revision: 1.12 $ 12 13Number 14 15 92 16 17Dependencies 18 19 SGIX_swap_control affects the definition of this extension 20 SGI_cushion affects the definition of this extension 21 SGIX_swap_group is required 22 23Overview 24 25 This extension provides the capability to sychronize the buffer 26 swaps of different swap groups. 27 28 A swap group is bound to a _swap_barrier_. The buffer swaps of each 29 swap group using that barrier will wait until every swap group using 30 that barrier is ready to swap (where readiness is defined below), after 31 which time all buffer swaps of all groups using that barrier will 32 take place concurrently. 33 34 This extension extends the set of conditions that must be met before 35 a buffer swap can take place. 36 37Issues 38 39 * Should we have a query for the maximum number of supported barriers? 40 41New Procedures and Functions 42 43 void BindSwapBarrierSGIX(Display *dpy, 44 GLXDrawable drawable, 45 int barrier); 46 47 Bool QueryMaxSwapBarriersSGIX(Display *dpy, 48 int screen, 49 int *max); 50 51New Tokens 52 53 None 54 55Additions to the GLX Specification 56 57 Add to section 3.2.6, Double Buffering: 58 59 BindSwapBarrierSGIX binds the swap group that contains <drawable> to 60 <barrier>. Subsequent buffer swaps for that group will be subject to 61 this binding, until the group is unbound from <barrier>. If <barrier> 62 is zero, the group is unbound from its current barrier, if any. 63 64 QueryMaxSwapBarriersSGIX returns in <max> the maximum number of barriers 65 supported by an implementation on <screen>. 66 67 QueryMaxSwapBarriersSGIX returns True if it success and False if it fails. 68 If it fails, <max> is unchanged. 69 70 Before a buffer swap can take place, a set of conditions must be 71 satisfied. The conditions are defined in terms of the notions of when 72 a drawable is ready to swap and when a group is ready to swap. 73 74 Any GLX drawable that is not a window is always ready. 75 76 When a window is unmapped, it is always ready. 77 78 When a window is mapped, it is ready when all of the following are true: 79 80 1. A buffer swap command has been issued for it. 81 82 2. Its swap interval has elapsed. 83 84 A group is ready when the following is true: 85 86 1. All windows in the group are ready. 87 88 All of the following must be satisfied before a buffer swap for a window 89 can take place: 90 91 1. The window is ready. 92 93 2. If the window belongs to a group, the group is ready. 94 95 3. If the window belongs to a group and that group is bound to a 96 barrier, all groups using that barrier are ready. 97 98 Buffer swaps for all windows in a swap group will take place concurrently 99 after the conditions are satisfied for every window in the group. 100 101 Buffer swaps for all groups using a barrier will take place concurrently 102 after the conditions are satisfied for every window of every group using 103 the barrier, if and only if the vertical retraces of the screens of all 104 the groups are synchronized. If they are not synchronized, there is no 105 guarantee of concurrency between groups. 106 107 Both BindSwapBarrierSGIX and QueryMaxSwapBarrierSGIX are part of the X 108 stream. 109 110 An implementation may support a limited number of swap barriers, 111 and may have restrictions on where the users of a barrier can reside. 112 For example, an implementation may allow the users to reside on different 113 screens, displays, or even hosts. 114 115Errors 116 117 BindSwapBarrierSGIX generates BadValue if <barrier> is already bound to 118 another swap group or if <barrier> is not a valid name of a barrier. 119 120 BindSwapBarrierSGIX generates BadGLXDrawable if <drawable> is an 121 invalid GLX drawable. 122 123 QueryMaxSwapBarrierSGIX generates BadValue if <screen> is not a valid 124 screen. 125 126New State 127 Initial 128 Get Value Get Command Type Value Attrib 129 --------- ----------- ---- ------- ------ 130 <current barrier bound to group> ?? 131 132New Implementation Dependent State 133 134 None 135 136 137 138 139