1

我想我理解 glEnableVertexAttribArray 的作用——它激活了程序的特定属性(如果我错了,请纠正我)。

我不明白的是哪个对象存储了这些信息。是程序对象吗?也就是说,如果我这样做:

glUseProgram(program);
glEnableVertexAttribArray(0);

然后再做:

glUseProgram(program);
glDrawArray(...);

是否会启用位置 0 的属性?

或者它是否修改了一些需要在每次绘制调用之前重置的全局状态?还是在修改 VAO 的状态?如果是这样,那么在没有 VAO 的 OpenGL ES 2.0 中呢?

4

1 回答 1

2

它影响顶点数组对象状态。

如果是这样,那么在没有 VAO 的 OpenGL ES 2.0 中呢?

然后它会影响全局上下文状态。将成为 VAO 状态的状态集最初只是全局状态。这就是 OpenGL 绑定到修改对象模型存在的原因;这样当您添加新对象时,您不必更改旧代码。

于 2015-12-15T01:25:20.673 回答