glEnableVertexAttribArray的正确位置在哪里

时间:2016-09-11 07:53:58

标签: opengl graphics mesh opengl-3 opengl-4

快速问题:我一直看到VAO网格在“绘制”内部启用了顶点属性数组。以这种方式打电话:

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

我还注意到我可以直接从Draw Elements调用中省略下半部分:

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

类似地,我将glEnableVertexAttribArray()调用移动到网格生成/加载函数,一切似乎运行正常。

我想知道所有这些是否合法,并且是否有理由为什么许多示例代码(或其他具有此类性质的东西)在绘制调用旁边启用并禁用了属性数组(当然这样做框架/绘制周期是浪费时间)。

1 个答案:

答案 0 :(得分:2)

如果您在单个VAO中使用VAO ,请不要更改缓冲区绑定,然后将glEnableVertexAttribArray绑定到VAO创建和更新是完全正常的,建议使用。

但是,如果没有使用VAO或VAO中的绑定动态更改,那么将glEnableVertexAttribArray放在绑定代码附近(通常在绘图中发生,那么)更合适。