有標識的兩種方法哪個屬性在着色器得到「配對」你提供glVertexAttribPointer
數據。您使用glVertexAttribPointer
獲得的唯一標識符是index
(第一個參數),因此必須以某種方式通過索引完成。
在第一種方法中,在使用glGetAttribLocation進行編譯和鏈接後,從着色器中獲取該屬性的索引,並將其用作第一個參數,例如。
GLint program = ...;
GLint v3PosAttributeIndex = glGetAttribLocation(program, "v3Pos");
GLint v3varAttributeIndex = glGetAttribLocation(program, "v3_variable");
glVertexAttribPointer(v3PosAttributeIndex, ...);
glVertexAttribPointer(v3varAttributeIndex, ...);
您也可以明確地在創作時,着色器(如@日本的意見建議)設置的屬性的佈局,所以你會改變你的着色器,像這樣:
layout(location = 1) in vec3 v3_variable;
layout(location = 0) in vec3 v3Pos;
然後在代碼,你將它們明確:
glVertexAttribPointer(0, ...); // v3Pos data
glVertexAttribPointer(1, ...); // v3_variable data
第二種方法只適用於GLES 3.0 +(和OpenGL 3.0+),因此,如果您只使用GLES 2.0,可能並不適用於你的情況。另外請注意,您可以同時使用這兩種方法。例如。即使您明確定義了佈局,它也不會限制您稍後查詢它們。
隨着版面設計聲明更清楚它是基於索引的,請參閱https://www.opengl.org/wiki/Layout_Qualifier_(GLSL) –