
        <para>
          <!-- ext. spec 9.5.1 Overview --> The OpenCL specification in section 9.7 defines how to
          share data with texture and buffer objects in a parallel OpenGL implementation,
          but does not define how the association between an OpenCL context and an OpenGL
          context or share group is established. This extension defines optional attributes
          to OpenCL context creation routines which associate a GL context or share group
          object with a newly created OpenCL context. If this extension is supported
          by an implementation, the string "cl_khr_gl_sharing" will be present in the
          <constant>CL_DEVICE_EXTENSIONS</constant>
          string described in the table of allowed values for <varname>param_name</varname>
          for <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>
          or in the <constant>CL_PLATFORM_EXTENSIONS</constant>
          string described in the table of allowed values for <varname>param_name</varname>
          for <citerefentry><refentrytitle>clGetPlatformInfo</refentrytitle></citerefentry>.
        </para>

        <para>
          <!-- ext. spec 9.6 Sharing Memory Objects with OpenGL -->
          This section discusses OpenCL functions that allow applications
          to use OpenGL buffer, texture, and renderbuffer objects as OpenCL memory objects. This
          allows efficient sharing of data between OpenCL and OpenGL. The OpenCL API may be used
          to execute kernels that read and/or write memory objects that are also OpenGL objects.
        </para>

        <para>
          An OpenCL image object may be created from an OpenGL texture or
          renderbuffer object. An OpenCL buffer object may be created from an OpenGL buffer object.
        </para>

        <para>
          OpenCL memory objects may be created from OpenGL objects
          if and only if the OpenCL context has been created from an OpenGL share group
          object or context. OpenGL share groups and contexts are created using platform
          specific APIs such as EGL, CGL, WGL, and GLX. On MacOS X, an OpenCL context may
          be created from an OpenGL share group object using the OpenCL platform extension
          cl_apple_gl_sharing. On other platforms including Microsoft Windows, Linux/Unix and
          others, an OpenCL context may be created from an OpenGL context using the Khronos
          platform extension <function>cl_khr_gl_sharing</function>. Refer to the platform
          documentation for your OpenCL implementation, or visit the Khronos Registry at
          https://www.khronos.org/registry/cl/ for more information.
        </para>

        <para>
          Any supported OpenGL object defined within the GL share
          group object, or the share group associated with the GL context from which the CL
          context is created, may be shared, with the exception of the default OpenGL objects
          (i.e. objects named zero), which may not be shared.
        </para>

<!-- 21-Dec-2013, rev. 19 -->

