Android OpenGL使用float数组而不是FloatBuffer作为属性

时间:2012-01-18 10:58:30

标签: android opengl-es opengl-es-2.0

如何使用数组提供属性值?现在我正在使用glVertexAttribPointer(maPosition,3,GL_FLOAT,mVertBuffer) 我想使用包含4个三维点坐标的数组mVerts。

1 个答案:

答案 0 :(得分:0)

Opengl.org有以下说法:

  

如果在指定通用顶点属性数组时将非零命名缓冲区对象绑定到GL_ARRAY_BUFFER目标(请参阅glBindBuffer),则将指针视为缓冲区对象的数据存储中的字节偏移量。此外,缓冲区对象绑定(GL_ARRAY_BUFFER_BINDING)被保存为索引索引的通用顶点属性数组客户端状态(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)。

这意味着您基本上必须这样做:

GLint currbuff =0;
//save the current bound buffer
glGetIntegerv(GL_ARRAY_BUFFER_BINDING,&currbuff);
//unbind the currently bound buffer 
glBindBuffer(GL_ARRAY_BUFFER,0); //0 is reserved to unbind the currently bound buffer
//mVerts needs to be of type GLfloat *
glVertexAttribPointer(maPosition, 3, GL_FLOAT, mVerts);
//rebind the previously bound buffer
glBindBuffer(GL_ARRAY_BUFFER,currbuff);

如果你不使用GL_ARRAY_BUFFER

,你当然不需要保存/加载