- 缓冲区对象 Buffer Objects
- 创建和绑定缓冲区对象 Creating and Binding Buffer Objects
- 创建缓冲对象数据存储 Creating Buffer Object Data Stores
- 修改缓冲对象数据存储 Modifying Buffer Object Data Stores
- Clear缓冲对象数据存储 Clear Buffer Object Data Stores
- 映射映射缓冲数据 Mapping Buffer Data
- 刷新映射缓冲数据 Flush Buffer Data
- 取消映射缓冲数据 Unmapping Buffer Data
- 使缓冲区数据无效 Invalidating Buffer Data
- 缓冲区间复制 Copying Between Buffers
- 缓冲对象查询 Buffer Object Queries
void glGenBuffers( sizei n, uint *buffers );
void glCreateBuffers( sizei n, uint *buffers );
glCreateBuffers
和 glGenBuffers
在现代OpenGL(即OpenGL 4.5及更高版本或者使用了ARB_direct_state_access扩展的旧版本)中的功能上是类似的,都用于创建缓冲对象,但在使用方式和上下文中存在一些区别:
- glGenBuffers:
- 是传统OpenGL的核心函数,通常与
glDeleteBuffers
、glBindBuffer
等函数配合使用。 - 需要先调用
glGenBuffers
生成一个或多个未初始化的缓冲对象标识符。 - 创建后需要通过
glBindBuffer
来绑定缓冲对象以进行配置。
- 是传统OpenGL的核心函数,通常与
GLuint vbo;
glGenBuffers(1, &vbo); // 生成缓冲对象ID
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- glCreateBuffers:
- 是在ARB_direct_state_access扩展中引入,并在OpenGL 4.5成为核心函数的一部分。
- 直接创建并返回一个已经初始化的缓冲对象标识符,无需立即绑定也可以直接对它进行配置。
- 允许开发者绕过绑定步骤,直接对缓冲对象进行操作,提供了更直接的状态访问。
GLuint vbo = glCreateBuffers(1); // 直接创建并初始化一个缓冲对象
glNamedBufferData(vbo, sizeof(vertices), vertices, GL_STATIC_DRAW); // 不需要绑定即可配置数据
在实际编程中,如果您的目标平台支持OpenGL 4.5或者ARB_direct_state_access扩展,那么glCreateBuffers
可能提供更高效、简洁的API使用体验。不过,在大多数情况下,两者都可以用来达到相同的目的:创建并管理OpenGL缓冲对象。