【问题标题】:glVertexAttribPointer needed everytime glBindBuffer is called?每次调用 glBindBuffer 时都需要 glVertexAttribPointer 吗?
【发布时间】:2011-10-01 02:00:08
【问题描述】:

在 OpenGL(尤其是 OpenGL ES 2.0)中,是否每次绑定新的 VBO 时都需要调用 glVertexAttribPointer?

例如:

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer1);

glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,position));
glEnableVertexAttribArray(ATTRIB_POSITION);
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,color);
glEnableVertexAttribArray(ATTRIB_COLOR);

glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0);

// If vertexBuffer2 has the exact same attributes as vertexBuffer1
// is this legal or do the calls to glVertexAttribPointer (and glEnableVertexAttribArray)
// required again?

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer2);
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0);

我知道有些 VAO 可以解决不必调用 glVertexAttribPointer 的问题,但我想知道在 OpenGL 中是否可以这样做?

【问题讨论】:

    标签: opengl opengl-es opengl-es-2.0


    【解决方案1】:

    如果你这样做了:

    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer1);
    
    glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,position));
    glEnableVertexAttribArray(ATTRIB_POSITION);
    glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,color);
    glEnableVertexAttribArray(ATTRIB_COLOR);
    
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    
    glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0);
    

    您的代码可以正常工作。所有gl*Pointer 调用所做的是查看存储在GL_ARRAY_BUFFER 中的内容在调用函数时,并在该缓冲区和该属性之间创建关联。因此,更改用于属性的缓冲区的唯一方法是调用gl*Pointer

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多