function create_vbo(data){
var vbo = gl.createBuffer();o);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
return vbo;
}
var prg = create_program(v_shader, f_shader);
var attLocation = gl.getAttribLocation(prg, 'position');
var attStride = 3;
var vbo = create_vbo(vertex_position);
gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
gl.enableVertexAttribArray(attLocation);
gl.vertexAttribPointer(attLocation, attStride, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, 3);
看了例子翻了mdn都搞懂... bindBuffer当作是把createBuffer得到的buffer传递给gl, 但之后的bufferData/vertexAttribPointer/drawArrays等的参数都没有传入buffer, 那么这些函数是怎么知道应该操作哪个buffer的? 是对应最后一次bindBuffer传入的buffer吗? 还是buffer都压入了一个栈中这几个函数直接对栈操作?
opengl是状态机,bindBuffer改变了状态,之后的操作都对应这个buffer。
如果是像matrix一样属于栈的操作的话,你应该能看到pushbuffer和popbuffer这样的函数