gl入门问题, bufferData和drawArrays是怎么工作的?

pngx
  • 87
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都压入了一个栈中这几个函数直接对栈操作?

回复
阅读 4.4k
1 个回答
✓ 已被采纳

opengl是状态机,bindBuffer改变了状态,之后的操作都对应这个buffer。

如果是像matrix一样属于栈的操作的话,你应该能看到pushbuffer和popbuffer这样的函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏