VBO(Vertex Buffer Object)顶点缓冲区对象,是OpenGL ES 2.0之后一个可使用的功能。表示存在于显存中的一个对象,用于存储顶点坐标、纹理坐标等相关信息。如果不使用VBO则是将顶点、纹理坐标等数据存放在内存中,在每次绘制之前通过通IO将其传递到显存中,这样做的缺点是显而易见的,每次传递的数据相同还要花费同样的IO开销,所以绘制这些数据不发生变化的物体尽量使用VBO方式,提升性能。下面是使用传统方法绘制的代码
首先获取顶点坐标数据
public void initVertexData(float[] vertices) {
// 顶点坐标数据的初始化
mCount = vertices.length / 3;
// 创建顶点坐标数据缓冲区 vertices.length*4是因为一个整数四个字节
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder()); //设置字节顺序
mVertexBuffer = vbb.asFloatBuffer(); //转换为Float型缓冲
mVertexBuffer.put(vertices); //向缓冲区中放入顶点坐标数据
mVertexBuffer.position(0); //设置缓冲区起始位置
}
每次绘制一帧该物体时调用
public void draw()
{
// 制定使用某套着色器程序
GLES20.glUseProgram(mProgram);
// 将最终变换矩阵传入着色器程序
GLES20.glUnif