现代 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的状态向量中。
我不明白 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的状态向量中。