Light | Dark

# docs.GL

OpenGL 4
OpenGL 3
OpenGL ES 3
OpenGL ES 2

# glRenderbufferStorage

## Name

glRenderbufferStorage — establish data storage, format and dimensions of a renderbuffer object's image

## C Specification

`void glRenderbufferStorage(` | GLenum target,
| GLenum internalformat,
| GLsizei width,
| GLsizei height`)`;

## Parameters

`target`

  Specifies a binding to which the target of the allocation and must be `GL_RENDERBUFFER`.

`internalformat`

  Specifies the internal format to use for the renderbuffer object's image.

`width`

  Specifies the width of the renderbuffer, in pixels.

`height`

  Specifies the height of the renderbuffer, in pixels.

## Description

`glRenderbufferStorage` is equivalent to calling glRenderbufferStorageMultisample with the `samples` set to zero.

The target of the operation, specified by `target` must be `GL_RENDERBUFFER`. `internalformat` specifies the internal format to be used for the renderbuffer object's storage and must be a color-renderable, depth-renderable, or stencil-renderable format, as shown in Table 1 below. `width` and `height` are the dimensions, in pixels, of the renderbuffer. Both `width` and `height` must be less than or equal to the value of `GL_MAX_RENDERBUFFER_SIZE`.

Upon success, `glRenderbufferStorage` deletes any existing data store for the renderbuffer image and the contents of the data store after calling `glRenderbufferStorage` are undefined.

Table 1. Sized Internal Formats

Sized Internal Format | Base Format | Red Bits | Green Bits | Blue Bits | Alpha Bits
--- | --- | --- | --- | --- | ---
`GL_R8` | `GL_RED` | 8 |  |  |
`GL_R8UI` | `GL_RED_INTEGER` | ui8 |  |  |
`GL_R8I` | `GL_RED_INTEGER` | i8 |  |  |
`GL_R16UI` | `GL_RED_INTEGER` | ui16 |  |  |
`GL_R16I` | `GL_RED_INTEGER` | i16 |  |  |
`GL_R32UI` | `GL_RED_INTEGER` | ui32 |  |  |
`GL_R32I` | `GL_RED_INTEGER` | i32 |  |  |
`GL_RG8` | `GL_RG` | 8 | 8 |  |
`GL_RG8UI` | `GL_RG_INTEGER` | ui8 | ui8 |  |
`GL_RG8I` | `GL_RG_INTEGER` | i8 | i8 |  |
`GL_RG16UI` | `GL_RG_INTEGER` | ui16 | ui16 |  |
`GL_RG16I` | `GL_RG_INTEGER` | i16 | i16 |  |
`GL_RG32UI` | `GL_RG_INTEGER` | ui32 | ui32 |  |
`GL_RG32I` | `GL_RG_INTEGER` | i32 | i32 |  |
`GL_RGB8` | `GL_RGB` | 8 | 8 | 8 |
`GL_RGB565` | `GL_RGB` | 5 | 6 | 5 |
`GL_RGBA8` | `GL_RGBA` | 8 | 8 | 8 | 8
`GL_SRGB8_ALPHA8` | `GL_RGBA` | 8 | 8 | 8 | 8
`GL_RGB5_A1` | `GL_RGBA` | 5 | 5 | 5 | 1
`GL_RGBA4` | `GL_RGBA` | 4 | 4 | 4 | 4
`GL_RGB10_A2` | `GL_RGBA` | 10 | 10 | 10 | 2
`GL_RGBA8UI` | `GL_RGBA_INTEGER` | ui8 | ui8 | ui8 | ui8
`GL_RGBA8I` | `GL_RGBA_INTEGER` | i8 | i8 | i8 | i8
`GL_RGB10_A2UI` | `GL_RGBA_INTEGER` | ui10 | ui10 | ui10 | ui2
`GL_RGBA16UI` | `GL_RGBA_INTEGER` | ui16 | ui16 | ui16 | ui16
`GL_RGBA16I` | `GL_RGBA_INTEGER` | i16 | i16 | i16 | i16
`GL_RGBA32I` | `GL_RGBA_INTEGER` | i32 | i32 | i32 | i32
`GL_RGBA32UI` | `GL_RGBA_INTEGER` | ui32 | ui32 | ui32 | ui32

Sized Internal Format | Base Format | Depth Bits | Stencil Bits
--- | --- | --- | ---
`GL_DEPTH_COMPONENT16` | `GL_DEPTH_COMPONENT` | 16 |
`GL_DEPTH_COMPONENT24` | `GL_DEPTH_COMPONENT` | 24 |
`GL_DEPTH_COMPONENT32F` | `GL_DEPTH_COMPONENT` | f32 |
`GL_DEPTH24_STENCIL8` | `GL_DEPTH_STENCIL` | 24 | 8
`GL_DEPTH32F_STENCIL8` | `GL_DEPTH_STENCIL` | f32 | 8
`GL_STENCIL_INDEX8` | `GL_STENCIL` |  | 8

## Errors

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

`GL_INVALID_VALUE` is generated if either of `width` or `height` is negative, or greater than the value of `GL_MAX_RENDERBUFFER_SIZE`.

`GL_INVALID_ENUM` is generated if `internalformat` is not a color-renderable, depth-renderable, or stencil-renderable format.

`GL_OUT_OF_MEMORY` is generated if the GL is unable to create a data store of the requested size.

## Examples

Create a framebuffer object with a renderbuffer-based color attachment and a renderbuffer-based depth attachment.

    // fbo_width and fbo_height are the desired width and height of the FBO.
    // For Opengl <= 4.4 or if the GL_ARB_texture_non_power_of_two extension
    // is present, fbo_width and fbo_height can be values other than 2^n for
    // some integer n.

    // Build the texture that will serve as the color attachment for the framebuffer.
    GLuint color_renderbuffer;
    glGenRenderbuffers(1, &color_renderbuffer);
    glBindRenderbuffer( GL_RENDERBUFFER, (GLuint)color_renderbuffer );
    glRenderbufferStorage( GL_RENDERBUFFER, GL_RGBA8, fbo_width, fbo_height );
    glBindRenderbuffer( GL_RENDERBUFFER, 0 );

    // Build the texture that will serve as the depth attachment for the framebuffer.
    GLuint depth_renderbuffer;
    glGenRenderbuffers(1, &depth_renderbuffer);
    glBindRenderbuffer( GL_RENDERBUFFER, (GLuint)depth_renderbuffer );
    glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT, fbo_width, fbo_height );
    glBindRenderbuffer( GL_RENDERBUFFER, 0 );

    // Build the framebuffer.
    GLuint framebuffer;
    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)framebuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_renderbuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_renderbuffer);

    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    if (status != GL_FRAMEBUFFER_COMPLETE)
        // Error

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

## Tutorials

Songho - OpenGL Frame Buffer Object (FBO)
open.gl - Framebuffers
opengl-tutorial.org - Tutorial 14 : Render To Texture

## API Version Support

| OpenGL ES API Version
--- | ---
Function Name | 2.0 | 3.0 | 3.1
glRenderbufferStorage | ✔ | ✔ | ✔

## See Also

glGenRenderbuffers, glBindRenderbuffer, glRenderbufferStorageMultisample, glFramebufferRenderbuffer, glDeleteRenderbuffers

## Copyright

Copyright © 2010-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. https://opencontent.org/openpub/.

Think you can improve this page? Edit this page on GitHub.