哪里是glEnableVertexAttribArray的正确位置



快速问题:我总是看到VAO网格在'draw'调用中以这样的方式启用它们的顶点属性数组:

void draw() {
    bindVAO();
    glEnableVertexAttribArray(0 ... 3);
    glDrawElements(...);
    glDisableVertexAttribArray(0 ... 3);
    unbindVAO();
}

我还注意到我可以直接省略Draw Elements调用的后半部分,如下所示:

void draw() {
    bindVAO();
    glEnableVertexAttribArray(0 ... 3);
    glDrawElements(...);
}

同样,我将glEnableVertexAttribArray()调用移动到网格生成/加载函数,一切似乎都运行良好。

我想知道如果这一切都是合法的,如果有一个原因,为什么许多样例代码(或其他类似性质的东西)有属性数组启用和禁用旁边的绘制调用(当然做每一帧/绘制周期是浪费时间)。

如果您在单个VAO中使用VAOs 而不更改缓冲区绑定,那么将glEnableVertexAttribArray绑定到VAO创建和更新中是完全可以的,并且推荐使用。

但是,如果没有使用VAO或VAO内的绑定是动态更改的,那么将glEnableVertexAttribArray放置在绑定代码附近(这通常发生在绘图中,然后)是更好的选择。

相关内容

  • 没有找到相关文章