<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:base="" xml:id="eglGetDisplay">
    <info>
         <copyright>
             <year>2003-2018</year>
             <holder>The Khronos Group Inc.</holder>
         </copyright>
    </info>
    <refmeta>
        <refentrytitle>eglGetDisplay</refentrytitle>
        <manvolnum>3G</manvolnum>
    </refmeta>
    <refnamediv>
        <refname>eglGetDisplay</refname>
        <refpurpose>
            return an <acronym>EGL</acronym> display connection
        </refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>C Specification</title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>EGLDisplay <function>eglGetDisplay</function></funcdef>
                <paramdef>NativeDisplayType <parameter>native_display</parameter></paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>
    <refsect1 xml:id="parameters"><title>Parameters</title>
        <variablelist>
            <varlistentry>
                <term><parameter>native_display</parameter></term>
                <listitem>
                    <para>
                        Specifies the display to connect to.
                        <constant>EGL_DEFAULT_DISPLAY</constant> indicates the default display.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>
    <refsect1 xml:id="description"><title>Description</title>
        <para>
            <function>eglGetDisplay</function> obtains the
            <acronym>EGL</acronym> display connection for the native
            display <parameter>native_display</parameter>.
        </para>
        <para>
            The behavior of <function>eglGetDisplay</function> is similar to
            that of
            <citerefentry><refentrytitle>eglGetPlatformDisplay</refentrytitle></citerefentry>,
            but is specified in terms of implementation-specific behavior
            rather than platform-specific extensions. As for
            <citerefentry><refentrytitle>eglGetPlatformDisplay</refentrytitle></citerefentry>,
            EGL considers the returned <type>EGLDisplay</type> as belonging
            to the same platform as <parameter>display_id</parameter>.
            However, the set of platforms to which
            <parameter>display_id</parameter> is permitted to belong, as
            well as the actual type of <parameter>display_id</parameter>,
            are implementation-specific. If
            <parameter>display_id</parameter> is
            <constant>EGL_DEFAULT_DISPLAY</constant>, a <firstterm>default
            display</firstterm> is returned. Multiple calls made to
            <function>eglGetDisplay</function> with the same
            <parameter>display_id</parameter> will return the same
            <type>EGLDisplay</type> handle.
        </para>
        <para>
            If <parameter>display_id</parameter> is
            <constant>EGL_DEFAULT_DISPLAY</constant>, a default display connection is returned.
        </para>
        <para>
            If no display connection matching <parameter>native_display</parameter> is
            available, <constant>EGL_NO_DISPLAY</constant> is returned. No
            error is generated.
        </para>
        <para>
            Use <citerefentry><refentrytitle>eglInitialize</refentrytitle></citerefentry>
            to initialize the display connection.
        </para>
    </refsect1>
    <refsect1 xml:id="seealso"><title>See Also</title>
        <para>
            <citerefentry><refentrytitle>eglInitialize</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>eglGetPlatformDisplay</refentrytitle></citerefentry>
        </para>
    </refsect1>
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="copyright.xml"/>
</refentry>
