Pik*_*ali 9 iphone opengl-es glsl opengl-es-2.0
我没有glBindAttribLocation在OpenGL ES 2.0中使用函数
有人可以给我完整的背景吗?是这样的吗?
g_pLightDir = g_pEffect10->GetVariableByName( "g_LightDir" )->AsVector();
Run Code Online (Sandbox Code Playgroud)
在DirectX 10?在各种网站上在线阅读,但无法使用此功能.需要帮助..
Chr*_*ica 26
此功能允许您为用户定义的着色器属性指定属性索引(不是代码样本建议的统一),稍后在引用属性时使用该属性索引.
假设您有一个顶点着色器:
...
attribute vec4 vertex; //or 'in vec4 vertex' in modern syntax
attribute vec3 normal;
...
Run Code Online (Sandbox Code Playgroud)
然后,您可以将索引绑定到这些变量
glBindAttribLocation(program, 0, "vertex");
glBindAttribLocation(program, 1, "normal");
Run Code Online (Sandbox Code Playgroud)
你可以使用你喜欢的任何非负数(在很小的范围内).然后,在引用这些属性时,您可以使用它们的索引,例如in glVertexAttribPointer或glEnableVertexAttribArrayfunctions.
但请记住,glBindAttribLocation在链接程序之前必须调用它.你也可以省略它.然后,OpenGL会在链接期间自动将索引绑定到所有使用的属性,以后可以查询glGetAttribLocation.但是glBindAttribLocation你可以建立自己的属性索引语义并保持一致.
较新的GLSL版本甚至允许您在着色器中指定属性索引(使用layout语法),无需使用glBindAttribLocation或glGetAttribLocation,但我不确定ES是否支持此功能.
但我的答案并不比你看过的那些"各种"网站或任何好的OpenGL/GLSL书籍更多地告诉你,所以如果你还没有得到它,那就深入研究一下GLSL的基础知识.