Mar*_*rkP 11 shader vertex-buffer opengl-es-2.0
这可能是一个菜鸟问题.据我了解,只要AAA是唯一的,glBindAttribLocation(...,AAA,...)就会将程序中的属性绑定到AAA的位置ID.如果我有以下代码:
glBindAttribLocation(..., 0, "XXX");
glBindAttribLocation(..., 1, "YYY");
Run Code Online (Sandbox Code Playgroud)
这会将我的两个变量绑定到位置ID 0和1.然后我会调用:
glBindBuffer(GL_ARRAY_BUFFER, VBId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBId);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void *) 0 + sizeof(float) * 3);
glEnableVertexAttribArray(1);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我理解0和1的ID作为第一个参数传递给glVertexAttribPointer().
如果我通过glGetAttribLocation()调用获得属性的位置ID(如上所述),以便返回的ID是5和6而不是0和1,我是否可以安全地将5和6传递给glVertexAttribPointer( )和glEnableVertexAttribArray()而不是0和1 ??
cra*_*jul 13
glGetAttribLocation()返回正确的索引.所以,是的,在glVertexAttribPointer()和glEnableVertexAttribArray()中使用这些值是安全的.
但是如果不缓存它,为每个着色器调用glGetAttribLocation可能会很昂贵.使用glBindAttribLocation()允许使用约定,位置始终为0,正常位于1,依此类推.
| 归档时间: |
|
| 查看次数: |
3395 次 |
| 最近记录: |