glBindBuffer() 函数
准备数据
预先将顶点buffer 数据拷贝到 GPU 里面去,并将数据绑定在 vertexBufferId 上面.
将使用的位置设置为静态的画布,之后就是
等待画布的执行.,
//copy vertices from cpu to the gpu
IntBuffer buffer = IntBuffer.allocate(1);
GLES20.glGenBuffers(1,buffer);
//获取一个 bufferID , 准备将数据拷贝到GPU 上面, 句柄就是这个int 值,
vertexBufferId = buffer.get();
//绑定生成的 vertexBufferId 到 GL_ARRAY_BUFFER 上面去, target
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER , vertexBufferId);
//绑定 FloatBuffer 数据,
//第一个参数, buffer 的类型(目标)
//第二个参数是数据的长度, 这个地方的长度直接是 triangleBuffer 的长度, 这个 float 是4字节的, 所以可以直接使用数组的长度 * 4 得到
//第三个参数是 buffer 数据(坐标数据)
//第四个参数指定了 用法 , 是静态的画布上面
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER ,triangleVertexArray.length * 4, triangleBuffer , GLES20.GL_STATIC_DRAW);
加载和使用数据
setVertexAttribute 使用的时候不是直接传入 buffer , 而是直接使用 offset 来设置, 之后的数据直接在useProgram() 之后,调用 glBindBuffer() 通知数据挂起
shaderProgram.enableVertexAttribute("vPosition");
//这个地方没有使用 传入数据, 而是选择 offset 这个函数, 将数据的传入放到了后面的 GPU 里面直接拉取,
shaderProgram.setVertexAttribute("vPosition" ,vertexCount , GLES20.GL_FLOAT , false , vertexStride , 0);
//加载buffer 数据到画布里面去
//数据之前就已经放置进去了.
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vertexBufferId);
//开始画.
GLES20.glDrawArrays(GLES20.GL_TRIANGLES , 0, vertexCount);
网友评论