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

查看:171
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆