gpt4 book ai didi

iphone - OpenGL ES中glBindAttribLocation函数的使用

转载 作者:行者123 更新时间:2023-12-03 18:31:31 25 4
gpt4 key购买 nike

我无法在 OpenGL ES 2.0 中使用 glBindAttribLocation 函数

有人能给我完整的背景吗?是不是类似

g_pLightDir = g_pEffect10->GetVariableByName( "g_LightDir" )->AsVector();

在 DirectX 10 中?在各个网站上在线阅读,但无法使用此功能。需要帮助..

最佳答案

此函数可让您为用户定义的着色器属性(而不是统一的,如代码示例所示)指定属性索引,稍后在引用该属性时使用该索引。

假设您有一个顶点着色器:

...
attribute vec4 vertex; //or 'in vec4 vertex' in modern syntax
attribute vec3 normal;
...

然后您可以将索引绑定(bind)到这些变量,

glBindAttribLocation(program, 0, "vertex");
glBindAttribLocation(program, 1, "normal");

您可以使用任何您喜欢的非负数(在一个小范围内)。然后,当引用这些属性时,您可以使用它们的索引,例如在 glVertexAttribPointerglEnableVertexAttribArray 函数中。

但请记住,在链接程序之前必须调用glBindAttribLocation。您也可以省略它。然后,OpenGL 在链接期间自动将索引绑定(bind)到所有使用的属性,稍后可以通过 glGetAttribLocation 查询这些属性。但通过 glBindAttribLocation,您可以建立自己的属性索引语义并保持一致。

较新的 GLSL 版本甚至允许您在着色器内指定属性索引(使用 layout 语法),从而不再需要 glBindAttribLocationglGetAttribLocation ,但我不确定 ES 是否支持。

但是我的回答并没有告诉你更多的信息,只是你看过的那些“各种”网站或任何优秀的 OpenGL/GLSL 书籍,所以如果你仍然不明白,请更深入地研究 GLSL 的基础知识。

关于iphone - OpenGL ES中glBindAttribLocation函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898146/

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