现代 OpenGL ID 是如何工作的?

How Modern OpenGL ID's works?

我不明白 OpenGL ID 是如何工作的。示例:

 static const GLfloat g_vertex_buffer_data[] = {
        -1.0f, -1.0f, 0.0f,
         1.0f, -1.0f, 0.0f,
         0.0f,  1.0f, 0.0f,
    };

    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data),      g_vertex_buffer_data, GL_STATIC_DRAW);

此处openGL获取数组的位置并创建一个缓冲区并将数组的位置放入缓冲区。我明白。但我不明白下面这段代码。这到底是做什么的?据我所知,他创建了一个 id 数组来缓冲,但它似乎有些抽象。

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

在我看来,我看到的代码是这样的:

glGenBuffers reserves numbers (names) for Buffer Objects. glBindBuffer 如果指定的编号(名称)不存在,则创建缓冲区对象。
glGenVertexArrays creates respectively reserves numbers (names) that can be used for Vertex Array Objects. glBindVertexArray 如果指定的编号(名称)不存在,则创建顶点数组对象。
顶点数组对象存储顶点规范。它将每个属性的glVertexAttribPointer, glEnableVertexAttribArray等指定的所有信息分别存储在一个向量中。当调用glVertexAttribPointer时,当前绑定到目标ARRAY_BUFFER的缓冲区与属性相关联,对象的编号(名称)存储在VAO的状态向量中。