Name EXT_swap_control_tear Name Strings GLX_EXT_swap_control_tear Contributors Brian Nguyen, NVIDIA, brnguyen at nvidia.com Contact Brian Nguyen, NVIDIA, brnguyen at nvidia.com Status Complete. Version Version 1 (November 4, 2011) Number 414 Dependencies This specification is written against the GLX 1.4 specification, but only GLX 1.1 or greater with the ARB_get_proc_address extension is required, for glXQueryExtensionString and glXGetProcAddressARB respectively. GLX_EXT_swap_control is required. Based on WGL_EXT_swap_control_tear version 1. This extension affects GLX_NV_swap_group. Overview This extension extends the existing GLX_EXT_swap_control extension by allowing a negative parameter to glXSwapIntervalEXT. The negative allows late swaps to occur without synchronization to the video frame. This reduces the visual stutter on late frames and reduces the stall on subsequent frames. IP Status There are no known IP issues. Issues This extension is incompatible with GLX_NV_swap_group. If a drawable is currently part of a swap group, late unsynchronized swaps will implicitly be disabled for that drawable. New Procedures and Functions None New Tokens GLX_LATE_SWAPS_TEAR_EXT 0x20F3 Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) None. Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) None. Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment Operations and the Frame Buffer) None. Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and State Requests) None. Additions to the GLX 1.4 Specification In Section 3.3.10 of the GLX specification (Double Buffering), after the following paragraph: "If is set to a value of 0, buffer swaps are not synchronized to a video frame. The value is silently clamped to the maximum implementation-dependent value supported before being stored." Add the following paragraph: "If is negative, the minimum number of video frames between buffer swaps is the absolute value of . In this case, if abs() video frames have already passed from the previous swap when the swap is ready to be performed, the swap will occur without synchronization to a video frame. When an unsynchronized swap happens, the missed frame will count towards the minimum number of video frames for the next swap." In Section 3.3.10 of the GLX specification (Double Buffering), modify the paragraph beginning: "The current swap interval and implementation-dependent max swap interval for a particular drawable..." To read: "The current swap interval and implementation-dependent max swap interval for a particular drawable can be obtained by calling glXQueryDrawable with the attributes GLX_SWAP_INTERVAL_EXT and GLX_MAX_SWAP_INTERVAL_EXT respectively. The application can also determine whether a particular drawable allows late unsynchronized swaps to occur by calling glXQueryDrawable with the attribute GLX_LATE_SWAPS_TEAR_EXT. If late swaps are enabled, will be set to 1; otherwise, it will be set to 0. The value returned by glXQueryDrawable is undefined if the drawable is not a GLXWindow and these attributes are given." Errors Remove the following error from GLX_EXT_swap_control: "glXSwapIntervalEXT generates BadValue if parameter is less than zero." Usage Examples Example 1: Set swap interval for the current drawable Display *dpy = glXGetCurrentDisplay(); GLXDrawable drawable = glXGetCurrentDrawable(); const int interval = -1; glXSwapIntervalEXT(dpy, drawable, interval); Version History 1. 04 Nov 2011 - BrianN -Initial version