<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:base="" xml:id="eglCreateContext">
    <info>
         <copyright>
             <year>2003-2018</year>
             <holder>The Khronos Group Inc.</holder>
         </copyright>
    </info>
    <refmeta>
        <refentrytitle>eglCreateContext</refentrytitle>
        <manvolnum>3G</manvolnum>
    </refmeta>
    <refnamediv>
        <refname>eglCreateContext</refname>
        <refpurpose>
            create a new <acronym>EGL</acronym> rendering context
        </refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>C Specification</title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>EGLContext <function>eglCreateContext</function></funcdef>
                <paramdef>EGLDisplay <parameter>display</parameter></paramdef>
                <paramdef>EGLConfig <parameter>config</parameter></paramdef>
                <paramdef>EGLContext <parameter>share_context</parameter></paramdef>
                <paramdef>EGLint const * <parameter>attrib_list</parameter></paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>
    <refsect1 xml:id="parameters"><title>Parameters</title>
        <variablelist>
            <varlistentry>
                <term><parameter>display</parameter></term>
                <listitem><para>
                    Specifies the
                    <acronym>EGL</acronym>
                    display connection.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><parameter>config</parameter></term>
                <listitem><para>Specifies the EGL frame buffer configuration that
                    defines the frame buffer resource available to the rendering context.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><parameter>share_context</parameter></term>
                <listitem><para>
                    Specifies another
                    <acronym>EGL</acronym>
                    rendering context with which to share data, as
                    defined by the client API corresponding to the
                    contexts. Data is also shared with all other
                    contexts with which
                    <parameter>share_context</parameter> shares data.
                    <constant>EGL_NO_CONTEXT</constant> indicates that
                    no sharing is to take place.
                </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><parameter>attrib_list</parameter></term>
                <listitem><para>
                    Specifies attributes and attribute values for the
                    context being created.
                </para></listitem>
            </varlistentry>
        </variablelist>
    </refsect1>
    <refsect1 xml:id="description"><title>Description</title>
        <para>
            <function>eglCreateContext</function> creates an EGL
            rendering context for the current rendering API (as set with
            <function>eglBindAPI</function>) and returns a handle to the
            context. The context can then be used to render into an EGL
            drawing surface. If <function>eglCreateContext</function>
            fails to create a rendering context,
            <constant>EGL_NO_CONTEXT</constant> is returned.
        </para>
        <para>
            If <parameter>share_context</parameter> is not
            <constant>EGL_NO_CONTEXT</constant>, then all shareable data
            in the context (as defined by the client API specification
            for the current rendering API) are shared by context
            <parameter>share_context</parameter>, all other contexts
            <parameter>share_context</parameter> already shares with,
            and the newly created context. An arbitrary number of
            rendering contexts can share data. However, all rendering
            contexts that share data must themselves exist in the same
            address space. Two rendering contexts share an address space
            if both are owned by a single process.
        </para>
        <para>
            <parameter>attrib_list</parameter> specifies a list of
            attributes for the context. The list has the same structure
            as described for <function>eglChooseConfig</function>. The
            attributes and attribute values which may be specified are
            as follows:
        </para>
        <variablelist>
            <varlistentry>
                <term><constant>EGL_CONTEXT_MAJOR_VERSION</constant></term>
                <listitem><para>
                    Must be followed by an integer specifying the requested
                    major version of an OpenGL or OpenGL ES context. The
                    default value is 1. This attribute is an alias of the
                    older <constant>EGL_CONTEXT_CLIENT_VERSION</constant>,
                    and the tokens may be used interchangeably.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_MINOR_VERSION</constant></term>
                <listitem><para>
                    Must be followed by an integer specifying the requested
                    minor version of an OpenGL or OpenGL ES context. The
                    default value is 0.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_OPENGL_PROFILE_MASK</constant></term>
                <listitem><para>
                    Must be followed by an integer bitmask specifying the
                    <firstterm>profile</firstterm> of an OpenGL context.
                    Bits which may be set include
                    <constant>EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT</constant>
                    for a core profile and
                    <constant>EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT</constant>
                    for a compatibility profile. The default value is
                    <constant>EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT</constant>.
                    All OpenGL 3.2 and later implementations are required to
                    implement the core profile, but implementation of the
                    compatibility profile is optional.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_OPENGL_DEBUG</constant></term>
                <listitem><para>
                    Must be followed by <constant>EGL_TRUE</constant>,
                    specifying that an OpenGL or OpenGL ES <firstterm>debug
                    context</firstterm> should be created, or
                    <constant>EGL_FALSE</constant>, if a non-debug context
                    should be created. The default value is
                    <constant>EGL_FALSE</constant>.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE</constant></term>
                <listitem><para>
                    Must be followed by <constant>EGL_TRUE</constant>,
                    specifying that a
                    <firstterm>forward-compatible</firstterm> OpenGL context
                    should be created, or <constant>EGL_FALSE</constant>, if
                    a non-forward-compatible context should be created. The
                    default value is <constant>EGL_FALSE</constant>.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_OPENGL_ROBUST_ACCESS</constant></term>
                <listitem><para>
                    Must be followed by <constant>EGL_TRUE</constant>,
                    specifying that an OpenGL or OpenGL ES context
                    supporting <firstterm>robust buffer access</firstterm>
                    should be created, or <constant>EGL_FALSE</constant>, if
                    a non-robust context should be created. The default
                    value is <constant>EGL_FALSE</constant>.
                </para></listitem>
            </varlistentry>
            <varlistentry>
                <term><constant>EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY</constant></term>
                <listitem><para>
                    Must be followed by
                    <constant>EGL_LOSE_CONTEXT_ON_RESET</constant>,
                    specifying that an OpenGL or OpenGL ES context with
                    reset notification behavior
                    <constant>GL_LOSE_CONTEXT_ON_RESET_ARB</constant> should
                    be created, or
                    <constant>EGL_NO_RESET_NOTIFICATION</constant>,
                    specifying that an OpenGL or OpenGL ES context with
                    reset notification behavior
                    <constant>GL_NO_RESET_NOTIFICATION_ARB</constant> should
                    be created, as described by the
                    <constant>GL_ARB_robustness</constant> extension.
                </para><para>
                    If the
                    <constant>EGL_CONTEXT_OPENGL_ROBUST_ACCESS</constant>
                    attribute is not set to <constant>EGL_TRUE</constant>,
                    context creation will not fail, but the resulting
                    context may not support robust buffer access, and
                    therefore may not support the requested reset
                    notification strategy The default value for
                    <constant>EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY</constant>
                    is <constant>EGL_NO_RESET_NOTIFICATION</constant> .
                </para></listitem>
            </varlistentry>
        </variablelist>
        <para>
            There are many possible interactions between requested OpenGL
            and OpenGL ES context creation attributes, depending on the API
            versions and extensions supported by the implementation. These
            interactions are described in detail in the EGL 1.5
            Specification, but are not listed here for compactness. The
            requested attributes may not be able to be satisfied, but
            context creation may still succeed. Applications should ensure
            that the OpenGL or OpenGL ES contexts supports needed features
            before using them, by determining the actual context version,
            supported extensions, and supported context flags using runtime
            queries.
        </para>
    </refsect1>
</refentry>
