--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
+<!-- saved from url=(0013)about:internet -->
+<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" pref:renderer="mathplayer-dl"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>glLinkProgram</title><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /></head><body><div class="refentry" lang="en" xml:lang="en"><a id="glLinkProgram"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>glLinkProgram — Links a program object</p></div><div class="refsynopsisdiv"><h2>C Specification</h2><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0"><tr><td><code class="funcdef">void <b class="fsfunc">glLinkProgram</b>(</code></td><td>GLuint </td><td><var class="pdparam">program</var><code>)</code>;</td></tr></table></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="parameters"></a><h2>Parameters</h2><div class="variablelist"><dl><dt><span class="term"><em class="parameter"><code>program</code></em></span></dt><dd><p>Specifies the handle of the program object to be linked.</p></dd></dl></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="description"></a><h2>Description</h2><p><code class="function">glLinkProgram</code> links the program
+ object specified by <em class="parameter"><code>program</code></em>. If any
+ shader objects of type <code class="constant">GL_VERTEX_SHADER</code> are
+ attached to <em class="parameter"><code>program</code></em>, they will be used to
+ create an executable that will run on the programmable vertex
+ processor. If any shader objects of type
+ <code class="constant">GL_FRAGMENT_SHADER</code> are attached to
+ <em class="parameter"><code>program</code></em>, they will be used to create an
+ executable that will run on the programmable fragment
+ processor.</p><p>The status of the link operation will be stored as part of
+ the program object's state. This value will be set to
+ <code class="constant">GL_TRUE</code> if the program object was linked
+ without errors and is ready for use, and
+ <code class="constant">GL_FALSE</code> otherwise. It can be queried by
+ calling
+ <a class="citerefentry" href="glGetProgram.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgram</span></span></a>
+ with arguments <em class="parameter"><code>program</code></em> and
+ <code class="constant">GL_LINK_STATUS</code>.</p><p>As a result of a successful link operation, all active
+ user-defined uniform variables belonging to
+ <em class="parameter"><code>program</code></em> will be initialized to 0, and
+ each of the program object's active uniform variables will be
+ assigned a location that can be queried by calling
+ <a class="citerefentry" href="glGetUniformLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetUniformLocation</span></span></a>.
+ Also, any active user-defined attribute variables that have not
+ been bound to a generic vertex attribute index will be bound to
+ one at this time.</p><p>Linking of a program object can fail for a number of
+ reasons as specified in the <span class="emphasis"><em>OpenGL Shading Language
+ Specification</em></span>. The following lists some of the
+ conditions that will cause a link error.</p><div class="itemizedlist"><ul type="disc"><li><p>The number of active attribute variables supported
+ by the implementation has been exceeded.</p></li><li><p>The storage limit for uniform variables has been
+ exceeded.</p></li><li><p>The number of active uniform variables supported
+ by the implementation has been exceeded.</p></li><li><p>The <code class="function">main</code> function is missing
+ for the vertex shader or the fragment shader.</p></li><li><p>A varying variable actually used in the fragment
+ shader is not declared in the same way (or is not
+ declared at all) in the vertex shader.</p></li><li><p>A reference to a function or variable name is
+ unresolved.</p></li><li><p>A shared global is declared with two different
+ types or two different initial values.</p></li><li><p>One or more of the attached shader objects has not
+ been successfully compiled.</p></li><li><p>Binding a generic attribute matrix caused some
+ rows of the matrix to fall outside the allowed maximum
+ of <code class="constant">GL_MAX_VERTEX_ATTRIBS</code>.</p></li><li><p>Not enough contiguous vertex attribute slots could
+ be found to bind attribute matrices.</p></li></ul></div><p>When a program object has been successfully linked, the
+ program object can be made part of current state by calling
+ <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>.
+ Whether or not the link operation was successful, the program
+ object's information log will be overwritten. The information
+ log can be retrieved by calling
+ <a class="citerefentry" href="glGetProgramInfoLog.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgramInfoLog</span></span></a>.</p><p><code class="function">glLinkProgram</code> will also install the
+ generated executables as part of the current rendering state if
+ the link operation was successful and the specified program
+ object is already currently in use as a result of a previous
+ call to
+ <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>.
+ If the program object currently in use is relinked
+ unsuccessfully, its link status will be set to
+ <code class="constant">GL_FALSE</code> , but the executables and
+ associated state will remain part of the current state until a
+ subsequent call to <code class="function">glUseProgram</code> removes it
+ from use. After it is removed from use, it cannot be made part
+ of current state until it has been successfully relinked.</p><p>If <em class="parameter"><code>program</code></em> contains shader objects
+ of type <code class="constant">GL_VERTEX_SHADER</code> but does not
+ contain shader objects of type
+ <code class="constant">GL_FRAGMENT_SHADER</code>, the vertex shader will
+ be linked against the implicit interface for fixed functionality
+ fragment processing. Similarly, if
+ <em class="parameter"><code>program</code></em> contains shader objects of type
+ <code class="constant">GL_FRAGMENT_SHADER</code> but it does not contain
+ shader objects of type <code class="constant">GL_VERTEX_SHADER</code>,
+ the fragment shader will be linked against the implicit
+ interface for fixed functionality vertex processing.</p><p>The program object's information log is updated and the
+ program is generated at the time of the link operation. After
+ the link operation, applications are free to modify attached
+ shader objects, compile attached shader objects, detach shader
+ objects, delete shader objects, and attach additional shader
+ objects. None of these operations affects the information log or
+ the program that is part of the program object.</p></div><div class="refsect1" lang="en" xml:lang="en"><a id="notes"></a><h2>Notes</h2><p><code class="function">glLinkProgram</code>
+ is available only if the GL version is 2.0 or greater.</p><p>If the link operation is unsuccessful, any information about a previous link operation on <em class="parameter"><code>program</code></em>
+ is lost (i.e., a failed link does not restore the old state of <em class="parameter"><code>program</code></em>
+ ). Certain information can still be retrieved from <em class="parameter"><code>program</code></em>
+ even after an unsuccessful link operation. See for instance <a class="citerefentry" href="glGetActiveAttrib.xml"><span class="citerefentry"><span class="refentrytitle">glGetActiveAttrib</span></span></a>
+ and <a class="citerefentry" href="glGetActiveUniform.xml"><span class="citerefentry"><span class="refentrytitle">glGetActiveUniform</span></span></a>.</p></div><div class="refsect1" lang="en" xml:lang="en"><a id="errors"></a><h2>Errors</h2><p><code class="constant">GL_INVALID_VALUE</code>
+ is generated if <em class="parameter"><code>program</code></em>
+ is not a value generated by OpenGL.</p><p><code class="constant">GL_INVALID_OPERATION</code>
+ is generated if <em class="parameter"><code>program</code></em>
+ is not a program object.</p><p><code class="constant">GL_INVALID_OPERATION</code>
+ is generated if <code class="function">glLinkProgram</code>
+ is executed between the execution of <a class="citerefentry" href="glBegin.xml"><span class="citerefentry"><span class="refentrytitle">glBegin</span></span></a>
+ and the corresponding execution of <a class="citerefentry" href="glEnd.xml"><span class="citerefentry"><span class="refentrytitle">glEnd</span></span></a>.</p></div><div class="refsect1" lang="en" xml:lang="en"><a id="associatedgets"></a><h2>Associated Gets</h2><p><a class="citerefentry" href="glGet.xml"><span class="citerefentry"><span class="refentrytitle">glGet</span></span></a>
+ with the argument <code class="constant">GL_CURRENT_PROGRAM</code></p><p><a class="citerefentry" href="glGetActiveAttrib.xml"><span class="citerefentry"><span class="refentrytitle">glGetActiveAttrib</span></span></a>
+ with argument <em class="parameter"><code>program</code></em>
+ and the index of an active attribute variable</p><p><a class="citerefentry" href="glGetActiveUniform.xml"><span class="citerefentry"><span class="refentrytitle">glGetActiveUniform</span></span></a>
+ with argument <em class="parameter"><code>program</code></em>
+ and the index of an active uniform variable<em class="parameter"><code></code></em></p><p><a class="citerefentry" href="glGetAttachedShaders.xml"><span class="citerefentry"><span class="refentrytitle">glGetAttachedShaders</span></span></a>
+ with argument <em class="parameter"><code>program</code></em></p><p><a class="citerefentry" href="glGetAttribLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetAttribLocation</span></span></a>
+ with argument <em class="parameter"><code>program</code></em>
+ and an attribute variable name</p><p><a class="citerefentry" href="glGetProgram.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgram</span></span></a>
+ with arguments <em class="parameter"><code>program</code></em>
+ and <code class="constant">GL_LINK_STATUS</code></p><p><a class="citerefentry" href="glGetProgramInfoLog.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgramInfoLog</span></span></a>
+ with argument <em class="parameter"><code>program</code></em></p><p><a class="citerefentry" href="glGetUniform.xml"><span class="citerefentry"><span class="refentrytitle">glGetUniform</span></span></a>
+ with argument <em class="parameter"><code>program</code></em>
+ and a uniform variable location</p><p><a class="citerefentry" href="glGetUniformLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetUniformLocation</span></span></a>
+ with argument <em class="parameter"><code>program</code></em>
+ and a uniform variable name</p><p><a class="citerefentry" href="glIsProgram.xml"><span class="citerefentry"><span class="refentrytitle">glIsProgram</span></span></a></p></div><div class="refsect1" lang="en" xml:lang="en"><a id="seealso"></a><h2>See Also</h2><p><a class="citerefentry" href="glAttachShader.xml"><span class="citerefentry"><span class="refentrytitle">glAttachShader</span></span></a>,
+ <a class="citerefentry" href="glBindAttribLocation.xml"><span class="citerefentry"><span class="refentrytitle">glBindAttribLocation</span></span></a>,
+ <a class="citerefentry" href="glCompileShader.xml"><span class="citerefentry"><span class="refentrytitle">glCompileShader</span></span></a>,
+ <a class="citerefentry" href="glCreateProgram.xml"><span class="citerefentry"><span class="refentrytitle">glCreateProgram</span></span></a>,
+ <a class="citerefentry" href="glDeleteProgram.xml"><span class="citerefentry"><span class="refentrytitle">glDeleteProgram</span></span></a>,
+ <a class="citerefentry" href="glDetachShader.xml"><span class="citerefentry"><span class="refentrytitle">glDetachShader</span></span></a>,
+ <a class="citerefentry" href="glUniform.xml"><span class="citerefentry"><span class="refentrytitle">glUniform</span></span></a>,
+ <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>,
+ <a class="citerefentry" href="glValidateProgram.xml"><span class="citerefentry"><span class="refentrytitle">glValidateProgram</span></span></a></p></div><div class="refsect1" lang="en" xml:lang="en"><a id="Copyright"></a><h2>Copyright</h2><p>
+ Copyright <span class="trademark"></span>© 2003-2005 3Dlabs Inc. Ltd.
+ This material may be distributed subject to the terms and conditions set forth in
+ the Open Publication License, v 1.0, 8 June 1999.
+ <a class="ulink" href="http://opencontent.org/openpub/" target="_top">http://opencontent.org/openpub/</a>.
+ </p></div></div></body></html>