0

让我们想象一个由 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 中的特定数据段?

4

0 回答 0