2012-10-02 51 views
3

我正在製作一個WebGL程序,需要gl函數glGenVertexArrays和glBindVertexArrays。有人知道在WebGL中是否有這些相同的東西?這是我到目前爲止:是否有與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 

回答

8

只有在OES_vertex_array_object擴展實施。

但是,您不需要需要這些功能。沒有他們你可以做得很好。你只需要綁定你的緩衝區,然後在渲染一個網格物體(或一組網格物體,或其他物體)之前使用glVertexAttribPointer及其同類。

4

就像剛剛發生的那樣,Chrome Canary和Chromium從上週開始構建,現在基本支持OES_vertex_array_object。它在WebKit中也有一段時間了。這還不完美:例如,沒有ANGLE支持。但是,如果您想要針對擴展進行開發,現在就可以開始這樣做了。

如果您想了解它在WebGL上下文中的工作原理,我已經快速地獲得了OES_vertex_array_object的blog post and demo

2

的OpenGL 3.0的功能將在WebGL的2.0可用,您可以檢查您的瀏覽器已經支持WebGL 2.0例如這裏:http://webglreport.com/?v=2,或wathever實驗性擴展(如某些功能形成的OpenGL 3.0)的WebGL的1.0可用

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); }; 
} 
相關問題