让我们想象一个由 3 个对象(2 个盒子和一个平面)组成的场景。这 3 个网格存储在一个唯一的顶点缓冲区对象 (VBO) 中,如下所示:
VBO(id = 1) {[Box_1_vertex][Box_2_vertex][Box_3_vertex]}
我目前使用特定的索引缓冲区对象 (IBO) 来管理场景中每个网格的顶点索引,如下所示:
IBO(id = 2) {Box_1_index}
IBO(id = 3) {Box_2_index}
IBO(id = 4) {Box_3_index}
因此,要渲染我的场景,我需要一个唯一的顶点缓冲区绑定调用和 3 个索引缓冲区绑定调用,如下所示:
VBO(id = 1)->Bind()
{
FOR_EACH(IBO in IBO_LIST(size = 3))
{
(*IBO)->Bind();
{
glDrawElements(...);
}
}
}
所以我想知道是否可以将所有索引(Box_1_index + Box_2_index + Box_3_index)存储在一个唯一的 IBO(如 VBO)中并使用而不是函数 glBindBuffer 但这次函数 glBindBufferRange 专注于我的 IBO 数据?
这样,我将拥有以下代码模式:
VBO(id = 1)->Bind()
{
IBO(id = 2)->Bind();
{
glDrawElements(...);
}
}
但是根据官方 OpenGL 文档,函数“glBindBufferRange”的第一个参数可以是 GL_TRANSFORM_FEEDBACK_BUFFER 或 GL_UNIFORM_BUFFER 但不是 GL_ELEMENT_ARRAY_BUFFER(我目前使用这个来绑定 IBO)。
那么,是否可以使用函数“glBindBufferRange”绑定包含在特定 IBO 中的特定数据段?