void prepare_axes(void) {
axes[0][0] = -win_width / 2.5f; axes[0][1] = 0.0f;
axes[1][0] = win_width / 2.5f; axes[1][1] = 0.0f;
axes[2][0] = 0.0f; axes[2][1] = -win_height / 2.5f;
axes[3][0] = 0.0f; axes[3][1] = win_height / 2.5f;
// Initialize vertex buffer object.
glGenBuffers(1, &VBO_axes);
glBindBuffer(GL_ARRAY_BUFFER, VBO_axes);
glBufferData(GL_ARRAY_BUFFER, sizeof(axes), axes, GL_STATIC_DRAW);
// Initialize vertex array object.
glGenVertexArrays(1, &VAO_axes);
glBindVertexArray(VAO_axes);
glBindBuffer(GL_ARRAY_BUFFER, VBO_axes);
glVertexAttribPointer(LOC_VERTEX, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
我正在研究OpenGL源代码,但我不明白为什么两次调用glBindBuffer(GL_Array_Buffer,VBO_axes)。
根据我的理解,他们第一次调用glGenBuffer,glBindBuffer和glBufferData后,
变量'轴的信息'存储在GL_ARRAY_BUFFER中。
之后,他们生成,绑定VAO并再次调用glBindBuffer
我无法理解为什么他们这样做。
我知道glBufferData()会删除当前缓冲区存储(如果已有),并创建一个新的缓冲区存储区。这意味着变量'轴的信息。第二次调用glBindBuffer时会消失。
请帮帮我..
答案 0 :(得分:0)
从技术上讲,在这种情况下,他们不会 进行额外绑定。但是,这样做是个好主意,因为它很容易意外破坏无法使用它的代码。如果程序员想要更改缓冲区创建代码以使用GL_ARRAY_BUFFER
绑定创建两个缓冲区对象,则后续代码将被破坏。
但是,如果你绑定了正确的缓冲区,那么无论你以前做过什么,它都会一直有效。