OpenGL缓冲对象:glGetBufferParameteriv、glGetBufferSubData、glGetBufferPointerv简介

本文介绍了OpenGL中的缓冲对象(BufferObjects)概念,包括创建、绑定、数据存储管理、映射、刷新和查询方法,以及相关的API函数如glGetBufferParameter和glGetNamedBufferParameter。
摘要由CSDN通过智能技术生成
  1. OpenGL缓冲对象概念
  2. 缓冲区对象 Buffer Objects API列表

  1. 缓冲区对象 Buffer Objects
  2. 创建和绑定缓冲区对象 Creating and Binding Buffer Objects
  3. 创建缓冲对象数据存储 Creating Buffer Object Data Stores
  4. 修改缓冲对象数据存储 Modifying Buffer Object Data Stores
  5. Clear缓冲对象数据存储 Clear Buffer Object Data Stores
  6. 映射映射缓冲数据 Mapping Buffer Data
  7. 刷新映射缓冲数据 Flush Buffer Data
  8. 取消映射缓冲数据 Unmapping Buffer Data
  9. 使缓冲区数据无效 Invalidating Buffer Data
  10. 缓冲区间复制 Copying Between Buffers
  11. 缓冲对象查询 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)来指定。

  • glGetBufferParameterivglGetBufferParameteri64v 返回整数类型或64位整数类型的参数值。
  • glGetNamedBufferParameterivglGetNamedBufferParameteri64v 也分别返回整数类型或64位整数类型的参数值。

这些函数中,pname 参数必须是表中列出的缓冲对象参数之一,除了 BUFFER_MAP_POINTER。数据将被存储在 data 指向的内存区域中。

NameTypeInitial ValueLegal Values
BUFFER_SIZEint640any non-negative integer
BUFFER_USAGEenumSTATIC_DRAWSTREAM_DRAW, STREAM_READ, STREAM_COPY, STATIC_DRAW, STATIC_READ, STATIC_COPY, DYNAMIC_DRAW, DYNAMIC_READ, DYNAMIC_COPY
BUFFER_ACCESSenumREAD_WRITEREAD_ONLY, WRITE_ONLY, READ_WRITE
BUFFER_ACCESS_FLAGSint0See section 6.3
BUFFER_IMMUTABLE_STORAGEbooleanFALSETRUE, FALSE
BUFFER_MAPPEDbooleanFALSETRUE, FALSE
BUFFER_MAP_POINTERvoid*NULLaddress
BUFFER_MAP_OFFSETint640any non-negative integer
BUFFER_MAP_LENGTHint640any non-negative integer
BUFFER_STORAGE_FLAGSint0See 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 );

对于查询缓冲对象的数据存储内容,可以使用 glGetBufferSubDataglGetNamedBufferSubData 函数:

  • glGetBufferSubData 根据绑定的目标和偏移量从缓冲对象中读取一部分数据到客户端内存。
  • glGetNamedBufferSubData 则根据指定缓冲对象的名字、偏移量和大小从缓冲对象中读取数据。
void glGetBufferPointerv( enum target, enum pname, const void **params );
void glGetNamedBufferPointerv( uint buffer, enum pname,const void **params );

获取映射范围内的指针

最后,当缓冲对象的部分或全部数据存储区被映射时,可以通过 glGetBufferPointervglGetNamedBufferPointerv 获取映射范围内的指针:

  • glGetBufferPointervglGetNamedBufferPointerv 分别通过目标绑定和缓冲对象名字来获取当前映射区域的指针。

    • pname 必须为 BUFFER_MAP_POINTER
    • 如果缓冲对象的数据存储区未被映射,或者请求上下文没有映射该缓冲区,并且实现不支持多客户端映射,则返回 NULL 指针值。
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值