设置shader中的attribute变量
- 将vbo中的顶点数据设置到attribute变量里
- 设置当前的数据集:把vbo设置为当前要绘制图形的数据集,就是程序或者叫shader在绘制的时候去vbo取数据
glBindBuffer(GL_ARRAY_BUFFER, vbo);
- 启用attribute变量的插槽,这里是positionLocation
glEnableVertexAttribArray(positionLocation);
- 调用glVertexAttribPointer(),告诉GPU如何去遍历vbo这个内存块,给positionLocation这个插槽上填数据。第一个参数:插槽的位置;第二个参数:这个插槽中数据有几个分量;第三个参数:表示每个分量的类型;第四个参数:需不需要归一化,假如传入颜色值时255,255,255,他不是浮点数,如果归一化就把255,255,255映射为1.0,1.0,1.0;第五个参数:紧挨着的两个点相距多远;第六个参数:从vbo的哪个位置开始取值;
glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4, 0);
- 调用glDrawArrays(),告诉GPU如何把vbo中的数据分发到各个不同的shader,让他们去执行。第一个参数:表示绘制三角形,每三点个绘制一个面;第二个参数:从第几个点开始绘制;第三个参数:要绘制多少个点。这句话在执行的时候,在GPU端,他会遍历vbo中的数据,并分别传入三个不同的shader,这三个shader分别拿到了不同的点,然后他们的viewMatrix,modelmatrix,projectMatrix是一样的,之后这三个点通过shader会在GPU上不同的三个核心(core)上同时执行
glDrawArrays(GL_TRIANGLES, 0, 3);
- 最后绘制完成之后,把当前的GL_ARRAY_BUTTER设置为0
glBindBuffer(GL_ARRAY_BUFFER, 0);