rename upstream-man-pages to upstream-doc
[clinton/guile-figl.git] / upstream-doc / man2 / xhtml / glLinkProgram.xml
CommitLineData
7faf1d71
AW
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
2<!-- saved from url=(0013)about:internet -->
3<?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
4 object specified by <em class="parameter"><code>program</code></em>. If any
5 shader objects of type <code class="constant">GL_VERTEX_SHADER</code> are
6 attached to <em class="parameter"><code>program</code></em>, they will be used to
7 create an executable that will run on the programmable vertex
8 processor. If any shader objects of type
9 <code class="constant">GL_FRAGMENT_SHADER</code> are attached to
10 <em class="parameter"><code>program</code></em>, they will be used to create an
11 executable that will run on the programmable fragment
12 processor.</p><p>The status of the link operation will be stored as part of
13 the program object's state. This value will be set to
14 <code class="constant">GL_TRUE</code> if the program object was linked
15 without errors and is ready for use, and
16 <code class="constant">GL_FALSE</code> otherwise. It can be queried by
17 calling
18 <a class="citerefentry" href="glGetProgram.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgram</span></span></a>
19 with arguments <em class="parameter"><code>program</code></em> and
20 <code class="constant">GL_LINK_STATUS</code>.</p><p>As a result of a successful link operation, all active
21 user-defined uniform variables belonging to
22 <em class="parameter"><code>program</code></em> will be initialized to 0, and
23 each of the program object's active uniform variables will be
24 assigned a location that can be queried by calling
25 <a class="citerefentry" href="glGetUniformLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetUniformLocation</span></span></a>.
26 Also, any active user-defined attribute variables that have not
27 been bound to a generic vertex attribute index will be bound to
28 one at this time.</p><p>Linking of a program object can fail for a number of
29 reasons as specified in the <span class="emphasis"><em>OpenGL Shading Language
30 Specification</em></span>. The following lists some of the
31 conditions that will cause a link error.</p><div class="itemizedlist"><ul type="disc"><li><p>The number of active attribute variables supported
32 by the implementation has been exceeded.</p></li><li><p>The storage limit for uniform variables has been
33 exceeded.</p></li><li><p>The number of active uniform variables supported
34 by the implementation has been exceeded.</p></li><li><p>The <code class="function">main</code> function is missing
35 for the vertex shader or the fragment shader.</p></li><li><p>A varying variable actually used in the fragment
36 shader is not declared in the same way (or is not
37 declared at all) in the vertex shader.</p></li><li><p>A reference to a function or variable name is
38 unresolved.</p></li><li><p>A shared global is declared with two different
39 types or two different initial values.</p></li><li><p>One or more of the attached shader objects has not
40 been successfully compiled.</p></li><li><p>Binding a generic attribute matrix caused some
41 rows of the matrix to fall outside the allowed maximum
42 of <code class="constant">GL_MAX_VERTEX_ATTRIBS</code>.</p></li><li><p>Not enough contiguous vertex attribute slots could
43 be found to bind attribute matrices.</p></li></ul></div><p>When a program object has been successfully linked, the
44 program object can be made part of current state by calling
45 <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>.
46 Whether or not the link operation was successful, the program
47 object's information log will be overwritten. The information
48 log can be retrieved by calling
49 <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
50 generated executables as part of the current rendering state if
51 the link operation was successful and the specified program
52 object is already currently in use as a result of a previous
53 call to
54 <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>.
55 If the program object currently in use is relinked
56 unsuccessfully, its link status will be set to
57 <code class="constant">GL_FALSE</code> , but the executables and
58 associated state will remain part of the current state until a
59 subsequent call to <code class="function">glUseProgram</code> removes it
60 from use. After it is removed from use, it cannot be made part
61 of current state until it has been successfully relinked.</p><p>If <em class="parameter"><code>program</code></em> contains shader objects
62 of type <code class="constant">GL_VERTEX_SHADER</code> but does not
63 contain shader objects of type
64 <code class="constant">GL_FRAGMENT_SHADER</code>, the vertex shader will
65 be linked against the implicit interface for fixed functionality
66 fragment processing. Similarly, if
67 <em class="parameter"><code>program</code></em> contains shader objects of type
68 <code class="constant">GL_FRAGMENT_SHADER</code> but it does not contain
69 shader objects of type <code class="constant">GL_VERTEX_SHADER</code>,
70 the fragment shader will be linked against the implicit
71 interface for fixed functionality vertex processing.</p><p>The program object's information log is updated and the
72 program is generated at the time of the link operation. After
73 the link operation, applications are free to modify attached
74 shader objects, compile attached shader objects, detach shader
75 objects, delete shader objects, and attach additional shader
76 objects. None of these operations affects the information log or
77 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>
78 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>
79 is lost (i.e., a failed link does not restore the old state of <em class="parameter"><code>program</code></em>
80 ). Certain information can still be retrieved from <em class="parameter"><code>program</code></em>
81 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>
82 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>
83 is generated if <em class="parameter"><code>program</code></em>
84 is not a value generated by OpenGL.</p><p><code class="constant">GL_INVALID_OPERATION</code>
85 is generated if <em class="parameter"><code>program</code></em>
86 is not a program object.</p><p><code class="constant">GL_INVALID_OPERATION</code>
87 is generated if <code class="function">glLinkProgram</code>
88 is executed between the execution of <a class="citerefentry" href="glBegin.xml"><span class="citerefentry"><span class="refentrytitle">glBegin</span></span></a>
89 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>
90 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>
91 with argument <em class="parameter"><code>program</code></em>
92 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>
93 with argument <em class="parameter"><code>program</code></em>
94 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>
95 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>
96 with argument <em class="parameter"><code>program</code></em>
97 and an attribute variable name</p><p><a class="citerefentry" href="glGetProgram.xml"><span class="citerefentry"><span class="refentrytitle">glGetProgram</span></span></a>
98 with arguments <em class="parameter"><code>program</code></em>
99 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>
100 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>
101 with argument <em class="parameter"><code>program</code></em>
102 and a uniform variable location</p><p><a class="citerefentry" href="glGetUniformLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetUniformLocation</span></span></a>
103 with argument <em class="parameter"><code>program</code></em>
104 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>,
105 <a class="citerefentry" href="glBindAttribLocation.xml"><span class="citerefentry"><span class="refentrytitle">glBindAttribLocation</span></span></a>,
106 <a class="citerefentry" href="glCompileShader.xml"><span class="citerefentry"><span class="refentrytitle">glCompileShader</span></span></a>,
107 <a class="citerefentry" href="glCreateProgram.xml"><span class="citerefentry"><span class="refentrytitle">glCreateProgram</span></span></a>,
108 <a class="citerefentry" href="glDeleteProgram.xml"><span class="citerefentry"><span class="refentrytitle">glDeleteProgram</span></span></a>,
109 <a class="citerefentry" href="glDetachShader.xml"><span class="citerefentry"><span class="refentrytitle">glDetachShader</span></span></a>,
110 <a class="citerefentry" href="glUniform.xml"><span class="citerefentry"><span class="refentrytitle">glUniform</span></span></a>,
111 <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>,
112 <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>
113 Copyright <span class="trademark"></span>© 2003-2005 3Dlabs Inc. Ltd.
114 This material may be distributed subject to the terms and conditions set forth in
115 the Open Publication License, v 1.0, 8 June 1999.
116 <a class="ulink" href="http://opencontent.org/openpub/" target="_top">http://opencontent.org/openpub/</a>.
117 </p></div></div></body></html>