是否有一个类似于glGenVertexArrays和glBindVertexArrays的WebGL?

时间:2012-10-02 00:24:13

标签: html5 opengl-es webgl

我正在制作一个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

4 个答案:

答案 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); };
}