C++ 在OpenGL中创建不可变缓冲区

C++ 在OpenGL中创建不可变缓冲区,c++,opengl,graphics,C++,Opengl,Graphics,我在某个地方读到OpenGL4.4引入的不可变缓冲区可以更快,所以我正在尝试学习如何使用它们。我试图创建一个不可变的索引缓冲区,如下所示: glGenBuffers( 1, &iboId ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, iboId ); GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT; glBufferSt

我在某个地方读到OpenGL4.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.

如何创建不可变索引缓冲区并为其提供索引?还是我误解了该功能的全部要点?

我在评论中解释道:

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


我在评论中解释道,我解决了这个问题:

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


基于感谢,你这里的东西看起来是正确的。当从同一个文件加载多个网格时,我似乎在应用程序中尝试了两次使用同一个iboId。这个问题中的代码是正确的,由于导致错误的缓存原因,我的应用程序中的代码略有不同。当从同一个文件加载多个网格时,我似乎在应用程序中尝试了两次使用同一个iboId。这个问题中的代码是正确的,在我的应用程序中,由于导致错误的缓存,代码略有不同。