OpenGL API - glBufferData, glNamedBufferData


在这里插入图片描述

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferData.xhtml

OpenGL API - 笔记汇总

名称

glBufferData, glNamedBufferData ---- 创建与初始化缓存对象的储存数据。

原型

void glBufferData(	GLenum target,
				 	GLsizeiptr size,
				 	const void * data,
				 	GLenum usage);
 
void glNamedBufferData(	GLuint buffer,
					 	GLsizeiptr size,
					 	const void *data,
					 	GLenum usage);

参数

target
指定 glBufferData 绑定的缓存对象,绑定的 target 缓存类型必须是以下其中一中:

Buffer Binding TargetPurpose
GL_ARRAY_BUFFERVertex attributes
GL_ATOMIC_COUNTER_BUFFERAtomic counter storage
GL_COPY_READ_BUFFERBuffer copy source
GL_COPY_WRITE_BUFFERBuffer copy destination
GL_DISPATCH_INDIRECT_BUFFERIndirect compute dispatch commands
GL_DRAW_INDIRECT_BUFFERIndirect command arguments
GL_ELEMENT_ARRAY_BUFFERVertex array indices
GL_PIXEL_PACK_BUFFERPixel read target
GL_PIXEL_UNPACK_BUFFERTexture data source
GL_QUERY_BUFFERQuery result buffer
GL_SHADER_STORAGE_BUFFERRead-write storage for shaders
GL_TEXTURE_BUFFERTexture data buffer
GL_TRANSFORM_FEEDBACK_BUFFERTransform feedback buffer
GL_UNIFORM_BUFFERUniform block storage

buffer
指定 glNamedBufferData 函数的缓存对象名称(指针)。
size
指定缓存对象的数据大小。
data
指定数据指针将复制数据用于初始化缓存数据的储存,或是 没有数据的话,将复制 NULL
usage
指定数据储存的使用模式。这个符号常量必须是 GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, 或是 GL_DYNAMIC_COPY.

描述

glBufferDataglNamedBufferData 都是给缓存对象创建新的数据。 glBufferData 的缓存对象是当前绑定到 target 中使用的。而 glNamedBufferData的话,缓存对象是个一个buffer的ID。

usage 给 GL 实现如何储存缓存对象的数据。可让 GL 实现智能决定缓存作用来提高显著的性能。
usage 可以分为两个功能控制:

  • 第一,访问的频率(修改与使用的频率);
  • 第二,访问数据的性质。

访问的频率有以下几个常量:

  • STREAM
    适合缓存数据修改一次并用于好几次。
  • STATIC
    适合缓存数据修改一次并用于多次。
  • DYNAMIC
    适合缓存数据修改多次并用于多次。

访问的性质有以下几个常量:

  • DRAW
    数据储存的内容由应用程序修改,并用于 GL 绘制与图像规范的命令。
  • READ
    数据储存的内容由GL读取来修改,并用于由应用程序查询返回的数据。
  • COPY
    数据储存的内容由GL读取来修改,并用于 GL 绘制与图像规范的命令。

注意

如果 data 数据为 NULL,缓存对象还是会创建的,当它的内容是未初始化的。

GL_ATOMIC_COUNTER_BUFFER 仅用于 GL 版本为4.2或以上的。

GL_DISPATCH_INDIRECT_BUFFERGL_SHADER_STORAGE_BUFFER 仅用于 GL 版本为4.3或以上的。

GL_QUERY_BUFFER 仅用于 GL 版本为4.4或以上的。

错误

如果 glBufferDatatarget 参数是无效的值,将生成 GL_INVALID_ENUM 错误。

如果 usage 不是GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, 或是 GL_DYNAMIC_COPY.,将生成 GL_INVALID_ENUM 错误。

如果 size 为负数,将生成 GL_INVALID_VALUE 错误。

如果 glBufferData 的缓存对象名称为0的绑定目标类型,将生成 GL_INVALID_OPERATION 错误。

如果 glNamedBufferData 的缓存对象名称与存在的一个缓存对象不同,将生成 GL_INVALID_OPERATION 错误。

如果 GL 不能创建指定 size 大小的数据存储,将生成 GL_OUT_OF_MEMORY 错误。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值