2 Replies Latest reply on Mar 19, 2012 6:37 AM by avee

    Framelock Development with FirePro + S400

    avee

      Hi,

      We're currently developing a simulation visualization application (or Image Generator as they usually call it in the industry). One of the features that we need is the synchronization of several channel. We plan to achieve this using the Framelock capability of the AMD FirePro. We are currently using the AMD FirePro v9800.

      I have skimmed through this forum and the developer website but there seem to be no example of how to use the feature.

      I have downloaded the AMD Display Library, and noticed that under the workstation.h file there are several function that are related to this function (ADL_Workstation_GLSync..).

      Can anyone provide/share with us some pointers, documentations or samples on how to develop this feature?

      Thanks in advance.

        • Re: Framelock Development with FirePro + S400
          chm

          Hi,

          actually you do not need to use the AMD Display Library to enable Framelock. ADL provides functinality to configure the synchronization of the video signal (TimingServer, TimingClients, HouseSync etc). Usually this confugration is done manually in the Catalyst Control Center. Anyhow if you want to control it from you application you can do this using ADL.

           

          To enable the Framelock you can use the OpenGL extension WGL_NV_swap_group or GLX_NV_swap_group. Those extensions provide functions to join a swap group and to bind to a barrier. Once this is done all subsequent call to SwapBuffers will be synchronized.

           

          The following code shows how to enable framelock:

           

            // check for the availability of SwapGroups amd SwapBarriers
            if (!wglQueryMaxSwapGroupsNV(mhDC, &nMaxGroups, &nMaxBarriers))
             return false;

           

            if (nMaxGroups > 0 && nMaxBarriers > 0)
            {
             // In this sample we always join to SwapGroup 1
             // and Barrier 1
             if (!wglJoinSwapGroupNV(mhDC, nGroup))
              return false;

             if (!wglBindSwapBarrierNV(nGroup, nBarrier))
              return false;
            }