
<refentry id="glXMakeCurrent">
    <refmeta>
        <refmetainfo>
            <copyright>
                <year>1991-2006</year>
                <holder>Silicon Graphics, Inc.</holder>
            </copyright>
        </refmetainfo>
        <refentrytitle>glXMakeCurrent</refentrytitle>
        <manvolnum>3G</manvolnum>
    </refmeta>
    <refnamediv>
        <refname>glXMakeCurrent</refname>
        <refpurpose>attach a GLX context to a window or a GLX pixmap</refpurpose>
    </refnamediv>
    <refsynopsisdiv><title>C Specification</title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>Bool <function>glXMakeCurrent</function></funcdef>
                <paramdef>Display * <parameter>dpy</parameter></paramdef>
                <paramdef>GLXDrawable <parameter>drawable</parameter></paramdef>
                <paramdef>GLXContext <parameter>ctx</parameter></paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>
    <!-- eqn: ignoring delim $$ -->
    <refsect1 id="parameters"><title>Parameters</title>
        <variablelist>
        <varlistentry>
            <term><parameter>dpy</parameter></term>
            <listitem>
                <para>
                    Specifies the connection to the X server.
                </para>
            </listitem>
        </varlistentry>
        <varlistentry>
            <term><parameter>drawable</parameter></term>
            <listitem>
                <para>
                    Specifies a GLX drawable.
                    Must be either an X window ID or a GLX pixmap ID.
                </para>
            </listitem>
        </varlistentry>
        <varlistentry>
            <term><parameter>ctx</parameter></term>
            <listitem>
                <para>
                    Specifies a GLX rendering context that is to be attached to <parameter>drawable</parameter>.
                </para>
            </listitem>
        </varlistentry>
        </variablelist>
    </refsect1>
    <refsect1 id="description"><title>Description</title>
        <para>
            <function>glXMakeCurrent</function> does two things:
            It makes <parameter>ctx</parameter> the current GLX rendering context of the calling thread,
            replacing the previously current context if there was one,
            and it attaches <parameter>ctx</parameter> to a GLX drawable,
            either a window or a GLX pixmap.
            As a result of these two actions,
            subsequent GL rendering calls
            use rendering context <parameter>ctx</parameter> to modify GLX drawable <parameter>drawable</parameter> (for
            reading and writing).
            Because <function>glXMakeCurrent</function> always replaces the current rendering context with <parameter>ctx</parameter>,
            there can be only one current context per thread.
        </para>
        <para>
            Pending commands to the
            previous context, if any, are flushed before it is released.
        </para>
        <para>
            The first time <parameter>ctx</parameter> is made current to any thread,
            its viewport is set to the full size of <parameter>drawable</parameter>.
            Subsequent calls by any thread to <function>glXMakeCurrent</function> with <parameter>ctx</parameter>
            have no effect on its viewport.
        </para>
        <para>
            To release the current context without assigning a new one,
            call <function>glXMakeCurrent</function> with <parameter>drawable</parameter> set to <constant>None</constant> and <parameter>ctx</parameter>
            set to <constant>NULL</constant>.
        </para>
        <para>
            <function>glXMakeCurrent</function> returns <constant>True</constant> if it is successful,
            <constant>False</constant> otherwise.
            If <constant>False</constant> is returned, the previously current rendering context
            and drawable (if any) remain unchanged.
        </para>
    </refsect1>
    <refsect1 id="notes"><title>Notes</title>
        <para>
            A <emphasis>process</emphasis> is a single-execution environment,
            implemented in a single address space,
            consisting of one or more threads.
        </para>
        <para>
            A <emphasis>thread</emphasis> is one of a set of subprocesses that share
            a single address space,
            but maintain separate program counters,
            stack spaces,
            and other related global data.
            A <emphasis>thread</emphasis> that is the only member of its subprocess group
            is equivalent to a <emphasis>process</emphasis>.
        </para>
    </refsect1>
    <refsect1 id="errors"><title>Errors</title>
        <para>
            <constant>BadMatch</constant> is generated if <parameter>drawable</parameter> was not
            created with the same X screen and visual as <parameter>ctx</parameter>.
            It is also generated if <parameter>drawable</parameter> is <constant>None</constant> and <parameter>ctx</parameter> is not
            <constant>NULL</constant>.
        </para>
        <para>
            <constant>BadAccess</constant> is generated if <parameter>ctx</parameter> was current to another thread
            at the time <function>glXMakeCurrent</function> was called.
        </para>
        <para>
            <constant>GLXBadDrawable</constant> is generated if <parameter>drawable</parameter> is not a valid GLX drawable.
        </para>
        <para>
            <constant>GLXBadContext</constant> is generated if <parameter>ctx</parameter> is not a valid GLX context.
        </para>
        <para>
            <constant>GLXBadContextState</constant> is generated if <function>glXMakeCurrent</function> is executed between
            the execution of <citerefentry><refentrytitle>glBegin</refentrytitle></citerefentry> and the corresponding execution of <citerefentry><refentrytitle>glEnd</refentrytitle></citerefentry>.
        </para>
        <para>
            <constant>GLXBadContextState</constant> is also generated if the rendering context current
            to the calling thread has GL renderer state <constant>GLX_FEEDBACK</constant> or
            <constant>GLX_SELECT</constant>.
        </para>
        <para>
            <constant>GLXBadCurrentWindow</constant> is generated if there are pending GL
            commands for the previous context and the current drawable is
            a window that is no longer valid.
        </para>
        <para>
            <constant>BadAlloc</constant> may be generated if the server has delayed allocation
            of ancillary buffers until <function>glXMakeCurrent</function> is called, only to find that it has
            insufficient resources to complete the allocation.
        </para>
    </refsect1>
    <refsect1 id="seealso"><title>See Also</title>
        <para>
            <citerefentry><refentrytitle>glXCreateContext</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>glXCreateGLXPixmap</refentrytitle></citerefentry>
            <citerefentry><refentrytitle>glXGetCurrentContext</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>glXGetCurrentDisplay</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>glXGetCurrentDrawable</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>glXGetCurrentReadDrawable</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>glXMakeContextCurrent</refentrytitle></citerefentry>
        </para>
    </refsect1>
    <refsect1 id="Copyright"><title>Copyright</title>
        <para>
            Copyright <trademark class="copyright"></trademark> 1991-2006
            Silicon Graphics, Inc. This document is licensed under the SGI
            Free Software B License. For details, see
            <ulink url="http://oss.sgi.com/projects/FreeB/">http://oss.sgi.com/projects/FreeB/</ulink>.
        </para>
    </refsect1>
</refentry>
