我正在制作一个WebGL程序并需要GL函数glGenVertexArrays和glBindVertexArrays。有谁知道 WebGL 中是否有相当于这些的东西?这是我到目前为止所拥有的:
canvas = document.getElementById("WEB_GL_CANVAS");//Specify the viewing window
gl = WebGLUtils.setupWebGL(canvas);
if (!gl)
alert("WebGL isn't available");
gl.viewport(0, 0, canvas.width, canvas.height);
{
var color = getRandomColor();
gl.clearColor((color[0] / 2) + 0.5, (color[1] / 2) + 0.5, (color[2] / 2) + 0.5, 1);
}
gl.enable(gl.DEPTH_TEST);
// Create a vertex array object
GLuint vao;
gl.genVertexArrays( 1, &vao );//Won't work
gl.bindVertexArray( vao );//Need a WebGL version
仅当实现了 OES_vertex_array_object 扩展时。
但是,您并不需要这些功能。没有它们你也可以做得很好。您只需在渲染网格(或一组网格,或其他任何内容)之前绑定缓冲区并使用 glVertexAttribPointer 及其同类即可。
碰巧的是,上周左右构建的 Chrome Canary 和 Chromium 现在对 OES_vertex_array_object 有了基本支持。它在 WebKit 中也已经可用了一段时间。它还不完美:例如,还没有 ANGLE 支持。不过,如果您想针对扩展进行开发,您现在就可以开始这样做。
如果您想了解它在 WebGL 上下文中的工作原理,我已经提供了 OES_vertex_array_object 的快速 博客文章和演示。
OpenGL 3.0 功能将在 WebGL 2.0 中提供,您可以检查您的浏览器是否已经支持 WebGL 2.0,例如:http://webglreport.com/?v=2,或任何实验性扩展(如某些功能形式)适用于 WebGL 1.0 的 OpenGL 3.0 )可用
Emscripten 就是这样做的:
GLctx = canvas.getContext("webgl")
// Extension available from Firefox 25 and WebKit
var vaoExt = GLctx.getExtension('OES_vertex_array_object');
if (vaoExt) {
GLctx['createVertexArray'] = function() { return vaoExt['createVertexArrayOES'](); };
GLctx['deleteVertexArray'] = function(vao) { vaoExt['deleteVertexArrayOES'](vao); };
GLctx['bindVertexArray'] = function(vao) { vaoExt['bindVertexArrayOES'](vao); };
GLctx['isVertexArray'] = function(vao) { return vaoExt['isVertexArrayOES'](vao); };
}
顶点数组位于 WebGL 2 中,所有主流浏览器都支持。相关的等效函数是 gl.createVertexArray() 和 gl.bindVertexArray()。请参阅https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObject