webgl - gl入门问题, bufferData和drawArrays是怎么工作的?
本文介绍了webgl - gl入门问题, bufferData和drawArrays是怎么工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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这样的函数
这篇关于webgl - gl入门问题, bufferData和drawArrays是怎么工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文