Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1452 | chris | 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN" |
||
| 3 | "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd"> |
||
| 4 | <refentry id="glLinkProgram"> |
||
| 5 | <refmeta> |
||
| 6 | <refentrytitle>glLinkProgram</refentrytitle> |
||
| 7 | <manvolnum>3G</manvolnum> |
||
| 8 | </refmeta> |
||
| 9 | <refnamediv> |
||
| 10 | <refname>glLinkProgram</refname> |
||
| 11 | <refpurpose>Links a program object</refpurpose> |
||
| 12 | </refnamediv> |
||
| 13 | <refsynopsisdiv><title>C Specification</title> |
||
| 14 | <funcsynopsis> |
||
| 15 | <funcprototype> |
||
| 16 | <funcdef>void <function>glLinkProgram</function></funcdef> |
||
| 17 | <paramdef>GLuint <parameter>program</parameter></paramdef> |
||
| 18 | </funcprototype> |
||
| 19 | </funcsynopsis> |
||
| 20 | </refsynopsisdiv> |
||
| 21 | <refsect1 id="parameters"><title>Parameters</title> |
||
| 22 | <variablelist> |
||
| 23 | <varlistentry> |
||
| 24 | <term><parameter>program</parameter></term> |
||
| 25 | <listitem> |
||
| 26 | <para>Specifies the handle of the program object to be linked.</para> |
||
| 27 | |||
| 28 | </listitem> |
||
| 29 | </varlistentry> |
||
| 30 | </variablelist> |
||
| 31 | </refsect1> |
||
| 32 | <refsect1 id="description"><title>Description</title> |
||
| 33 | <para><function>glLinkProgram</function> links the program |
||
| 34 | object specified by <parameter>program</parameter>. If any |
||
| 35 | shader objects of type <constant>GL_VERTEX_SHADER</constant> are |
||
| 36 | attached to <parameter>program</parameter>, they will be used to |
||
| 37 | create an executable that will run on the programmable vertex |
||
| 38 | processor. If any shader objects of type |
||
| 39 | <constant>GL_FRAGMENT_SHADER</constant> are attached to |
||
| 40 | <parameter>program</parameter>, they will be used to create an |
||
| 41 | executable that will run on the programmable fragment |
||
| 42 | processor.</para> |
||
| 43 | |||
| 44 | <para>The status of the link operation will be stored as part of |
||
| 45 | the program object's state. This value will be set to |
||
| 46 | <constant>GL_TRUE</constant> if the program object was linked |
||
| 47 | without errors and is ready for use, and |
||
| 48 | <constant>GL_FALSE</constant> otherwise. It can be queried by |
||
| 49 | calling |
||
| 50 | <citerefentry><refentrytitle>glGetProgram</refentrytitle></citerefentry> |
||
| 51 | with arguments <parameter>program</parameter> and |
||
| 52 | <constant>GL_LINK_STATUS</constant>.</para> |
||
| 53 | |||
| 54 | <para>As a result of a successful link operation, all active |
||
| 55 | user-defined uniform variables belonging to |
||
| 56 | <parameter>program</parameter> will be initialized to 0, and |
||
| 57 | each of the program object's active uniform variables will be |
||
| 58 | assigned a location that can be queried by calling |
||
| 59 | <citerefentry><refentrytitle>glGetUniformLocation</refentrytitle></citerefentry>. |
||
| 60 | Also, any active user-defined attribute variables that have not |
||
| 61 | been bound to a generic vertex attribute index will be bound to |
||
| 62 | one at this time.</para> |
||
| 63 | |||
| 64 | <para>Linking of a program object can fail for a number of |
||
| 65 | reasons as specified in the <emphasis>OpenGL Shading Language |
||
| 66 | Specification</emphasis>. The following lists some of the |
||
| 67 | conditions that will cause a link error.</para> |
||
| 68 | |||
| 69 | <itemizedlist> |
||
| 70 | <listitem> |
||
| 71 | <para>The number of active attribute variables supported |
||
| 72 | by the implementation has been exceeded.</para> |
||
| 73 | </listitem> |
||
| 74 | <listitem> |
||
| 75 | <para>The storage limit for uniform variables has been |
||
| 76 | exceeded.</para> |
||
| 77 | </listitem> |
||
| 78 | <listitem> |
||
| 79 | <para>The number of active uniform variables supported |
||
| 80 | by the implementation has been exceeded.</para> |
||
| 81 | </listitem> |
||
| 82 | <listitem> |
||
| 83 | <para>The <function>main</function> function is missing |
||
| 84 | for the vertex shader or the fragment shader.</para> |
||
| 85 | </listitem> |
||
| 86 | <listitem> |
||
| 87 | <para>A varying variable actually used in the fragment |
||
| 88 | shader is not declared in the same way (or is not |
||
| 89 | declared at all) in the vertex shader.</para> |
||
| 90 | </listitem> |
||
| 91 | <listitem> |
||
| 92 | <para>A reference to a function or variable name is |
||
| 93 | unresolved.</para> |
||
| 94 | </listitem> |
||
| 95 | <listitem> |
||
| 96 | <para>A shared global is declared with two different |
||
| 97 | types or two different initial values.</para> |
||
| 98 | </listitem> |
||
| 99 | <listitem> |
||
| 100 | <para>One or more of the attached shader objects has not |
||
| 101 | been successfully compiled.</para> |
||
| 102 | </listitem> |
||
| 103 | <listitem> |
||
| 104 | <para>Binding a generic attribute matrix caused some |
||
| 105 | rows of the matrix to fall outside the allowed maximum |
||
| 106 | of <constant>GL_MAX_VERTEX_ATTRIBS</constant>.</para> |
||
| 107 | </listitem> |
||
| 108 | <listitem> |
||
| 109 | <para>Not enough contiguous vertex attribute slots could |
||
| 110 | be found to bind attribute matrices.</para> |
||
| 111 | </listitem> |
||
| 112 | </itemizedlist> |
||
| 113 | |||
| 114 | <para>When a program object has been successfully linked, the |
||
| 115 | program object can be made part of current state by calling |
||
| 116 | <citerefentry><refentrytitle>glUseProgram</refentrytitle></citerefentry>. |
||
| 117 | Whether or not the link operation was successful, the program |
||
| 118 | object's information log will be overwritten. The information |
||
| 119 | log can be retrieved by calling |
||
| 120 | <citerefentry><refentrytitle>glGetProgramInfoLog</refentrytitle></citerefentry>.</para> |
||
| 121 | |||
| 122 | <para><function>glLinkProgram</function> will also install the |
||
| 123 | generated executables as part of the current rendering state if |
||
| 124 | the link operation was successful and the specified program |
||
| 125 | object is already currently in use as a result of a previous |
||
| 126 | call to |
||
| 127 | <citerefentry><refentrytitle>glUseProgram</refentrytitle></citerefentry>. |
||
| 128 | If the program object currently in use is relinked |
||
| 129 | unsuccessfully, its link status will be set to |
||
| 130 | <constant>GL_FALSE</constant> , but the executables and |
||
| 131 | associated state will remain part of the current state until a |
||
| 132 | subsequent call to <function>glUseProgram</function> removes it |
||
| 133 | from use. After it is removed from use, it cannot be made part |
||
| 134 | of current state until it has been successfully relinked.</para> |
||
| 135 | |||
| 136 | <para>If <parameter>program</parameter> contains shader objects |
||
| 137 | of type <constant>GL_VERTEX_SHADER</constant> but does not |
||
| 138 | contain shader objects of type |
||
| 139 | <constant>GL_FRAGMENT_SHADER</constant>, the vertex shader will |
||
| 140 | be linked against the implicit interface for fixed functionality |
||
| 141 | fragment processing. Similarly, if |
||
| 142 | <parameter>program</parameter> contains shader objects of type |
||
| 143 | <constant>GL_FRAGMENT_SHADER</constant> but it does not contain |
||
| 144 | shader objects of type <constant>GL_VERTEX_SHADER</constant>, |
||
| 145 | the fragment shader will be linked against the implicit |
||
| 146 | interface for fixed functionality vertex processing.</para> |
||
| 147 | |||
| 148 | <para>The program object's information log is updated and the |
||
| 149 | program is generated at the time of the link operation. After |
||
| 150 | the link operation, applications are free to modify attached |
||
| 151 | shader objects, compile attached shader objects, detach shader |
||
| 152 | objects, delete shader objects, and attach additional shader |
||
| 153 | objects. None of these operations affects the information log or |
||
| 154 | the program that is part of the program object.</para> |
||
| 155 | </refsect1> |
||
| 156 | <refsect1 id="notes"><title>Notes</title> |
||
| 157 | <para><function>glLinkProgram</function> |
||
| 158 | is available only if the GL version is 2.0 or greater.</para> |
||
| 159 | <para>If the link operation is unsuccessful, any information about a previous link operation on <parameter>program</parameter> |
||
| 160 | is lost (i.e., a failed link does not restore the old state of <parameter>program</parameter> |
||
| 161 | ). Certain information can still be retrieved from <parameter>program</parameter> |
||
| 162 | even after an unsuccessful link operation. See for instance <citerefentry><refentrytitle>glGetActiveAttrib</refentrytitle></citerefentry> |
||
| 163 | and <citerefentry><refentrytitle>glGetActiveUniform</refentrytitle></citerefentry>.</para> |
||
| 164 | </refsect1> |
||
| 165 | <refsect1 id="errors"><title>Errors</title> |
||
| 166 | <para><constant>GL_INVALID_VALUE</constant> |
||
| 167 | is generated if <parameter>program</parameter> |
||
| 168 | is not a value generated by OpenGL.</para> |
||
| 169 | <para><constant>GL_INVALID_OPERATION</constant> |
||
| 170 | is generated if <parameter>program</parameter> |
||
| 171 | is not a program object.</para> |
||
| 172 | <para><constant>GL_INVALID_OPERATION</constant> |
||
| 173 | is generated if <function>glLinkProgram</function> |
||
| 174 | is executed between the execution of <citerefentry><refentrytitle>glBegin</refentrytitle></citerefentry> |
||
| 175 | and the corresponding execution of <citerefentry><refentrytitle>glEnd</refentrytitle></citerefentry>.</para> |
||
| 176 | </refsect1> |
||
| 177 | <refsect1 id="associatedgets"><title>Associated Gets</title> |
||
| 178 | <para><citerefentry><refentrytitle>glGet</refentrytitle></citerefentry> |
||
| 179 | with the argument <constant>GL_CURRENT_PROGRAM</constant></para> |
||
| 180 | <para><citerefentry><refentrytitle>glGetActiveAttrib</refentrytitle></citerefentry> |
||
| 181 | with argument <parameter>program</parameter> |
||
| 182 | and the index of an active attribute variable</para> |
||
| 183 | <para><citerefentry><refentrytitle>glGetActiveUniform</refentrytitle></citerefentry> |
||
| 184 | with argument <parameter>program</parameter> |
||
| 185 | and the index of an active uniform variable<parameter></parameter></para> |
||
| 186 | <para><citerefentry><refentrytitle>glGetAttachedShaders</refentrytitle></citerefentry> |
||
| 187 | with argument <parameter>program</parameter></para> |
||
| 188 | <para><citerefentry><refentrytitle>glGetAttribLocation</refentrytitle></citerefentry> |
||
| 189 | with argument <parameter>program</parameter> |
||
| 190 | and an attribute variable name</para> |
||
| 191 | <para><citerefentry><refentrytitle>glGetProgram</refentrytitle></citerefentry> |
||
| 192 | with arguments <parameter>program</parameter> |
||
| 193 | and <constant>GL_LINK_STATUS</constant></para> |
||
| 194 | <para><citerefentry><refentrytitle>glGetProgramInfoLog</refentrytitle></citerefentry> |
||
| 195 | with argument <parameter>program</parameter></para> |
||
| 196 | <para><citerefentry><refentrytitle>glGetUniform</refentrytitle></citerefentry> |
||
| 197 | with argument <parameter>program</parameter> |
||
| 198 | and a uniform variable location</para> |
||
| 199 | <para><citerefentry><refentrytitle>glGetUniformLocation</refentrytitle></citerefentry> |
||
| 200 | with argument <parameter>program</parameter> |
||
| 201 | and a uniform variable name</para> |
||
| 202 | <para><citerefentry><refentrytitle>glIsProgram</refentrytitle></citerefentry></para> |
||
| 203 | </refsect1> |
||
| 204 | <refsect1 id="seealso"><title>See Also</title> |
||
| 205 | <para><citerefentry><refentrytitle>glAttachShader</refentrytitle></citerefentry>, |
||
| 206 | <citerefentry><refentrytitle>glBindAttribLocation</refentrytitle></citerefentry>, |
||
| 207 | <citerefentry><refentrytitle>glCompileShader</refentrytitle></citerefentry>, |
||
| 208 | <citerefentry><refentrytitle>glCreateProgram</refentrytitle></citerefentry>, |
||
| 209 | <citerefentry><refentrytitle>glDeleteProgram</refentrytitle></citerefentry>, |
||
| 210 | <citerefentry><refentrytitle>glDetachShader</refentrytitle></citerefentry>, |
||
| 211 | <citerefentry><refentrytitle>glUniform</refentrytitle></citerefentry>, |
||
| 212 | <citerefentry><refentrytitle>glUseProgram</refentrytitle></citerefentry>, |
||
| 213 | <citerefentry><refentrytitle>glValidateProgram</refentrytitle></citerefentry></para> |
||
| 214 | </refsect1> |
||
| 215 | <refsect1 id="Copyright"><title>Copyright</title> |
||
| 216 | <para> |
||
| 217 | Copyright <trademark class="copyright"></trademark> 2003-2005 3Dlabs Inc. Ltd. |
||
| 218 | This material may be distributed subject to the terms and conditions set forth in |
||
| 219 | the Open Publication License, v 1.0, 8 June 1999. |
||
| 220 | <ulink url="http://opencontent.org/openpub/">http://opencontent.org/openpub/</ulink>. |
||
| 221 | </para> |
||
| 222 | </refsect1> |
||
| 223 | </refentry> |