glBufferData和glNamedBuffer数据为缓冲区对象创建新的数据存储。对于glBufferData,使用当前绑定到目标的缓冲区对象。对于glNamedBufferData,将改用与缓冲区中调用者指定的ID关联的缓冲区对象。
函数原型:
void glBufferData(GLenum target,GLsizeiptr size,const void * data,GLenum usage);
void glNamedBufferData(GLuint buffer,GLsizeiptr size,const void *data,GLenum usage);
参数:
@ target 指定glBufferData的缓冲区对象绑定到的目标,该目标必须是下表中的缓冲区绑定目标之一:
@ buffer 指定glNamedBufferData函数的缓冲区对象的名称。
@ size 指定缓冲区对象的新数据存储的大小(以字节为单位)。
@ data 指定将复制到数据存储中进行初始化的数据指针,如果没有要复制的数据,则为NULL。
@ usage 指定数据存储的预期使用模式。符号常量必须是GL_STREAM_DRAW、GL_STRIAM_READ、GL_STREAM_COPY、GL_STATIC_DRAW,GL_STADIC_READ,GL_SSTATIC_COPY,GL_DYNAMIC_DRAW,GL_DYNAMIC_READ或GL_DYNA MIC_COPY。
创建新存储时,将删除任何预先存在的数据存储。新的数据存储是用指定的字节大小和使用量创建的。如果数据不为NULL,则使用此指针中的数据初始化数据存储。在其初始状态下,新数据存储未映射,它有一个NULL映射指针,其映射访问为GL_READ_WRITE。
usage 是关于如何访问缓冲区对象的数据存储的GL实现的提示。这使得GL实现能够做出可能会显著影响缓冲区对象性能的更智能决策。然而,它并不限制数据存储的实际使用。用法可以分为两部分:第一,访问的频率(修改和使用),第二,访问的性质。
访问频率可以是以下之一:
STREAM 数据存储内容将修改一次,最多使用几次
STATIC 数据存储内容将被修改一次并多次使用。
DYNAMIC 数据存储内容将被重复修改并多次使用
访问的性质可能是以下之一:
DRAW 数据存储内容由应用程序修改,并用作GL绘图和图像规范命令的源。
READ 数据存储内容通过从GL读取数据进行修改,并用于在应用程序查询时返回该数据
COPY 数据存储内容通过从GL读取数据进行修改,并用作GL绘图和图像规范命令的源。