<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:base="" xml:id="eglGetProcAddress">
    <info>
         <copyright>
             <year>2003-2018</year>
             <holder>The Khronos Group Inc.</holder>
         </copyright>
    </info>
    <refmeta>
        <refentrytitle>eglGetProcAddress</refentrytitle>
        <manvolnum>3G</manvolnum>
    </refmeta>
    <refnamediv>
        <refname>eglGetProcAddress</refname>
        <refpurpose>
            return a <acronym>GL</acronym> or an <acronym>EGL</acronym>
            extension function
        </refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>C Specification</title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>void (* <function>eglGetProcAddress</function>)()</funcdef>
                <paramdef>char const * <parameter>procname</parameter></paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>
    <refsect1 xml:id="parameters"><title>Parameters</title>
        <variablelist>
            <varlistentry>
                <term><parameter>procname</parameter></term>
                <listitem>
                    <para>
                        Specifies the name of the function to return.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>
    <refsect1 xml:id="description"><title>Description</title>
        <para>
            <function>eglGetProcAddress</function> returns the address of
            the client API or EGL function named by
            <parameter>procname</parameter>. <parameter>procname</parameter>
            must be a null-terminated string. The pointer returned should be
            cast to a function pointer matching the function's definition in
            the corresponding API or extension specification. A return value
            of <constant>NULL</constant> indicates that the specific
            function does not exist for the implementation.
        </para>
        <para>
            A non-<constant>NULL</constant> return value does not guarantee
            that an extension function is actually supported at runtime. The
            client must also make a corresponding query, such as
            <function>glGetString</function>(<constant>GL_EXTENSIONS</constant>)
            for OpenGL and OpenGL ES extensions;
            <function>vgGetString</function>(<constant>VG_EXTENSIONS</constant>)
            for OpenVG extensions;
            <function>eglQueryString</function>(<parameter>display</parameter>,
            <constant>EGL_EXTENSIONS</constant>); or query the EGL or client
            API version for non-extension functions, to determine if a
            function is supported by EGL or a specific client API context.
        </para>
        <para>
            Client API function pointers returned by
            <function>eglGetProcAddress</function> are independent of the
            display and the currently bound client API context, and may be
            used by any client API context which supports the function.
        </para>
        <para>
            <function>eglGetProcAddress</function> may be queried for all
            EGL and client API functions supported by the implementation
            (whether those functions are extensions or not, and whether they
            are supported by the current client API context or not).
        </para>
        <para>
            For functions that are queryable with
            <function>eglGetProcAddress</function>, implementations may
            choose to also export those functions statically from the object
            libraries implementing those functions. However, portable
            clients cannot rely on this behavior.
        </para>
    </refsect1>
    <refsect1 xml:id="notes"><title>Notes</title>
        <para>
            If the EGL version is not 1.5 or greater, only queries of EGL
            and client API <emphasis>extension</emphasis> functions will
            succeed.
        </para>
    </refsect1>
    <refsect1 xml:id="seealso"><title>See Also</title>
        <para>
            <function>glGetString</function>
            <citerefentry><refentrytitle>eglQueryString</refentrytitle></citerefentry>    </para>
            <function>vgGetString</function>
    </refsect1>
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="copyright.xml"/>
</refentry>
