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

发布于 2022-09-02 13:44:19 字数 797 浏览 14 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪化雨蝶 2022-09-09 13:44:19

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文