glClearBufferSubData
glCearBufferSubData 用一个固定的值填充缓冲区对象的一部分(或者全部)
OpenGL >= 4.3
void glClearBufferSubData(
GLenum target,
GLenum internalformat,
GLintptr offset,
GLsizeiptr size,
GLenum format,
GLenum type,
const void * data);
参数:
target : 指定缓冲区对象的类型,具体类型参考 glBufferData
internalformat : 指定缓冲区对象中的数据的内部存储格式
offset:指定需要替换数据的偏移量(以字节计算)
size:指定需要填充的数据的大小(以字节计算)
format:指定内存中的数据的格式
type:指定类存中数据的类型
data:指定内存中的数据,用来替换掉缓冲区对象中的数据
上述参数中有几个概念需要明确:
1. internalformat: 用来表述缓冲区对象中的数据是那种形式的,可选的取值有:
内部格式 | 数据类型 | 组成成分 | 是否单位化 | 成分(0,1,2,3) |
---|---|---|---|---|
GL_R8 | ubyte | 1 | YES | R 0 0 1 |
GL_R16 | ushort | 1 | YES | R 0 0 1 |
GL_R16F | half | 1 | NO | R 0 0 1 |
GL_R32F | float | 1 | NO | R 0 0 1 |
GL_R8I | byte | 1 | NO | R 0 0 1 |
GL_R16I | short | 1 | NO | R 0 0 1 |
GL_R32I | int | 1 | NO | R 0 0 1 |
GL_R8UI | ubyte | 1 | NO | R 0 0 1 |
GL_R16UI | ushort | 1 | NO | R 0 0 1 |
GL_R32UI | uint | 1 | NO | R 0 0 1 |
GL_RG8 | ubyte | 2 | YES | R G 0 1 |
GL_RG16 | ushort | 2 | YES | R G 0 1 |
GL_RG16F | half | 2 | NO | R G 0 1 |
GL_RG32F | float | 2 | NO | R G 0 1 |
GL_RG8I | byte | 2 | NO | R G 0 1 |
GL_RG16I | short | 2 | NO | R G 0 1 |
GL_RG32I | int | 2 | NO | R G 0 1 |
GL_RG8UI | ubyte | 2 | NO | R G 0 1 |
GL_RG16UI | ushort | 2 | NO | R G 0 1 |
GL_RG32UI | uint | 2 | NO | R G 0 1 |
GL_RGB32F | float | 3 | NO | R G B 1 |
GL_RGB32I | int | 3 | NO | R G B 1 |
GL_RGB32UI | uint | 3 | NO | R G B 1 |
GL_RGBA8 | uint | 4 | YES | R G B A |
GL_RGBA16 | short | 4 | YES | R G B A |
GL_RGBA16F | half | 4 | NO | R G B A |
GL_RGBA32F | float | 4 | NO | R G B A |
GL_RGBA8I | byte | 4 | NO | R G B A |
GL_RGBA16I | short | 4 | NO | R G B A |
GL_RGBA32I | int | 4 | NO | R G B A |
GL_RGBA8UI | ubyte | 4 | NO | R G B A |
GL_RGBA16UI | ushort | 4 | NO | R G B A |
GL_RGBA32UI | uint | 4 | NO | R G B A |
format和type指定了data中的格式类型
format : 可以取值
GL_RED, GL_RG, GL_RGB,GL_RGBA 来代表一维、二维、三维或四维的数据
type: 指定了数据的类型是GL_FLOAT或者GL_INT或者GL_UNSIGNED_BYTE等
data: 指定用来填充的数据,如果是NULL那么该缓冲区由offset和size指定的区域会被0填充