Commit | Line | Data |
---|---|---|
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> |