- 缓冲区对象 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 glGetBufferParameteriv( enum target, enum pname,int *data );
void glGetBufferParameteri64v( enum target, enum pname,int64 *data );
void glGetNamedBufferParameteriv( uint buffer,enum pname, int *data );
void glGetNamedBufferParameteri64v( uint buffer,enum pname, int64 *data );
GetBufferParameter*
和 GetNamedBufferParameter*
函数用于查询缓冲对象的相关信息。它们的区别在于,前者通过目标(target)绑定的缓冲对象来获取信息,后者则直接通过缓冲对象的名字(buffer)来指定。
glGetBufferParameteriv
和glGetBufferParameteri64v
返回整数类型或64位整数类型的参数值。glGetNamedBufferParameteriv
和glGetNamedBufferParameteri64v
也分别返回整数类型或64位整数类型的参数值。
这些函数中,pname
参数必须是表中列出的缓冲对象参数之一,除了 BUFFER_MAP_POINTER
。数据将被存储在 data
指向的内存区域中。
Name | Type | Initial Value | Legal Values |
---|---|---|---|
BUFFER_SIZE | int64 | 0 | any non-negative integer |
BUFFER_USAGE | enum | STATIC_DRAW | STREAM_DRAW, STREAM_READ, STREAM_COPY, STATIC_DRAW, STATIC_READ, STATIC_COPY, DYNAMIC_DRAW, DYNAMIC_READ, DYNAMIC_COPY |
BUFFER_ACCESS | enum | READ_WRITE | READ_ONLY, WRITE_ONLY, READ_WRITE |
BUFFER_ACCESS_FLAGS | int | 0 | See section 6.3 |
BUFFER_IMMUTABLE_STORAGE | boolean | FALSE | TRUE, FALSE |
BUFFER_MAPPED | boolean | FALSE | TRUE, FALSE |
BUFFER_MAP_POINTER | void* | NULL | address |
BUFFER_MAP_OFFSET | int64 | 0 | any non-negative integer |
BUFFER_MAP_LENGTH | int64 | 0 | any non-negative integer |
BUFFER_STORAGE_FLAGS | int | 0 | See section 6.2 |
Table : Buffer object parameters and their values.
查询缓冲对象的数据存储内容
void glGetBufferSubData( enum target, intptr offset,sizeiptr size, void *data );
void glGetNamedBufferSubData( uint buffer, intptr offset,sizeiptr size, void *data );
对于查询缓冲对象的数据存储内容,可以使用 glGetBufferSubData
和 glGetNamedBufferSubData
函数:
glGetBufferSubData
根据绑定的目标和偏移量从缓冲对象中读取一部分数据到客户端内存。glGetNamedBufferSubData
则根据指定缓冲对象的名字、偏移量和大小从缓冲对象中读取数据。
void glGetBufferPointerv( enum target, enum pname, const void **params );
void glGetNamedBufferPointerv( uint buffer, enum pname,const void **params );
获取映射范围内的指针
最后,当缓冲对象的部分或全部数据存储区被映射时,可以通过 glGetBufferPointerv
和 glGetNamedBufferPointerv
获取映射范围内的指针:
-
glGetBufferPointerv
和glGetNamedBufferPointerv
分别通过目标绑定和缓冲对象名字来获取当前映射区域的指针。pname
必须为BUFFER_MAP_POINTER
。- 如果缓冲对象的数据存储区未被映射,或者请求上下文没有映射该缓冲区,并且实现不支持多客户端映射,则返回 NULL 指针值。