## Name

glTexBufferRange — bind a range of a buffer's data store to a buffer texture

## C Specification

`void glTexBufferRange(` | GLenum target,
| GLenum internalFormat,
| GLuint buffer,
| GLintptr offset,
| GLsizeiptr size`)`;

## Parameters

`target`

  Specifies the target of the operation and must be `GL_TEXTURE_BUFFER`.

`internalFormat`

  Specifies the internal format of the data in the store belonging to `buffer`.

`buffer`

  Specifies the name of the buffer object whose storage to attach to the active buffer texture.

`offset`

  Specifies the offset of the start of the range of the buffer's data store to attach.

`size`

  Specifies the size of the range of the buffer's data store to attach.

## Description

`glTexBufferRange` attaches the a range of the data store of the buffer object named `buffer` to the active buffer texture, and specifies the internal format for the texel array found in the attached buffer object. If `buffer` is zero, any buffer object attached to the buffer texture is detached and no new buffer object is attached. If `buffer` is non-zero, it must be the name of an existing buffer object. `target` must be `GL_TEXTURE_BUFFER`. The start of the range is specified by `offset` and the size of the range is specified by `size`, both measured in basic machine units. `offset` must be greater than or equal to zero, `size` must be greater than zero, and the sum of `offset` and `size` not exceed the value of `GL_BUFFER_SIZE` for `buffer`. Furthermore, `offset` must be an integer multiple of the value of `GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT`. `internalformat` specifies the storage format, and 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

## Errors

`GL_INVALID_ENUM` is generated if `target` is not `GL_TEXTURE_BUFFER`.

`GL_INVALID_VALUE` is generated if `offset` is less than zero.

`GL_INVALID_VALUE` is generated if `size` is less than or equal to zero.

`GL_INVALID_VALUE` is generated if `offset` + `size` is greater than the value of `GL_BUFFER_SIZE` for `buffer`.

`GL_INVALID_VALUE` is generated if `offset` is not an integer multiple of the value of `GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT`.

## Associated Gets

glGet with argument `GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT`

glGetTexLevelParameter with arguments `GL_TEXTURE_BUFFER_OFFSET` or `GL_TEXTURE_BUFFER_SIZE`.

## See Also

glTexBuffer.

## Copyright

Copyright © 2012 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/.