Light | Dark

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);

API Version Support

OpenGL ES API Version
Function Name 2.0 3.0 3.1
glRenderbufferStorage
Think you can improve this page? Edit this page on GitHub.