back  Return to list

WGL_NV_swap_group
homeprevnext Name
  
    NV_swap_group  
  
homeprevnext Name Strings
  
    WGL_NV_swap_group  
  
homeprevnext Notice
  
    Copyright NVIDIA Corporation, 2003.  
  
homeprevnext Status
  
    Shipping since 2003 on Quadro GPUs with framelock support  
  
homeprevnext Version
  
    Date: 02/20/2008   Revision: 1.0  
  
homeprevnext Number
  
    351  
  
homeprevnext Dependencies
  
    Written based on the wording of the GLX_SGIX_swap_group and   
    GLX_SGIX_swap_barrier specifications.  
  
    WGL_EXT_swap_control affects the definition of this extension.  
    WGL_EXT_swap_frame_lock affects the definition of this extension.  
  
homeprevnext Overview
  
    This extension provides the capability to synchronize the buffer swaps  
    of a group of OpenGL windows. A swap group is created, and windows are   
    added as members to the swap group.  Buffer swaps to members of the swap   
    group will then take place concurrently.  
  
    This extension also provides the capability to sychronize the buffer  
    swaps of different swap groups, which may reside on distributed systems  
    on a network. For this purpose swap groups can be bound to a swap barrier.  
  
    This extension extends the set of conditions that must be met before  
    a buffer swap can take place.   
  
homeprevnext Issues
  
    An implementation can not guarantee that the initialization of the swap  
    groups or barriers will succeed because the state of the window system may  
    restrict the usage of these features. Once a swap group or barrier has   
    been sucessfully initialized, the implementation can only guarantee to  
    sustain swap group functionality as long as the state of the window system  
    does not restrict this. An example for a state that does typically not  
    restrict swap group usage is the use of one fullscreen sized window per  
    windows desktop.  
  
homeprevnext New Procedures and Functions
  
    BOOL wglJoinSwapGroupNV(HDC hDC,  
                         GLuint group);  
  
    BOOL wglBindSwapBarrierNV(GLuint group,  
                           GLuint barrier);  
  
    BOOL wglQuerySwapGroupNV(HDC hDC,  
                          GLuint *group);  
                          GLuint *barrier);  
  
    BOOL wglQueryMaxSwapGroupsNV(HDC hDC,  
                              GLuint *maxGroups,  
                              GLuint *maxBarriers);  
  
    BOOL wglQueryFrameCountNV(HDC hDC,  
                           GLuint *count);  
  
    BOOL wglResetFrameCountNV(HDC hDC);  
  
homeprevnext New Tokens
  
    none  
  
homeprevnext Additions to the WGL Specification
  
    Add to section 3.2.6, Double Buffering:  
  
    wglJoinSwapGroupNV adds <hDC> to the swap group specified by <group>.  
    If <hDC> is already a member of a different group, it is   
    implicitly removed from that group first. A swap group is specified as   
    an integer value between 0 and the value returned in <maxGroups> by   
    wglQueryMaxSwapGroupsNV. If <group> is zero, the hDC is unbound from its   
    current group, if any. If <group> is larger than <maxGroups>,   
    wglJoinSwapGroupNV fails.  
  
    wglJoinSwapGroupNV returns True if <hDC> has been successfully bound to   
    <group>  and False if it fails.   
  
    wglBindSwapBarrierNV binds the swap group specified by <group> to <barrier>.  
    <barrier> is an integer value between 0 and the value returned in   
    <maxBarriers> by wglQueryMaxSwapGroupsNV. If <barrier> is zero, the group is   
    unbound from its current barrier, if any. If <barrier> is larger than   
    <maxBarriers>, wglBindSwapBarrierNV fails.  
    Subsequent buffer swaps for that group will be subject to this binding,   
    until the group is unbound from <barrier>.  
  
    wglBindSwapBarrierNV returns True if <group> has been successfully bound to   
    <barrier> and False if it fails.  
  
    wglQuerySwapGroupNV returns in <group> and <barrier> the group and barrier   
    currently bound to hDC, if any.   
      
    wglQuerySwapGroupNV returns True if <group> and <barrier> could be successfully   
    queried for <hDC> and False if it fails.   
    If it fails, the values of <group> and <barrier> are undefined.  
  
    wglQueryMaxSwapGroupsNV returns in <maxGroups> and <maxBarriers> the maximum   
    number of swap groups and barriers supported by an implementation which   
    drives window <hDC>.  
  
    wglQueryMaxSwapGroupsNV returns True if <maxGroups> and <maxBarriers> could be   
    successfully queried for <hDC> and False if it fails.   
    If it fails, the values of <maxGroups> and <maxBarriers> are undefined.  
  
    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 window is ready to swap and when a group is ready to swap.  
  
    Any hDC that is not a window (i.e. a non-visible rendering buffer) is always   
    ready.  
  
    A window 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.  
  
    An implementation may support a limited number of swap groups and 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  
    display devices or even hosts.    
    An implementation may return zero for any of <maxGroups> and <maxBarriers>  
    returned by wglQueryMaxSwapGroupsNV if swap groups or barriers are not   
    available in that implementation or on that host.  
  
    The implementation provides a universal counter, the so called frame counter,  
    among all systems that are locked together by swap groups/barriers. It is   
    based on the internal synchronization signal which triggers the buffer swap.  
  
    wglQueryFrameCountNV returns in <count> the current frame counter for   
    <swapGroup>.  
  
    wglQueryFrameCountNV returns TRUE if the frame counter could be successfully   
    retrieved. Otherwise it returns FALSE.  
  
    wglResetFrameCountNV resets the frame counter of <swapGroup> to zero.  
  
    wglResetFrameCountNV returns TRUE if the frame counter could be successfully   
    reset, otherwise it returns FALSE. In a system that has an NVIDIA framelock  
    add-on adapter installed and enabled, wglResetFrameCountNV will only succeed when   
    the framelock is configured as a Master system.   
  
homeprevnext Errors
  
    wglJoinSwapGroupNV, wglQuerySwapGroupNV and wglQueryMaxSwapGroupsNV generate   
    ERROR_DC_NOT_FOUND if <hDC> is not a valid HDC.  
  
homeprevnext New State
  
    None  
  
homeprevnext New Implementation Dependent State
  
    None  
    None  
Valid XHTML 1.1! Valid CSS! Last update: November 14, 2006.
Cette page doit être lue avec un navigateur récent respectant le standard XHTML 1.1.