是否有与 glGenVertexArrays 和 glBindVertexArrays 等效的 WebGL?

问题描述 投票:0回答:5

我正在制作一个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
html opengl-es webgl
5个回答
9
投票

仅当实现了 OES_vertex_array_object 扩展时。

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


6
投票

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

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


2
投票

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


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

0
投票

顶点数组位于 WebGL 2 中,所有主流浏览器都支持。相关的等效函数是 gl.createVertexArray() 和 gl.bindVertexArray()。请参阅https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObject

© www.soinside.com 2019 - 2024. All rights reserved.