Light | Dark

# docs.GL

OpenGL 4
OpenGL 3
OpenGL ES 3
OpenGL ES 2

# glRenderbufferStorage

## Name

glRenderbufferStorage — create and initialize a renderbuffer object's data store

## C Specification

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

## Parameters

`target`

  Specifies the renderbuffer target. The symbolic constant must be `GL_RENDERBUFFER`.

`internalformat`

  Specifies the color-renderable, depth-renderable, or stencil-renderable format of the renderbuffer. Must be one of the following symbolic constants: `GL_RGBA4`, `GL_RGB565`, `GL_RGB5_A1`, `GL_DEPTH_COMPONENT16`, or `GL_STENCIL_INDEX8`.

`width`

  Specifies the width of the renderbuffer in pixels.

`height`

  Specifies the height of the renderbuffer in pixels.

## Description

`glRenderbufferStorage` establishes the data storage, format, and dimensions of a renderbuffer object's image. Any existing data store for the renderbuffer is deleted and the contents of the new data store are undefined.

An implementation may vary its allocation of internal component resolution based on any `glRenderbufferStorage` parameter (except `target`), but the allocation and chosen internal format must not be a function of any other state and cannot be changed once they are established. The actual resolution in bits of each component of the allocated image can be queried with glGetRenderbufferParameteriv.

## Errors

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

`GL_INVALID_ENUM` is generated if `internalformat` is not an accepted format.

`GL_INVALID_VALUE` is generated if `width` or `height` is less than zero or greater than `GL_MAX_RENDERBUFFER_SIZE`.

`GL_OUT_OF_MEMORY` is generated if the implementation is unable to create a data store with the requested `width` and `height`.

`GL_INVALID_OPERATION` is generated if the reserved renderbuffer object name 0 is bound.

## Associated Gets

glGetRenderbufferParameteriv

## 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

## See Also

glBindRenderbuffer, glDeleteRenderbuffers, glFramebufferRenderbuffer, glGenRenderbuffers, glGetRenderbufferParameteriv, glIsRenderbuffer

## Copyright

Copyright © 2008 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.