glEnableVertexAttribArray 的正确位置在哪里
where is the correct place to glEnableVertexAttribArray
快速提问:我一直看到 VAO 网格以这种方式在 'draw' 调用中启用它们的顶点属性数组:
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
glDisableVertexAttribArray(0 ... 3);
unbindVAO();
}
我还注意到我可以完全省略 Draw Elements 调用的后半部分:
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
}
同样,我将 glEnableVertexAttribArray()
调用移至网格 generation/loading 函数,一切似乎都 运行 正常。
我想知道所有这一切是否合法,以及是否有许多示例代码(或其他类似性质的东西)在绘制调用旁边启用和禁用属性数组的原因(肯定是这样做的)每 frame/draw 个周期都是浪费时间。
如果您在单个 VAO 中使用 VAO 和,请不要更改缓冲区绑定,然后将 glEnableVertexAttribArray
绑定到 VAO 创建和更新就完全没问题了,并且推荐。
但是,如果不使用 VAO 或动态更改 VAO 中的绑定,则将 glEnableVertexAttribArray
放置在绑定代码附近(这通常发生在绘图中)更合适。
快速提问:我一直看到 VAO 网格以这种方式在 'draw' 调用中启用它们的顶点属性数组:
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
glDisableVertexAttribArray(0 ... 3);
unbindVAO();
}
我还注意到我可以完全省略 Draw Elements 调用的后半部分:
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
}
同样,我将 glEnableVertexAttribArray()
调用移至网格 generation/loading 函数,一切似乎都 运行 正常。
我想知道所有这一切是否合法,以及是否有许多示例代码(或其他类似性质的东西)在绘制调用旁边启用和禁用属性数组的原因(肯定是这样做的)每 frame/draw 个周期都是浪费时间。
如果您在单个 VAO 中使用 VAO 和,请不要更改缓冲区绑定,然后将 glEnableVertexAttribArray
绑定到 VAO 创建和更新就完全没问题了,并且推荐。
但是,如果不使用 VAO 或动态更改 VAO 中的绑定,则将 glEnableVertexAttribArray
放置在绑定代码附近(这通常发生在绘图中)更合适。