在OpenGL中创建不可变缓冲区

时间:2015-11-17 16:31:09

标签: c++ opengl graphics

我在某处读到OpenGL 4.4引入的不可变缓冲区可以更快,所以我试图学习使用它们。我试图创建一个不可变的索引缓冲区,如下所示:

glGenBuffers( 1, &iboId );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, iboId );
GLbitfield flags = GL_MAP_WRITE_BIT |
    GL_MAP_PERSISTENT_BIT |
    GL_MAP_COHERENT_BIT;
glBufferStorage( GL_ELEMENT_ARRAY_BUFFER, faceCount * sizeof( Face ), faces, flags );

但是,我在最后一行收到了一个OpenGL错误:

GL_INVALID_OPERATION error generated. Cannot modify immutable buffer.

如何创建不可变索引缓冲区并为其提供索引?还是我误解了这个特征的全部意义?

1 个答案:

答案 0 :(得分:0)

我在评论中解释了这一点:

  

我在加载时试图在我的应用程序中使用相同的iboId两次   来自同一文件的多个网格。这个问题的代码是   更正,由于缓存,我的应用程序略有不同   这导致了错误。