gpt4 book ai didi

shader - GLES2 是否需要 glBindAttribLocation()?

转载 作者:行者123 更新时间:2023-12-04 02:03:29 24 4
gpt4 key购买 nike

这可能是一个菜鸟问题。据我了解,glBindAttribLocation(..., AAA, ...) 将程序内的属性绑定(bind)到 AAA 的位置 ID,只要 AAA 是唯一的。如果我有以下代码:

glBindAttribLocation(..., 0, "XXX");
glBindAttribLocation(..., 1, "YYY");

这会将我的两个变量绑定(bind)到位置 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);

至此,我了解到 0 和 1 的 ID 作为第一个参数传递给 glVertexAttribPointer()。

假设如果我通过 glGetAttribLocation() 调用获得属性的位置 ID(如上)是否安全,这样返回的 ID 是 5 和 6 而不是 0 和 1,我可以将 5 和 6 传递给 glVertexAttribPointer( ) 和 glEnableVertexAttribArray() 而不是 0 和 1??

最佳答案

glGetAttribLocation() 返回正确的索引。所以是的,在 glVertexAttribPointer() 和 glEnableVertexAttribArray() 中使用这些值是安全的。

但是如果你不缓存它,为每个着色器调用 glGetAttribLocation 可能会很昂贵。使用 glBindAttribLocation() 允许使用约定,位置始终为 0,正常为 1,依此类推。

关于shader - GLES2 是否需要 glBindAttribLocation()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com