glClearBufferSubData - OpenGL 4 Reference Pages

## Name

glClearBufferSubData, glClearNamedBufferSubData — fill all or part of buffer object's data store with a fixed value

## C Specification

`void glClearBufferSubData(` | GLenum target,
| GLenum internalformat,
| GLintptr offset,
| GLsizeiptr size,
| GLenum format,
| GLenum type,
| const void * data`)`;

`void glClearNamedBufferSubData(` | GLuint buffer,
| GLenum internalformat,
| GLintptr offset,
| GLsizei size,
| GLenum format,
| GLenum type,
| const void *data`)`;

## Parameters

`target`

  Specifies the target to which the buffer object is bound for `glClearBufferSubData`, which must be one of the buffer binding targets in the following table:

  Buffer Binding Target | Purpose
  --- | ---
  `GL_ARRAY_BUFFER` | Vertex attributes
  `GL_ATOMIC_COUNTER_BUFFER` | Atomic counter storage
  `GL_COPY_READ_BUFFER` | Buffer copy source
  `GL_COPY_WRITE_BUFFER` | Buffer copy destination
  `GL_DISPATCH_INDIRECT_BUFFER` | Indirect compute dispatch commands
  `GL_DRAW_INDIRECT_BUFFER` | Indirect command arguments
  `GL_ELEMENT_ARRAY_BUFFER` | Vertex array indices
  `GL_PIXEL_PACK_BUFFER` | Pixel read target
  `GL_PIXEL_UNPACK_BUFFER` | Texture data source
  `GL_QUERY_BUFFER` | Query result buffer
  `GL_SHADER_STORAGE_BUFFER` | Read-write storage for shaders
  `GL_TEXTURE_BUFFER` | Texture data buffer
  `GL_TRANSFORM_FEEDBACK_BUFFER` | Transform feedback buffer
  `GL_UNIFORM_BUFFER` | Uniform block storage

`buffer`

  Specifies the name of the buffer object for `glClearNamedBufferSubData`.

`internalformat`

  The internal format with which the data will be stored in the buffer object.

`offset`

  The offset in basic machine units into the buffer object's data store at which to start filling.

`size`

  The size in basic machine units of the range of the data store to fill.

`format`

  The format of the data in memory addressed by `data`.

`type`

  The type of the data in memory addressed by `data`.

`data`

  The address of a memory location storing the data to be replicated into the buffer's data store.

## Description

`glClearBufferSubData` and `glClearNamedBufferSubData` fill a specified region of a buffer object's data store with data from client memory.

`offset` and `size` specify the extent of the region within the data store of the buffer object to fill with data. Data, initially supplied in a format specified by `format` in data type `type` is read from the memory address given by `data` and converted into the internal representation given by `internalformat`, which must be one of the following sized internal formats:

|  |  |  | Component
--- | --- | --- | --- | ---
Sized Internal Format | Base Type | Components | Norm | 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

This converted data is then replicated throughout the specified region of the buffer object's data store. If `data` is NULL, then the subrange of the buffer's data store is filled with zeros.

## Errors

`GL_INVALID_ENUM` is generated by `glClearBufferSubData` if `target` is not one of the generic buffer binding targets.

`GL_INVALID_VALUE` is generated by `glClearBufferSubData` if no buffer is bound to `target`.

`GL_INVALID_OPERATION` is generated by `glClearNamedBufferSubData` if `buffer` is not the name of an existing buffer object.

`GL_INVALID_ENUM` is generated if `internalformat` is not one of the valid sized internal formats listed in the table above.

`GL_INVALID_VALUE` is generated if `offset` or `range` are not multiples of the number of basic machine units per-element for the internal format specified by `internalformat`. This value may be computed by multiplying the number of components for `internalformat` from the table by the size of the base type from the table.

`GL_INVALID_VALUE` is generated if `offset` or `size` is negative, or if $offset + size$ is greater than the value of `GL_BUFFER_SIZE` for the buffer object.

`GL_INVALID_OPERATION` is generated if any part of the specified range of the buffer object is mapped with glMapBufferRange or glMapBuffer, unless it was mapped with the `GL_MAP_PERSISTENT_BIT` bit set in the `glMapBufferRange` `access` flags.

`GL_INVALID_VALUE` is generated if `format` is not a valid format, or `type` is not a valid type.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glClearBufferSubData` | - | - | - | - | - | - | - | - | - | ✔ | ✔ | ✔
`glClearNamedBufferSubData` | - | - | - | - | - | - | - | - | - | - | - | ✔

## See Also

glClearBufferData.

## Copyright

Copyright © 2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.