Commit | Line | Data |
---|---|---|
7faf1d71 AW |
1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> | |
3 | <!-- saved from url=(0013)about:internet --> | |
4 | <?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" /><link rel="stylesheet" type="text/css" href="opengl-man.css" /><title>glBindAttribLocation</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="refentry" title="glBindAttribLocation"><a id="glBindAttribLocation"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>glBindAttribLocation — Associates a generic vertex attribute index with a named attribute variable</p></div><div class="refsynopsisdiv" title="C Specification"><h2>C Specification</h2><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void <b class="fsfunc">glBindAttribLocation</b>(</code></td><td>GLuint <var class="pdparam">program</var>, </td></tr><tr><td> </td><td>GLuint <var class="pdparam">index</var>, </td></tr><tr><td> </td><td>const GLchar *<var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1" title="Parameters"><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 in | |
5 | which the association is to be made.</p></dd><dt><span class="term"><em class="parameter"><code>index</code></em></span></dt><dd><p>Specifies the index of the generic vertex | |
6 | attribute to be bound.</p></dd><dt><span class="term"><em class="parameter"><code>name</code></em></span></dt><dd><p>Specifies a null terminated string containing | |
7 | the name of the vertex shader attribute variable to | |
8 | which <em class="parameter"><code>index</code></em> is to be | |
9 | bound.</p></dd></dl></div></div><div class="refsect1" title="Description"><a id="description"></a><h2>Description</h2><p><code class="function">glBindAttribLocation</code> is used to | |
10 | associate a user-defined attribute variable in the program | |
11 | object specified by <em class="parameter"><code>program</code></em> with a | |
12 | generic vertex attribute index. The name of the user-defined | |
13 | attribute variable is passed as a null terminated string in | |
14 | <em class="parameter"><code>name</code></em>. The generic vertex attribute index | |
15 | to be bound to this variable is specified by | |
16 | <em class="parameter"><code>index</code></em>. When | |
17 | <em class="parameter"><code>program</code></em> is made part of current state, | |
18 | values provided via the generic vertex attribute | |
19 | <em class="parameter"><code>index</code></em> will modify the value of the | |
20 | user-defined attribute variable specified by | |
21 | <em class="parameter"><code>name</code></em>.</p><p>If <em class="parameter"><code>name</code></em> refers to a matrix | |
22 | attribute variable, <em class="parameter"><code>index</code></em> refers to the | |
23 | first column of the matrix. Other matrix columns are then | |
24 | automatically bound to locations <em class="parameter"><code>index+1</code></em> | |
25 | for a matrix of type <code class="function">mat2</code>; <em class="parameter"><code>index+1</code></em> and | |
26 | <em class="parameter"><code>index+2</code></em> for a matrix of type <code class="function">mat3</code>; and | |
27 | <em class="parameter"><code>index+1</code></em>, <em class="parameter"><code>index+2</code></em>, | |
28 | and <em class="parameter"><code>index+3</code></em> for a matrix of type | |
29 | <code class="function">mat4</code>.</p><p>This command makes it possible for vertex shaders to use | |
30 | descriptive names for attribute variables rather than generic | |
31 | variables that are numbered from 0 to | |
32 | <code class="constant">GL_MAX_VERTEX_ATTRIBS</code> -1. The values sent | |
33 | to each generic attribute index are part of current state. | |
34 | If a different program object is made current by calling | |
35 | <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>, | |
36 | the generic vertex attributes are tracked in such a way that the | |
37 | same values will be observed by attributes in the new program | |
38 | object that are also bound to | |
39 | <em class="parameter"><code>index</code></em>.</p><p>Attribute variable | |
40 | name-to-generic attribute index bindings for a program object | |
41 | can be explicitly assigned at any time by calling | |
42 | <code class="function">glBindAttribLocation</code>. Attribute bindings do | |
43 | not go into effect until | |
44 | <a class="citerefentry" href="glLinkProgram.xml"><span class="citerefentry"><span class="refentrytitle">glLinkProgram</span></span></a> | |
45 | is called. After a program object has been linked successfully, | |
46 | the index values for generic attributes remain fixed (and their | |
47 | values can be queried) until the next link command | |
48 | occurs.</p><p>Any attribute binding that occurs after the program object has been linked will not take effect | |
49 | until the next time the program object is linked.</p></div><div class="refsect1" title="Notes"><a id="notes"></a><h2>Notes</h2><p><code class="function">glBindAttribLocation</code> can be called | |
50 | before any vertex shader objects are bound to the specified | |
51 | program object. It is also permissible to bind a generic | |
52 | attribute index to an attribute variable name that is never used | |
53 | in a vertex shader.</p><p>If <em class="parameter"><code>name</code></em> was bound previously, that | |
54 | information is lost. Thus you cannot bind one user-defined | |
55 | attribute variable to multiple indices, but you can bind | |
56 | multiple user-defined attribute variables to the same | |
57 | index.</p><p>Applications are allowed to bind more than one | |
58 | user-defined attribute variable to the same generic vertex | |
59 | attribute index. This is called <span class="emphasis"><em>aliasing</em></span>, | |
60 | and it is allowed only if just one of the aliased attributes is | |
61 | active in the executable program, or if no path through the | |
62 | shader consumes more than one attribute of a set of attributes | |
63 | aliased to the same location. The compiler and linker are | |
64 | allowed to assume that no aliasing is done and are free to | |
65 | employ optimizations that work only in the absence of aliasing. | |
66 | OpenGL implementations are not required to do error checking to | |
67 | detect aliasing.</p><p>Active attributes that are not explicitly bound will be | |
68 | bound by the linker when | |
69 | <a class="citerefentry" href="glLinkProgram.xml"><span class="citerefentry"><span class="refentrytitle">glLinkProgram</span></span></a> | |
70 | is called. The locations assigned can be queried by calling | |
71 | <a class="citerefentry" href="glGetAttribLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetAttribLocation</span></span></a>.</p><p>OpenGL copies the <em class="parameter"><code>name</code></em> string when | |
72 | <code class="function">glBindAttribLocation</code> is called, so an | |
73 | application may free its copy of the <em class="parameter"><code>name</code></em> | |
74 | string immediately after the function returns.</p><p>Generic attribute locations may be specified in the shader source | |
75 | text using a <code class="function">location</code> layout qualifier. In this case, | |
76 | the location of the attribute specified in the shader's source takes precedence | |
77 | and may be queried by calling <a class="citerefentry" href="glGetAttribLocation.xml"><span class="citerefentry"><span class="refentrytitle">glGetAttribLocation</span></span></a>. | |
78 | </p></div><div class="refsect1" title="Errors"><a id="errors"></a><h2>Errors</h2><p><code class="constant">GL_INVALID_VALUE</code> is generated if | |
79 | <em class="parameter"><code>index</code></em> is greater than or equal to | |
80 | <code class="constant">GL_MAX_VERTEX_ATTRIBS</code>.</p><p><code class="constant">GL_INVALID_OPERATION</code> is generated if | |
81 | <em class="parameter"><code>name</code></em> starts with the reserved prefix | |
82 | "gl_".</p><p><code class="constant">GL_INVALID_VALUE</code> is generated if | |
83 | <em class="parameter"><code>program</code></em> is not a value generated by | |
84 | OpenGL.</p><p><code class="constant">GL_INVALID_OPERATION</code> is generated if | |
85 | <em class="parameter"><code>program</code></em> is not a program object.</p></div><div class="refsect1" title="Associated Gets"><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> | |
86 | with argument <code class="constant">GL_MAX_VERTEX_ATTRIBS</code></p><p><a class="citerefentry" href="glGetActiveAttrib.xml"><span class="citerefentry"><span class="refentrytitle">glGetActiveAttrib</span></span></a> | |
87 | 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> | |
88 | with arguments <em class="parameter"><code>program</code></em> and | |
89 | <em class="parameter"><code>name</code></em></p><p><a class="citerefentry" href="glIsProgram.xml"><span class="citerefentry"><span class="refentrytitle">glIsProgram</span></span></a></p></div><div class="refsect1" title="See Also"><a id="seealso"></a><h2>See Also</h2><p><a class="citerefentry" href="glDisableVertexAttribArray.xml"><span class="citerefentry"><span class="refentrytitle">glDisableVertexAttribArray</span></span></a>, | |
90 | <a class="citerefentry" href="glEnableVertexAttribArray.xml"><span class="citerefentry"><span class="refentrytitle">glEnableVertexAttribArray</span></span></a>, | |
91 | <a class="citerefentry" href="glUseProgram.xml"><span class="citerefentry"><span class="refentrytitle">glUseProgram</span></span></a>, | |
92 | <a class="citerefentry" href="glVertexAttrib.xml"><span class="citerefentry"><span class="refentrytitle">glVertexAttrib</span></span></a>, | |
93 | <a class="citerefentry" href="glVertexAttribPointer.xml"><span class="citerefentry"><span class="refentrytitle">glVertexAttribPointer</span></span></a></p></div><div class="refsect1" title="Copyright"><a id="Copyright"></a><h2>Copyright</h2><p> | |
94 | Copyright <span class="trademark"></span>© 2003-2005 3Dlabs Inc. Ltd. | |
95 | This material may be distributed subject to the terms and conditions set forth in | |
96 | the Open Publication License, v 1.0, 8 June 1999. | |
97 | <a class="ulink" href="http://opencontent.org/openpub/" target="_top">http://opencontent.org/openpub/</a>. | |
98 | </p></div></div></body></html> |