2014-11-03 167 views
0

当前在我的渲染函数中,我使用了VAO(顶点数组对象)和四个VBO(顶点缓冲对象)绑定在这个VAO上。在vbo绑定到一个vao之间切换

每个VBO,我绑定到VAO

glGenVertexArrays (1, & vaoID [0]); // Create our Vertex Array Object 
glBindVertexArray (vaoID [0]); // Bind our Vertex Array Object so we can use it 

int i = 0; 
for (i = 0; i <4, ++i) 
{ 
glGenBuffers (1,vboID [i]); // Generate Vertex Buffer Object 
glBindBuffer (GL_ARRAY_BUFFER, vboID [i]); // Bind Vertex Buffer Object 
glBufferData (GL_ARRAY_BUFFER, 18 * sizeof (GLfloat) vertices, GL_STATIC_DRAW); 

glVertexAttribPointer ((GLuint) 0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    } 

glEnableVertexAttribArray (0); // Disable Vertex Array Object 
glBindVertexArray (0); // Disable Vertex Buffer Object 

然后在我的渲染功能(伪),对于每一帧:

glBindVertexArray (vaoID [0]); 

// here, I need to draw the four VBO, but only draws the first 

glBindVertexArray (0); 

我知道我可以把所有的几何形状在单个VBO,但有些情况下,其大小超过5Mb,并且这可能导致它未放置在GPU上。

如何切换所有绑定的VBO来绘制它们?

回答

1

3点:

  1. 可以代所有的缓冲区外循环一次:

    glGenBuffers (4,&vboID[0]); 
    
  2. 你不要在维也纳各组织的初始化数据(即我可以看到)

  3. 您需要再次遍历vbos并设置glVertexAttribPointer

    glBindVertexArray (vaoID [0]); 
    for(int i = 0; i < 4; i++){ 
        glBindBuffer (GL_ARRAY_BUFFER, vboID [i]); 
        glVertexAttribPointer ((GLuint) 0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
        //drawArrays 
    } 
    glBindVertexArray (0); 
    
+0

感谢“棘轮怪胎”,现在我问,为什么要使用VAO? ,如果我应该在每个帧的渲染函数中再次绑定每个vbo?否则,你可以给我举一个例子,说明如何将几个vbo链接到单个vao?谢谢! – user2303826 2014-11-03 23:00:42