我正在制作一个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
答案 0 :(得分:8)
仅在实施OES_vertex_array_object扩展名时。
但是,您不需要 这些功能。没有它们你可以做得很好。你只需要绑定你的缓冲区并使用glVertexAttribPointer及其同类,然后再渲染一个网格(或一组网格,或其他)。
答案 1 :(得分:4)
正如刚刚发生的那样,Chrome Canary和Chromium从上周开始构建,现在已经为OES_vertex_array_object提供了基本支持。它也可以在WebKit中使用一段时间。它还不完美:例如,还没有ANGLE支持。不过,如果你想针对扩展进行开发,你现在可以开始这样做。
如果您想了解它在WebGL的上下文中是如何工作的,我已经快速blog post and demo了OES_vertex_array_object。
答案 2 :(得分:2)
OpenGL 3.0功能将在WebGL 2.0中提供,您可以检查您的浏览器是否已经支持WebGL 2.0,例如:http://webglreport.com/?v=2,或者用于WebGL 1.0的实验性扩展(如某些功能形式OpenGL 3.0)可用
答案 3 :(得分:1)
这就是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); };
}