109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulName
209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    MESA_swap_control
409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulName Strings
609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    GLX_MESA_swap_control
809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulContact
1009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
11c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    Ian Romanick, IBM, idr at us.ibm.com
1209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
1309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulStatus
1409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
1509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    Deployed in DRI drivers post-XFree86 4.3.
1609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
1709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulVersion
1809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
19c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    Date: 5/1/2003   Revision: 1.1
2009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
2109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulNumber
2209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
2309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    ???
2409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
2509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulDependencies
2609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
2709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
2809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
2909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    Based on GLX_SGI_swap_control version 1.9 and WGL_EXT_swap_control
3009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    version 1.5.
3109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
3209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulOverview
3309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
3409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    This extension allows an application to specify a minimum periodicity
3509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    of color buffer swaps, measured in video frame periods.
3609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
37c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian PaulIssues
38c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
39c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    * Should implementations that export GLX_MESA_swap_control also export
40c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul      GL_EXT_swap_control for compatibility with WGL_EXT_swap_control?
41c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
42c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    UNRESOLVED.
43c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
4409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulNew Procedures and Functions
4509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
4668fef184390da2fd67acfd99fba0a2dbe4a3b875Ian Romanick    int glXSwapIntervalMESA(unsigned int interval)
4709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    int glXGetSwapIntervalMESA(void)
4809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
4909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulNew Tokens
5009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
5109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
5209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
5309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to Chapter 2 of the 1.4 GL Specification (OpenGL Operation)
5409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
5509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
5609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
5709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to Chapter 3 of the 1.4 GL Specification (Rasterization)
5809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
5909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
6009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
6109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to Chapter 4 of the 1.4 GL Specification (Per-Fragment Operations
6209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Pauland the Framebuffer)
6309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
6409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
6509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
6609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to Chapter 5 of the 1.4 GL Specification (Special Functions)
6709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
6809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
6909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
7009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to Chapter 6 of the 1.4 GL Specification (State and State Requests)
7109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
7209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
7309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
7409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulAdditions to the GLX 1.3 Specification
7509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
7609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    [Add the following to Section 3.3.10 of the GLX Specification (Double
7709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul     Buffering)]
7809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
7909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    glXSwapIntervalMESA specifies the minimum number of video frame periods
8009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    per buffer swap.  (e.g. a value of two means that the color buffers
8109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    will be swapped at most every other video frame.)  A return value
8209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    of zero indicates success; otherwise an error occurred.  The interval
8309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    takes effect when glXSwapBuffers is first called subsequent to the
8409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    glXSwapIntervalMESA call.
8509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
8609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    A video frame period is the time required by the monitor to display a 
8709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    full frame of video data.  In the case of an interlaced monitor,
8809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    this is typically the time required to display both the even and odd 
8909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    fields of a frame of video data.
9009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
91ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser    If <interval> is set to a value of 0, buffer swaps are not synchro-
92ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser    nized to a video frame.  The <interval> value is silently clamped to
9309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    the maximum implementation-dependent value supported before being
9409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    stored.
9509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
9609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    The swap interval is not part of the render context state.  It cannot
9709b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    be pushed or popped.  The current swap interval for the window
9809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    associated with the current context can be obtained by calling
99c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    glXGetSwapIntervalMESA.  The default swap interval is 0.
10009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
101c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    On XFree86, setting the environment variable LIBGL_THROTTLE_REFRESH sets
102c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    the swap interval to 1.
10309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
10409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulErrors
10509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
10609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    glXSwapIntervalMESA returns GLX_BAD_CONTEXT if there is no current
10768fef184390da2fd67acfd99fba0a2dbe4a3b875Ian Romanick    GLXContext or if the current context is not a direct rendering context.
10809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
10909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulGLX Protocol
11009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
11109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None.  This extension only extends to direct rendering contexts.
11209b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
11309b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulNew State
11409b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
11509b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    Get Value		Get Command	Type	    Initial Value
11609b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    ---------		-----------	----	    -------------
117c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    [swap interval]	GetSwapInterval	Z+	    0
11809b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
11909b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian PaulNew Implementation Dependent State
12009b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul
12109b00c5ded8e6211c9c79be600bb8c8ecad0d8fcBrian Paul    None
122c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
123c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
124c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian PaulRevision History
125c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul
126c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    1.1,  5/1/03   Added the issues section and contact information.
127c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    	  	   Changed the default swap interval to 0.
128c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul    1.0,  3/17/03  Initial version based on GLX_SGI_swap_control and
129c784d87b0f07590a2bb87307ca6a264b2ec99b31Brian Paul                   WGL_EXT_swap_control.
130