6

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

4 回答 4

9

仅当实现OES_vertex_array_object扩展时。

但是,您不需要这些功能。没有它们你也可以做得很好。在渲染网格(或一组网格,或其他)之前,您只需绑定缓冲区并使用 glVertexAttribPointer 及其同类。

于 2012-10-02T00:59:17.690 回答
6

碰巧的是,Chrome Canary 和 Chromium 从上周左右开始构建,现在基本支持 OES_vertex_array_object。它在 WebKit 中也有一段时间了。它还不完美:例如,还没有 ANGLE 支持。不过,如果您想针对扩展进行开发,您现在可以开始这样做。

如果您想了解它在 WebGL 上下文中的工作原理,我有快速的博客文章和OES_vertex_array_object 的演示。

于 2012-10-02T23:37:37.860 回答
2

这就是 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); };
}
于 2017-09-10T18:09:37.493 回答
2

OpenGL 3.0 功能将在 WebGL 2.0 中提供,您可以检查您的浏览器是否已经支持 WebGL 2.0,例如:http : //webglreport.com/?v=2 或任何实验性扩展(如 OpenGL 3.0 中的某些功能) WebGL 1.0 可用

于 2016-09-13T20:43:01.047 回答